Posted May 22, 201312 yr I made an integer that can be set trough a gui, by clicking a button. this integer regulates a block that spawns on death. imagine: player 1 sets a dirtblock to spawn on death.(integer 1) player 2 sets a sandblock to spawn on death (integer 2) when player one dies, the block spawned will be a sandblock, because player 2 changed it most recently. the integers get set to the player's persisted nbt tag. both are called in the proxies, by sending a packet from the player to the server. packet gets send on button click. here's some code setter and getter for code. client and commonproxy //CLIENTPROXY public int getRenderID(String username) { if (MinecraftServer.getServer() != null && MinecraftServer.getServer().getConfigurationManager() != null) { EntityPlayer player = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(username); if (player != null) { if(player.getEntityData().hasKey(player.PERSISTED_NBT_TAG) && player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).hasKey("renderID_"+username)) { return player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).getInteger("renderID_"+username); }else{ if (!player.getEntityData().hasKey(player.PERSISTED_NBT_TAG)){ player.getEntityData().setCompoundTag(player.PERSISTED_NBT_TAG, new NBTTagCompound(player.PERSISTED_NBT_TAG)); } player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).setInteger("renderID_"+username, 6); return 6; } } }else{ EntityPlayer player = Minecraft.getMinecraft().theWorld.getPlayerEntityByName(username); if (player != null) { if (player.getEntityData().hasKey(player.PERSISTED_NBT_TAG) && player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).hasKey("renderID_"+username)) { return player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).getInteger("renderID_"+username); } else { if (!player.getEntityData().hasKey(player.PERSISTED_NBT_TAG)) { player.getEntityData().setCompoundTag(player.PERSISTED_NBT_TAG, new NBTTagCompound(player.PERSISTED_NBT_TAG)); } player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).setInteger("renderID_"+username,6); return 6; } } } return 0; } public void setRenderID(String username, int renderID) { if (MinecraftServer.getServer() != null && MinecraftServer.getServer().getConfigurationManager() != null) { EntityPlayer player = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(username); if (player != null) { if(player.getEntityData().hasKey(player.PERSISTED_NBT_TAG)) { player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).setInteger("renderID_"+username, renderID); }else{ if (!player.getEntityData().hasKey(player.PERSISTED_NBT_TAG)){ player.getEntityData().setCompoundTag(player.PERSISTED_NBT_TAG, new NBTTagCompound(player.PERSISTED_NBT_TAG)); } player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).setInteger("renderID_"+username, 6); } } }else{ EntityPlayer player = Minecraft.getMinecraft().theWorld.getPlayerEntityByName(username); if (player != null) { if (player.getEntityData().hasKey(player.PERSISTED_NBT_TAG)) { player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).setInteger("renderID_"+username, renderID); } else { if (!player.getEntityData().hasKey(player.PERSISTED_NBT_TAG)) { player.getEntityData().setCompoundTag(player.PERSISTED_NBT_TAG, new NBTTagCompound(player.PERSISTED_NBT_TAG)); } player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).setInteger("renderID_"+username,6); } } } } //COMMONPROXY public int getRenderID(String username) { if (MinecraftServer.getServer() != null && MinecraftServer.getServer().getConfigurationManager() != null) { EntityPlayer player = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(username); if (player != null) { if (player.getEntityData().hasKey(player.PERSISTED_NBT_TAG) && player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).hasKey("renderID_"+username)) { return player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).getInteger("renderID_"+username); } else { if (!player.getEntityData().hasKey(player.PERSISTED_NBT_TAG)) { player.getEntityData().setCompoundTag(player.PERSISTED_NBT_TAG, new NBTTagCompound(player.PERSISTED_NBT_TAG)); } player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).setInteger("renderID_"+username, 6); return 6; } } } return 0; } public void setRenderID(String username, int renderID) { int id = 0; if (MinecraftServer.getServer() != null && MinecraftServer.getServer().getConfigurationManager() != null) { EntityPlayer player = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(username); if (player != null) { if (player.getEntityData().hasKey(player.PERSISTED_NBT_TAG)) { player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).setInteger("renderID_"+username, renderID); } else { if (!player.getEntityData().hasKey(player.PERSISTED_NBT_TAG)) { player.getEntityData().setCompoundTag(player.PERSISTED_NBT_TAG, new NBTTagCompound(player.PERSISTED_NBT_TAG)); } player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG).setInteger("renderID_"+username, renderID); FMLLog.getLogger().info("fail"); } } } } packetHandler package gravestone; import gravestone.grave.TEGrave; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet250CustomPayload; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.network.IPacketHandler; import cpw.mods.fml.common.network.Player; public class PacketHandler implements IPacketHandler { public int x1; public int y1; public int z1; public static PacketHandler instance; public PacketHandler() { instance = this; } @Override public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player) { this.handlePacket(packet, player); if(packet.channel.equals("graveData")) { this.handlePacket(packet, player); } } public void handlePacket(Packet250CustomPayload packet, Player player) { EntityPlayer p = (EntityPlayer) player; World world = p.worldObj; TileEntity tile = world.getBlockTileEntity(x1, y1, z1); DataInputStream dis = new DataInputStream(new ByteArrayInputStream(packet.data)); try { int guiId = dis.readInt(); if(guiId == 1) { x1 = dis.readInt(); y1 = dis.readInt(); z1 = dis.readInt(); if(dis.readInt() == 6) { if (tile != null) { TEGrave te = (TEGrave)tile; if(te != null) { for(int par1 =0; par1 < te.graveContents.length;par1++) { ItemStack stacks = te.getStackInSlot(par1); if(stacks != null){ if(par1 < 36){ p.inventory.addItemStackToInventory(stacks); te.setInventorySlotContents(par1, null); }else if(par1 >= 36){ int i = EntityLiving.getArmorPosition(stacks) - 1; ItemStack itemstack1 = p.getCurrentArmor(i); if (itemstack1 == null){ p.setCurrentItemOrArmor(i + 1, stacks); }else{ p.dropPlayerItem(stacks); } te.setInventorySlotContents(par1, null); } } } } } } } if(guiId == 2) { x1 = dis.readInt(); y1 = dis.readInt(); z1 = dis.readInt(); if(dis.readInt() == 7) { world.setBlock(x1,y1,z1,0); } } if(guiId == 3) { int c =dis.readInt(); mod_Gravestone.instance.modelToRender = c; mod_Gravestone.proxy.setRenderID(p.username, c); } if(guiId == 4) { if (tile != null) { TEGrave te = (TEGrave)tile; if(te != null && world.isRemote) { world.getPlayerEntityByName(te.playername).sendChatToPlayer(dis.readUTF()+" requests you to salvage your grave."); } } } } catch (IOException e) { e.printStackTrace(); } } } tell me if you need to see another class, i might have forgotten one. thanks for reading this ! and thank you more for any help given ^^ https://minecraft.curseforge.com/members/Subaraki/projects
May 22, 201312 yr You should be saving that information to the player not to the block. Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
May 22, 201312 yr Author package gravestone.gui; import gravestone.mod_Gravestone; import gravestone.grave.ModelGrave; import gravestone.grave.ModelHead; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.ObjectOutput; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.packet.Packet250CustomPayload; import net.minecraft.util.StringUtils; import org.lwjgl.opengl.GL11; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.network.PacketDispatcher; public class GuiGraveChoice extends GuiScreen { private float xSize_lo; private float ySize_lo; private int xSize = 0; private int ySize = 0; private short rotationCounter = 0; EntityPlayer thePlayer; public int render; public String price =""; private static ModelGrave grave = new ModelGrave(); private static ModelHead head = new ModelHead(); public NBTTagCompound nbt = new NBTTagCompound(); public GuiGraveChoice(EntityPlayer player) { super(); thePlayer = player; try{ nbt = player.getEntityData().getCompoundTag(player.PERSISTED_NBT_TAG); FMLLog.getLogger().info("Player data exists."); }catch(Throwable e){ player.getEntityData().setCompoundTag(player.PERSISTED_NBT_TAG, new NBTTagCompound(player.PERSISTED_NBT_TAG)); FMLLog.getLogger().info("Player data could not be read."); } try{ render = mod_Gravestone.proxy.getRenderID(player.username); sendPacket(render, 3); FMLLog.getLogger().info("render id set. render id = "+ render); }catch(Throwable e){ FMLLog.getLogger().info("render id corrupt. switching to default render ID"); render = 6; sendPacket(render, 3); } } @Override // adds buttons to the gui screen public void initGui() { this.buttonList.clear(); int posX = (this.width - xSize) / 2; int posY = (this.height - ySize) / 2; this.buttonList.add(new GuiButton(0, posX+150 , posY-100 , 20, 20, "X")); this.buttonList.add(new GuiButton(1, posX+90 , posY-70 , 80, 20, "Cross")); this.buttonList.add(new GuiButton(2, posX+90 , posY-40 , 80, 20, "Classic Grave")); this.buttonList.add(new GuiButton(3, posX+90 , posY-10 , 80, 20, "Tomb")); this.buttonList.add(new GuiButton(4, posX+90 , posY+20 , 80, 20, "Pillar")); this.buttonList.add(new GuiButton(5, posX+90 , posY+50 , 80, 20, "Bust")); this.buttonList.add(new GuiButton(6, posX , posY-70 , 80, 20, "Cheap Cross")); this.buttonList.add(new GuiButton(7, posX , posY-40 , 80, 20, "Stele")); this.buttonList.add(new GuiButton(10, posX-180 , posY+80 , 80, 20, "Set Grave")); // this.buttonList.add(new GuiButton(11, posX-100 , posY , 80 ,20, "clear")); this.buttonList.add(new GuiButton(8, posX , posY-10 , 80, 20, "Angel")); this.buttonList.add(new GuiButton(9, posX , posY+20 , 80, 20, "Knight")); } public void drawScreen(int par1, int par2, float par3) { this.xSize_lo = (float) par1; this.ySize_lo = (float) par2; super.drawScreen(par1, par2, par3); this.mc.renderEngine.bindTexture("/gui/demo_bg.png"); GL11.glColor4f(0.0F, 0.0F, 0.0F, 5.0F); int posX = (this.width - xSize) / 2; int posY = (this.height - ySize) / 2; drawTexturedModalRect(posX, posY, 0, 0, xSize, ySize); fontRenderer.drawSplitString("Choose the Grave you want to spawn when you die.", this.width / 2-84, this.height / 2-100, 150 ,0xffffff); fontRenderer.drawSplitString(""+render, this.width / 2 +140, this.height / 2-95, 150 ,0xffffff); fontRenderer.drawSplitString(price, this.width / 2 -94, this.height / 2+86, 150 ,0x444444); fontRenderer.drawSplitString(price, this.width / 2 -95, this.height / 2+85, 150 ,0xffffff); renderGraves(); } public boolean doesGuiPauseGame() { return false; } @Override // whenever a button is clicked, this is called. // sets the render Integer, the nbt to a new one or buys a grave. public void actionPerformed(GuiButton button) { EntityPlayer p = Minecraft.getMinecraft().thePlayer; if(button.id ==11){ nbt= new NBTTagCompound(); }if (button.id == 10){ getPrice(); buyGrave(); }else if (button.id == 0){ mc.thePlayer.closeScreen(); }else { for(int id = 1; id < 10; id++){ if (button.id == id){ render =id; getPrice(); } } } } //sends a packet public void sendPacket(int ID,int packetNR) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); ObjectOutput out; DataOutputStream outputStream = new DataOutputStream(bytes); try { outputStream.writeInt(packetNR); outputStream.writeInt(ID); Packet250CustomPayload packet = new Packet250CustomPayload("graveData", bytes.toByteArray()); PacketDispatcher.sendPacketToServer(packet); } catch (IOException e) { e.printStackTrace(); } } //Sets an integer to an always reseting nbt tag. Shows a message if the grave is already owned. //works in one instace only public void getPrice(){ if(nbt.hasKey("shop") && nbt.getInteger("shop") == render) price = "Current Grave"; else price = "Grave available"; } // sets an integer to an always reseting nbt tag public void buyGrave() { nbt.setInteger("shop", render); mod_Gravestone.proxy.setRenderID(thePlayer.username, render); if(nbt.hasKey("shop") && nbt.getInteger("shop") == render) price = "Current Grave"; sendPacket(render, 3); } public void renderGraves(){ GL11.glPushMatrix(); grave.showBasic(false); grave.showZerk(false); grave.showTomb(false); grave.showPillar(false); grave.renderSkeleton(false); grave.renderCross(false); grave.renderAngel(false); grave.renderKnight(false); switch(render) { case 1: grave.showBasic(true); mc.renderEngine.bindTexture("/subaraki/gravestone.png"); break; case 2: grave.showZerk(true); try{ mc.renderEngine.bindTexture("/subaraki/gravezerk.png"); }catch(Throwable e){} break; case 3 : grave.showTomb(true); try{ mc.renderEngine.bindTexture("/subaraki/gravestone.png"); }catch(Throwable e){} break; case 4: grave.showPillar(true); grave.renderSkeleton(true); try{ mc.renderEngine.bindTexture("/subaraki/gravepillar.png"); }catch(Throwable e){} break; case 5: grave.showPillar(true); try{ mc.renderEngine.bindTexture("/subaraki/gravepillar.png"); }catch(Throwable e){} break; case 6: grave.renderCross(true);try{ mc.renderEngine.bindTexture("/subaraki/gravewood.png"); }catch(Throwable e){} break; case 7: grave.showPillar(true); try{ mc.renderEngine.bindTexture("/subaraki/gravepillar.png"); }catch(Throwable e){} break; case 8: grave.renderAngel(true); try{ mc.renderEngine.bindTexture("/subaraki/Angel.png"); }catch(Throwable e){} break; case 9: grave.renderKnight(true); try{ mc.renderEngine.bindTexture("/subaraki/knight.png"); }catch(Throwable e){} break; default : grave.showBasic(true); grave.showZerk(false); grave.showTomb(false); grave.showPillar(false); grave.renderCross(false); grave.renderAngel(false); grave.renderKnight(false); try{ mc.renderEngine.bindTexture("/subaraki/gravestone.png"); }catch(Throwable e){} break; } switch(render) { case 4: GL11.glTranslatef(width / 2 - 150, height / 2 - 40, 40); GL11.glScaled(75, 75, -75); break; case 5: GL11.glTranslatef(width / 2 - 150, height / 2 - 40, 40); GL11.glScaled(75, 75, -75); break; case 7: GL11.glTranslatef(width / 2 - 150, height / 2 - 40, 40); GL11.glScaled(75, 75, -75); break; case 8: GL11.glTranslatef(width / 2 - 150, height / 2 - 40, 40); GL11.glScaled(60, 60, -60); break; case 9: GL11.glTranslatef(width / 2 - 150, height / 2 - 40, 40); GL11.glScaled(60, 60, -60); break; default: GL11.glTranslatef(width / 2 - 150, height / 2 - 80, 40); GL11.glScaled(75, 75, -75); break; } GL11.glRotatef((float) 5, 1f, 0f, 0f); GL11.glRotatef(rotationCounter++, 0, 1, 0); grave.renderModel(0.0625f); GL11.glPopMatrix(); switch(render) { case 5: renderBust(); break; default: break; } } public void renderBust() { GL11.glPushMatrix(); if(thePlayer != null) { grave.showBasic(false); grave.showZerk(false); grave.showTomb(false); grave.showPillar(true); grave.renderSkeleton(false); grave.renderCross(false); try{ GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTextureForDownloadableImage("http://skins.minecraft.net/MinecraftSkins/" + StringUtils.stripControlCodes(thePlayer.username) + ".png", "/mob/char.png")); }catch(Throwable e){} GL11.glTranslatef(width / 2-150, height / 2-40, 40); GL11.glScaled(50, 50, -50); GL11.glRotatef((float) 5, 1f, 0f, 0f); GL11.glRotatef(rotationCounter, 0, 1, 0); head.renderHead(0.0625f); GL11.glPopMatrix(); } } } the code comes from a stand alone gui, opened with a keyhandler. But i'll check over the stuff that I save in the block too. only should be the playername, some strings and the integer. p.s. > the integer also gets called out of the proxies, aswell as saved , in an IPlayerTracker https://minecraft.curseforge.com/members/Subaraki/projects
May 22, 201312 yr Author *self bump* i would like to find a solution as soon as possible solved it. i was setting another integer in the main mod file. it would get its value from the proxies, but there's only one mod file, with one integer, so it would get set to the last player who set it's block value. deleted the integer and called in the method getRenderId directly. https://minecraft.curseforge.com/members/Subaraki/projects
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.