Jump to content

kris91268

Members
  • Posts

    57
  • Joined

  • Last visited

Posts posted by kris91268

  1. Hello reader,

     

    I am trying to have a block with a TileEntitySpecialRenderer and a block model have animated textures. The workaround so far that I have is to change the texture every 5 times the method is called in the TileEntitySpecialRenderer implemented class, but this causes some strange behaviours.

     

    If I look at the blocks on a more acute angle, the textures seem to speed up really fast compared to when the player stares at it directly. It also does not stop when the game is paused.

     

    Because of this, I am wandering if there is another way to have block animations with blocks that have models than what I have already got. If there is no other way, does anyone know any OpenGL code to make the block render more correctly (uniform speed no matter what angle)?

     

    An example of my workaround is below:

     

    TileEntityLightBridgeSectionRenderer.java

     

    package kris91268.lbd.Tileentity;
    
    import kris91268.lbd.ModLBD;
    import kris91268.lbd.Models.ModelLightBridgeSection;
    
    import org.lwjgl.opengl.GL11;
    import org.lwjgl.opengl.GL12;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.FontRenderer;
    import net.minecraft.client.renderer.Tessellator;
    import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
    import net.minecraft.util.ResourceLocation;
    import net.minecraft.tileentity.TileEntity;
    
    /**
    * 
    * @author Arbiter
    *
    */
    @SideOnly(Side.CLIENT)
    public class TileEntityLightBridgeSectionRenderer extends TileEntitySpecialRenderer
    {
    private ModelLightBridgeSection model = new ModelLightBridgeSection();
        private byte index;
    
    public void renderAModelAt(TileEntityLightBridgeSection par1TileEntityLightBridgeSection, double par2, double par3, double par4, float par5)
    {
    	int par6 = 0;
    	if (par1TileEntityLightBridgeSection.getWorldObj() != null)
    	{
    		par6 = par1TileEntityLightBridgeSection.getBlockMetadata();
    	}
    	short par7 = (short)(par6 * 90);
    	this.bindTexture(LightTextures.bridgeTextures[index / 5]);
    	if (ModLBD.shouldAnimate)
    	{
    		index++;
    		if (index / 5 == LightTextures.bridgeTextures.length)
    		{
    			index = 0;
    		}
    	}
    	GL11.glPushMatrix();
    	GL11.glTranslatef((float)par2 + 0.5F, (float)par3 + 1.5F, (float)par4 + 0.5F);
    	GL11.glRotatef((float)par7, 0.0F, 1.0F, 0.0F);
    	GL11.glScalef(1.0F, -1.0F, -1.0F);
    	GL11.glDepthMask(true);
    	GL11.glEnable(GL11.GL_BLEND);
    	GL11.glEnable(GL11.GL_LIGHTING);
    	GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);	
    	GL11.glEnable(GL11.GL_TEXTURE_2D);
    	GL11.glDepthMask(false);
    	this.model.renderModel(0.0625F);
    	GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
    	GL11.glPopMatrix();
    }
    public void renderTileEntityAt(TileEntity par1TileEntity, double par2, double par3, double par4, float par5)
    {
    	this.renderAModelAt((TileEntityLightBridgeSection)par1TileEntity, par2, par3, par4, par5);
    }
    }
    

     

     

    The reference to LightTextures.bridgeTextures is simply an array of ResourceLocations for the texture for every frame.

     

    Any help is much appreciated  ;D

  2. Hello,

     

    I have a gravity lift block, which repels you upwards from a certain set height, however I am having problems with that height not saving.

     

    When the GUI is closed, it calls a method directly in the tile entity class to set the height for which the gravity lift would propel you upwards. It does work, but does not save.

     

    I know you must use packets for this, but I have not been able to find a tutorial that teaches what I need - all of the packet tutorials are not for 1.7.2.

     

    I have posted a topic on the Forge Forums a while back about the same issue, but that was for MC 1.6, so it is outdated.

     

    Any help with ways of solving this would be much appreciated! Plus any links to tutorials that have exactly what I need.

     

    Code:

    TileEntityGravityLift.java

     

    package kris91268.lbd.Tileentity;
    
    import kris91268.lbd.ModLBD;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.tileentity.TileEntity;
    
    /**
    * 
    * @author Arbiter
    *
    */
    public class TileEntityGravityLift extends TileEntity
    {
    public float height;
    
    public void readFromNBT(NBTTagCompound par1)
    {
    	super.readFromNBT(par1);
    	height = par1.getFloat("Height");
    }
    public void writeToNBT(NBTTagCompound par1)
    {
    	super.writeToNBT(par1);
    	par1.setFloat("Height", height);
    }
    public void setHeight(float height)
    {
    	this.height = height;
    	this.markDirty();
    	worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
    	worldObj.notifyBlockChange(xCoord, yCoord, zCoord, this.getBlockType());
    }
    }
    

     

     

    GuiGravityLift.java

     

    package kris91268.lbd;
    
    import org.lwjgl.input.Keyboard;
    import kris91268.lbd.Packet.PacketUpdateHeight;
    import kris91268.lbd.Tileentity.TileEntityGravityLift;
    import net.minecraft.client.gui.GuiButton;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.client.gui.GuiTextField;
    import net.minecraft.client.gui.inventory.GuiContainer;
    import net.minecraft.client.network.NetHandlerPlayClient;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.InventoryPlayer;
    import net.minecraft.inventory.Container;
    import net.minecraft.network.play.client.C12PacketUpdateSign;
    import net.minecraft.network.play.client.C17PacketCustomPayload;
    import net.minecraft.util.ResourceLocation;
    
    /**
    * 
    * @author Arbiter
    *
    */
    public class GuiGravityLift extends GuiContainer
    {
    private static final ResourceLocation texture = new ResourceLocation("lbd:textures/gui/gravLift.png");
    public TileEntityGravityLift tileEntity;
    private GuiButton doneButton, decByPointZeroOne, decByPointOne, incByPointOne, incByOnePointZero;
    private GuiTextField number;
    private float liftHeight;
    
    public GuiGravityLift(TileEntityGravityLift tileEntity)
    {
    	super(new ContainerGravityLift());
    	this.tileEntity = tileEntity;
    }
    @Override
    public void drawGuiContainerForegroundLayer(int par1, int par2)
    {
    	this.fontRendererObj.drawString("Gravity Lift", this.xSize / 2 - 
    			this.fontRendererObj.getStringWidth("Gravity Lift") / 2, 6, 4210752);
    }
    @Override
    public void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
    {
    	this.mc.getTextureManager().bindTexture(texture);
    }
    @Override
    public void initGui()
    {
    	this.buttonList.add(this.doneButton = new GuiButton(0, this.width / 2 - 25, this.height / 4 + 35, 50, 20, "Done"));
    	this.buttonList.add(this.decByPointZeroOne = new GuiButton(1, this.width / 2 - 75, this.height / 4 + 0, 40, 20, "-0.1"));
    	this.buttonList.add(this.decByPointOne = new GuiButton(2, this.width / 2 - 75, this.height / 4 + 25, 40, 20, "-1.0"));
    	this.buttonList.add(this.incByPointOne = new GuiButton(3, this.width / 2 + 25, this.height / 4 + 0, 40, 20, "+0.1"));
    	this.buttonList.add(this.incByOnePointZero = new GuiButton(4, this.width / 2 + 25, this.height / 4 + 25, 40, 20, "+1.0"));
    	this.number = new GuiTextField(this.fontRendererObj, this.width / 2 - 20, this.height / 4 + 1, 40, 20);
    	this.number.setVisible(true);
    	this.number.setEnabled(true);
    	this.number.setText(Float.toString(liftHeight));
    }
    @Override
    public void onGuiClosed()
    {
    	Keyboard.enableRepeatEvents(false);
    	this.tileEntity.setHeight(liftHeight);
    }
    @Override
    protected void actionPerformed(GuiButton button)
    {
    	switch (button.id)
    	{
    	case 0:
    		this.mc.displayGuiScreen((GuiScreen)null);
    		break;
    	case 1:
    		liftHeight -= 0.1f;
    		break;
    	case 2:
    		liftHeight -= 1.0f;
    		break;
    	case 3:
    		liftHeight += 0.1f;
    		break;
    	case 4:
    		liftHeight += 1.0f;
    		break;
    	}
    }
    }
    class ContainerGravityLift extends Container
    {
    @Override
    public boolean canInteractWith(EntityPlayer var1) 
    {
    	return true;
    }	
    }
    

     

  3. I am having the following problem with my mod.

     

    When I launch it, I get the following error:

    java.lang.NoSuchFieldError: iron
    at at kris91268.lbd.Blocks.BlockLightBridgeSource.<init>(BlockLightBridgeSource.java:37)
    ...rest ommited...

     

    This only appears to happen when launching my mod with the normal Minecraft launcher; it does not happen in my mod development environment (ForgeGradle)

     

    Snippet of BlockLightBridgeSource.java where the error comes from:

    public BlockLightBridgeSource()
    {
    	super(Material.iron); // this is where the error originates.
    	setHardness(1.5F);
    	setResistance(6.0F);
    	setStepSound(Block.soundTypeMetal);
    	setBlockName("lightBridgeSource");
    	setBlockTextureName("lbd:lightBridgeSource");
    	setCreativeTab(CreativeTabs.tabRedstone);
    }
    

     

    Any help is much appreciated!

    -kris91268

  4. I've used both Scotty's, and GotoLink's suggestions with how I should do this.

     

    I've added an if else statement that sets the value to a string depending on what type of world it is in, here it is below

    if (!world.isRemote)
    {
          worldname = world.getWorldInfo().getWorldName();
    }
    else
    {
         worldname = ModLoader.getMinecraftServerInstance().getFolderName();
    }
    

    I know ModLoader is not ideal, but is the best option avaliable. It works fine clientside, but in a server, it crashes with a FileNotFound exception because it reads from the default saves folder in the .minecraft directory, but that is not where the server holds it's world files. Is there any way for getting the name of the directory for the worlds that the server uses?

  5. if you want to get the worldname then use this:

    (i used it for my wireless redstone to make it transdimensional^^")

     

    You only need to get the world(over entity the world is called worldObj)

     

    String name = world.provider.getDimensionName();

     

    with that you have the name of the Dimension where you are^^

     

    That gets the name of the dimension, I do not need that, I need the name of the world that you set when you name your world on creation so I can save a file for each individual world in the saves folder.

  6. If you're on the client side there is no way you can detect the world name. The client world is always called "MpServer".

     

    Then how does Minecraft know which world you are in, so it can save the contents of the world to the disc under the saves folder? Because I need to save an additional file in there, but I do not know how to detect the name of the world that the player sets on creation.

  7. Hello,

     

    I am writing a new save system for my mod and I am just trying to find out how do you get the name of the world that the current player is logged into? By name, I mean the name that you set when you create a new world or rename one.

     

    Also, is the variable of the name of the world accessible through the EntityPlayer, or the World classes, or if there is another one (Please specify if you do)

     

    Thank you in advance for all of those who can help me

  8. The gui class contains a method to set if you want your gui to pause the game or not, the method looks like this

      public boolean doesGuiPauseGame()
        {
            return true;
        }
    

     

    Just copy and paste that method into your gui file and change the value from true to false, and you should be all good.

  9. You are assigning new values to xSize and ySize, remove these new assignments and keep everything else. The reason is because you are assigning a new value to xSize and ySize, which GuiContainer uses these values to find the size of the inventory window in pixels. I recommend removing these assignments, then tell me how it went.

     

    Change this

    public GuiTub(InventoryPlayer invPlayer, CherTub tub) {
    	super(new ContainerTub(invPlayer, tub));
    	xSize = 176;
    	ySize = 149;
    }
    

     

    to this

    public GuiTub(InventoryPlayer invPlayer, CherTub tub) {
    	super(new ContainerTub(invPlayer, tub));
    }
    

     

    and remove the new assignments

     

    Also where you say,

    Minecraft.getMinecraft().func_110434_K().func_110577_a(
            		new ResourceLocation("row:textures/gui/gui_tub.png"));
    

     

    you don't need to create another instance, GuiContainer already has an instance of Minecraft, it looks like this

    this.mc.func_110434_K().func_110577_a(yourtexturefile)
    

    But you don't need to do the above if you don't want to, it will just decrease the amount of objects (and code that you have to write) and be much easier, totally up to you to change the above code.

     

    If the above methods do not work, I recommend you still remove the new assignments of xSize and ySize, and use the furnace gui texture as your template, just paste over it and remove the furnace bar icons, keep all of the empty space. This worked for me with my gui.

     

    Hope I have been of help to you

  10. I think that it has something to do with your for loop, that could be making the wrong numbers that represent the metadata that you require. Try removing it and declearing each recipe individually (I know, it's a pain to do), that is what i have in a previous mod that I made, and that worked.

  11. I have been doing some work and following the Packet handling tutorial again, and I have successfully sended a packet to the tile entity, and it writes to it's nbt. That is all solved. However, when I collide with the block, it doesn't get the set height for the specific tile entity. How would I retrieve this for use in the block class. Here is the changed files

     

    GuiGravityLift.java

    package kris91268.lbd;
    
    import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import org.lwjgl.input.Keyboard;
    import org.lwjgl.opengl.GL11;
    import cpw.mods.fml.common.FMLCommonHandler;
    import cpw.mods.fml.common.network.PacketDispatcher;
    import cpw.mods.fml.relauncher.Side;
    import kris91268.lbd.Blocks.BlockGravityLift;
    import kris91268.lbd.Packet.PacketBlockChange;
    import kris91268.lbd.Tileentity.TileEntityGravityLift;
    import net.minecraft.client.entity.EntityClientPlayerMP;
    import net.minecraft.client.gui.GuiButton;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.client.gui.GuiTextField;
    import net.minecraft.client.gui.inventory.GuiContainer;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.EntityPlayerMP;
    import net.minecraft.entity.player.InventoryPlayer;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.network.packet.Packet132TileEntityData;
    import net.minecraft.network.packet.Packet250CustomPayload;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ResourceLocation;
    
    /**
    * 
    * @author Arbiter
    *
    */
    public class GuiGravityLift extends GuiContainer
    {
    private static final ResourceLocation texture = new ResourceLocation("lbd:textures/gui/gravlift.png");
    private GuiButton dnButton;
    private GuiButton decByPointZeroOne;
    private GuiButton decByPointOne;
    private GuiButton incByPointOne;
    private GuiButton incByOnePointZero;
    private GuiTextField number;
    public static String gravLiftHeight;
    private TileEntityGravityLift tileEntity;
    public EntityPlayer player;
    
    public GuiGravityLift(InventoryPlayer par1, TileEntityGravityLift par2, EntityPlayer player)
    {
    	super(new ContainerGravityLift(par1, par2));
    	tileEntity = par2;
    	this.player = player;
    }
    @Override
    protected void drawGuiContainerForegroundLayer(int par1, int par2)
    {
    	fontRenderer.drawString("Gravity Lift", 8, 6, 4210752);
    	fontRenderer.drawString("Inventory", 8, ySize - 96 + 2, 4210752);
    }
    @Override
    protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
    {
    	this.mc.func_110434_K().func_110577_a(texture);
    	GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    	int x = (width - xSize) / 2;
    	int y = (height - ySize) / 2;
    	this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
    	this.number.drawTextBox();
    }
    @Override
    public void initGui()
    {
    	super.initGui();
    	Keyboard.enableRepeatEvents(true);
    	this.buttonList.add(this.dnButton = new GuiButton(0, this.width / 2 - 25, this.height / 4 + 35, 50, 20, "Done"));
    	this.buttonList.add(this.decByPointZeroOne = new GuiButton(1, this.width / 2 - 75, this.height / 4 + 0, 40, 20, "-0.1"));
    	this.buttonList.add(this.decByPointOne = new GuiButton(2, this.width / 2 - 75, this.height / 4 + 25, 40, 20, "-1.0"));
    	this.buttonList.add(this.incByPointOne = new GuiButton(3, this.width / 2 + 25, this.height / 4 + 0, 40, 20, "+0.1"));
    	this.buttonList.add(this.incByOnePointZero = new GuiButton(4, this.width / 2 + 25, this.height / 4 + 25, 40, 20, "+1.0"));
    	this.number = new GuiTextField(this.fontRenderer, this.width / 2 - 20, this.height / 4 + 1, 40, 20);
    	this.number.setVisible(true);
    	this.number.setCanLoseFocus(false);
    	this.number.setFocused(true);
    	this.number.setText(tileEntity.height.toString());
    	gravLiftHeight = tileEntity.height.toString();
    }
    public void onGuiClosed()
    {
    	Keyboard.enableRepeatEvents(false);
    	Double theNumber = Double.parseDouble(gravLiftHeight);
    }
    public boolean isAboveZero(String par1Str)
    {
    	Double theDouble = Double.parseDouble(par1Str);
    	return theDouble >= 0.00 ? true : false;
    }
    public boolean isBelowFive(String par1Str)
    {
    	Double theDouble = Double.parseDouble(par1Str);
    	return theDouble <= 5.00 ? true : false;
    }
    public void updateScreen()
    {
    	this.number.updateCursorCounter();
    }
    /**
    public void mouseClicked(int par1, int par2, int par3)
    {
    	super.mouseClicked(par1, par2, par3);
    	this.number.mouseClicked(par1, par2, par3);
    }
    public void keyTyped(char par1, int par2)
    {
    	this.number.textboxKeyTyped(par1, par2);
    	((GuiButton)this.buttonList.get(0)).enabled = this.number.getText().trim().length() > 0;
    	if (par2 == 28 || par2 == 156)
    	{
    		this.actionPerformed((GuiButton)this.buttonList.get(0));
    	}
    }**/
    @Override
    protected void actionPerformed(GuiButton guiButton)
    {
    	int x = tileEntity.xCoord;
    	int y = tileEntity.yCoord;
    	int z = tileEntity.zCoord;
    	switch (guiButton.id)
    	{
    	case 0:
    		this.mc.displayGuiScreen((GuiScreen)null);
    		break;
    	case 1:
    		Double heightInDoubles = Double.parseDouble(gravLiftHeight);
    		if (heightInDoubles != 0.0)
    		{
    			heightInDoubles -= 0.1;
    		}
    		gravLiftHeight = heightInDoubles.toString();
    		number.setText(gravLiftHeight);
    		PacketDispatcher.sendPacketToServer(new PacketBlockChange(heightInDoubles, tileEntity, x, y, z).makePacket());
    		break;
    	case 2:
    		Double heightInDoubles1 = Double.parseDouble(gravLiftHeight);
    		if (heightInDoubles1 < 1.0)
    		{
    			heightInDoubles1 = 0.0;
    		}
    		else
    		{
    			heightInDoubles1 -= 1.0;
    		}
    		gravLiftHeight = heightInDoubles1.toString();
    		number.setText(gravLiftHeight);
    		PacketDispatcher.sendPacketToServer(new PacketBlockChange(heightInDoubles1, tileEntity, x, y, z).makePacket());
    		break;
    	case 3:
    		Double theHeight = Double.parseDouble(gravLiftHeight);
    		if (theHeight != 5.0)
    		{
    			theHeight += 0.1;
    		}
    		gravLiftHeight = theHeight.toString();
    		number.setText(gravLiftHeight);
    		tileEntity.bindHeightToTileEntity(theHeight);
    		PacketDispatcher.sendPacketToServer(new PacketBlockChange(theHeight, tileEntity, x, y, z).makePacket());
    		break;
    	case 4:
    		Double theNumber = Double.parseDouble(gravLiftHeight);
    		if (theNumber > 4.0)
    		{
    			theNumber = 5.0;
    		}
    		else
    		{
    			theNumber += 1.0;
    		}
    		gravLiftHeight = theNumber.toString();
    		number.setText(gravLiftHeight);
    		ByteArrayOutputStream outputStream = new ByteArrayOutputStream(;
    		DataOutputStream dataStream = new DataOutputStream(outputStream);
    		try
    		{
    			dataStream.writeDouble(theNumber);
    			dataStream.writeInt(tileEntity.xCoord);
    			dataStream.writeInt(tileEntity.yCoord);
    			dataStream.writeInt(tileEntity.zCoord);
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    		Packet250CustomPayload packet = new Packet250CustomPayload();
    		packet.channel = "lbd";
    		packet.data = outputStream.toByteArray();
    		packet.length = outputStream.size();
    		Side side = FMLCommonHandler.instance().getEffectiveSide();
    		if (side == Side.SERVER)
    		{
    			EntityPlayerMP playerMP = (EntityPlayerMP)player;
    		}
    		else if (side == Side.CLIENT)
    		{
    			EntityClientPlayerMP clientPlayer = (EntityClientPlayerMP)player;
    			clientPlayer.sendQueue.addToSendQueue(packet);
    		}
    		default:
    			break;
    	}
    }
    }
    

     

    GuiGravityLiftHandler.java

    package kris91268.lbd;
    
    import kris91268.lbd.Tileentity.TileEntityGravityLift;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.world.World;
    import cpw.mods.fml.common.network.IGuiHandler;
    
    /**
    * 
    * @author Arbiter
    *
    */
    public class GuiGravLiftHandler implements IGuiHandler
    {
    @Override
    public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z)
    {
    	TileEntityGravityLift tileEntity = (TileEntityGravityLift)world.getBlockTileEntity(x, y, z);
    	return new ContainerGravityLift(player.inventory, tileEntity);
    }
    @Override
    public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z)
    {
    	TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
    	return tileEntity instanceof TileEntityGravityLift ? new GuiGravityLift(player.inventory, (TileEntityGravityLift)tileEntity, player) : null;
    }
    }
    

     

    TileEntityGravityLift.java

    package kris91268.lbd.Tileentity;
    
    import java.awt.List;
    
    import kris91268.lbd.Blocks.BlockGravityLift;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.inventory.IInventory;
    import net.minecraft.item.ItemStack;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.nbt.NBTTagDouble;
    import net.minecraft.network.packet.Packet;
    import net.minecraft.network.packet.Packet132TileEntityData;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.world.World;
    
    /**
    * 
    * @author Arbiter
    *
    */
    public class TileEntityGravityLift extends TileEntity implements IInventory
    {
    private String aString;
    public Double height = new Double(0.0D);			
    
    public void readFromNBT(NBTTagCompound par1NBTTagCompound)
    {
    	super.readFromNBT(par1NBTTagCompound);
    	height = par1NBTTagCompound.getDouble("height");
    	System.out.println(height);
    }
    public void writeToNBT(NBTTagCompound par1NBTTagCompound)
    {
    	super.writeToNBT(par1NBTTagCompound);
    	par1NBTTagCompound.setDouble("height", height);
    	System.out.println(height);
    }
    public boolean isUsableByPlayer(EntityPlayer par1EntityPlayer)
    {
    	return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : 
    		par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;
    }
    public void something(String par1Str)
    {
    	this.aString = par1Str;
    }
    @Override
    public String getInvName()
    {
    	return "Gravity Lift";
    }
    public void bindHeightToTileEntity(double theHeight)
    {
    	this.height = theHeight;
    	worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
    }
    public double getHeightLevel()
    {
    	return height; 
    }
    public Packet getDescriptionPacket()
    {
    	NBTTagCompound nbt = new NBTTagCompound();
    	this.writeToNBT(nbt);
    	return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 3, nbt);
    }
    @Override
    public int getSizeInventory()
    {		
    	return 0;
    }
    @Override
    public ItemStack getStackInSlot(int i) 
    {
    	return null;
    }
    @Override
    public ItemStack decrStackSize(int i, int j)
    {
    	return null;
    }
    @Override
    public ItemStack getStackInSlotOnClosing(int i)
    {
    	return null;
    }
    @Override
    public void setInventorySlotContents(int i, ItemStack itemstack)
    {
    
    }
    @Override
    public boolean isInvNameLocalized()
    {
    	return false;
    }
    @Override
    public int getInventoryStackLimit()
    {
    	return 64;
    }
    @Override
    public boolean isUseableByPlayer(EntityPlayer entityplayer)
    {
    	return true;
    }
    @Override
    public void openChest()
    {
    
    }
    @Override
    public void closeChest()
    {
    
    }
    @Override
    public boolean isItemValidForSlot(int i, ItemStack itemstack)
    {
    	return false;
    }
    }
    

     

    BlockGravityLift.jaca

    package kris91268.lbd.Blocks;
    
    import java.util.Random;
    import kris91268.lbd.GuiGravityLift;
    import kris91268.lbd.ModLBD;
    import kris91268.lbd.Tileentity.TileEntityGravityLift;
    import cpw.mods.fml.common.registry.BlockProxy;
    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.Entity;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.EntityPlayerMP;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.Icon;
    import net.minecraft.world.World;
    
    /**
    * 
    * @author Arbiter
    *
    */
    public class BlockGravityLift extends BlockContainer implements BlockProxy
    {
    public Class theTileEntityClass;
    
    public BlockGravityLift(int par1, Class<? extends TileEntity> entityClass)
    {
    	super(par1, Material.iron);
    	theTileEntityClass = entityClass;
    	setHardness(1.5F);
    	setResistance(1.0F);
    	setStepSound(Block.soundMetalFootstep);
    	setUnlocalizedName("lbd:gravityLift");
    	func_111022_d("lbd:gravityLift");
    	setCreativeTab(CreativeTabs.tabRedstone);
    	setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.3F, 1.0F);
    }
    public void onEntityCollidedWithBlock(World par1World, int par2, int par3, int par4, Entity par5Entity)
    {
    	par5Entity.fallDistance = 0.0F;
    	TileEntityGravityLift tileEntity = (TileEntityGravityLift)par1World.getBlockTileEntity(par2, par3, par4);
    	double height = tileEntity.getHeightLevel();
    	if (height <= 0.0D)
    	{
    		return;
    	}
    	if (par1World.isRemote)
    	{
    		if (par5Entity instanceof EntityPlayer)
    		{
    			par5Entity.setVelocity(0.0D, height / 2, 0.0D);
    			par5Entity.moveEntity(0.0D, height, 0.0D);
    		}
    	}
    	else
    	{
    		if (par5Entity instanceof EntityPlayerMP)
    		{
    			par5Entity.addVelocity(0.0D, height / 2, 0.0D);
    			par5Entity.moveEntity(0.0D, height, 0.0D);
    		}
    	}
    }
    @Override
    public void onBlockAdded(World par1World, int par2, int par3, int par4)
    {
    	super.onBlockAdded(par1World, par2, par3, par4);
    	par1World.setBlockTileEntity(par2, par3, par4, new TileEntityGravityLift());
    }
    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer player, int metadata, float par7, float par8, float par9)
    {
        if (!par1World.isRemote)
        {
        	TileEntityGravityLift tileEntity = (TileEntityGravityLift)par1World.getBlockTileEntity(par2, par3, par4);
        	if (tileEntity != null)
        	{
        		player.openGui(ModLBD.instance, 0, par1World, par2, par3, par4);
        	}
        }
        return true;
    }
    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
    {
    	double d0 = (double)((float)par2 + 0.5F);
    	double d1 = (double)((float)par3 + 0.3F);
    	double d2 = (double)((float)par4 + 0.5F);
    	par1World.spawnParticle("portal", d0, d1, d2, 0.0D, 0.0D, 0.0D);
    }
    public boolean isOpaqueCube()
    {
    	return false;
    }
    public boolean renderAsNormalBlock()
    {
    	return false;
    }
    public int getRenderType()
    {
    	return -1;
    }
    @Override
    public boolean hasTileEntity(int par1)
    {
    	return true;
    }
    public TileEntity createNewTileEntity(World par1World)
    {
    	try
    	{
    		return new TileEntityGravityLift();
    	}
    	catch (Exception e)
    	{
    		System.out.println("Error creating a new tile entity");
    		return null;
    	}
    }
    }
    

     

    PacketHandler.java

    package kris91268.lbd.Packet;
    
    import java.io.ByteArrayInputStream;
    import java.io.DataInputStream;
    import java.io.IOException;
    import java.util.logging.Logger;
    
    import kris91268.lbd.Packet.PacketBase.ProtocolException;
    import kris91268.lbd.Tileentity.TileEntityGravityLift;
    
    import com.google.common.io.ByteArrayDataInput;
    import com.google.common.io.ByteStreams;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.EntityPlayerMP;
    import net.minecraft.network.INetworkManager;
    import net.minecraft.network.packet.Packet250CustomPayload;
    import cpw.mods.fml.common.network.IPacketHandler;
    import cpw.mods.fml.common.network.Player;
    import cpw.mods.fml.relauncher.Side;
    
    /**
    * 
    * @author Arbiter
    *
    */
    public class PacketHandler implements IPacketHandler
    {
    @Override
    public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player)
    {
    	if (packet.channel.equals("lbd"))
    	{
    		handleHeight(packet, player);
    	}
    }
    private void handleHeight(Packet250CustomPayload packet, Player player)
    {
    	DataInputStream inputStream = new DataInputStream(new ByteArrayInputStream(packet.data));
    	double height;
    	int x; 
    	int y;
    	int z;
    	try
    	{
    		height = inputStream.readDouble();
    		x = inputStream.readInt();
    		y = inputStream.readInt();
    		z = inputStream.readInt();
    	}
    	catch (IOException e)
    	{
    		e.printStackTrace();
    		return;
    	}
    	EntityPlayer entityPlayer = (EntityPlayer)player;
    	TileEntityGravityLift tileEntity = (TileEntityGravityLift)entityPlayer.worldObj.getBlockTileEntity(x, y, z);
    	tileEntity.bindHeightToTileEntity(height);
    }
    }
    

  12. In that case, what do you think I should do? How do you propose I implement the packet sending code.

     

    Here is the files that I have changed

     

    GuiGravityLift.java

    package kris91268.lbd;
    
    import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    
    import org.lwjgl.input.Keyboard;
    import org.lwjgl.opengl.GL11;
    
    import cpw.mods.fml.common.network.PacketDispatcher;
    
    import kris91268.lbd.Blocks.BlockGravityLift;
    import kris91268.lbd.Packet.PacketBlockChange;
    import kris91268.lbd.Tileentity.TileEntityGravityLift;
    import net.minecraft.client.gui.GuiButton;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.client.gui.GuiTextField;
    import net.minecraft.client.gui.inventory.GuiContainer;
    import net.minecraft.entity.player.InventoryPlayer;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.network.packet.Packet132TileEntityData;
    import net.minecraft.network.packet.Packet250CustomPayload;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ResourceLocation;
    
    /**
    * 
    * @author Arbiter
    *
    */
    public class GuiGravityLift extends GuiContainer
    {
    private static final ResourceLocation texture = new ResourceLocation("lbd:textures/gui/gravlift.png");
    private GuiButton dnButton;
    private GuiButton decByPointZeroOne;
    private GuiButton decByPointOne;
    private GuiButton incByPointOne;
    private GuiButton incByOnePointZero;
    private GuiTextField number;
    public static String gravLiftHeight;
    private TileEntityGravityLift tileEntity;
    
    public GuiGravityLift(InventoryPlayer par1, TileEntityGravityLift par2)
    {
    	super(new ContainerGravityLift(par1, par2));
    	tileEntity = par2;
    }
    @Override
    protected void drawGuiContainerForegroundLayer(int par1, int par2)
    {
    	fontRenderer.drawString("Gravity Lift", 8, 6, 4210752);
    	fontRenderer.drawString("Inventory", 8, ySize - 96 + 2, 4210752);
    }
    @Override
    protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
    {
    	this.mc.func_110434_K().func_110577_a(texture);
    	GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    	int x = (width - xSize) / 2;
    	int y = (height - ySize) / 2;
    	this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
    	this.number.drawTextBox();
    }
    @Override
    public void initGui()
    {
    	super.initGui();
    	Keyboard.enableRepeatEvents(true);
    	this.buttonList.add(this.dnButton = new GuiButton(0, this.width / 2 - 25, this.height / 4 + 35, 50, 20, "Done"));
    	this.buttonList.add(this.decByPointZeroOne = new GuiButton(1, this.width / 2 - 75, this.height / 4 + 0, 40, 20, "-0.1"));
    	this.buttonList.add(this.decByPointOne = new GuiButton(2, this.width / 2 - 75, this.height / 4 + 25, 40, 20, "-1.0"));
    	this.buttonList.add(this.incByPointOne = new GuiButton(3, this.width / 2 + 25, this.height / 4 + 0, 40, 20, "+0.1"));
    	this.buttonList.add(this.incByOnePointZero = new GuiButton(4, this.width / 2 + 25, this.height / 4 + 25, 40, 20, "+1.0"));
    	this.number = new GuiTextField(this.fontRenderer, this.width / 2 - 20, this.height / 4 + 1, 40, 20);
    	this.number.setVisible(true);
    	this.number.setCanLoseFocus(false);
    	this.number.setFocused(true);
    	if (tileEntity.height == null)
    	{
    		tileEntity.height = 0.0D;
    		this.number.setText(tileEntity.height.toString());
    		gravLiftHeight = tileEntity.height.toString();
    	}
    	else
    	{
    		this.number.setText(tileEntity.height.toString());
    		gravLiftHeight = tileEntity.height.toString();
    	}
    }
    public void onGuiClosed()
    {
    	Keyboard.enableRepeatEvents(false);
    	Double theNumber = Double.parseDouble(gravLiftHeight);
    	tileEntity.bindHeightToTileEntity(theNumber);
    	String s = "gravlift";
    	ByteArrayOutputStream out = new ByteArrayOutputStream();
    	DataOutputStream dataOut = new DataOutputStream(out);
    	try
    	{
    		dataOut.writeDouble(theNumber);
    		this.mc.getNetHandler().addToSendQueue(new Packet250CustomPayload(s, out.toByteArray()));
    		this.tileEntity.getDescriptionPacket();
    		this.tileEntity.bindHeightToTileEntity(theNumber);
    	}
    	catch (Exception e)
    	{
    		e.printStackTrace();
    	}
    }
    public boolean isAboveZero(String par1Str)
    {
    	Double theDouble = Double.parseDouble(par1Str);
    	return theDouble >= 0.00 ? true : false;
    }
    public boolean isBelowFive(String par1Str)
    {
    	Double theDouble = Double.parseDouble(par1Str);
    	return theDouble <= 5.00 ? true : false;
    }
    public void updateScreen()
    {
    	this.number.updateCursorCounter();
    }
    /**
    public void mouseClicked(int par1, int par2, int par3)
    {
    	super.mouseClicked(par1, par2, par3);
    	this.number.mouseClicked(par1, par2, par3);
    }
    public void keyTyped(char par1, int par2)
    {
    	this.number.textboxKeyTyped(par1, par2);
    	((GuiButton)this.buttonList.get(0)).enabled = this.number.getText().trim().length() > 0;
    	if (par2 == 28 || par2 == 156)
    	{
    		this.actionPerformed((GuiButton)this.buttonList.get(0));
    	}
    }**/
    @Override
    protected void actionPerformed(GuiButton guiButton)
    {
    	int x = tileEntity.xCoord;
    	int y = tileEntity.yCoord;
    	int z = tileEntity.zCoord;
    	switch (guiButton.id)
    	{
    	case 0:
    		this.mc.displayGuiScreen((GuiScreen)null);
    		break;
    	case 1:
    		Double heightInDoubles = Double.parseDouble(gravLiftHeight);
    		if (heightInDoubles != 0.0)
    		{
    			heightInDoubles -= 0.1;
    		}
    		gravLiftHeight = heightInDoubles.toString();
    		number.setText(gravLiftHeight);
    		PacketDispatcher.sendPacketToServer(new PacketBlockChange(heightInDoubles, tileEntity, x, y, z).makePacket());
    		break;
    	case 2:
    		Double heightInDoubles1 = Double.parseDouble(gravLiftHeight);
    		if (heightInDoubles1 < 1.0)
    		{
    			heightInDoubles1 = 0.0;
    		}
    		else
    		{
    			heightInDoubles1 -= 1.0;
    		}
    		gravLiftHeight = heightInDoubles1.toString();
    		number.setText(gravLiftHeight);
    		PacketDispatcher.sendPacketToServer(new PacketBlockChange(heightInDoubles1, tileEntity, x, y, z).makePacket());
    		break;
    	case 3:
    		Double theHeight = Double.parseDouble(gravLiftHeight);
    		if (theHeight != 5.0)
    		{
    			theHeight += 0.1;
    		}
    		gravLiftHeight = theHeight.toString();
    		number.setText(gravLiftHeight);
    		tileEntity.bindHeightToTileEntity(theHeight);
    		PacketDispatcher.sendPacketToServer(new PacketBlockChange(theHeight, tileEntity, x, y, z).makePacket());
    		break;
    	case 4:
    		Double theNumber = Double.parseDouble(gravLiftHeight);
    		if (theNumber > 4.0)
    		{
    			theNumber = 5.0;
    		}
    		else
    		{
    			theNumber += 1.0;
    		}
    		gravLiftHeight = theNumber.toString();
    		number.setText(gravLiftHeight);
    		String s = "gravlift";
    		ByteArrayOutputStream out = new ByteArrayOutputStream();
    		DataOutputStream dataOut = new DataOutputStream(out);
    		try
    		{
    			dataOut.writeDouble(theNumber);
    			this.mc.getNetHandler().addToSendQueue(new Packet250CustomPayload(s, out.toByteArray()));
    			tileEntity.getDescriptionPacket();
    			this.tileEntity.bindHeightToTileEntity(theNumber);
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    		default:
    			break;
    	}
    }
    }
    

     

    TileEntityGravityLift.java

    package kris91268.lbd.Tileentity;
    
    import java.awt.List;
    
    import kris91268.lbd.Blocks.BlockGravityLift;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.inventory.IInventory;
    import net.minecraft.item.ItemStack;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.nbt.NBTTagDouble;
    import net.minecraft.network.packet.Packet;
    import net.minecraft.network.packet.Packet132TileEntityData;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.world.World;
    
    /**
    * 
    * @author Arbiter
    *
    */
    public class TileEntityGravityLift extends TileEntity implements IInventory
    {
    private String aString;
    public Double height;		
    
    public void readFromNBT(NBTTagCompound par1NBTTagCompound)
    {
    	super.readFromNBT(par1NBTTagCompound);
    	height = par1NBTTagCompound.getDouble("height");
    	System.out.println(height);
    }
    public void writeToNBT(NBTTagCompound par1NBTTagCompound)
    {
    	super.writeToNBT(par1NBTTagCompound);
    	par1NBTTagCompound.setDouble("height", height);
    	System.out.println(height);
    }
    public boolean isUsableByPlayer(EntityPlayer par1EntityPlayer)
    {
    	return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : 
    		par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;
    }
    public void something(String par1Str)
    {
    	this.aString = par1Str;
    }
    @Override
    public String getInvName()
    {
    	return "Gravity Lift";
    }
    public void bindHeightToTileEntity(double theHeight)
    {
    	this.height = theHeight;
    	worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
    }
    public double getHeightLevel()
    {
    	return this.height; 
    }
    public Packet getDescriptionPacket()
    {
    	NBTTagCompound nbt = new NBTTagCompound();
    	this.writeToNBT(nbt);
    	return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 3, nbt);
    }
    @Override
    public int getSizeInventory()
    {		
    	return 0;
    }
    @Override
    public ItemStack getStackInSlot(int i) 
    {
    	return null;
    }
    @Override
    public ItemStack decrStackSize(int i, int j)
    {
    	return null;
    }
    @Override
    public ItemStack getStackInSlotOnClosing(int i)
    {
    	return null;
    }
    @Override
    public void setInventorySlotContents(int i, ItemStack itemstack)
    {
    
    }
    @Override
    public boolean isInvNameLocalized()
    {
    	return false;
    }
    @Override
    public int getInventoryStackLimit()
    {
    	return 64;
    }
    @Override
    public boolean isUseableByPlayer(EntityPlayer entityplayer)
    {
    	return true;
    }
    @Override
    public void openChest()
    {
    
    }
    @Override
    public void closeChest()
    {
    
    }
    @Override
    public boolean isItemValidForSlot(int i, ItemStack itemstack)
    {
    	return false;
    }
    }
    

  13. You would need the block class to extend off BlockContainer, and have a tile entity class linked to that block. Follow the Container part of the Containers and GUI's tutorial to see how to make a container for a block, and how to make the resulting gui. I would recommend looking at the Tile Entities tutorials so you understand Tile Entities fully.

×
×
  • Create New...

Important Information

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