diff options
author | Jordan Byrne <draknyte1@hotmail.com> | 2017-12-03 18:54:51 +1000 |
---|---|---|
committer | Jordan Byrne <draknyte1@hotmail.com> | 2017-12-03 18:54:51 +1000 |
commit | 783de693bffb031c191dd0a3fe8cb7c51d02b6fc (patch) | |
tree | 42aeb8dd4b0fba18d730e254bd279bed4ac2099f /src/Java/gtPlusPlus/core/item/general | |
parent | a88252907e40b8dd44e830febea21c93ae9bd4c5 (diff) | |
download | GT5-Unofficial-783de693bffb031c191dd0a3fe8cb7c51d02b6fc.tar.gz GT5-Unofficial-783de693bffb031c191dd0a3fe8cb7c51d02b6fc.tar.bz2 GT5-Unofficial-783de693bffb031c191dd0a3fe8cb7c51d02b6fc.zip |
+ More Dragon Capture Jar work.
Diffstat (limited to 'src/Java/gtPlusPlus/core/item/general')
-rw-r--r-- | src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java | 145 |
1 files changed, 122 insertions, 23 deletions
diff --git a/src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java b/src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java index f771679d23..ec4ddbad3d 100644 --- a/src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java +++ b/src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java @@ -1,16 +1,30 @@ package gtPlusPlus.core.item.general.capture; +import java.util.List; import java.util.UUID; import gtPlusPlus.api.interfaces.IEntityCatcher; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.array.BlockPos; import gtPlusPlus.core.util.nbt.NBTUtils; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; public class ItemEntityCatcher extends Item implements IEntityCatcher { - + + //PlayerInteractEvent.EntityInteract; + + public ItemEntityCatcher(){ + Utils.registerEvent(this); + } + @Override public boolean hasEntity(ItemStack aStack) { if (NBTUtils.hasKey(aStack, "mHasEntity")){ @@ -20,47 +34,46 @@ public class ItemEntityCatcher extends Item implements IEntityCatcher { } @Override - public Entity getStoredEntity(ItemStack aStack) { + public Entity getStoredEntity(World aWorld, ItemStack aStack) { if (aStack == null || !NBTUtils.getBooleanTagCompound(aStack, "mEntity", "mHasEntity")){ return null; } - - NBTTagCompound mEntityData; - Class<? extends Entity> mEntityClass; - String mClassName; - int mEntityID, mEntityHashcode; - UUID mUuidPersistent, mUuidUnique; - mEntityData = NBTUtils.getTagCompound(aStack, "mEntity", "mEntityData"); - mEntityID = NBTUtils.getIntegerTagCompound(aStack, "mEntity", "mEntityID"); - mClassName = NBTUtils.getStringTagCompound(aStack, "mEntity", "mClassName"); - mUuidPersistent = UUID.fromString(NBTUtils.getStringTagCompound(aStack, "mEntity", "mUuidPersistent")); - mUuidUnique = UUID.fromString(NBTUtils.getStringTagCompound(aStack, "mEntity", "mUuidUnique")); - mEntityHashcode = NBTUtils.getIntegerTagCompound(aStack, "mEntity", "mEntityHashcode"); + Entity mEntityToSpawn; + int mEntityID; + + mEntityID = NBTUtils.getIntegerTagCompound(aStack, "mEntity", "mEntityID"); + mEntityToSpawn = EntityList.createEntityByID(mEntityID, aWorld); + if (mEntityToSpawn != null) { + return mEntityToSpawn; + } + + return null; } @Override - public boolean setStoredEntity(ItemStack aStack, Entity aEntity) { + public boolean setStoredEntity(World aWorld, ItemStack aStack, Entity aEntity) { if (aEntity == null){ NBTUtils.setBoolean(aStack, "mHasEntity", true); return false; } - + NBTTagCompound mEntityData; Class<? extends Entity> mEntityClass; String mClassName; int mEntityID, mEntityHashcode; UUID mUuidPersistent, mUuidUnique; - + mEntityData = aEntity.getEntityData(); mEntityClass = aEntity.getClass(); mClassName = mEntityClass.getName(); - mEntityID = aEntity.getEntityId(); + //mEntityID = aEntity.getEntityId(); + mEntityID = EntityList.getEntityID(aEntity); mEntityHashcode = aEntity.hashCode(); mUuidPersistent = aEntity.getPersistentID(); mUuidUnique = aEntity.getUniqueID(); - NBTUtils.createTagCompound(aStack, "mEntity", "mEntityData", mEntityData); + NBTUtils.createTagCompound(aStack, "mEntityData", mEntityData); NBTUtils.createIntegerTagCompound(aStack, "mEntity", "mEntityID", mEntityID); NBTUtils.createStringTagCompound(aStack, "mEntity", "mClassName", mClassName); NBTUtils.createStringTagCompound(aStack, "mEntity", "mUuidPersistent", mUuidPersistent.toString()); @@ -70,12 +83,98 @@ public class ItemEntityCatcher extends Item implements IEntityCatcher { return true; } + @SuppressWarnings("unchecked") @Override - public Class getStoredEntityClass(ItemStack aStack) { - // TODO Auto-generated method stub + public Class<? extends Entity> getStoredEntityClass(ItemStack aStack) { + if (aStack == null || !NBTUtils.getBooleanTagCompound(aStack, "mEntity", "mHasEntity")){ + return null; + } + + Class<? extends Entity> mEntityClass; + String mClassName; + + mClassName = NBTUtils.getStringTagCompound(aStack, "mEntity", "mClassName"); + + try { + mEntityClass = (Class<? extends Entity>) Class.forName(mClassName); + if (mEntityClass != null) { + return mEntityClass; + } + } + catch (ClassNotFoundException e) {} return null; } - - + @Override + public boolean spawnStoredEntity(World aWorld, ItemStack aStack, BlockPos aPos) { + if (aStack == null || !NBTUtils.getBooleanTagCompound(aStack, "mEntity", "mHasEntity")){ + return false; + } + + NBTTagCompound mEntityData = NBTUtils.getTagCompound(aStack, "mEntityData"); + + int mEntityID = NBTUtils.getIntegerTagCompound(aStack, "mEntity", "mEntityID"); + String mClassName = NBTUtils.getStringTagCompound(aStack, "mEntity", "mClassName"); + UUID mUuidPersistent = UUID.fromString(NBTUtils.getStringTagCompound(aStack, "mEntity", "mUuidPersistent")); + UUID mUuidUnique = UUID.fromString(NBTUtils.getStringTagCompound(aStack, "mEntity", "mUuidUnique")); + int mEntityHashcode = NBTUtils.getIntegerTagCompound(aStack, "mEntity", "mEntityHashcode"); + + EntityLiving mEntityToSpawn = (EntityLiving) getStoredEntity(aWorld, aStack); + Class<? extends Entity> mEntityClass = getStoredEntityClass(aStack); + + if (mEntityToSpawn != null && mEntityClass != null) { + if (mEntityToSpawn.getEntityData() != mEntityData){ + NBTUtils.setEntityCustomData(mEntityToSpawn, mEntityData); + } + + + mEntityToSpawn.setLocationAndAngles(aPos.xPos, aPos.yPos, aPos.zPos, aWorld.rand.nextFloat() * 360.0F, 0.0F); + if (mEntityToSpawn instanceof EntityLiving){ + ((EntityLiving) mEntityToSpawn).onSpawnWithEgg(null); + aWorld.spawnEntityInWorld(mEntityToSpawn); + } + if (mEntityToSpawn instanceof EntityLiving){ + ((EntityLiving) mEntityToSpawn).playLivingSound(); + } + NBTUtils.createBooleanTagCompound(aStack, "mEntity", "mHasEntity", false); + + + } + + return false; + } + + @Override + public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + return super.onItemRightClick(aStack, aWorld, aPlayer); + } + + @Override + public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List p_77624_3_, boolean p_77624_4_) { + super.addInformation(p_77624_1_, p_77624_2_, p_77624_3_, p_77624_4_); + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return false; + } + + @Override + public boolean onItemUse(ItemStack itemstack, EntityPlayer player, World world, int x, int y, int z, int side, + float xOffset, float yOffset, float zOffset) { + if (NBTUtils.hasKeyInTagCompound(itemstack, "mEntity", "mHasEntity") && NBTUtils.getBooleanTagCompound(itemstack, "mEntity", "mHasEntity")){ + return spawnStoredEntity(world, itemstack, new BlockPos(x, y, z)); + } + else { + return super.onItemUse(itemstack, player, world, x, y, z, side, xOffset, yOffset, zOffset); + } + } + + @Override + public boolean itemInteractionForEntity(ItemStack aStack, EntityPlayer aPlayer, EntityLivingBase aEntity) { + return super.itemInteractionForEntity(aStack, aPlayer, aEntity); + } + + + } |