Posted November 18, 20195 yr when I spawn an entity with custom constructor using an item it use the values of the default constructor, this is the entity class: public class EntityBey extends EntityCreature{ public ItemStack layer; public ItemStack disk; public ItemStack driver; public EntityBey(World worldIn) { this(worldIn, new ItemStack(BeyRegistry.ACHILLESA4), new ItemStack(BeyRegistry.ELEVENDISK), new ItemStack(BeyRegistry.XTENDDRIVER)); } public EntityBey(World worldIn, ItemStack layerIn, ItemStack diskIn, ItemStack driverIn) { super(worldIn); this.setSize(0.25F, 0.25F); this.height = 0.253F; layer = layerIn; disk = diskIn; driver = driverIn; } @Override public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData livingdata) { this.setEquipmentBasedOnDifficulty(difficulty); return super.onInitialSpawn(difficulty, livingdata); } @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(100); this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(1D); } @Override protected void initEntityAI() { this.tasks.addTask(0, new EntityAIWander(this, 1.0D)); // this.tasks.addTask(0, new EntityAIAttackMelee(this, 1, true)); super.initEntityAI(); } public float getEyeHeight() { return this.height-0.1F; } @Override public void onRemovedFromWorld() { BeyCraft.logger.info("Bey die"); super.onRemovedFromWorld(); } @Override protected boolean canDespawn() { return false; } @Override protected SoundEvent getDeathSound() { return SoundHandler.BEY_HIT; } @Override protected SoundEvent getHurtSound(DamageSource damageSourceIn) { return SoundHandler.BEY_HIT; } protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty) { this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.STONE_SWORD)); } @Override public void readEntityFromNBT(NBTTagCompound compound) { layer = new ItemStack(compound.getCompoundTag("Layer")); disk = new ItemStack(compound.getCompoundTag("Disk")); driver = new ItemStack(compound.getCompoundTag("Driver")); super.readEntityFromNBT(compound); } @Override public void writeEntityToNBT(NBTTagCompound compound) { compound.setTag("Layer", layer.writeToNBT(new NBTTagCompound())); compound.setTag("Disk", disk.writeToNBT(new NBTTagCompound())); compound.setTag("Driver", driver.writeToNBT(new NBTTagCompound())); super.writeEntityToNBT(compound); } } and this the item class: public class ItemLauncher extends Item{ public ItemLauncher(String name) { setCreativeTab(BeyCraft.beyCraftTab); setRegistryName(name); setUnlocalizedName(name); setMaxStackSize(1); BeyRegistry.ITEMS.add(this); } @Override public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) { if( stack.getItem() == this ) { return new BeyBladeProvider(); } return null; } @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) { if (!worldIn.isRemote) { if (playerIn.isSneaking()) { playerIn.openGui(BeyCraft.instance, 0, worldIn, 0, 0, 0); } else { EntityBey beyEntity = new EntityBey(worldIn, new ItemStack(BeyRegistry.ACHILLESA4), new ItemStack(BeyRegistry.BOOSTDISK), new ItemStack(BeyRegistry.VOLCANICDRIVER)); beyEntity.setLocationAndAngles(playerIn.posX, playerIn.posY, playerIn.posZ, 0, 0); worldIn.spawnEntity(beyEntity); } } return super.onItemRightClick(worldIn, playerIn, handIn); } }
November 18, 20195 yr Author 2 hours ago, diesieben07 said: The client-side entity will always use the default constructor. If you need additional data to be synced to the client you can use IEntityAdditionalSpawnData (sent only once on spawning) or EntityDataManager (kept in sync all the time). Fixed, thx u
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.