Posted July 7, 201312 yr Hey guys. The main thing I'm struggling with in this is how to phrase my onBlockPlacedBy method. Right now, I have a single block in here, using 4 metadata- one for each of the four directions it can face: public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack) { int l = MathHelper.floor_double((double)(par5EntityLivingBase.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3; par1World.setBlockMetadataWithNotify(par2, par3, par4, l, 2); if (l == 0) { par1World.setBlockMetadataWithNotify(par2, par3, par4, 0, 0); } if (l == 1) { par1World.setBlockMetadataWithNotify(par2, par3, par4, 1, 0); } if (l == 2) { par1World.setBlockMetadataWithNotify(par2, par3, par4, 2, 0); } if (l == 3) { par1World.setBlockMetadataWithNotify(par2, par3, par4, 3, 0); } } This then gets read by the Renderer (It's a modelled block), Like so: @Override public void renderTileEntityAt(TileEntity te, double x, double y, double z, float scale) { int i = te.getBlockMetadata(); int meta = 180; if (i == 0) { meta = 0; } if (i == 3) { meta = 90; } if (i == 2) { meta = 180; } if (i == 1) { meta = 270; } Now, the renderer part I can easily change to read different metas, and set the various metadatas to one of the four directions. What I can't quite work out, is how I can seperately define the four different blocks in my onBlockPlacedBy, and then set the meta depending on each of their directions. Does that make sense at all? Can anyone point me in the right direction? (No pun intended) http://s13.postimg.org/z9mlly2av/siglogo.png[/img] My mods (Links coming soon) Cities | Roads | Remula | SilvaniaMod | MoreStats
July 7, 201312 yr Are you after a setup like this? meta 0 = block 1 north meta 1 = block 1 south meta 2 = block 1 east meta 3 = block 1 west meta 4 = block 2 north meta 5 = block 2 south meta 6 = block 2 east meta 7 = block 2 west meta 8 = block 3 north meta 9 = block 3 south meta 10 = block 3 east meta 11 = block 3 west meta 12 = block 4 north meta 13 = block 4 south meta 14 = block 4 east meta 15 = block 4 west
July 7, 201312 yr Author Are you after a setup like this? meta 0 = block 1 north meta 1 = block 1 south meta 2 = block 1 east meta 3 = block 1 west meta 4 = block 2 north meta 5 = block 2 south meta 6 = block 2 east meta 7 = block 2 west meta 8 = block 3 north meta 9 = block 3 south meta 10 = block 3 east meta 11 = block 3 west meta 12 = block 4 north meta 13 = block 4 south meta 14 = block 4 east meta 15 = block 4 west Yeah, that's exactly what I want. But if I try and do something along the lines of: if (l == 0 && meta == 1) { par1World.setBlockMetadataWithNotify(par2, par3, par4, 0, 0); } //(and so on) It breaks my render code altogether. http://s13.postimg.org/z9mlly2av/siglogo.png[/img] My mods (Links coming soon) Cities | Roads | Remula | SilvaniaMod | MoreStats
July 8, 201312 yr Give this a go. @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityliving, ItemStack itemStack) { int blockSet = world.getBlockMetadata(x, y, z) / 4; int direction = MathHelper.floor_double((entityliving.rotationYaw * 4F) / 360F + 0.5D) & 3; int newMeta = (blockSet * 4) + direction; world.setBlockMetadataWithNotify(x, y, z, newMeta, 0); } @Override public void renderTileEntityAt(TileEntity te, double x, double y, double z, float scale) { int rotation = 180; switch(te.getBlockMetadata() % 4) { case 0: rotation = 0; break; case 3: rotation = 90; break; case 2: rotation = 180; break; case 1: rotation = 270; break; } String texture = "textures/entities/atm.png"; switch(te.getBlockMetadata() / 4) { case 0: texture = "blockset1"; break; case 1: texture = "blockset2"; break; case 2: texture = "blockset3"; break; case 3: texture = "blockset4"; break; } Minecraft.getMinecraft().renderEngine.func_110577_a(new ResourceLocation("flenixcities", texture)); // rest of your renderer }
July 8, 201312 yr Author Worked perfectly. Now I just gotta figure out how to restrict creative tabs to just the four meta so I don't have all the rotations in there This will save me on a lot of IDs though, especially if I can figure out how to change the model with meta too. Thanks http://s13.postimg.org/z9mlly2av/siglogo.png[/img] My mods (Links coming soon) Cities | Roads | Remula | SilvaniaMod | MoreStats
July 8, 201312 yr @Override public void getSubBlocks(int id, CreativeTabs tab, List list) { list.add(new ItemStack(this, 1, 0)); list.add(new ItemStack(this, 1, 4)); list.add(new ItemStack(this, 1, ); list.add(new ItemStack(this, 1, 12)); } You already have a tile entity, you can do everything without touching meta. you could store the rotation in the tileentity and use the metas for 16 atms (limits you to 16 atms) or put the atm in the tile entity and use meta 0-3 for rotation (limit is based on variable type, go ahead an fill an int ) or put both type and rotation in the tile freeing up the meta for other stuff. RedPower has its microblocks in one id due to heave tileentity usage.
July 8, 201312 yr Author I posted about doing that before, but no one could tell me how Redpower does it It'd be a huge bonus for me; the mod I'm working on here will have hundreds of modelled blocks, many of which are purely decorational or have very simple functions, so I could really cut down on IDs by using the tile entities http://s13.postimg.org/z9mlly2av/siglogo.png[/img] My mods (Links coming soon) Cities | Roads | Remula | SilvaniaMod | MoreStats
July 8, 201312 yr Redpower does some really heavy stuff with TileEntitys. I don't know how you can implement that in your mod, but if it's possible (I know that it's possible) and you figured it out, can you please post the code or point me to the right direction, cause that could really help my mod to use way less IDs than it now has... Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
July 8, 201312 yr Author Redpower does some really heavy stuff with TileEntitys. I don't know how you can implement that in your mod, but if it's possible (I know that it's possible) and you figured it out, can you please post the code or point me to the right direction, cause that could really help my mod to use way less IDs than it now has... Just took a look at your mod. Are you using TileEntites for the roads, or just future planned stuff? If it's for the roads, I wouldn't recommend it. I tried it briefly in my FlenixRoads mod, but they de-render after a certain distance so I changed how I made them and ended up using more IDs than planned http://s13.postimg.org/z9mlly2av/siglogo.png[/img] My mods (Links coming soon) Cities | Roads | Remula | SilvaniaMod | MoreStats
July 8, 201312 yr Redpower does some really heavy stuff with TileEntitys. I don't know how you can implement that in your mod, but if it's possible (I know that it's possible) and you figured it out, can you please post the code or point me to the right direction, cause that could really help my mod to use way less IDs than it now has... Just took a look at your mod. Are you using TileEntites for the roads, or just future planned stuff? If it's for the roads, I wouldn't recommend it. I tried it briefly in my FlenixRoads mod, but they de-render after a certain distance so I changed how I made them and ended up using more IDs than planned I'm currently not using tile entitys for my road blocks, but I think that there about 8 different blocks but with different directions. If I know how to use TileEntitys for the blocks (like Redpower does) I would be able to add more road blocks in a single id instead with more ids Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
July 8, 201312 yr You could try workign with NBT data. Similar to Tile Entities, items(which includes ItemBlocks) can store info as NBT data. You'd have to tap into the function that causes the block to drop and override it so it drops a custom ItemStack which then has a NBTTagCompound assigned to it containing necessary information. That's how ThermalExpansion, for instance, stores the charge and settings on Energy Cells and Tesseracts. With that, everything, including textures for the block can be done via the TileEntity and saved within the NBT of the dropped item, to be later recalled when the block is placed / the TileEntity is initialized.
July 9, 201312 yr Ok I threw a bunch of files together and put it up on github. Its not a working mod, and far from complete but I think it provides the needed info to create a tile entity that extends metadata. https://github.com/ShetiPhian/ExtendedMeta
July 9, 201312 yr So if I use that, I can have infinite blocks in 1 ID like Redpower does? Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
July 9, 201312 yr Well to be more precise its not infinite, but you can put a lot of similar blocks into one id. Your extended meta is an integer this provides a very large meta range (-2,147,483,648 to 2,147,483,647) as most will never need that many you can reduce the save size by switching to short (-32,768 to 32,767) or a byte (-128 to 127) and if used in combination with the normal base meta you can times that by 16 You will run into a few limitations though Not all functions are location aware. In most cases they are at least meta aware, but sometimes they are not (this is rare though) So best to keep similar blocks in one id and very similar ones in the same base meta Damage value of the item is limited to an integer (I think positive only too) So you can not have each extended meta have it own item, but you could have a stair like object using 8 extended metas and uses 1 item damage value.
July 10, 201312 yr So how would I implement that in my mod? Just let all the blocks I want to have in 1 ID create a new TileEntityExtendedMeta instance? Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
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.