Помогите Если игрок сломал траву

adodvstudios

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Jenka20091
Нужно сделать, если игрок сломал одну траву написать актионбар, если 5 штук то выдать изумруд
 
BlockBreakEvent
if(e.getBlock() == Material.Трава)
HashMap<Player, int>
 
BlockBreakEvent
if(e.getBlock() == Material.Трава)
HashMap<Player, int>
Во-первых, неправильно указан тип в мапе, Integer нужно писать, т.к. int это примитив.
Во-вторых, ему лучше использоваь Map<Player, Map<Material, Integer>>
где, Player - игрока, сломавший блок,
Material - тип сломанного блока,
Integer - количество сломанных блоков
 
PHP:
public class BlockBreaks implements Listener
{
    @EventHandler
    public void BreakGrass(BlockBreakEvent e)
    {
        Block b = e.getBlock();
        Material mat = b.getType();
        Player p = e.getPlayer();
        
        if(mat.equals(Material.LONG_GRASS))
        {
            p.getInventory().addItem(new ItemStack(Material.ACACIA_DOOR));
            p.sendMessage("Я дал тебе дверь!");
        }
    }
}
Я сделал при ломании одной травы. А мне нужно именно 5.
 
PHP:
public class BlockBreaks implements Listener
{
    @EventHandler
    public void BreakGrass(BlockBreakEvent e)
    {
        Block b = e.getBlock();
        Material mat = b.getType();
        Player p = e.getPlayer();
       
        if(mat.equals(Material.LONG_GRASS))
        {
            p.getInventory().addItem(new ItemStack(Material.ACACIA_DOOR));
            p.sendMessage("Я дал тебе дверь!");
        }
    }
}
Я сделал при ломании одной травы. А мне нужно именно 5.
Выше объяснение про хешмеп написан. Записывай в него и при ломании проверяй условиями.
 
Во-первых, неправильно указан тип в мапе, Integer нужно писать, т.к. int это примитив.
Во-вторых, ему лучше использоваь Map<Player, Map<Material, Integer>>
где, Player - игрока, сломавший блок,
Material - тип сломанного блока,
Integer - количество сломанных блоков
Писал без IDE.
Все же спасибо за исправление.
 
PHP:
public class BlockBreaks implements Listener
{
    @EventHandler
    public void BreakGrass(BlockBreakEvent e)
    {
        Block b = e.getBlock();
        Material mat = b.getType();
        Player p = e.getPlayer();
     
        if(mat.equals(Material.LONG_GRASS))
        {
            p.getInventory().addItem(new ItemStack(Material.ACACIA_DOOR));
            p.sendMessage("Я дал тебе дверь!");
        }
    }
}
Я сделал при ломании одной травы. А мне нужно именно 5.
Создаёшь ненужные переменные. (Они конечно будут быстро удалены, но т.к это ивент он бтв будет вызываться каждый тик)
 
Назад
Верх