-
Posts
292 -
Joined
-
Last visited
Everything posted by _Cruelar_
-
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
So what is false? TileEntity: package com.cruelar.cruelars_triforcemod.tileentity; import com.cruelar.cruelars_triforcemod.blocks.Hidden_Block; import com.cruelar.cruelars_triforcemod.init.ModItems; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumHand; import net.minecraft.util.ITickable; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nullable; public class Hidden_Block_TileEntity extends TileEntity implements ITickable { @Override public void update() { EntityPlayer entityPlayer = (EntityPlayer) getPlayer(); if (entityPlayer!=null){ boolean visible = isVisible(); boolean shouldBeVisible = entityPlayer.getHeldItem(EnumHand.MAIN_HAND).getItem() == ModItems.lens_of_truth || entityPlayer.getHeldItem(EnumHand.OFF_HAND).getItem() == ModItems.lens_of_truth; if (visible!=shouldBeVisible){ world.setBlockState(pos, world.getBlockState(pos).withProperty(Hidden_Block.VISIBLE, shouldBeVisible)); } } System.out.println(entityPlayer); } public Hidden_Block_TileEntity(){ } @SideOnly(Side.SERVER) public EntityPlayer getPlayer(){ return this.getWorld().getClosestPlayer(this.pos.getX(),this.pos.getY(),this.pos.getZ(),-1.0,false); } @SideOnly(Side.CLIENT) public boolean isVisible(){ return this.getWorld().getBlockState(this.getPos()).getValue(Hidden_Block.VISIBLE); } @Override public boolean shouldRefresh(World p_shouldRefresh_1_, BlockPos p_shouldRefresh_2_, IBlockState firstBlockState, IBlockState secondBlockState) { return firstBlockState.getBlock() != secondBlockState.getBlock(); } } -
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
What happens when I pass false Thanks this I didn't know also doesn't work in survival only searching the Player on Serverside or update()? -
[1.12.2] Problem with my proxies [Totally solved]
_Cruelar_ replied to Legenes's topic in Modder Support
Ok thanks, understood -
[1.12.2] Problem with my proxies [Totally solved]
_Cruelar_ replied to Legenes's topic in Modder Support
What's exactly the Problem with having a CommonProxy, I've found nothing so far -
Well, my entities, like in this case my so-called Bokoblin (Based on the red Bokoblin in The Legend of Zelda: Breath of the Wild), don't drop anything. and I DON'T KNOW WHY. So here is the code. My Entity: package com.cruelar.cruelars_triforcemod.entities.monster; import com.cruelar.cruelars_triforcemod.entities.ai.ModAINearestAttackableTarget; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.*; import net.minecraft.entity.monster.EntityIronGolem; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.monster.EntityPigZombie; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; import javax.annotation.Nullable; public class Bokoblin extends EntityMob { public static final ResourceLocation LOOT = new ResourceLocation("cruelars_triforcemod:loot_tables/entities/bokoblin.json"); public static final ResourceLocation RESOURCE_LOCATION = new ResourceLocation("cruelars_triforcemod:textures/entity/bokoblin.png"); private int angerLevel; private int randomSoundDelay; public Bokoblin(World world){ super(world); setSize(0.6F,1.8F ); this.canDropLoot(); } @Override protected void entityInit(){ super.entityInit(); } protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty) { super.setEquipmentBasedOnDifficulty(difficulty); if (this.rand.nextFloat() < (this.world.getDifficulty() == EnumDifficulty.HARD ? 1F : 0.75F)) { int i = this.rand.nextInt(3); if (i == 0) { this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.WOODEN_SWORD)); } else if (i == 1){ this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.WOODEN_SWORD)); this.setItemStackToSlot(EntityEquipmentSlot.OFFHAND,new ItemStack(Items.SHIELD)); } else if (i == 2){ this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND,new ItemStack(Items.BOW)); ItemStack itemStack = new ItemStack(Items.ARROW); itemStack.setCount(20); this.setItemStackToSlot(EntityEquipmentSlot.OFFHAND,itemStack); } } } @Override protected void applyEntityAttributes(){ super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(13.0D); this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D); this.getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(0.0D); this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(16.0D); this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(2.0D); } @Override protected void initEntityAI(){ this.tasks.addTask(0,new EntityAISwimming(this)); this.tasks.addTask(2,new EntityAIAttackMelee(this,1.0D,true)); this.tasks.addTask(5,new EntityAIMoveTowardsRestriction(this,1.0D)); this.tasks.addTask(7,new EntityAIWander(this,1.0D)); this.tasks.addTask(8,new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); this.tasks.addTask(8,new EntityAILookIdle(this)); this.applyEntityAI(); } protected void applyEntityAI() { this.tasks.addTask(6, new EntityAIMoveThroughVillage(this, 1.0D, false)); this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, EntityPigZombie.class)); this.targetTasks.addTask(2, new ModAINearestAttackableTarget<>(this, EntityPlayer.class, true)); this.targetTasks.addTask(3, new ModAINearestAttackableTarget<>(this, EntityVillager.class, true)); this.targetTasks.addTask(3, new ModAINearestAttackableTarget<>(this, EntityIronGolem.class, true)); this.targetTasks.addTask(1, new Bokoblin.AIHurtByAggressor(this)); this.targetTasks.addTask(2, new Bokoblin.AITargetAggressor(this)); } @Override public boolean attackEntityAsMob(Entity entity){ return super.attackEntityAsMob(entity); } @Override protected boolean isValidLightLevel(){ return true; } public boolean isAngry() { return this.angerLevel > 0; } @Override protected boolean canDropLoot () { return true; } @Override public boolean canPickUpLoot(){ return true; } @Nullable @Override protected ResourceLocation getLootTable() { return LOOT; } @Override public int getMaxSpawnedInChunk(){ return 5; } static class AITargetAggressor extends EntityAINearestAttackableTarget<EntityPlayer> { public AITargetAggressor(Bokoblin bokoblin) { super(bokoblin, EntityPlayer.class, true); } public boolean shouldExecute() { return ((Bokoblin)this.taskOwner).isAngry() && super.shouldExecute(); } } static class AIHurtByAggressor extends EntityAIHurtByTarget { public AIHurtByAggressor(Bokoblin bokoblin) { super(bokoblin, true, new Class[0]); } protected void setEntityAttackTarget(EntityCreature entityCreature, EntityLivingBase entityLivingBase) { super.setEntityAttackTarget(entityCreature, entityLivingBase); if (entityCreature instanceof Bokoblin) { ((Bokoblin)entityCreature).becomeAngryAt(entityLivingBase); } } } private void becomeAngryAt(Entity p_becomeAngryAt_1_) { this.angerLevel = 400 + this.rand.nextInt(400); this.randomSoundDelay = this.rand.nextInt(40); if (p_becomeAngryAt_1_ instanceof EntityLivingBase) { this.setRevengeTarget((EntityLivingBase)p_becomeAngryAt_1_); } } } The Renderer class: package com.cruelar.cruelars_triforcemod.renderer; import com.cruelar.cruelars_triforcemod.entities.monster.Bokoblin; import net.minecraft.client.model.ModelZombie; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderLiving; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; import net.minecraft.client.renderer.entity.layers.LayerHeldItem; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.client.registry.IRenderFactory; import javax.annotation.Nonnull; public class RenderBokoblin extends RenderLiving<Bokoblin> { private ResourceLocation mobTexture = new ResourceLocation("cruelars_triforcemod:textures/entity/bokoblin.png"); public static final Factory FACTORY = new Factory(); public RenderBokoblin(RenderManager renderManager){ super(renderManager, new ModelZombie(),0.5F); this.addLayer(new LayerHeldItem(this)); LayerBipedArmor lvt_2_1_ = new LayerBipedArmor(this) { protected void initArmor() { this.modelLeggings = new ModelZombie(0.5F, true); this.modelArmor = new ModelZombie(1.0F, true); } }; } @Override @Nonnull protected ResourceLocation getEntityTexture(@Nonnull Bokoblin bokoblin){ return mobTexture; } public static class Factory implements IRenderFactory<Bokoblin>{ @Override public Render<? super Bokoblin> createRenderFor(RenderManager manager){ return new RenderBokoblin(manager); } } } The ModEntities class: package com.cruelar.cruelars_triforcemod.init; import com.cruelar.cruelars_triforcemod.Cruelars_Triforcemod_Core; import com.cruelar.cruelars_triforcemod.entities.EntityBombPrimed; import com.cruelar.cruelars_triforcemod.entities.boss.*; import com.cruelar.cruelars_triforcemod.entities.monster.*; import com.cruelar.cruelars_triforcemod.entities.passive.Fairy; import com.cruelar.cruelars_triforcemod.entities.projectiles.*; import com.cruelar.cruelars_triforcemod.renderer.*; import net.minecraft.entity.EnumCreatureType; import net.minecraft.init.Biomes; import net.minecraft.world.storage.loot.LootTableList; import net.minecraftforge.fml.client.registry.RenderingRegistry; import net.minecraftforge.fml.common.registry.EntityRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class ModEntities { public static void init(){ int id = 1; EntityRegistry.registerModEntity(Bokoblin.RESOURCE_LOCATION,Bokoblin.class, "cruelars_triforcemod:bokoblin", id++, Cruelars_Triforcemod_Core.instance, 64, 3, true, 0xee461c, 0x95260b); EntityRegistry.addSpawn(Bokoblin.class,100, 3, 5, EnumCreatureType.MONSTER,Biomes.BEACH,Biomes.PLAINS,Biomes.FOREST,Biomes.FOREST_HILLS,Biomes.BIRCH_FOREST,Biomes.BIRCH_FOREST_HILLS,Biomes.JUNGLE,Biomes.JUNGLE_EDGE,Biomes.JUNGLE_HILLS,Biomes.RIVER,Biomes.ROOFED_FOREST,Biomes.SAVANNA,Biomes.SAVANNA_PLATEAU); LootTableList.register(Bokoblin.LOOT); EntityRegistry.registerModEntity(Blue_Bokoblin.RESOURCE_LOCATION,Blue_Bokoblin.class, "cruelars_triforcemod:blue_bokoblin", id++, Cruelars_Triforcemod_Core.instance, 64, 3, true, 0x457c92, 0x2c4f5c); EntityRegistry.addSpawn(Blue_Bokoblin.class,50, 0, 3, EnumCreatureType.MONSTER,Biomes.BEACH,Biomes.PLAINS,Biomes.FOREST,Biomes.FOREST_HILLS,Biomes.BIRCH_FOREST,Biomes.BIRCH_FOREST_HILLS,Biomes.JUNGLE,Biomes.JUNGLE_EDGE,Biomes.JUNGLE_HILLS,Biomes.RIVER,Biomes.ROOFED_FOREST,Biomes.SAVANNA,Biomes.SAVANNA_PLATEAU,Biomes.COLD_BEACH,Biomes.COLD_TAIGA,Biomes.COLD_TAIGA_HILLS,Biomes.DESERT,Biomes.DESERT_HILLS,Biomes.FROZEN_OCEAN,Biomes.FROZEN_RIVER,Biomes.ICE_MOUNTAINS,Biomes.ICE_PLAINS,Biomes.REDWOOD_TAIGA,Biomes.REDWOOD_TAIGA_HILLS); LootTableList.register(Blue_Bokoblin.LOOT); EntityRegistry.registerModEntity(Black_Bokoblin.RESOURCE_LOCATION,Black_Bokoblin.class, "cruelars_triforcemod:black_bokoblin", id++, Cruelars_Triforcemod_Core.instance, 64, 3, true, 0x483224, 0x322318); EntityRegistry.addSpawn(Black_Bokoblin.class,25, 0, 2, EnumCreatureType.MONSTER,Biomes.COLD_BEACH,Biomes.COLD_TAIGA,Biomes.COLD_TAIGA_HILLS,Biomes.DESERT,Biomes.DESERT_HILLS,Biomes.FROZEN_OCEAN,Biomes.FROZEN_RIVER,Biomes.ICE_MOUNTAINS,Biomes.ICE_PLAINS,Biomes.REDWOOD_TAIGA,Biomes.REDWOOD_TAIGA_HILLS); LootTableList.register(Black_Bokoblin.LOOT); EntityRegistry.registerModEntity(Ganondorf.RESOURCE_LOCATION,Ganondorf.class, "cruelars_triforcemod:ganondorf", id++, Cruelars_Triforcemod_Core.instance, 64, 3, true, 0x272727, 0xd8bb49); EntityRegistry.registerModEntity(EntityIceArrow.RESOURCE_LOCATION,EntityIceArrow.class,"cruelars_triforcemod:ice_arrow",id++,Cruelars_Triforcemod_Core.instance,64,3,true); EntityRegistry.registerModEntity(EntityBombArrow.RESOURCE_LOCATION,EntityBombArrow.class,"cruelars_triforcemod:bomb_arrow",id++,Cruelars_Triforcemod_Core.instance,64,3,true); EntityRegistry.registerModEntity(EntityShockArrow.RESOURCE_LOCATION,EntityShockArrow.class,"cruelars_triforcemod:shock_arrow",id++,Cruelars_Triforcemod_Core.instance,64,3,true); EntityRegistry.registerModEntity(EntityFireArrow.RESOURCE_LOCATION,EntityFireArrow.class,"cruelars_triforcemod:fire_arrow",id++,Cruelars_Triforcemod_Core.instance,64,3,true); EntityRegistry.registerModEntity(Stone_Talus.RESOURCE_LOCATION,Stone_Talus.class,"cruelars_triforcemod:stone_talus",id++,Cruelars_Triforcemod_Core.instance,64,3,true,0x996600,0x00ff01); EntityRegistry.addSpawn(Stone_Talus.class,10,0,1,EnumCreatureType.MONSTER,Biomes.STONE_BEACH,Biomes.EXTREME_HILLS,Biomes.EXTREME_HILLS_EDGE,Biomes.EXTREME_HILLS_WITH_TREES,Biomes.MUTATED_EXTREME_HILLS,Biomes.MUTATED_EXTREME_HILLS_WITH_TREES); EntityRegistry.registerModEntity(MajorasMask.RESOURCE_LOCATION,MajorasMask.class, "cruelars_triforcemod:majorasmask", id++, Cruelars_Triforcemod_Core.instance, 64, 3, true, 0x996600, 0x00ff00); EntityRegistry.registerModEntity(EntityBombPrimed.RESOURCE_LOCATION,EntityBombPrimed.class,"cruelars_triforcemod:entitybombprimed",id++, Cruelars_Triforcemod_Core.instance,64,3,true); EntityRegistry.registerModEntity(EntityBomb.RESOURCE_LOCATION,EntityBomb.class,"cruelars_triforcemod:entitybomb",id++, Cruelars_Triforcemod_Core.instance,64,3,true); EntityRegistry.registerModEntity(Clawshot_Head.RESOURCE_LOCATION,Clawshot_Head.class,"cruelars_triforcemod:clawshot_head",id++,Cruelars_Triforcemod_Core.instance,64,3,true); EntityRegistry.registerModEntity(Fairy.RESOURCE_LOCATION,Fairy.class,"cruelars_triforcemod:fairy",id++,Cruelars_Triforcemod_Core.instance,32,4,true,0xffaec9,0xe2f5fa); } @SideOnly(Side.CLIENT) public static void initModels(){ RenderingRegistry.registerEntityRenderingHandler(Bokoblin.class, RenderBokoblin.FACTORY); RenderingRegistry.registerEntityRenderingHandler(Ganondorf.class, RenderGanondorf.FACTORY); RenderingRegistry.registerEntityRenderingHandler(Blue_Bokoblin.class, RenderBlue_Bokoblin.FACTORY); RenderingRegistry.registerEntityRenderingHandler(Black_Bokoblin.class, RenderBlack_Bokoblin.FACTORY); RenderingRegistry.registerEntityRenderingHandler(EntityIceArrow.class,RenderIceArrow.FACTORY); RenderingRegistry.registerEntityRenderingHandler(EntityBombArrow.class, RenderBombArrow.FACTORY); RenderingRegistry.registerEntityRenderingHandler(EntityShockArrow.class,RenderShockArrow.FACTORY); RenderingRegistry.registerEntityRenderingHandler(EntityFireArrow.class, RenderFireArrow.FACTORY); RenderingRegistry.registerEntityRenderingHandler(Stone_Talus.class,RenderStoneTalus.FACTORY); RenderingRegistry.registerEntityRenderingHandler(MajorasMask.class,RenderMajorasMask.FACTORY); RenderingRegistry.registerEntityRenderingHandler(EntityBombPrimed.class,RenderBombPrimed.FACTORY); RenderingRegistry.registerEntityRenderingHandler(EntityBomb.class,RenderBomb.FACTORY); RenderingRegistry.registerEntityRenderingHandler(Clawshot_Head.class,RenderClawshot.FACTORY); RenderingRegistry.registerEntityRenderingHandler(Fairy.class,RenderFairy.FACTORY); } } The loot_table.json(called bokoblin.json): { "pools": [ { "rolls": 4, "entries": [ { "type":"item", "name": "cruelars_triforcemod:bokoblin_heart", "weight": 1, "functions": [ { "function": "set_count", "count": { "min": 0, "max": 1 } } ] }, { "type": "item", "name": "cruelars_triforcemod:bokoblin_fang", "weight": 2 },{ "type": "item", "name": "cruelars_triforcemod:bokoblin_horn", "weight": 1, "functions": [ { "function": "set_count", "count": { "min": 0, "max": 1 } } ] },{ "type": "item", "name": "cruears_triforcemod:green_ruby", "weight": 3 } ] } ] } So, could someone help me and say what I've done wrong.
-
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
When I test with System.out.println(entityPlayer) it prints null so the problem is this.getWorld().getClosestPlayer(this.pos.getX(), this.pos.getY(), this.pos.getZ(), -1.0, true); doesn't find me. -
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
Like this? @Override public void update() { EntityPlayer entityPlayer = (EntityPlayer) this.getWorld().getClosestPlayer(this.pos.getX(), this.pos.getY(), this.pos.getZ(), -1.0, true); if (entityPlayer!=null){ boolean visible = isVisible(); boolean shouldBeVisible = entityPlayer.getHeldItem(EnumHand.MAIN_HAND).getItem() == ModItems.lens_of_truth || entityPlayer.getHeldItem(EnumHand.OFF_HAND).getItem() == ModItems.lens_of_truth; if (visible!=shouldBeVisible){ world.setBlockState(pos, world.getBlockState(pos).withProperty(Hidden_Block.VISIBLE, shouldBeVisible)); } } } -
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
the textures still don't change. -
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
There was a NullPointerException at if (!this.isVisible()&&!(entityPlayer.getHeldItem(EnumHand.MAIN_HAND).getItem() == ModItems.lens_of_truth || entityPlayer.getHeldItem(EnumHand.OFF_HAND).getItem() == ModItems.lens_of_truth)) the entityPlayer might be null. -
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
Thanks for saying me that I've missed something quite clear @Override public void update() { EntityPlayer entityPlayer = (EntityPlayer) this.getWorld().getClosestPlayer(this.pos.getX(), this.pos.getY(), this.pos.getZ(), -1.0, true); if (entityPlayer!=null){ if ((entityPlayer.getHeldItem(EnumHand.MAIN_HAND).getItem() == ModItems.lens_of_truth || entityPlayer.getHeldItem(EnumHand.OFF_HAND).getItem() == ModItems.lens_of_truth) && this.isVisible()) { this.getWorld().getBlockState(this.getPos()).cycleProperty(Hidden_Block.VISIBLE); } } if (!this.isVisible()&&!(entityPlayer.getHeldItem(EnumHand.MAIN_HAND).getItem() == ModItems.lens_of_truth || entityPlayer.getHeldItem(EnumHand.OFF_HAND).getItem() == ModItems.lens_of_truth)) { this.getWorld().getBlockState(this.pos).cycleProperty(Hidden_Block.VISIBLE); entityPlayer = (EntityPlayer) this.getWorld().getClosestPlayer(this.pos.getX(), this.pos.getY(), this.pos.getZ(), -1.0, true); } entityPlayer = (EntityPlayer) this.getWorld().getClosestPlayer(this.pos.getX(), this.pos.getY(), this.pos.getZ(), -1.0, true); } !this.isVisible()&&!(entityPlayer.getHeldItem(EnumHand.MAIN_HAND).getItem() == ModItems.lens_of_truth || entityPlayer.getHeldItem(EnumHand.OFF_HAND).getItem() == ModItems.lens_of_truth This should fix that, doesn't it? -
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
So I get no error, the blocks have the right texture when placed but the textures still doesn't change when I held the lens of truth(look in the code it's the Item triggering the change. In theory at least) -
[1.12.2] Problem with my proxies [Totally solved]
_Cruelar_ replied to Legenes's topic in Modder Support
In my mod the ClientProxy extends the CommonProxy -
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
Is this better? @Override public boolean shouldRefresh(World p_shouldRefresh_1_, BlockPos p_shouldRefresh_2_, IBlockState firstBlockState, IBlockState secondBlockState) { return firstBlockState.getBlock() != secondBlockState.getBlock(); } -
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
Forgotten to remove Thanks for this I'm getting pissed off by the problem so i didn't care about same as 1. -
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
So like this? The TileEntity: package com.cruelar.cruelars_triforcemod.tileentity; import com.cruelar.cruelars_triforcemod.blocks.Hidden_Block; import com.cruelar.cruelars_triforcemod.init.ModItems; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumHand; import net.minecraft.util.ITickable; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class Hidden_Block_TileEntity extends TileEntity implements ITickable { private EntityPlayer entityPlayer; @Override public void update() { entityPlayer = (EntityPlayer) this.getWorld().getClosestPlayer(this.pos.getX(), this.pos.getY(), this.pos.getZ(), -1.0, true); if (entityPlayer!=null){ if ((entityPlayer.getHeldItem(EnumHand.MAIN_HAND).getItem() == ModItems.lens_of_truth || entityPlayer.getHeldItem(EnumHand.OFF_HAND).getItem() == ModItems.lens_of_truth) && this.isVisible()) { this.getWorld().getBlockState(this.getPos()).cycleProperty(Hidden_Block.VISIBLE); } } if (!this.isVisible()) { this.getWorld().getBlockState(this.pos).cycleProperty(Hidden_Block.VISIBLE); entityPlayer = (EntityPlayer) this.getWorld().getClosestPlayer(this.pos.getX(), this.pos.getY(), this.pos.getZ(), -1.0, true); } entityPlayer = (EntityPlayer) this.getWorld().getClosestPlayer(this.pos.getX(), this.pos.getY(), this.pos.getZ(), -1.0, true); } public Hidden_Block_TileEntity(){ } @SideOnly(Side.CLIENT) public boolean isVisible(){ return this.getWorld().getBlockState(this.getPos()).getValue(Hidden_Block.VISIBLE); } @Override public boolean shouldRefresh(World p_shouldRefresh_1_, BlockPos p_shouldRefresh_2_, IBlockState p_shouldRefresh_3_, IBlockState p_shouldRefresh_4_) { return true; } } The Block: import com.cruelar.cruelars_triforcemod.Cruelars_Triforcemod_Core; import com.cruelar.cruelars_triforcemod.init.ModBlocks; import com.cruelar.cruelars_triforcemod.init.ModItems; import com.cruelar.cruelars_triforcemod.tileentity.Hidden_Block_TileEntity; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.EnumPushReaction; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import static com.cruelar.cruelars_triforcemod.inventory.cruelars_triforcemod.CRUELARS_TRIFORCEMOD; public class Hidden_Block extends Block { public static final PropertyBool VISIBLE = PropertyBool.create("visible"); private static boolean keepInventory; public Hidden_Block(){ super(Material.ROCK); this.setDefaultState(this.blockState.getBaseState().withProperty(VISIBLE,true)); this.setRegistryName("hidden_block"); this.setUnlocalizedName(Cruelars_Triforcemod_Core.MODID+".hidden_block"); this.setCreativeTab(CRUELARS_TRIFORCEMOD); } @MethodsReturnNonnullByDefault @Override protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, new IProperty[]{VISIBLE}); } @Override @SuppressWarnings("deprecation") public IBlockState getStateFromMeta(int meta) { return getDefaultState() .withProperty(VISIBLE, meta!=0); } @SuppressWarnings("deprecation") @Override public IBlockState getActualState(IBlockState iBlockState,IBlockAccess iBlockAccess, BlockPos blockPos) { return iBlockState; } @Override public int getMetaFromState(IBlockState blockState) { int i = 0; if ((boolean)blockState.getValue(VISIBLE)){ i |= 2; } return i; } @Override public TileEntity createTileEntity(World world, IBlockState iBlockState){ return new Hidden_Block_TileEntity(); } @Override public boolean hasTileEntity(IBlockState p_hasTileEntity_1_) { return true; } @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState p_isOpaqueCube_1_) { return false; } @Override @SuppressWarnings("deprecation") public EnumBlockRenderType getRenderType(IBlockState p_getRenderType_1_) { return EnumBlockRenderType.MODEL; } @Override @SideOnly(Side.CLIENT) public BlockRenderLayer getBlockLayer() { return BlockRenderLayer.CUTOUT; } @Override public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState iBlockState, EntityPlayer entityPlayer, EnumHand enumHand, EnumFacing enumFacing, float p_float_1, float p_float_2, float p_float_3) { if (entityPlayer.getHeldItem(enumHand).getItem()== ModItems.lens_of_truth&&!iBlockState.getValue(VISIBLE)){ iBlockState.cycleProperty(VISIBLE); } else if (iBlockState.getValue(VISIBLE)){ iBlockState.cycleProperty(VISIBLE); } return true; } @SideOnly(Side.CLIENT) public void initModel(){ ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(this), 0, new ModelResourceLocation(getRegistryName(), "inventory")); } @Override @SuppressWarnings("deprecation") public EnumPushReaction getMobilityFlag(IBlockState p_getMobilityFlag_1_) { return EnumPushReaction.IGNORE; } } -
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
I've recognized the code style issue the moment I posted the code with the copy of the Furnace you mean setState? the parameter names are mostly copied from Minecraft or the name of the class of the object. I'm working on a documentation and will change the names then -
[Reopened again][1.12.2] How to change blockstate based on helditem
_Cruelar_ replied to _Cruelar_'s topic in Modder Support
Changed the Code according to Problematic code #4 by diesieben07. I get an error now when I switch to my item triggering the change I changed only the block: import com.cruelar.cruelars_triforcemod.Cruelars_Triforcemod_Core; import com.cruelar.cruelars_triforcemod.init.ModBlocks; import com.cruelar.cruelars_triforcemod.init.ModItems; import com.cruelar.cruelars_triforcemod.tileentity.Hidden_Block_TileEntity; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.EnumPushReaction; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import static com.cruelar.cruelars_triforcemod.inventory.cruelars_triforcemod.CRUELARS_TRIFORCEMOD; public class Hidden_Block extends Block { public static final PropertyBool VISIBLE = PropertyBool.create("visible"); private static boolean keepInventory; public Hidden_Block(boolean visibility){ super(Material.ROCK); this.setDefaultState(this.blockState.getBaseState().withProperty(VISIBLE,visibility)); String name=""; if (visibility){ name="_visible"; } this.setRegistryName("hidden_block"+name); this.setUnlocalizedName(Cruelars_Triforcemod_Core.MODID+".hidden_block"+name); this.setCreativeTab(CRUELARS_TRIFORCEMOD); } @MethodsReturnNonnullByDefault protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, new IProperty[]{VISIBLE}); } @Override @SuppressWarnings("deprecation") public IBlockState getStateFromMeta(int meta) { return getDefaultState() .withProperty(VISIBLE, meta!=0); } public static void setState(boolean p_setState_0_, World p_setState_1_, BlockPos p_setState_2_) { IBlockState lvt_3_1_ = p_setState_1_.getBlockState(p_setState_2_); TileEntity lvt_4_1_ = p_setState_1_.getTileEntity(p_setState_2_); keepInventory = true; if (!p_setState_0_) { p_setState_1_.setBlockState(p_setState_2_, ModBlocks.hidden_block.getDefaultState(), 3); p_setState_1_.setBlockState(p_setState_2_, ModBlocks.hidden_block.getDefaultState(), 3); } else { p_setState_1_.setBlockState(p_setState_2_, ModBlocks.hidden_block_visible.getDefaultState(), 3); p_setState_1_.setBlockState(p_setState_2_, ModBlocks.hidden_block_visible.getDefaultState(), 3); } keepInventory = false; if (lvt_4_1_ != null) { lvt_4_1_.validate(); p_setState_1_.setTileEntity(p_setState_2_, lvt_4_1_); } } @SuppressWarnings("deprecation") public IBlockState getActualState(IBlockState iBlockState,IBlockAccess iBlockAccess, BlockPos blockPos) { return iBlockState; } public int getMetaFromState(IBlockState blockState) { int i = 0; if ((boolean)blockState.getValue(VISIBLE)){ i |= 2; } return i; } @Override public TileEntity createTileEntity(World world, IBlockState iBlockState){ return new Hidden_Block_TileEntity(); } public boolean hasTileEntity(IBlockState p_hasTileEntity_1_) { return true; } @SuppressWarnings("deprecation") public boolean isOpaqueCube(IBlockState p_isOpaqueCube_1_) { return false; } @SuppressWarnings("deprecation") public EnumBlockRenderType getRenderType(IBlockState p_getRenderType_1_) { return EnumBlockRenderType.MODEL; } @SideOnly(Side.CLIENT) public BlockRenderLayer getBlockLayer() { return BlockRenderLayer.CUTOUT; } public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState iBlockState, EntityPlayer entityPlayer, EnumHand enumHand, EnumFacing enumFacing, float p_float_1, float p_float_2, float p_float_3) { if (entityPlayer.getHeldItem(enumHand).getItem()== ModItems.lens_of_truth&&!iBlockState.getValue(VISIBLE)){ iBlockState.cycleProperty(VISIBLE); } else if (iBlockState.getValue(VISIBLE)){ iBlockState.cycleProperty(VISIBLE); } return true; } @SideOnly(Side.CLIENT) public void initModel(){ ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(this), 0, new ModelResourceLocation(getRegistryName(), "inventory")); } @SuppressWarnings("deprecation") public EnumPushReaction getMobilityFlag(IBlockState p_getMobilityFlag_1_) { return EnumPushReaction.IGNORE; } } -
I'm interessed in what it extends
-
Rockhounding Mod Part 1 (don't know the version) (If you had that already I can't help) Not mine but one I've found
-
I've an idea but for exact explanation I need the full code of the entity.
-
Sorry for making problems today, I'm still new and try to help. For the Future I'll try to watch out if how old the topic is or if my post really answers the question.
-
I've an currently not working won but maybe you find out what's wrong (please tell me then). Please click here.
-
Haven't seen forge:mod_loaded before thanks for the help
-
How you check for example for Baubles
-
Try this in your class: @Override public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { if (slot != EntityEquipmentSlot.LEGS) { return modid+":textures/models/armor/"+ArmorName+"_layer_1.png"; }else { return modid+":textures/models/armor/"+ArmorName+"_layer_2.png"; } } In layer_1.png there are the legs and in layer_2.png everything else of the nomal Minecraft armor.