LordMastodon
Forge Modder-
Posts
173 -
Joined
-
Last visited
Converted
-
Gender
Undisclosed
-
Location
Earth, The Solar System, The Milky Way, The Universe, The Multiverse.
-
Personal Text
I like trains.
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
LordMastodon's Achievements
Creeper Killer (4/8)
8
Reputation
-
[Solved] [1.8] onBlockPlacedBy and onBlockPlaced Not Working
LordMastodon replied to LordMastodon's topic in Modder Support
OK, thanks. -
[Solved] [1.8] onBlockPlacedBy and onBlockPlaced Not Working
LordMastodon replied to LordMastodon's topic in Modder Support
It's not letting me edit the file in eclipse. -
Bump
-
[Solved] [1.8] onBlockPlacedBy and onBlockPlaced Not Working
LordMastodon replied to LordMastodon's topic in Modder Support
Why is that? Can I change it? -
I made a block that switched blockstates on right-click that worked before, but now doesn't work due to reasons beyond me. I've put in debug code that sends a chat message to the player when it's supposed to change the state. It sends the message but doesn't change the blockstate. Here's the block code: package lordmastodon.miscal.block; import java.util.Random; import lordmastodon.miscal.Miscal; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.properties.PropertyDirection; import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumWorldBlockLayer; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class LightationBlock extends Block { public static final PropertyDirection FACING = PropertyDirection.create("facing"); public static final PropertyBool LIT_UP = PropertyBool.create("lit"); private float pixel = 1F/16F; public LightationBlock() { super(Material.iron); this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(LIT_UP, Boolean.valueOf(false))); } @Override public Item getItemDropped(IBlockState state, Random rand, int fortune) { return Item.getItemFromBlock(MiscalBlocks.lightation); } @Override public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) { return worldIn.isSideSolid(pos.offset(side.getOpposite()), side, true); } @Override public boolean canPlaceBlockAt(World world, BlockPos pos) { EnumFacing[] anenumfacing = EnumFacing.values(); int i = anenumfacing.length; for (int j = 0; j < i; j++) { EnumFacing enumfacing = anenumfacing[j]; if (world.isSideSolid(pos.offset(enumfacing), enumfacing.getOpposite(), true)) { return true; } } return false; } @Override public IBlockState onBlockPlaced(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) { return world.isSideSolid(pos.offset(facing.getOpposite()), facing, true) ? this.getDefaultState().withProperty(FACING, facing).withProperty(LIT_UP, Boolean.valueOf(false)) : this.getDefaultState().withProperty(FACING, EnumFacing.DOWN).withProperty(LIT_UP, Boolean.valueOf(false)); } @Override public AxisAlignedBB getCollisionBoundingBox(World worldIn, BlockPos pos, IBlockState state) { return null; } @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote) { boolean litUp = (Boolean) state.getValue(LIT_UP); if (litUp) { world.setBlockState(pos, state.withProperty(LIT_UP, false).withProperty(FACING, state.getValue(FACING))); player.addChatMessage(new ChatComponentText("setToFalse")); } else { world.setBlockState(pos, state.withProperty(LIT_UP, true).withProperty(FACING, state.getValue(FACING))); player.addChatMessage(new ChatComponentText("setToTrue")); } } return true; } public void setBlockBoundsBasedOnState(IBlockAccess worldIn, BlockPos pos) { setBlockBoundsBasedOnFacing(worldIn.getBlockState(pos)); } //Switches light value when blockstate changes @Override public int getLightValue(IBlockAccess world, BlockPos pos) { int lightValue = 0; boolean litUp = (Boolean) world.getBlockState(pos).getValue(LIT_UP); if (litUp) { lightValue = 15; } else { lightValue = 0; } return lightValue; } @Override public IBlockState getStateFromMeta(int meta) { boolean lit = false; EnumFacing facing = EnumFacing.NORTH; switch (meta) { case 0: lit = false; break; case 1: lit = true; break; case 2: facing = EnumFacing.NORTH; break; case 3: facing = EnumFacing.EAST; break; case 4: facing = EnumFacing.SOUTH; break; case 5: facing = EnumFacing.WEST; break; case 6: facing = EnumFacing.UP; break; case 7: facing = EnumFacing.DOWN; break; } return this.getDefaultState().withProperty(LIT_UP, Boolean.valueOf(lit)).withProperty(FACING, facing); } public void setBlockBoundsBasedOnFacing(IBlockState state) { boolean litUp = Boolean.valueOf((Boolean) state.getValue(LIT_UP)); EnumFacing facing = (EnumFacing) state.getValue(FACING); if (litUp) { switch (facing) { case NORTH: this.setBlockBounds(0F * pixel, 5F * pixel, 5F * pixel, 2F * pixel, 11F * pixel, 11F * pixel); case WEST: this.setBlockBounds(5F * pixel, 5F * pixel, 0F * pixel, 11F * pixel, 2F * pixel, 11F * pixel); case SOUTH: this.setBlockBounds(16F * pixel, 11F * pixel, 11F * pixel, 13F * pixel, 5F * pixel, 5F * pixel); case EAST: this.setBlockBounds(11F * pixel, 11F * pixel, 16F * pixel, 5F * pixel, 13F * pixel, 5F * pixel); case UP: this.setBlockBounds(5F * pixel, 0F * pixel, 5F * pixel, 11F * pixel, 2F * pixel, 11F * pixel); case DOWN: this.setBlockBounds(11F * pixel, 16F * pixel, 11F * pixel, 5F * pixel, 13F * pixel, 5F * pixel); } } else { this.setBlockBounds(0F * pixel, 0F * pixel, 0F * pixel, 16F * pixel, 16F * pixel, 16F * pixel); } } private String toString(EnumFacing facing) { return facing.getName(); } @Override public int getMetaFromState(IBlockState state) { if((EnumFacing) state.getValue(FACING) == EnumFacing.NORTH) { return 0; } else if ((EnumFacing) state.getValue(FACING) == EnumFacing.WEST) { return 1; } else if ((EnumFacing) state.getValue(FACING) == EnumFacing.SOUTH) { return 2; } else if ((EnumFacing) state.getValue(FACING) == EnumFacing.EAST) { return 3; } else if ((EnumFacing) state.getValue(FACING) == EnumFacing.UP) { return 4; } else if ((EnumFacing) state.getValue(FACING) == EnumFacing.DOWN) { return 5; } else if ((Boolean) state.getValue(LIT_UP) == false) { return 6; } else { return 7; } } @Override @SideOnly(Side.CLIENT) public IBlockState getStateForEntityRender(IBlockState state) { return this.getDefaultState().withProperty(LIT_UP, Boolean.valueOf(false)).withProperty(FACING, Integer.valueOf(0)); } @Override protected BlockState createBlockState() { return new BlockState(this, new IProperty[] {LIT_UP, FACING}); } @Override public int getRenderType() { return 3; } @Override public boolean isOpaqueCube() { return false; } @SideOnly(Side.CLIENT) @Override public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT_MIPPED; } @Override public boolean isFullCube() { return false; } @Override public int isProvidingWeakPower(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing side) { return (Boolean) state.getValue(LIT_UP) ? 15 : 0; } @Override public int isProvidingStrongPower(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing side){ return (Boolean) state.getValue(LIT_UP) ? 0 : (state.getValue(FACING) == side ? 15 : 0); } @Override public boolean canProvidePower() { return true; } } This used to work, and the blockstates file is not returning any errors at all. I'm not sure at all what changed.
-
Have a look at ModelChest and TileEntityChest.
-
[Solved] [1.8] onBlockPlacedBy and onBlockPlaced Not Working
LordMastodon replied to LordMastodon's topic in Modder Support
UPDATE onBlockAdded doesn't seem to be working either. There also seems to be an odd bug that results in the block having no bounding box when I place it, but when I close Minecraft and reload the world the block has a full bounding box until I place a new block, and then the bounding boxes of every single instance of that block disappears. When I right-click the block when it has a bounding box the box disappears as well. -
[Solved] [1.8] onBlockPlacedBy and onBlockPlaced Not Working
LordMastodon replied to LordMastodon's topic in Modder Support
I don't know. It seems to be working for my other block, but there I use onBlockAdded so I don't know if that's important. -
Bind textures that are not in the resources folder?
LordMastodon replied to ItsAMysteriousYT's topic in Modder Support
Well... I mean... bindTexture does take a ResourceLocation... That should be a pretty good indicator. As always, there might be a workaround or a different way to do things I am not aware of, but as far as I know no. -
[Solved] [1.8] onBlockPlacedBy and onBlockPlaced Not Working
LordMastodon replied to LordMastodon's topic in Modder Support
It uses EnumFacing. It's how you switch the block's direction when it's placed and things like that. It's basically NORTH, WEST, SOUTH, EAST, UP, DOWN. -
I'm pretty sure you can't. Minecraft uses LWJGL, not Swing, which means it's not built off of JFrames and JPanels. There was another question a few days ago asking the same thing, here it is[/url.
-
I've created a block, and it's supposed to set its block bounds when it's placed. I put in the code for it to set them, but when I placed the block, nothing happened. I put in debug code for it to print when those methods are called, but the debug code isn't called either. Here's my block class: Any help? Thanks in advance! EDIT 1 Never mind. It seems that they ARE working, but Logger.debug is not. No clue why that is.
-
Yeah, I could make an external variable in the actual mod class and set it in the preInitialization event, but I'm just not sure that's the best thing to do.
-
Well, I need a Logger for more things than initialization events. I guess I could make a logger variable in the main class, but I don't know if that's the best practice.
-
So I've created a Logger class and as stated by the tutorial Pahimar did on this, you're supposed to use this line of code in your log function: FMLLog.log(ModConstants.MOD_NAME, logLevel, object); However, in reality, it seems that in 1.8 forge has changed this, and you now need a format string. I found this ( [font=Verdana][size=2px]"%s %s:\n%s"[/size][/font] ) somewhere, but I've no clue if that's correct or what to use if it's not. Thanks in advance!