Jump to content

integer gets set globaly instead of per player.


SenpaiSubaraki

Recommended Posts

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 ^^

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

 

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

Link to comment
Share on other sites

*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.

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

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