Jump to content

Issac29

Members
  • Posts

    75
  • Joined

  • Last visited

Everything posted by Issac29

  1. 1. what about runtime, null pointer, arraystore, array out of index, and index out of bounds. 2. @Draco18s I know that by since 2 hours ago from this post.
  2. Errors happen all the time. Also I removed ClassCastException because there is no reason. NetworkRegistry.INSTANCE.registerGuiHandler(Issac29Core.instance, new IGuiHandler() { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { EntityHuman human = (EntityHuman) world.getEntityByID(ID); return new ContainerHuman(player.inventory, human.inventory, human); } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { EntityHuman human = (EntityHuman) (world.getEntityByID(ID)); return new GuiHuman(player.inventory, human.inventory, human); } });
  3. Catch exceptions and prevent minecraft to crash in case of runtime exceptions. Ok I got that.
  4. NetworkRegistry.INSTANCE.registerGuiHandler(Issac29Core.instance, new IGuiHandler() { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { try { Entity entity = world.getEntityByID(EntityList.getID(EntityHuman.class)); return new ContainerHuman(player.inventory, ((EntityHuman)entity).inventory, (EntityHuman)entity); } catch (ClassCastException ccex) { ccex.printStackTrace(); return null; } } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { try { Entity entity = world.getEntityByID(EntityList.getID(EntityHuman.class)); return new GuiHuman(player.inventory, ((EntityHuman)entity).inventory, (EntityHuman)entity); } catch (ClassCastException ccex) { ccex.printStackTrace(); return null; } } }); Alright I found out that the Id was made was 38 that executed in the world.getEntityById(38) returns a wrong entity [12:19:39] [Client thread/INFO] [i29c]: 38 [12:19:39] [Client thread/INFO] [i29c]: null [12:19:39] [Server thread/INFO] [i29c]: 38 [12:19:39] [Server thread/INFO] [i29c]: EntityCreeper['Creeper'/38, l='[]', x=-314.49, y=46.00, z=-326.83] .
  5. The problem is sometimes the entity is not spawned in the world yet and not the mention they might have the wrong items.
  6. Yes, and no. Yes for already for override the process Interact method but no for the open GUI method. The method NetworkRegistry.INSTANCE.registerGuiHandler requires a gui server and gui client but they require parameters world, x, y, z. x, y, z are integers. How on earth do I access the entity gui with only these methods. Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z); Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z);
  7. I mean, how do I open a gui with right clicking an entity.
  8. Lastly how do I make sure that the player can interact the entity inventory with only id, player, world, x, y, and z parameters.
  9. Alright then how do I access the Itemstack handler or IItemhandler if the container requires an old inventory or a gui.
  10. Oh, I get it. You have to implement the IItemHandler capacity. Where is the IItemHandler capability used in.
  11. So the IItemhandler does sync to the client?
  12. Then How do I make the container with just 6 inventory slots but they don't implement the IInventory interface.
  13. That wasn't copyright. It was actual evidence. The only downfall with the 6 equipment slots is you can neither access them with a container nor a GUI. Also please don't delete evidence unless if is it not evidence.
  14. Sorry for misclarification, but I saw the code for the AbstactHorse and AbstractChestHorse which those two class that have an inventory are synced to the client. But as for the minecraft chest class is a totally different from the entity living class. I will post these two. [Not copyrighted code but that code was evidence] That is why I made the entity having 18 slots.
  15. package com.mreyeballs29.issactncore.entity; import com.mreyeballs29.issactncore.Issac29Core; import com.mreyeballs29.issactncore.inventory.InventoryHuman; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityAgeable; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.IEntityLivingData; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.EntityAILookIdle; import net.minecraft.entity.ai.EntityAISwimming; import net.minecraft.entity.ai.EntityAIWander; import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.monster.EntityZombie; import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.SoundEvents; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventoryChangedListener; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; import net.minecraft.util.datafix.DataFixer; import net.minecraft.util.datafix.FixTypes; import net.minecraft.util.datafix.walkers.ItemStackDataLists; import net.minecraft.util.math.BlockPos; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.World; import net.minecraft.world.storage.loot.LootTableList; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.InvWrapper; public class EntityHuman extends EntityAnimal implements IInventoryChangedListener { public InventoryHuman inventory; private static final ResourceLocation HUMAN_LOOT = LootTableList.register(new ResourceLocation("i29c", "entities/human")); //$NON-NLS-1$ //$NON-NLS-2$ public EntityHuman(World worldIn) { super(worldIn); initHuman(); setSize(0.7F, 1.8F); } public static Coords cords; /** * */ private void initHuman() { InventoryHuman inr = this.inventory; this.inventory = new InventoryHuman("Human"); //$NON-NLS-1$ this.inventory.setCustomName(this.getName()); if (inr != null) { this.inventory.removeInventoryChangeListener(this); for (int i = 0; i < inr.getSizeInventory(); i++) { ItemStack stack = inr.getStackInSlot(i); if (!stack.isEmpty()) { this.inventory.setInventorySlotContents(i, stack.copy()); } } } this.inventory.addInventoryChangeListener(this); this.updateItemHeld(); this.handler = new InvWrapper(this.inventory); } private void updateItemHeld() { if (!this.world.isRemote) { this.setHeldItemMainhand(this.inventory.getStackInSlot(0)); this.setHeldItemOffhand(this.inventory.getStackInSlot(1)); } } @Override protected void updateEquipmentIfNeeded(EntityItem itemEntity) { ItemStack stack = itemEntity.getItem(); if (!stack.isEmpty()) { ItemStack stack2 = this.inventory.addItem(stack); if (stack2.isEmpty()) { onItemPickup(itemEntity, stack.getCount()); itemEntity.setDead(); } else { stack.setCount(stack2.getCount()); } } this.updateItemHeld(); } @Override public void onInventoryChanged(IInventory invBasic) { updateItemHeld(); } @Override public boolean canPickUpLoot() { return true; } @Override public EntityAgeable createChild(EntityAgeable ageable) { return new EntityHuman(this.world); } @Override protected void initEntityAI() { this.tasks.addTask(0, new EntityAISwimming(this)); this.tasks.addTask(1, new EntityAIWander(this, 1D)); this.tasks.addTask(2, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); this.tasks.addTask(3, new EntityAILookIdle(this)); } protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(20.0D); this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.245D); } @Override public void readEntityFromNBT(NBTTagCompound compound) { super.readEntityFromNBT(compound); if (compound.hasKey("Items")) { //$NON-NLS-1$ NBTTagList nbtlist = compound.getTagList("Items", NBT.TAG_COMPOUND); //$NON-NLS-1$ for (int i = 0; i < nbtlist.tagCount(); i++) { NBTTagCompound comp = nbtlist.getCompoundTagAt(i); int slot = comp.getInteger("Slot"); //$NON-NLS-1$ if (slot >= 0 && slot < this.inventory.getSizeInventory()) { this.inventory.setInventorySlotContents(slot, new ItemStack(comp)); } } } this.updateItemHeld(); } @Override public void writeEntityToNBT(NBTTagCompound compound) { super.writeEntityToNBT(compound); NBTTagList nbtlist = new NBTTagList(); for (int i = 0; i < this.inventory.getSizeInventory(); i++) { ItemStack stack = this.inventory.getStackInSlot(i); if (!stack.isEmpty()) { NBTTagCompound tag = new NBTTagCompound(); tag.setInteger("Slot", i); //$NON-NLS-1$ stack.writeToNBT(tag); nbtlist.appendTag(tag); } } compound.setTag("Items", nbtlist); //$NON-NLS-1$ } @Override protected ResourceLocation getLootTable() { return HUMAN_LOOT; } @Override protected SoundEvent getDeathSound() { return SoundEvents.ENTITY_GENERIC_DEATH; } @Override public void onStruckByLightning(EntityLightningBolt lightningBolt) { EntityZombie zombie = new EntityZombie(this.world); this.world.spawnEntity(zombie); this.setDead(); } @Override protected SoundEvent getHurtSound(DamageSource damageSourceIn) { return SoundEvents.ENTITY_GENERIC_HURT; } public void setHeldItemMainhand(ItemStack stack) { this.setHeldItem(EnumHand.MAIN_HAND, stack); } public void setHeldItemOffhand(ItemStack stack) { this.setHeldItem(EnumHand.OFF_HAND, stack); } @Override public boolean processInteract(EntityPlayer player, EnumHand hand) { if (!super.processInteract(player, hand) && !this.holdingSpawnEggOfClass(player.getHeldItem(hand), this.getClass())) { ItemStack playerItems = player.getHeldItem(hand); if (player.isSneaking() && playerItems.interactWithEntity(player, this, hand)) { return true; } else { cords = new Coords(this.posX, this.posY, this.posZ); player.openGui(Issac29Core.instance, 290, this.world, 0, 0, 0); return true; } } return true; } @Override public boolean getCanSpawnHere() { IBlockState iblockstate = this.world.getBlockState((new BlockPos(this)).down()); return iblockstate.canEntitySpawn(this) && this.world.getLight(new BlockPos(this)) > 8; } @Override public float getEyeHeight() { return !isChild() ? 1.74f : 0.96f; } private IItemHandler handler; @Override public <T> T getCapability(Capability<T> capability, EnumFacing facing) { if (CapabilityItemHandler.ITEM_HANDLER_CAPABILITY == capability) return (T) this.handler; return super.getCapability(capability, facing); } @Override public boolean hasCapability(Capability<?> capability, EnumFacing facing) { return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); } @Override protected void dropEquipment(boolean wasRecentlyHit, int lootingModifier) { for (int i = 0; i < this.inventory.getSizeInventory(); i++) { entityDropItem(this.inventory.getStackInSlot(i), 0f); } } public static void registerFixesHuman(DataFixer dataFixer, Class<?> entityClass) { EntityLiving.registerFixesMob(dataFixer, entityClass); dataFixer.registerWalker(FixTypes.ENTITY, new ItemStackDataLists(entityClass, "Items")); //$NON-NLS-1$ } @Override public boolean replaceItemInInventory(int inventorySlot, ItemStack itemStackIn) { if (inventorySlot < 0 || inventorySlot > 18) return false; this.inventory.setInventorySlotContents(inventorySlot, itemStackIn); this.updateItemHeld(); return true; } @Override public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData livingdata) { if (this.world.rand.nextInt(100) < 25) { this.setGrowingAge(-24000);} return super.onInitialSpawn(difficulty, livingdata); } public static class Coords { public double x; public double y; public double z; public Coords(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } } } The code has changed. so therefore I extended the living entity to 18 slots, without 4 extra armor slots. Why bother using EntityEquipmentSlot when 18 slots is enough. Do I have to reduce to 2 inventory slots? I saw the code for the AbstactHorse and AbstractChestHorse which those two are synced to the client, and their slots are separate.
  16. That, It works just fine without your suggestion. I just found out that if a inventory of a # of slots. the first slot would be a main hand, and the second would be the off hand. I cannot access the hands inventory if I use your suggestion. Plus the inventory is only 2 slots.
  17. Nevermind. I had to use the !world.isRemote for updating the hands.
  18. I don't know which code to put on. Honestly I don't know how to synchronize entity's inventory to the client
  19. Then what should I do when trying to synchronize the entity's inventory to the client?
  20. I got the human like entity to work but the item holding is not visible until the player interacts the entity. Is there a way that the entity renders the item before the player interact? If not then is there a sample code for it? I made the code so similar to the horse inventory but with only 18 slots. package com.mreyeballs29.issactncore.entity; import com.mreyeballs29.issactncore.Issac29Core; import com.mreyeballs29.issactncore.inventory.InventoryHuman; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityAgeable; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.EntityAILookIdle; import net.minecraft.entity.ai.EntityAISwimming; import net.minecraft.entity.ai.EntityAIWander; import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; import net.minecraft.util.datafix.DataFixer; import net.minecraft.util.datafix.FixTypes; import net.minecraft.util.datafix.walkers.ItemStackDataLists; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.storage.loot.LootTableList; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.InvWrapper; public class EntityHuman extends EntityAnimal { public InventoryHuman inventory; private NonNullList<ItemStack> list = NonNullList.withSize(2, ItemStack.EMPTY); private static final ResourceLocation HUMAN_LOOT = LootTableList.register(new ResourceLocation("i29c", "entities/human")); //$NON-NLS-1$ //$NON-NLS-2$ public EntityHuman(World worldIn) { super(worldIn); initHuman(); setSize(0.7F, 1.8F); } public static Coords cords; /** * */ private void initHuman() { InventoryHuman inr = this.inventory; this.inventory = new InventoryHuman("Human"); //$NON-NLS-1$ this.inventory.setCustomName(this.getName()); if (inr != null) { for (int i = 0; i < inr.getSizeInventory(); i++) { ItemStack stack = inr.getStackInSlot(i); if (!stack.isEmpty()) { this.inventory.setInventorySlotContents(i, stack.copy()); } } } this.inventory.setInventorySlotContents(0, this.list.get(0)); this.inventory.setInventorySlotContents(1, this.list.get(1)); this.handler = new InvWrapper(this.inventory); } @Override protected void updateEquipmentIfNeeded(EntityItem itemEntity) { ItemStack stack = itemEntity.getItem(); if (!stack.isEmpty()) { ItemStack stack2 = this.inventory.addItem(stack); if (stack2.isEmpty()) { itemEntity.setDead(); } else { stack.setCount(stack2.getCount()); } } } @Override public ItemStack getHeldItem(EnumHand hand) { if (hand == EnumHand.MAIN_HAND) return this.inventory.getStackInSlot(0); if (hand == EnumHand.OFF_HAND) return this.inventory.getStackInSlot(1); return ItemStack.EMPTY; } @Override public ItemStack getHeldItemMainhand() { return getHeldItem(EnumHand.MAIN_HAND); } @Override public ItemStack getHeldItemOffhand() { return getHeldItem(EnumHand.OFF_HAND); } @Override public boolean canPickUpLoot() { return true; } @Override public EntityAgeable createChild(EntityAgeable ageable) { return new EntityHuman(this.world); } @Override protected void initEntityAI() { this.tasks.addTask(0, new EntityAISwimming(this)); this.tasks.addTask(1, new EntityAIWander(this, 1.25D)); this.tasks.addTask(2, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); this.tasks.addTask(3, new EntityAILookIdle(this)); } protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(20.0D); this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.23D); } @Override public void readEntityFromNBT(NBTTagCompound compound) { super.readEntityFromNBT(compound); if (compound.hasKey("Items")) { //$NON-NLS-1$ NBTTagList nbtlist = compound.getTagList("Items", NBT.TAG_COMPOUND); //$NON-NLS-1$ for (int i = 0; i < nbtlist.tagCount(); i++) { NBTTagCompound comp = nbtlist.getCompoundTagAt(i); int slot = comp.getInteger("Slot"); //$NON-NLS-1$ if (slot >= 0 && slot < this.inventory.getSizeInventory()) { this.inventory.setInventorySlotContents(slot, new ItemStack(comp)); } } this.list.set(0, this.inventory.getStackInSlot(0)); this.list.set(1, this.inventory.getStackInSlot(1)); initHuman(); } } @Override public void writeEntityToNBT(NBTTagCompound compound) { super.writeEntityToNBT(compound); NBTTagList nbtlist = new NBTTagList(); for (int i = 0; i < this.inventory.getSizeInventory(); i++) { ItemStack stack = this.inventory.getStackInSlot(i); if (!stack.isEmpty()) { NBTTagCompound tag = new NBTTagCompound(); tag.setInteger("Slot", i); //$NON-NLS-1$ stack.writeToNBT(tag); nbtlist.appendTag(tag); } } compound.setTag("Items", nbtlist); //$NON-NLS-1$ } @Override protected ResourceLocation getLootTable() { return HUMAN_LOOT; } @Override protected SoundEvent getDeathSound() { return SoundEvents.ENTITY_GENERIC_DEATH; } @Override protected SoundEvent getHurtSound(DamageSource damageSourceIn) { return SoundEvents.ENTITY_GENERIC_HURT; } @Override public void setHeldItem(EnumHand hand, ItemStack stack) { if (hand == EnumHand.MAIN_HAND) this.inventory.setInventorySlotContents(0, stack); if (hand == EnumHand.OFF_HAND) this.inventory.setInventorySlotContents(1, stack); } public void setHeldItemMainhand(ItemStack stack) { this.setHeldItem(EnumHand.MAIN_HAND, stack); } public void setHeldOffhand(ItemStack stack) { this.setHeldItem(EnumHand.OFF_HAND, stack); } @Override public void onUpdate() { super.onUpdate(); } @Override public boolean processInteract(EntityPlayer player, EnumHand hand) { if (!super.processInteract(player, hand)) { ItemStack playerItems = player.getHeldItem(hand); if (player.isSneaking() && playerItems.interactWithEntity(player, this, hand) ) { return true; } else if (!this.world.isRemote) { try { cords = new Coords(this.posX, this.posY, this.posZ); player.openGui(Issac29Core.instance, 290, this.world, 0, 0, 0); return true; } catch (RuntimeException nuex) { nuex.printStackTrace(); return false; } } return false; } return true; } @Override public boolean getCanSpawnHere() { IBlockState iblockstate = this.world.getBlockState((new BlockPos(this)).down()); return iblockstate.canEntitySpawn(this) && this.world.getLight(new BlockPos(this)) > 8; } @Override public float getEyeHeight() { return !isChild() ? 1.74f : 0.96f; } private IItemHandler handler; @Override public <T> T getCapability(Capability<T> capability, EnumFacing facing) { if (CapabilityItemHandler.ITEM_HANDLER_CAPABILITY == capability) return (T) this.handler; return super.getCapability(capability, facing); } @Override public boolean hasCapability(Capability<?> capability, EnumFacing facing) { return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); } @Override protected void dropEquipment(boolean wasRecentlyHit, int lootingModifier) { for (int i = 0; i < this.inventory.getSizeInventory(); i++) { entityDropItem(this.inventory.getStackInSlot(i), 0f); } } public static void registerFixesHuman(DataFixer dataFixer, Class<?> entityClass) { EntityLiving.registerFixesMob(dataFixer, entityClass); dataFixer.registerWalker(FixTypes.ENTITY, new ItemStackDataLists(entityClass, "Items")); //$NON-NLS-1$ } @Override public boolean replaceItemInInventory(int inventorySlot, ItemStack itemStackIn) { if (inventorySlot < 0 || inventorySlot > 18) return false; this.inventory.setInventorySlotContents(inventorySlot, itemStackIn); return true; } public static class Coords { public double x; public double y; public double z; public Coords(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } } }
  21. I tried doing that but it still gave me the default non-nbt item. @Override public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) { NBTTagCompound nbt = new NBTTagCompound(); nbt.setInteger("HideFlags", 2); if (this.isInCreativeTab(tab)) { items.add(new ItemStack(this, 1, 0, nbt)); } } Here is the code.
  22. Hello, and looks like I made the attack speed lower and damage higher. How do I add an nbt tag into an item by default.
  23. Well this topic is solved so thank you.
  24. here is the mod https://www.dropbox.com/h?preview=issactncore-1.0.0.jar
  25. Well it's only capable to run on eclipse not IntelliJ. There might be a bug with it. Oh never-mind. In case of certain issues press Shift-F5 to reload cache. Ohhhhhhhh. Now I get it. Thanks.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.