Блокирование клавиш.

Версия Minecraft
1.7.10
48
1
Доброго времени суток.
Есть код на блокирование ПКМ при открытии деревьяной двери.
Но почему-то просто не работает.
Прошу поправить.


Java:
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityClientPlayerMP;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action;

public class DD_LockDoor {
       final World world = this.mc.theWorld;
       final Minecraft mc = Minecraft.getMinecraft();
      
      
       @SubscribeEvent
       public void onPlayerInteractBlock(PlayerInteractEvent e) {
           EntityClientPlayerMP player = FMLClientHandler.instance().getClient().thePlayer;
          if(!player.capabilities.isCreativeMode) {
          }
          if(e.action == Action.RIGHT_CLICK_BLOCK) {
          }
       Block b = this.mc.theWorld.getBlock(e.x, e.y, e.z);
       if(b.equals(Blocks.wooden_door )) {
       e.setCanceled(true);
       }
       }
}
 
Решение
Коротко:
Java:
public class DD_LockDoor {

    @SubscribeEvent
    public void onPlayerInteractBlock(PlayerInteractEvent e) {
        if (!e.entityPlayer.capabilities.isCreativeMode) {
            if (e.action == Action.RIGHT_CLICK_BLOCK) {
                Block b = e.world.getBlock(e.x, e.y, e.z);
                if (b == Blocks.wooden_door) {
                    e.setCanceled(true);
                }
            }
        }
    }

}

timaxa007

Модератор
5,831
409
672
1. Блокировать на обе стороны: клиентскую и серверную, а не только клиентскую.
2. Использовать переменные из самого эвента, а не создавать свои, которые будут работать только на клиентской стороне.
3. Убедись, что ты зарегистрировал этот эвент.
 
48
1
1. Блокировать на обе стороны: клиентскую и серверную, а не только клиентскую.
2. Использовать переменные из самого эвента, а не создавать свои, которые будут работать только на клиентской стороне.
3. Убедись, что ты зарегистрировал этот эвент.
Эвент зарегестрирован точно.
Можно по подробнее про 1 и 2 пункт?
 

timaxa007

Модератор
5,831
409
672
Коротко:
Java:
public class DD_LockDoor {

    @SubscribeEvent
    public void onPlayerInteractBlock(PlayerInteractEvent e) {
        if (!e.entityPlayer.capabilities.isCreativeMode) {
            if (e.action == Action.RIGHT_CLICK_BLOCK) {
                Block b = e.world.getBlock(e.x, e.y, e.z);
                if (b == Blocks.wooden_door) {
                    e.setCanceled(true);
                }
            }
        }
    }

}
 
48
1
Коротко:
Java:
public class DD_LockDoor {

    @SubscribeEvent
    public void onPlayerInteractBlock(PlayerInteractEvent e) {
        if (!e.entityPlayer.capabilities.isCreativeMode) {
            if (e.action == Action.RIGHT_CLICK_BLOCK) {
                Block b = e.world.getBlock(e.x, e.y, e.z);
                if (b == Blocks.wooden_door) {
                    e.setCanceled(true);
                }
            }
        }
    }

}
Все равно никак, на дверь вообще не реагирует.
 

timaxa007

Модератор
5,831
409
672
А у меня работает:
Импорты:
Java:
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action;
 
Сверху