- 2,932
- 44
- 598
Доброго времени суток Земляне и Чужие!
Сегодня я столкнулся с такой проблемой: У меня есть событие
Как видно там есть проверка на то что в слоте брони где должен быть нагрудник есть предмет который унаследовал ItemArmor:
Проблема в том что эта проверка работает очень неадекватно. (неадекватно у меня означает что, игрок с надетым нагрудником нагрудником постоянно ставит слой снега высотой в 7 уровней, а без нагрудника работает как и должно быть...)
Сегодня я столкнулся с такой проблемой: У меня есть событие
PlayerRightClick
:
Java:
@SubscribeEvent
public void PlayerRightClick(PlayerInteractEvent.RightClickBlock event) {
if (!event.getEntityPlayer().isSneaking() || !event.getEntityPlayer().getHeldItem(EnumHand.MAIN_HAND).isEmpty() || event.getEntityPlayer().capabilities.isCreativeMode)
return;
if (event.getWorld().getBlockState(event.getPos()).getBlock() == Blocks.SNOW || event.getEntityPlayer().inventory.armorInventory.get(2).getItem() instanceof ItemArmor) {
if (!event.getWorld().isRemote) {
IBlockState prevState = Blocks.SNOW_LAYER.getDefaultState().withProperty(BlockSnow.LAYERS, 7);
event.getWorld().setBlockState(event.getPos(), prevState);
event.getEntityPlayer().inventory.addItemStackToInventory(new ItemStack(Items.SNOWBALL));
event.getEntityPlayer().getCooldownTracker().setCooldown(Items.SNOWBALL, 1);
}
event.setUseItem(Result.ALLOW);
} else if (event.getWorld().getBlockState(event.getPos()).getBlock() == Blocks.SNOW_LAYER || event.getEntityPlayer().inventory.armorInventory.get(2).getItem() instanceof ItemArmor) {
if (!event.getWorld().isRemote
&& !event.getEntityPlayer().getCooldownTracker().hasCooldown(Items.SNOWBALL)) {
if (event.getWorld().getBlockState(event.getPos()).getValue(BlockSnow.LAYERS) == 1)
event.getWorld().destroyBlock(event.getPos(), false);
else {
int prevValue = event.getWorld().getBlockState(event.getPos()).getValue(BlockSnow.LAYERS);
IBlockState state = Blocks.SNOW_LAYER.getDefaultState().withProperty(BlockSnow.LAYERS, prevValue - 1);
event.getWorld().setBlockState(event.getPos(), state);
}
event.getEntityPlayer().inventory.addItemStackToInventory(new ItemStack(Items.SNOWBALL));
}
event.setCancellationResult(EnumActionResult.SUCCESS);
event.setCanceled(true);
}
}
event.getEntityPlayer().inventory.armorInventory.get(2).getItem() instanceof ItemArmor
.Проблема в том что эта проверка работает очень неадекватно. (неадекватно у меня означает что, игрок с надетым нагрудником нагрудником постоянно ставит слой снега высотой в 7 уровней, а без нагрудника работает как и должно быть...)