Everything posted by Issac29
-
[1.12.2] Entity hands not rendering via an inventory
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.
-
[1.12.2] Entity hands not rendering via an inventory
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); } });
-
[1.12.2] Entity hands not rendering via an inventory
Catch exceptions and prevent minecraft to crash in case of runtime exceptions. Ok I got that.
-
[1.12.2] Entity hands not rendering via an inventory
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] .
-
[1.12.2] Entity hands not rendering via an inventory
The problem is sometimes the entity is not spawned in the world yet and not the mention they might have the wrong items.
-
[1.12.2] Entity hands not rendering via an inventory
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);
-
[1.12.2] Entity hands not rendering via an inventory
I mean, how do I open a gui with right clicking an entity.
-
[1.12.2] Entity hands not rendering via an inventory
Lastly how do I make sure that the player can interact the entity inventory with only id, player, world, x, y, and z parameters.
-
[1.12.2] Entity hands not rendering via an inventory
Alright then how do I access the Itemstack handler or IItemhandler if the container requires an old inventory or a gui.
-
[1.12.2] Entity hands not rendering via an inventory
Oh, I get it. You have to implement the IItemHandler capacity. Where is the IItemHandler capability used in.
-
[1.12.2] Entity hands not rendering via an inventory
So the IItemhandler does sync to the client?
-
[1.12.2] Entity hands not rendering via an inventory
Then How do I make the container with just 6 inventory slots but they don't implement the IInventory interface.
-
[1.12.2] Entity hands not rendering via an inventory
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.
-
[1.12.2] Entity hands not rendering via an inventory
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.
-
[1.12.2] Entity hands not rendering via an inventory
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.
-
[1.12.2] Entity hands not rendering via an inventory
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.
-
[1.12.2] Entity hands not rendering via an inventory
Nevermind. I had to use the !world.isRemote for updating the hands.
-
[1.12.2] Entity hands not rendering via an inventory
I don't know which code to put on. Honestly I don't know how to synchronize entity's inventory to the client
-
[1.12.2] Entity hands not rendering via an inventory
Then what should I do when trying to synchronize the entity's inventory to the client?
-
[1.12.2] Entity hands not rendering via an inventory
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; } } }
-
[1.12.2] What does take to make an item have an nbt tag by default
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.
-
[1.12.2] What does take to make an item have an nbt tag by default
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.
-
[1.12.2] How do I make bedrock add stat to the player stat. [Solved]
Well this topic is solved so thank you.
-
[1.12.2] How do I make a entity when touching water stops.
here is the mod https://www.dropbox.com/h?preview=issactncore-1.0.0.jar
-
[1.12.2] How do I make a entity when touching water stops.
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.
IPS spam blocked by CleanTalk.