package tschipp.carryon.common.event; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.fml.common.eventhandler.Event.Result; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import tschipp.carryon.CarryOn; import tschipp.carryon.client.keybinds.CarryOnKeybinds; import tschipp.carryon.common.handler.PickupHandler; import tschipp.carryon.common.handler.RegistrationHandler; import tschipp.carryon.common.item.ItemEntity; import tschipp.carryon.network.client.CarrySlotPacket; public class ItemEntityEvents { @SubscribeEvent(priority = EventPriority.HIGH) public void onBlockClick(PlayerInteractEvent.RightClickBlock event) { EntityPlayer player = event.getEntityPlayer(); ItemStack stack = player.getHeldItemMainhand(); if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) { player.getEntityData().removeTag("carrySlot"); event.setUseBlock(Result.DENY); } } @SubscribeEvent(priority = EventPriority.HIGH) public void onItemDropped(EntityJoinWorldEvent event) { Entity e = event.getEntity(); World world = event.getWorld(); if (e instanceof EntityItem) { EntityItem eitem = (EntityItem) e; ItemStack stack = eitem.getEntityItem(); Item item = stack.getItem(); if (item == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) { BlockPos pos = eitem.getPosition(); Entity entity = ItemEntity.getEntity(stack, world); entity.setPosition(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); world.spawnEntity(entity); ItemEntity.clearEntityData(stack); eitem.setEntityItemStack(ItemStack.EMPTY); } } } @SubscribeEvent(priority = EventPriority.HIGH) public void onEntityRightClick(PlayerInteractEvent.EntityInteract event) { EntityPlayer player = event.getEntityPlayer(); if (player instanceof EntityPlayerMP) { ItemStack main = player.getHeldItemMainhand(); ItemStack off = player.getHeldItemOffhand(); World world = event.getWorld(); Entity entity = event.getTarget(); BlockPos pos = entity.getPosition(); if (main.isEmpty() && off.isEmpty() && CarryOnKeybinds.isKeyPressed(player)) { ItemStack stack = new ItemStack(RegistrationHandler.itemEntity); if (entity.hurtResistantTime == 0) { if (PickupHandler.canPlayerPickUpEntity(player, entity)) { if (ItemEntity.storeEntityData(entity, world, stack)) { CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem), (EntityPlayerMP) player); entity.setDead(); player.setHeldItem(EnumHand.MAIN_HAND, stack); event.setCanceled(true); } } } } } } @SubscribeEvent public void onLivingUpdate(LivingUpdateEvent event) { EntityLivingBase entity = event.getEntityLiving(); World world = entity.world; ItemStack main = entity.getHeldItemMainhand(); if (!main.isEmpty() && main.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(main)) { BlockPos pos = entity.getPosition(); BlockPos below = pos.offset(EnumFacing.DOWN); if (world.getBlockState(pos).getMaterial() == Material.WATER || world.getBlockState(below).getMaterial() == Material.WATER) { Entity contained = ItemEntity.getEntity(main, world); if (contained != null) { float height = contained.height; float width = contained.width; entity.addVelocity(0, -0.01 * height * width, 0); } } } } }