-
Posts
440 -
Joined
-
Last visited
Everything posted by Flenix
-
[1.6.2] [Unsolved] Can't create config file
Flenix replied to SackCastellon's topic in Modder Support
What exactly isn't working...? As much as it would be nice if we were, we aren't psychic -
Using a value from the player NBT as a string in a GUI
Flenix replied to Flenix's topic in Modder Support
Alright, I'll have a play. I don't mind that; I'll be adding packet stuff later anyway so it's not a big deal I don't suppose you have a link to a relatively up-to-date tutorial on packet handling? -
Hey guys, I'm struggling with this; one of the last things getting the economy system in my mod working. Basically, as a quick overview of the mod to get an idea, players can get both physical and digital currency. They transmute between these using an ATM block, and currently it's hardcoded so when they right-click the ATM with a $10 bill, It will deposit the $10 and tell them they've done so. I also have a debit card, which checks the balance in the NBT, and proves it's 10 (thanks to maxpowa for helping me get that part working ) However, I don't want the debit card to display the value; I want the value to be shown inside a GUI. I've tried quite a few things, and I can't seem to get it to work... Here was my latest attempt, trying to set a variable in the ATM block class and then use it in the drawString. Anyone got any suggestions? Gui: package co.uk.silvania.city.tileentities.containers; import java.text.DecimalFormat; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.resources.ResourceLocation; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; import net.minecraft.world.World; import org.lwjgl.opengl.GL11; import co.uk.silvania.city.tileentities.TileEntityATMEntity; import co.uk.silvania.city.tileentities.blocks.TileEntityATMBlock; public class GuiATM extends GuiContainer { //DecimalFormat decim = new DecimalFormat("#.##"); private static final ResourceLocation texture = new ResourceLocation("flenixcities", "/textures/gui/atm.png"); public GuiATM (InventoryPlayer inventoryPlayer, TileEntityATMEntity tileEntity, World world, int x, int y, int z) { super(new ContainerATM(inventoryPlayer, tileEntity)); } protected int xSize = 176; protected int ySize = 198; @Override protected void drawGuiContainerForegroundLayer(int param1, int param2) { fontRenderer.drawString("ATM", 8, -8, 4210752); fontRenderer.drawString("Balance", 8, 9, 4210752); fontRenderer.drawString("Safe", 132, -11, 4210752); fontRenderer.drawString("Deposit", 124, -3, 4210752); fontRenderer.drawString("Withdraw", 8, 29, 4210752); fontRenderer.drawString("Deposit", 42, 68, 4210752); fontRenderer.drawString("$" + TileEntityATMBlock.playerBalance, 58, 9, 1237000); fontRenderer.drawString("345.67", 58, 29, 1237000); fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 111, 4210752); } @Override protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.func_110434_K().func_110577_a(texture); int x = (width - xSize) / 2; int y = (height - ySize) / 2; this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize); } } Block: package co.uk.silvania.city.tileentities.blocks; import java.util.List; import co.uk.silvania.city.FlenixCities; import co.uk.silvania.city.NBTConfig; import co.uk.silvania.city.items.econ.ItemNote10; import co.uk.silvania.city.tileentities.TileEntityATMEntity; import cpw.mods.fml.common.Mod.Metadata; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class TileEntityATMBlock extends BlockContainer { public static double playerBalance = 0; public TileEntityATMBlock(int id) { super(id, Material.iron); this.setHardness(1.0F); this.setCreativeTab(FlenixCities.tabEcon); this.setLightOpacity(0); } @Override public TileEntity createNewTileEntity(World world) { return new TileEntityATMEntity(); } @Override public int getRenderType() { return -1; } //Huge thanks to "maxpowa" in helping me get this working!! //Temporary Economy deposit system. Eventually this will happen inside the GUI, you will place in money and it'll get sucked into the bank, //and the bank will pay you. For now, this is fine, and the code will be effectively the same anyway. @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int i, float j, float k, float l) { if (!world.isRemote) { if (player.getHeldItem() != null) { if (player.getHeldItem().getItem() == FlenixCities.debitCard) { double balance = 0; NBTTagCompound nbt = NBTConfig.getTagCompoundInFile(NBTConfig.getWorldConfig(world)); if (nbt.hasKey(player.username)) { NBTTagCompound playernbt = nbt.getCompoundTag(player.username); if (playernbt.hasKey("Balance")) balance = playernbt.getDouble("Balance"); } player.addChatMessage("Your Balance is: " + balance); player.openGui(FlenixCities.instance, 0, world, x, y, z); } } if (player.getHeldItem() != null) { if (player.getHeldItem().getItem() == FlenixCities.note1000) { double currentBalance = 0; NBTTagCompound nbt = NBTConfig.getTagCompoundInFile(NBTConfig.getWorldConfig(world)); if (nbt.hasKey(player.username)) { NBTTagCompound playernbt = nbt.getCompoundTag(player.username); if (playernbt.hasKey("Balance")) currentBalance = playernbt.getDouble("Balance"); double modifiedBalance = currentBalance + ItemNote10.moneyValue; playernbt.setDouble("Balance", modifiedBalance); nbt.setCompoundTag(player.username, playernbt); } else { NBTTagCompound playernbt = new NBTTagCompound(); if (playernbt.hasKey("Balance")) currentBalance = playernbt.getDouble("Balance"); double modifiedBalance = currentBalance + ItemNote10.moneyValue; playernbt.setDouble("Balance", modifiedBalance); nbt.setCompoundTag(player.username, playernbt); } NBTTagCompound playernbt = nbt.getCompoundTag(player.username); player.addChatMessage(ItemNote10.moneyValue + " Deposited! Your balance is now " + playernbt.getDouble("Balance")); //This is where the playerBalance should be changed right? Or am I doing something wrong? double playerBalance = playernbt.getDouble("Balance"); NBTConfig.saveConfig(nbt, NBTConfig.getWorldConfig(world)); } } } return true; } @Override public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } @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); } @SideOnly(Side.CLIENT) public void getSubBlocks(int par1, CreativeTabs creativeTabs, List list) { for (int var4 = 0; var4 < 16; ++var4) { list.add(new ItemStack(par1, 1, 0)); } } } Let me know if you need other classes.
-
[1.6.1] onBlockActivated doesn't work anymore!
Flenix replied to KeeganDeathman's topic in Modder Support
Just made a mental note to not help you in the future with issues, if this is how you're acting. I can tell you right now that both Draco18s and diesieben07 are infinitely better than you (and me) at modding, and probably Java in general. They're not the kind of people you want to be on the wrong side of if you need help in the future. You can't deny you were using the override function wrongly in this post. Even right after I said: You put it in the wrong place in the next post: Then when people tried to correct you you turned hostile and yeah, you know the rest. -
[Not solved but im done.]How to save integers to a file.
Flenix replied to deadrecon98's topic in Modder Support
Thanks It's part of my city mod, but I do plan to take the same code and make it standalone, because I know Forge is lacking in a decent economy mod and I think it'd fit the bill pretty well. Once I fix the last couple of issues it'd be ready to go actually -
[Not solved but im done.]How to save integers to a file.
Flenix replied to deadrecon98's topic in Modder Support
This is the most beautiful thing I've seen all day. Even persists through death <3 The final question then, is there a simple method of adding all my other currency items, or will I need the entire section of code for each of them? -
[Not solved but im done.]How to save integers to a file.
Flenix replied to deadrecon98's topic in Modder Support
-
[1.6.1] onBlockActivated doesn't work anymore!
Flenix replied to KeeganDeathman's topic in Modder Support
I don't know what you mean by "inside a method" - Your override should be like this: @Override public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) { blah } I never noticed it wasn't there before In relation to containers; you need to have one. BlockContainer is what you need to use for rendering models. -
How can I add multiple rotated blocks onto a single metadata block?
Flenix replied to Flenix's topic in Modder Support
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 -
How can I add multiple rotated blocks onto a single metadata block?
Flenix replied to Flenix's topic in Modder Support
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 -
How can I add multiple rotated blocks onto a single metadata block?
Flenix replied to Flenix's topic in Modder Support
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 -
[1.6.1] onBlockActivated doesn't work anymore!
Flenix replied to KeeganDeathman's topic in Modder Support
The modloader command will be what's screwing it up. Try adding a print line at the start of the method too, saying "begin". Also try temporarily commenting out or removing the modloader code The Forge version of the openGUI is: -
[Not solved but im done.]How to save integers to a file.
Flenix replied to deadrecon98's topic in Modder Support
Still nothin' =/ -
How can I add multiple rotated blocks onto a single metadata block?
Flenix replied to Flenix's topic in Modder Support
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. -
[1.6.1] onBlockActivated doesn't work anymore!
Flenix replied to KeeganDeathman's topic in Modder Support
Yeah, post it up -
[Not solved but im done.]How to save integers to a file.
Flenix replied to deadrecon98's topic in Modder Support
Everything printed twice but I cleaned it It seems like it's just not saving the balance after it confirms it's been added =/ -
[RESOLVED]1.6.1 My crafting recipes only work for my sword
Flenix replied to xcoopergangx's topic in Modder Support
Oh, it might be that you need spaces for air. XX","XA","A" should actually be XX ","XA "," A ". XX","XA"," A" might also work (and would mean you could craft in two different positions- centered or right-aligned) -
[RESOLVED]1.6.1 My crafting recipes only work for my sword
Flenix replied to xcoopergangx's topic in Modder Support
Spot the difference between your Sword and Axe. It might help you if they were all one line, but there are quite a few characters missing. Just a stab in the dark but fix the problem with your Axe and the others might work. It might be the problem with your axe that's stopping them from being read properly. -
[Not solved but im done.]How to save integers to a file.
Flenix replied to deadrecon98's topic in Modder Support
Obviously I'm testing in the Forge environment so all of my .dat's are different. But, they all seem to have the same Balance of 1000. However, most times of logging in I tried to do it at least twice, so it's obviously still not adding properly else there would be some with 2000, some with 3000, some with 0 etc.. Screenshot if it's any help: -
[1.6.1] onBlockActivated doesn't work anymore!
Flenix replied to KeeganDeathman's topic in Modder Support
Are you sure nothing happens? Is there anything in the console? Try adding a few print lines in and see if any get triggered -
[Not solved but im done.]How to save integers to a file.
Flenix replied to deadrecon98's topic in Modder Support
After a few minutes of "Spot the difference" I noticed the two balances which should be Balances. Was there anything else? That didn't seem to fix it -
[Not solved but im done.]How to save integers to a file.
Flenix replied to deadrecon98's topic in Modder Support
Meh, we're working early. Give it 3-4 weeks and there will be fixes in forge, and plenty of "how to fix this update bug" tutorials. I didn't update to 1.5.2 for a couple of months and minus the texture de-stitching that didn't take me long at all, coz I could just google any issues Anyways. I added that extra bit to the code, still getting the same bug: Code: @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int i, float j, float k, float l) { TileEntity tileEntity = world.getBlockTileEntity(x, y, z); NBTTagCompound nbt = player.getEntityData().getCompoundTag(EntityPlayer.PERSISTED_NBT_TAG); if (player.getHeldItem() != null) { if (player.getHeldItem().getItem() == FlenixCities.debitCard) { player.addChatMessage("Your Balance is: " + nbt.getInteger("Balance")); player.openGui(FlenixCities.instance, 0, world, x, y, z); } } if (player.getHeldItem() != null) { if (player.getHeldItem().getItem() == FlenixCities.note1000) { nbt.setInteger("balance", (nbt.getInteger("Balance") + ItemNote10.moneyValue)); player.addChatMessage(ItemNote10.moneyValue + " Deposited! Your balance is now " + nbt.getInteger("balance")); } } return true; } @deadrecon98 have you got anything working yet? -
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)
-
[Not solved but im done.]How to save integers to a file.
Flenix replied to deadrecon98's topic in Modder Support
I was about to comment My NBT isn't saving. Here's the code: @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int i, float j, float k, float l) { TileEntity tileEntity = world.getBlockTileEntity(x, y, z); NBTTagCompound nbt = player.getEntityData(); if (player.getHeldItem() != null) { if (player.getHeldItem().getItem() == FlenixCities.debitCard) { player.addChatMessage("Your Balance is: " + nbt.getInteger("Balance")); player.openGui(FlenixCities.instance, 0, world, x, y, z); } } if (player.getHeldItem() != null) { if (player.getHeldItem().getItem() == FlenixCities.note1000) { nbt.setInteger("balance", (nbt.getInteger("Balance") + ItemNote10.moneyValue)); player.addChatMessage(ItemNote10.moneyValue + " Deposited! Your balance is now " + nbt.getInteger("balance")); } } return true; } As you can see, in the confirm deposit line, it gets the current NBT at what it is, and reports it's 1000 (which is correct) - however, when I use the debit card after which merely displays the balance, it's back to 0. I got really excited when it said I'd deposited 1000 then really sad again after