Jump to content

LordMastodon

Forge Modder
  • Posts

    173
  • Joined

  • Last visited

Everything posted by LordMastodon

  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!
  13. Look at Minecraft's code. That's always how you should start before coming to the forum. If you come to the forum without checking the code and we tell you to check it you've just wasted our time.
  14. Cerandior, I have it working fine. Shadowfacts and diesieben07 helped me very nicely.
  15. Ok thanks, just making sure that's not too intrusive or annoying to the player. Thanks for the code, but it's kind of too much just for something simple like this. Here's the code for my version checker, probably sucks but whatever.
  16. Never mind, I've found a way using String.split(). How do you think a system like this sounds: First of all if there's an update available the mod tells you "There is a new update available for Miscal, version <new version number>." If it's a bug-fix update, it then tells you "Please note that this is only a bug-fixing update and is not completely necessary." If it's a content-adding update, it tells you "Please note that this is an update that adds new content, and it is recommended you update." If it's an overhaul update it says "This is an overhaul update and it is highly recommended you update as the new version is incompatible with old ones." Overhaul updates should be extremely rare, but they're probably going to happen at some point due to the existence of Minecraft updates. Finally, it says "Please visit https://drone.io/github.com/LordMastodon/Miscal/files to get the new update." So that you can get the new update. How does that sound? Need some feedback.
  17. Well, here's how it works. I've got a block that when right clicked switches between a model, a texture and a light value. The second model is smaller than a block and I want it to get hooked up to a wall kind of like a torch does, but it can hook up to the ceiling as well. That means I need a boolean checking whether or not it's lit up (which is 2 numbers), and an integer telling me what side it's on (0 = North, 1 = East, 2 = South, 3 = West, 4 = Up, 5 = Down) which is 6 numbers. That means that I'd need 8 numbers instead of the 4 you've said is the max. That seems like a really stupid limit. It means you can have at max 2 blockstates if they were both booleans, which for many mods is impossible considering things such as pipes.
  18. I know I have to implement those, I got an error when I didn't. I'm just wondering how I use to metadata to switch through two different properties, a boolean and an integer. I've gotten the boolean to work fine, but how do I use one number to determine the meta and state of 2 different properties?
  19. What about decimal values or negative numbers?
  20. Is there a way to have a Block with multiple IBlockStates? I kind of get hung up on getMetaFromState and getStateFromMeta. On everything else, I just pass the blockstate with multiple withProperty functions, but as for those methods I'm not quite sure. Thanks in advance!
  21. Try adding super.onLeftClickEntity to the beginning of your method.
×
×
  • Create New...

Important Information

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