Jump to content

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

Creeper Killer (4/8)

8

Reputation

  1. It's not letting me edit the file in eclipse.
  2. 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.
  3. Have a look at ModelChest and TileEntityChest.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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!
×
×
  • Create New...

Important Information

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