нужна помощь

Здравствуйте и сразу вопрос. Какое событие отвечает за разрушение блоков игроком? Например, если игрок кликает ЛКМ по дереву, то ему накладывается какой нибудь эффект. В сурсах полазил, ничего не нашёл.
 
//Будет-ли дроп из блока добывая этим предметом. Если добывать рукой, то дропа не будет.
//Ну во-общем должно быть понятно. Только не понятно, почему ещё метод не именован как надо.
Код:
public boolean func_150897_b(Block block) {
if (block == Blocks.sandstone) return true;
return false;
}
//Когда блок будет сломан этим предметом.
Код:
public boolean onBlockDestroyed(ItemStack is, World world, Block block, int x, int y, int z, EntityLivingBase entity) {
if (block == Blocks.sandstone) {
is.damageItem(1, entity);//ломается предмет у нас (или у моба)
return true;
}
return false;
}
//На сколько быстрее будет идти добыча.
Код:
@Override
public float getDigSpeed(ItemStack stack, Block block, int meta) {
if (block == Blocks.sandstone) {
return 2.0F;//В два раза быстрее
}
return super.getDigSpeed(stack, block, meta);
}
 
Это не совсем  то что мне нужно. Мне бы отловить ивент когда игрок ломает блок (без разницы какой). И есть ли такой ивент вообще?
P.S. Забыл сказать, версия 1.7.10
 
А! Ясно. Вроде BlockEvent.BreakEvent.
 
у меня ещё вопрос. Как регистрировать событие в 1.7+? @ForgeSubscribe уже не работает.
[merge_posts_bbcode]Добавлено: 06.01.2015 16:06:15[/merge_posts_bbcode]

А всё уже разобрался.
 
Код:
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
Код:
@SubscribeEvent
Класс с эвантами от Forge "net.minecraftforge...":
Код:
MinecraftForge.EVENT_BUS.register(new EventYouEvent());
Класс с эвантами от "cpw.mods.fml.common.gameevent...":
Код:
FMLCommonHandler.instance().bus().register(new EventYouEvent());
 
Направьте меня на путь истины:
Код:
import teemoxa.mods.hardcoremode.items.ItemLoader;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
import net.minecraft.world.biome.WorldChunkManager;
import net.minecraftforge.event.world.BlockEvent;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;

public class EventHandlerMod {
    
    EntityPlayer ep;
    
    @SubscribeEvent
    public void hasPlayerTool(BlockEvent.BreakEvent e){
        
        if(ep.inventory.getCurrentItem().getItem() == null){
            System.out.println("Hello, minecraft!");
        }
    }
}
выдает краш, что ошибка в
Код:
if(ep.inventory.getCurrentItem().getItem() == null){
но в чём я ошибся не понимаю.
 
Типа игрок сам null.
[merge_posts_bbcode]Добавлено: 06.01.2015 14:30:01[/merge_posts_bbcode]

Код:
    @SubscribeEvent
    public void hasPlayerTool(BlockEvent.BreakEvent e){
        if (e.getPlayer().inventory.getCurrentItem() == null){
            System.out.println("Hello, minecraft!");
        }
    }
 
if(ep.inventory.getCurrentItem().getItem() == null)


я же беру предмет, который держит игрок.
Если не сложно, подсоби кодом.
 
Нормально..
Объявил в классе переменную игрока - ничего ей не присвоил и правда думаешь что так и надо?
Тебе уже кинули код как достать объект игрока - 
Код:
@SubscribeEvent
    public void hasPlayerTool(BlockEvent.BreakEvent e){
        if (e.getPlayer()
 
Код:
    @SubscribeEvent
    public void hasPlayerTool(BlockEvent.BreakEvent e) {
        ItemStack current = e.getPlayer().getCurrentEquippedItem();
        if (current != null && current.getItem() instanceof ИмяКлассаПредмета) {
            System.out.println("Hello, minecraft!");
        }
    }
Или место этого "current.getItem() instanceof ИмяКлассаПредмета", можно использовать "current.getItem() == ИмяКласаПеременой.переменая_предмета". Ну как-то так.
 
Minecraft.getMinecraft().thePlayer.getCurrentEquippedItem().getItem()==PREDMET
Можешь ещё на итемстеки сравнитвать
 
Спасибо! Почему бы не запилить навый учебник на 1.7+ для таких же нубов как и я(если таковые есть)?
 
Для таких нубов как ты,все классы проименованы по-человечски и есть документация.
 
А ты сам не нуб случайно? Сравнивать итемстаки тоже самое, что сравнивать числа с плавающей запятой.
 
Итемстеки можно сравнивать,когда предмет с метадатой(красители),когда предмет сломан(наполовину сломанный меч),итемстеки-это информация о предмете
 
Я про джавадоки не знал. Нашёл документацию, буду изучать.
 
Сравнивать итемстаки с помощью isItemEquals - да, можно. Сравнивать с помощью equals и == - нет.
 
Назад
Сверху