diff options
author | Jordan Byrne <draknyte1@hotmail.com> | 2017-12-03 20:01:04 +1000 |
---|---|---|
committer | Jordan Byrne <draknyte1@hotmail.com> | 2017-12-03 20:01:04 +1000 |
commit | a15e954e47289eba581a918b07442e9ba2d92c28 (patch) | |
tree | 30f6930ddacec9cbfbeecb4ba42d6a26890cf938 /src/Java/gtPlusPlus | |
parent | ba3676909bddc3fa1b25771896d87a7a9235ea32 (diff) | |
download | GT5-Unofficial-a15e954e47289eba581a918b07442e9ba2d92c28.tar.gz GT5-Unofficial-a15e954e47289eba581a918b07442e9ba2d92c28.tar.bz2 GT5-Unofficial-a15e954e47289eba581a918b07442e9ba2d92c28.zip |
$ Fixed Capture Item NBT sync for Entity storage.
- Removed logging.
Diffstat (limited to 'src/Java/gtPlusPlus')
-rw-r--r-- | src/Java/gtPlusPlus/core/item/ModItems.java | 5 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java | 159 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java | 21 |
3 files changed, 121 insertions, 64 deletions
diff --git a/src/Java/gtPlusPlus/core/item/ModItems.java b/src/Java/gtPlusPlus/core/item/ModItems.java index 3a816b457d..64e6ae44ef 100644 --- a/src/Java/gtPlusPlus/core/item/ModItems.java +++ b/src/Java/gtPlusPlus/core/item/ModItems.java @@ -40,6 +40,7 @@ import gtPlusPlus.core.item.general.ItemHalfCompleteCasings; import gtPlusPlus.core.item.general.ItemLavaFilter; import gtPlusPlus.core.item.general.RF2EU_Battery; import gtPlusPlus.core.item.general.books.ItemBaseBook; +import gtPlusPlus.core.item.general.capture.ItemEntityCatcher; import gtPlusPlus.core.item.general.chassis.itemBoilerChassis; import gtPlusPlus.core.item.general.chassis.itemDehydratorCoil; import gtPlusPlus.core.item.general.chassis.itemDehydratorCoilWire; @@ -271,6 +272,8 @@ public final class ModItems { public static Item itemRope; public static Item itemFiber; + + public static Item itemDragonJar; public static final void init(){ @@ -657,6 +660,8 @@ public final class ModItems { itemLavaFilter = new ItemLavaFilter(); itemGrindleTablet = new BaseItemGrindle(); + + itemDragonJar = new ItemEntityCatcher(); //Chemistry CoalTar.run(); diff --git a/src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java b/src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java index ec4ddbad3d..dcb52c57e8 100644 --- a/src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java +++ b/src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java @@ -3,10 +3,14 @@ package gtPlusPlus.core.item.general.capture; import java.util.List; import java.util.UUID; +import cpw.mods.fml.common.registry.GameRegistry; import gtPlusPlus.api.interfaces.IEntityCatcher; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.array.BlockPos; import gtPlusPlus.core.util.nbt.NBTUtils; +import gtPlusPlus.core.util.player.PlayerUtils; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLiving; @@ -15,19 +19,28 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; public class ItemEntityCatcher extends Item implements IEntityCatcher { - - //PlayerInteractEvent.EntityInteract; - - public ItemEntityCatcher(){ - Utils.registerEvent(this); + + // PlayerInteractEvent.EntityInteract; + + + public ItemEntityCatcher() { + //Probably won't ever need this event handler. + //Utils.registerEvent(this); + this.setUnlocalizedName("itemDragonJar"); + this.setTextureName(CORE.MODID + ":" + getUnlocalizedName()); + this.setCreativeTab(AddToCreativeTab.tabMisc); + this.setMaxStackSize(16); + this.setMaxDamage(0); + GameRegistry.registerItem(this, getUnlocalizedName()); } - + @Override public boolean hasEntity(ItemStack aStack) { - if (NBTUtils.hasKey(aStack, "mHasEntity")){ + if (NBTUtils.hasKey(aStack, "mHasEntity")) { return NBTUtils.getBoolean(aStack, "mHasEntity"); } return false; @@ -35,110 +48,127 @@ public class ItemEntityCatcher extends Item implements IEntityCatcher { @Override public Entity getStoredEntity(World aWorld, ItemStack aStack) { - if (aStack == null || !NBTUtils.getBooleanTagCompound(aStack, "mEntity", "mHasEntity")){ + if (aStack == null || !hasEntity(aStack)) { + Utils.LOG_INFO("Cannot get stored entity."); return null; } Entity mEntityToSpawn; int mEntityID; + Utils.LOG_INFO("getStoredEntity(1)"); - mEntityID = NBTUtils.getIntegerTagCompound(aStack, "mEntity", "mEntityID"); + mEntityID = NBTUtils.getInteger(aStack, "mEntityID"); mEntityToSpawn = EntityList.createEntityByID(mEntityID, aWorld); if (mEntityToSpawn != null) { + Utils.LOG_INFO("getStoredEntity(2)"); return mEntityToSpawn; } - return null; + return null; } @Override public boolean setStoredEntity(World aWorld, ItemStack aStack, Entity aEntity) { - if (aEntity == null){ - NBTUtils.setBoolean(aStack, "mHasEntity", true); + if (aEntity == null) { + NBTUtils.setBoolean(aStack, "mHasEntity", false); + Utils.LOG_INFO("Bad Entity being stored."); return false; } + + Utils.LOG_INFO("setStoredEntity(1)"); NBTTagCompound mEntityData; Class<? extends Entity> mEntityClass; String mClassName; + String mEntityName; int mEntityID, mEntityHashcode; UUID mUuidPersistent, mUuidUnique; + Utils.LOG_INFO("setStoredEntity(2)"); mEntityData = aEntity.getEntityData(); mEntityClass = aEntity.getClass(); mClassName = mEntityClass.getName(); - //mEntityID = aEntity.getEntityId(); + mEntityName = aEntity.getCommandSenderName(); + // mEntityID = aEntity.getEntityId(); mEntityID = EntityList.getEntityID(aEntity); mEntityHashcode = aEntity.hashCode(); mUuidPersistent = aEntity.getPersistentID(); mUuidUnique = aEntity.getUniqueID(); + Utils.LOG_INFO("setStoredEntity(3)"); NBTUtils.createTagCompound(aStack, "mEntityData", mEntityData); - NBTUtils.createIntegerTagCompound(aStack, "mEntity", "mEntityID", mEntityID); - NBTUtils.createStringTagCompound(aStack, "mEntity", "mClassName", mClassName); - NBTUtils.createStringTagCompound(aStack, "mEntity", "mUuidPersistent", mUuidPersistent.toString()); - NBTUtils.createStringTagCompound(aStack, "mEntity", "mUuidUnique", mUuidUnique.toString()); - NBTUtils.createIntegerTagCompound(aStack, "mEntity", "mEntityHashcode", mEntityHashcode); - NBTUtils.createBooleanTagCompound(aStack, "mEntity", "mHasEntity", true); + NBTUtils.setString(aStack,"mEntityName", mEntityName); + NBTUtils.setInteger(aStack,"mEntityID", mEntityID); + NBTUtils.setString(aStack,"mClassName", mClassName); + NBTUtils.setString(aStack,"mUuidPersistent", mUuidPersistent.toString()); + NBTUtils.setString(aStack,"mUuidUnique", mUuidUnique.toString()); + NBTUtils.setInteger(aStack,"mEntityHashcode", mEntityHashcode); + NBTUtils.setBoolean(aStack,"mHasEntity", true); + Utils.LOG_INFO("setStoredEntity(4)"); return true; } @SuppressWarnings("unchecked") @Override public Class<? extends Entity> getStoredEntityClass(ItemStack aStack) { - if (aStack == null || !NBTUtils.getBooleanTagCompound(aStack, "mEntity", "mHasEntity")){ + if (aStack == null || !hasEntity(aStack)) { return null; } - Class<? extends Entity> mEntityClass; String mClassName; - - mClassName = NBTUtils.getStringTagCompound(aStack, "mEntity", "mClassName"); - + mClassName = NBTUtils.getString(aStack,"mClassName"); try { mEntityClass = (Class<? extends Entity>) Class.forName(mClassName); if (mEntityClass != null) { return mEntityClass; } } - catch (ClassNotFoundException e) {} + catch (ClassNotFoundException e) { + } return null; } @Override public boolean spawnStoredEntity(World aWorld, ItemStack aStack, BlockPos aPos) { - if (aStack == null || !NBTUtils.getBooleanTagCompound(aStack, "mEntity", "mHasEntity")){ + if (aStack == null || !hasEntity(aStack)) { + Utils.LOG_INFO("Cannot release, either invalid Itemstack or no entity stored."); 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"); + + int mEntityID = NBTUtils.getInteger(aStack,"mEntityID"); + String mClassName = NBTUtils.getString(aStack,"mClassName"); + UUID mUuidPersistent = UUID.fromString(NBTUtils.getString(aStack,"mUuidPersistent")); + UUID mUuidUnique = UUID.fromString(NBTUtils.getString(aStack,"mUuidUnique")); + int mEntityHashcode = NBTUtils.getInteger(aStack,"mEntityHashcode"); EntityLiving mEntityToSpawn = (EntityLiving) getStoredEntity(aWorld, aStack); Class<? extends Entity> mEntityClass = getStoredEntityClass(aStack); + Utils.LOG_INFO("spawnStoredEntity(1)"); + if (mEntityToSpawn != null && mEntityClass != null) { - if (mEntityToSpawn.getEntityData() != mEntityData){ + Utils.LOG_INFO("spawnStoredEntity(2)"); + if (mEntityToSpawn.getEntityData() != mEntityData) { + Utils.LOG_INFO("spawnStoredEntity(x)"); NBTUtils.setEntityCustomData(mEntityToSpawn, mEntityData); } - - mEntityToSpawn.setLocationAndAngles(aPos.xPos, aPos.yPos, aPos.zPos, aWorld.rand.nextFloat() * 360.0F, 0.0F); - if (mEntityToSpawn instanceof EntityLiving){ + 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); + Utils.LOG_INFO("spawnStoredEntity(3)"); } - if (mEntityToSpawn instanceof EntityLiving){ + if (mEntityToSpawn instanceof EntityLiving) { ((EntityLiving) mEntityToSpawn).playLivingSound(); + Utils.LOG_INFO("spawnStoredEntity(4)"); } - NBTUtils.createBooleanTagCompound(aStack, "mEntity", "mHasEntity", false); - - + Utils.LOG_INFO("spawnStoredEntity(5)"); + NBTUtils.setBoolean(aStack,"mHasEntity", false); + return true; } return false; @@ -151,7 +181,15 @@ public class ItemEntityCatcher extends Item implements IEntityCatcher { @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_); + if (hasEntity(p_77624_1_)){ + String mName = NBTUtils.getString(p_77624_1_,"mEntityName"); + if (mName != null && !mName.equals("") && mName != ""){ + p_77624_3_.add(EnumChatFormatting.GRAY+"Contains a "+mName+"."); + } + } + else { + p_77624_3_.add(EnumChatFormatting.GRAY+"Does not contain anything."); + } } @Override @@ -161,20 +199,43 @@ public class ItemEntityCatcher extends Item implements IEntityCatcher { @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)); + float xOffset, float yOffset, float zOffset) { + if (Utils.isServer()) { + Utils.LOG_INFO("Trying to release (1)"); + if (NBTUtils.hasKey(itemstack,"mHasEntity") + && NBTUtils.getBoolean(itemstack,"mHasEntity")) { + Utils.LOG_INFO("Trying to release (2)"); + return spawnStoredEntity(world, itemstack, new BlockPos(x, y+1, z)); + } } - else { - return super.onItemUse(itemstack, player, world, x, y, z, side, xOffset, yOffset, zOffset); - } + return super.onItemUse(itemstack, player, world, x, y, z, side, xOffset, yOffset, zOffset); + } @Override - public boolean itemInteractionForEntity(ItemStack aStack, EntityPlayer aPlayer, EntityLivingBase aEntity) { + public boolean itemInteractionForEntity(ItemStack aStack, EntityPlayer aPlayer, EntityLivingBase aEntity) { + if (Utils.isServer()) { + Utils.LOG_INFO("Trying to catch (1)"); + if (!hasEntity(aStack)) { + Utils.LOG_INFO("Trying to catch (2)"); + boolean mStored = setStoredEntity(aPlayer.worldObj, aStack, aEntity); + if (mStored) { + Utils.LOG_INFO("Trying to catch (3)"); + aEntity.setDead(); + PlayerUtils.messagePlayer(aPlayer, "You have captured a "+NBTUtils.getString(aStack,"mEntityName")+" in the Jar."); + //NBTUtils.tryIterateNBTData(aStack); + } + } + } return super.itemInteractionForEntity(aStack, aPlayer, aEntity); } - + @Override + public String getItemStackDisplayName(ItemStack aStack) { + if (hasEntity(aStack)){ + return "Captured Dragon Jar"; + } + return "Dragon Capture Jar"; + } } diff --git a/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java b/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java index 5f3e304941..6c15f3a189 100644 --- a/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java +++ b/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java @@ -207,29 +207,20 @@ public class NBTUtils { NBTTagCompound aNBT = NBTUtils.getNBT(aStack); if (aNBT != null) { if (!aNBT.hasNoTags()) { - // int tagCount = 0; Map<?, ?> mInternalMap = ReflectionUtils.getField(aNBT, "tagMap"); - if (mInternalMap != null) { - // mInternalMap.forEach((k, v) -> Utils.LOG_INFO("Key: " - // + k + ": Value: " + v)); for (Map.Entry<?, ?> e : mInternalMap.entrySet()) { - Utils.LOG_INFO("Key: " + e.getKey().toString() + " | Value: " + e.getValue().toString()); + Utils.LOG_INFO("Key: " + e.getKey().toString() + " | Value: " + e.getValue()); } + return true; } else { Utils.LOG_INFO("Data map reflected from NBTTagCompound was not valid."); return false; } - } else { - return false; - } - } else { - return false; - } - return true; - } catch (Throwable t) { - return false; - } + } + } + } catch (Throwable t) {} + return false; } // Botania soulbind handling |