Нужна помощь

Версия Minecraft
1.10.2
Народ как сделать так что бы ванильное дерево можно было ломать только топором?
 
Решение
Код:
@SubscribeEvent
public void breakBlockLog(BlockEvent.BreakEvent event) {
	if (event.getPlayer().isCreative()) return;
	ItemStack held_main = event.getPlayer().getHeldItemMainhand();
	if (event.getState().getBlock() instanceof BlockLog &&
			(held_main == null || (held_main != null && held_main.getItem().getHarvestLevel(held_main, "axe") < 0))) {
		event.setCanceled(true);
	}
}


Код:
@SubscribeEvent(priority = EventPriority.LOWEST)
public void harvestBlockLog(BlockEvent.HarvestDropsEvent event) {
	if (event.getHarvester().isCreative()) return;
	ItemStack held_main = event.getHarvester().getHeldItemMainhand();
	if (event.getState().getBlock() instanceof BlockLog &&
			(held_main == null || (held_main != null &&...
Код:
@Override
 public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int metadata) {
 if (player.inventory.getCurrentItem() != null && player.inventory.getCurrentItem().getItem() == MyItems.tweezers)
 super.harvestBlock(world, player, x, y, z, metadata);
 }
 
Maxik001, ему нужно для ванильных блоков и ещё для версии 1.10.2.
DCV_Hacker, тебе вроде писали, что надо - использовать эвент:
Код:
@SubscribeEvent
public void breakBlockLog(BlockEvent.BreakEvent event) {
	if (event.getPlayer().isCreative()) return;
	ItemStack held_main = event.getPlayer().getHeldItemMainhand();
	if (event.getState().getBlock() instanceof BlockLog &&
			(held_main == null || held_main != null && !(held_main.getItem() instanceof ItemAxe))) {
		event.setCanceled(true);
	}
}
 
Спасибо за помощь. Но это не то. Он просто отменяется и всё, надо просто добавить блоку дерева setHarvestLevel("axe", 0) и я как не пытался у меня не получается это сделать. Я без понятия как. И что значит held_main, isCreative.
 
DCV_Hacker написал(а):
надо просто добавить блоку дерева setHarvestLevel("axe", 0) и я как не пытался у меня не получается это сделать.
А самому объекту блока давал?

DCV_Hacker написал(а):
И что значит held_main, isCreative.
held_main, то что в правой руке (если я не ошибаюсь).
isCreative - находиться-ли игрок в креативнном режиме.
 
Вроде типа этого:
Код:
@EventHandler
public void preInit(FMLPreInitializationEvent e) {
	Blocks.LOG.setHarvestLevel("axe", 0);
	Blocks.LOG2.setHarvestLevel("axe", 0);
}
Если не сработает, то возможно: либо рефлексией, либо ASM (ни того и другого не знаю, что надо писать).


А! Ну, да. Можно в эвенте проверять инструмент на уровень добываемости.
 
Код:
@SubscribeEvent
public void breakBlockLog(BlockEvent.BreakEvent event) {
	if (event.getPlayer().isCreative()) return;
	ItemStack held_main = event.getPlayer().getHeldItemMainhand();
	if (event.getState().getBlock() instanceof BlockLog &&
			(held_main == null || (held_main != null && held_main.getItem().getHarvestLevel(held_main, "axe") < 0))) {
		event.setCanceled(true);
	}
}


Код:
@SubscribeEvent(priority = EventPriority.LOWEST)
public void harvestBlockLog(BlockEvent.HarvestDropsEvent event) {
	if (event.getHarvester().isCreative()) return;
	ItemStack held_main = event.getHarvester().getHeldItemMainhand();
	if (event.getState().getBlock() instanceof BlockLog &&
			(held_main == null || (held_main != null && held_main.getItem().getHarvestLevel(held_main, "axe") < 0))) {
		event.getDrops().clear();
	}
}
 
Назад
Сверху