Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Особенности блока (ТНТ)

Теперь сойдет ?
Java:
public class MoreBombs extends JavaPlugin implements Listener {
 
    public static final Logger _log = Logger.getLogger("Minecraft");
 
    public void onEnable() {
        _log.info("[MoreBombs] Started! ");
 
        ItemStack poison_TNT = new ItemStack(Material.TNT, 1);
          ItemMeta im = poison_TNT.getItemMeta();
        ArrayList poison_TNT_lore = new ArrayList();
        poison_TNT_lore.add("5");
        im.setLore(poison_TNT_lore);
        im.setDisplayName("Poison TNT");
        poison_TNT.setItemMeta(im);
        ShapedRecipe craft = new ShapedRecipe(poison_TNT);
        craft.shape(new String[] { "AAA", "AAA", "AAA" });
        craft.setIngredient('A', Material.getMaterial(46));
        getServer().addRecipe(craft);
 
        ItemStack TNTNuke = new ItemStack(Material.TNT, 1);
          ItemMeta im1 = TNTNuke.getItemMeta();
        ArrayList TNT_Nuke_lore = new ArrayList();
        TNT_Nuke_lore.add("8");
        im1.setLore(TNT_Nuke_lore);
        im1.setDisplayName("DevTNT");
        TNTNuke.setItemMeta(im1);
        ShapedRecipe craft2 = new ShapedRecipe(TNTNuke);
        craft2.shape(new String[] { "AAB", "AAB", "BBB" });
        craft2.setIngredient('A', Material.getMaterial(46), 64);
        getServer().addRecipe(craft2);
 
        Bukkit.getPluginManager().registerEvents(this, this);
      }
 
 
@EventHandler(priority = EventPriority.NORMAL)
public void onBlockPlace(BlockPlaceEvent event) {
    if(event.getBlock().getType() == Material.TNT)
    {
        {
            Location toSpawn = event.getBlock().getLocation();
            event.getBlock().setType(Material.AIR);
            TNTPrimed tnt = toSpawn.getWorld().spawn(toSpawn, TNTPrimed.class);
            int TNTNuke_lore = 15;
            tnt.setFuseTicks(TNTNuke_lore);
            tnt.setYield(15);
        }
    }
}
}
А про 2 и 3 не слышал(Недавно начал)
Еще:Можно ли брать значение из конфига ?
Ну вот замечания:
1)
EventPriority нужно поставить минимальный, как я говорил, чтобы избежать конфликтов с WorldGuard
2)
Саму обработку события я бы сделал так:
Java:
// завершаем обработку, если уважаемый WorldGuard против:
if (event.isCancelled()) return;
// запоминаем предмет в руке
ItemStack item = event.getItemInHand();
// делаем проверку, что предмет есть, и это именно ТНТ
if (item==null) return;
if (item.getType() != Material.TNT) return;
// делаем проверку, что это наш мощный тнт (по названию)
String name = "Poison TNT";
if (! name.equals(item.getItemMeta().getDisplayName())) return;
// теперь у нас точно наш специальный блок динамита. Делаем бочку!
event.setCancelled(true);
Player player = event.getPlayer();
Location location = event.getBlock().getLocation();
// забираем один блок динамита у игрока
player.getInventory().remove(item.clone().setAmount(1));
// спавним горящий динамит
TNTPrimed tnt = location.getWorld().spawn(location, TNTPrimed.class);
// и меняем его параметры
tnt.setFuseTicks(15); // на самом деле 15 тиков это мало. 20 тиков = 1 секунда
tnt.setYield(15); // радиус взрыва в 15 блоков
// всё!
Lore в этом случае мы не используем, т.к. сила взрыва фиксирована.
 
Ну вот замечания:
1)
EventPriority нужно поставить минимальный, как я говорил, чтобы избежать конфликтов с WorldGuard
2)
Саму обработку события я бы сделал так:
Java:
// завершаем обработку, если уважаемый WorldGuard против:
if (event.isCancelled()) return;
// запоминаем предмет в руке
ItemStack item = event.getItemInHand();
// делаем проверку, что предмет есть, и это именно ТНТ
if (item==null) return;
if (item.getType() != Material.TNT) return;
// делаем проверку, что это наш мощный тнт (по названию)
String name = "Poison TNT";
if (! name.equals(item.getItemMeta().getDisplayName())) return;
// теперь у нас точно наш специальный блок динамита. Делаем бочку!
event.setCancelled(true);
Player player = event.getPlayer();
Location location = event.getBlock().getLocation();
// забираем один блок динамита у игрока
player.getInventory().remove(item.clone().setAmount(1));
// спавним горящий динамит
TNTPrimed tnt = location.getWorld().spawn(location, TNTPrimed.class);
// и меняем его параметры
tnt.setFuseTicks(15); // на самом деле 15 тиков это мало. 20 тиков = 1 секунда
tnt.setYield(15); // радиус взрыва в 15 блоков
// всё!
Lore в этом случае мы не используем, т.к. сила взрыва фиксирована.
Спасибо помог:)(респект) . Почему тебя в девелоперов не берут :D.А в remove нечего не забыл ? Ошибку дает в Eclipse
 
... А в remove нечего не забыл ? Ошибку дает в Eclipse
Ага, писал на скорую руку. Нужно как-то так:
Java:
if (! player.getGameMode.equals(GameMode.CREATIVE)){
    ItemStack temp = item.clone();
    temp.setAmount(1);
    player.getInventory().remove(temp);
}
 

Поделиться этой страницей

Назад
Верх