From d12cf1070f5b988a6a4927c3dc3489608a4e121c Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Sat, 3 Aug 2013 02:23:07 -0400 Subject: [PATCH] Attempt at fixing rough NSWE movement --- .../contractor/EntityContractorItem.java | 58 +++++++++ .../contractor/TileEntityEMContractor.java | 123 ++++++++++-------- 2 files changed, 130 insertions(+), 51 deletions(-) create mode 100644 src/resonantinduction/contractor/EntityContractorItem.java diff --git a/src/resonantinduction/contractor/EntityContractorItem.java b/src/resonantinduction/contractor/EntityContractorItem.java new file mode 100644 index 00000000..858f0981 --- /dev/null +++ b/src/resonantinduction/contractor/EntityContractorItem.java @@ -0,0 +1,58 @@ +package resonantinduction.contractor; + +import java.lang.reflect.Method; +import java.util.Iterator; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.item.ItemExpireEvent; + +/** + * Spinoff of EntityItem for Contractors. + * @author AidanBrady + * + */ +public class EntityContractorItem extends EntityItem +{ + public boolean doGravityThisTick = true; + + public EntityContractorItem(World par1World) + { + super(par1World); + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if(!doGravityThisTick) + { + motionY = 0; + } + } + + public static EntityContractorItem get(EntityItem entityItem) + { + EntityContractorItem item = new EntityContractorItem(entityItem.worldObj); + + item.posX = entityItem.posX; + item.posY = entityItem.posY; + item.posZ = entityItem.posZ; + + item.setEntityItemStack(entityItem.getEntityItem()); + + item.motionX = entityItem.motionX; + item.motionY = entityItem.motionY; + item.motionZ = entityItem.motionZ; + + item.dataWatcher = entityItem.getDataWatcher(); + + return item; + } +} diff --git a/src/resonantinduction/contractor/TileEntityEMContractor.java b/src/resonantinduction/contractor/TileEntityEMContractor.java index 2afbed3b..481a0da3 100644 --- a/src/resonantinduction/contractor/TileEntityEMContractor.java +++ b/src/resonantinduction/contractor/TileEntityEMContractor.java @@ -36,69 +36,90 @@ public class TileEntityEMContractor extends TileEntity if(entity instanceof EntityItem) { EntityItem entityItem = (EntityItem)entity; - - switch(facing) + + if(!(entityItem instanceof EntityContractorItem)) { - case DOWN: - entityItem.setPosition(xCoord+0.5, entityItem.posY, zCoord+0.5); - - entityItem.motionX = 0; - entityItem.motionZ = 0; + entityItem.setDead(); + + EntityContractorItem newItem = EntityContractorItem.get(entityItem); + worldObj.spawnEntityInWorld(newItem); + + entityItem = newItem; + } + + if(entityItem instanceof EntityContractorItem) + { + switch(facing) + { + case DOWN: + entityItem.setPosition(xCoord+0.5, entityItem.posY, zCoord+0.5); - entityItem.motionY = Math.max(-MAX_SPEED, entityItem.motionY-ACCELERATION); + entityItem.motionX = 0; + entityItem.motionZ = 0; + + entityItem.motionY = Math.max(-MAX_SPEED, entityItem.motionY-ACCELERATION); + + entityItem.isAirBorne = true; + break; + case UP: + entityItem.setPosition(xCoord+0.5, entityItem.posY, zCoord+0.5); - entityItem.isAirBorne = true; - break; - case UP: - entityItem.setPosition(xCoord+0.5, entityItem.posY, zCoord+0.5); - - entityItem.motionX = 0; - entityItem.motionZ = 0; + entityItem.motionX = 0; + entityItem.motionZ = 0; + + entityItem.motionY = Math.min(MAX_SPEED, entityItem.motionY+ACCELERATION); + + entityItem.isAirBorne = true; + break; + case NORTH: + ((EntityContractorItem)entityItem).doGravityThisTick = false; - entityItem.motionY = Math.min(MAX_SPEED, entityItem.motionY+ACCELERATION); + entityItem.setPosition(entityItem.posX, yCoord+0.5, zCoord+0.5); - entityItem.isAirBorne = true; - break; - case NORTH: - entityItem.setPosition(entityItem.posX, yCoord+0.5, zCoord+0.5); - - entityItem.motionY = 0; - entityItem.motionZ = 0; - - entityItem.motionX = Math.min(MAX_SPEED, entityItem.motionZ+ACCELERATION); + entityItem.motionY = 0; + entityItem.motionZ = 0; - entityItem.isAirBorne = true; - break; - case SOUTH: - entityItem.setPosition(entityItem.posX, yCoord+0.5, zCoord+0.5); - - entityItem.motionY = 0; - entityItem.motionZ = 0; + entityItem.motionX = Math.min(MAX_SPEED, entityItem.motionZ+ACCELERATION); + + entityItem.isAirBorne = true; + break; + case SOUTH: + ((EntityContractorItem)entityItem).doGravityThisTick = false; - entityItem.motionX = Math.max(-MAX_SPEED, entityItem.motionZ-ACCELERATION); + entityItem.setPosition(entityItem.posX, yCoord+0.5, zCoord+0.5); - entityItem.isAirBorne = true; - break; - case WEST: - entityItem.setPosition(xCoord+0.5, yCoord+0.5, entityItem.posZ); - - entityItem.motionX = 0; - entityItem.motionY = 0; + entityItem.motionY = 0; + entityItem.motionZ = 0; + + entityItem.motionX = Math.max(-MAX_SPEED, entityItem.motionZ-ACCELERATION); + + entityItem.isAirBorne = true; + break; + case WEST: + ((EntityContractorItem)entityItem).doGravityThisTick = false; - entityItem.motionZ = Math.min(MAX_SPEED, entityItem.motionX+ACCELERATION); + entityItem.setPosition(xCoord+0.5, yCoord+0.5, entityItem.posZ); - entityItem.isAirBorne = true; - break; - case EAST: - entityItem.setPosition(xCoord+0.5, yCoord+0.5, entityItem.posZ); - - entityItem.motionX = 0; - entityItem.motionY = 0; + entityItem.motionX = 0; + entityItem.motionY = 0; + + entityItem.motionZ = Math.min(MAX_SPEED, entityItem.motionX+ACCELERATION); + + entityItem.isAirBorne = true; + break; + case EAST: + ((EntityContractorItem)entityItem).doGravityThisTick = false; - entityItem.motionZ = Math.max(-MAX_SPEED, entityItem.motionX-ACCELERATION); + entityItem.setPosition(xCoord+0.5, yCoord+0.5, entityItem.posZ); - entityItem.isAirBorne = true; - break; + entityItem.motionX = 0; + entityItem.motionY = 0; + + entityItem.motionZ = Math.max(-MAX_SPEED, entityItem.motionX-ACCELERATION); + + entityItem.isAirBorne = true; + break; + } } } }