package com.team.futurecraft.event; import java.util.Iterator; import java.util.List; import com.team.futurecraft.entity.ChunkEntity; import com.team.futurecraft.item.ItemSpaceSuit; import com.team.futurecraft.tick.TickHandlerClient; import com.team.futurecraft.world.WorldProviderPlanet; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.WorldProvider; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; /** * The core event handler for Futurecraft. * We'll subscribe all events from this single class instead of registering multiple classes. * If you're code for event handling gets pretty big, you can safely move it to a static function in another class, * and just call it from here. * * @author Joseph * */ public class CoreEventHandler { @SubscribeEvent public void onUpdateEvent(LivingUpdateEvent event) { handleChunkEntityBB(event); EntityLivingBase entity = event.entityLiving; EntityPlayer player = null; WorldProvider provider = entity.worldObj.provider; if (entity instanceof EntityPlayer) { player = (EntityPlayer)entity; if (player.capabilities.isFlying) return; } if (provider instanceof WorldProviderPlanet) { if (player != null) if (player.getInventory()[0] != null && player.getInventory()[1] != null && player.getInventory()[2] != null && player.getInventory()[3] != null) { if (player.getInventory()[0].getItem() instanceof ItemSpaceSuit && player.getInventory()[1].getItem() instanceof ItemSpaceSuit && player.getInventory()[2].getItem() instanceof ItemSpaceSuit && player.getInventory()[3].getItem() instanceof ItemSpaceSuit) { //System.out.println("wearing a space suit"); } else if (!player.capabilities.isCreativeMode) { player.attackEntityFrom(DamageSource.generic, 1000); } } else if (!player.capabilities.isCreativeMode) { player.attackEntityFrom(DamageSource.generic, 1000); } WorldProviderPlanet planet = (WorldProviderPlanet)provider; if (entity.stepHeight != 1f) entity.stepHeight = 1f; if (!entity.onGround) { entity.addVelocity(0, 0.0733D - (planet.getGravity() * 0.0733D), 0); entity.motionX *= 1.02; entity.motionY *= 1.02; entity.motionZ *= 1.02; } } else if (entity.stepHeight != 0.6f) { entity.stepHeight = 0.6f; } } @SubscribeEvent public void onFallEvent(LivingFallEvent event) { //System.out.println("falling"); WorldProvider provider = event.entityLiving.worldObj.provider; if (provider instanceof WorldProviderPlanet) { event.distance *= (float) ((WorldProviderPlanet)provider).getGravity() * 0.8; } } @SuppressWarnings("rawtypes") private void handleChunkEntityBB(LivingUpdateEvent event) { //System.out.println("handling bounding boxes"); Entity entity = event.entity; AxisAlignedBB entityBB = entity.getEntityBoundingBox(); if (entityBB != null) { //System.out.println("bounding box is not null"); List chunkEntities = entity.worldObj.getEntitiesWithinAABB(ChunkEntity.class, entityBB); Iterator iterator = chunkEntities.iterator(); while (iterator.hasNext()) { ChunkEntity chunk = (ChunkEntity)iterator.next(); chunk.handleEntity(event.entity); } } } @SubscribeEvent public void onTickEvent(ClientTickEvent event) { TickHandlerClient.onTickEvent(event); } }