Jump to content

Recommended Posts

Posted

I want to give an item on GUIButton click but i dont know how to do this with packets. I have read lots of packet tutorials but i cant seem to find out how to do it. Thanks

Posted

Send a packet to the server telling it that the player pressed a button (if you have multiple buttons you probably want to send a number identifying the button, otherwise an empty packet is enough).

Then on the server, when the packet is received, check if the player can actually access the button (e.g. is in range of your block, is viewing the gui, whatever else...) and if so, give him the appropriate Item.

I know I shouldnt be asking for code but, im desperate. Ive read about how to send packets and stuff but I just cant do it. If you know how, could you please even give me a tiny bit of code to help me understand?

Posted

Show what you have tried.

package MinespressoMod;

import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.item.ItemStack;
import net.minecraft.network.packet.Packet250CustomPayload;
import net.minecraft.util.ResourceLocation;

import org.lwjgl.opengl.GL11;

import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.relauncher.Side;



public class CappuccinoGui extends GuiScreen{
public final int xSizeBackground1 = 248;
public final int ySizeBackground1 = 166;

public ResourceLocation background1 = new ResourceLocation("minedrinks", "textures/gui/CappuccinoBackground.png");
public ResourceLocation Coffee = new ResourceLocation("minedrinks", "textures/items/coffee.png");

@Override
public void actionPerformed(GuiButton guibutton){
	if(guibutton.id == 1){
		Packet250CustomPayload packet = new Packet250CustomPayload();
            packet.channel = "GenericRandom";
           
            Side side = FMLCommonHandler.instance().getEffectiveSide();
            
            if (side == Side.SERVER) {
                   
            } else if (side == Side.CLIENT) {
                    // We are on the client side.
                    EntityClientPlayerMP player = (EntityClientPlayerMP) playerEntity;
                    player.sendQueue.addToSendQueue(packet);
            } else {
                    // We are on the Bukkit server.
            }
           
            return false;
            
		mc.thePlayer.inventory.addItemStackToInventory(par1ItemStack)(1, new ItemStack(Minespresso.Cappuccino));
	}
}


public CappuccinoGui(){

}


public boolean doesGuiPauseGame(){
	return false;
}

public void drawScreen(int i, int j, float f){
     buttonList.add(new GuiButton(1, width / 2 - 70, height / 2 - 40, 130, 20, "Regular Cappuccino"));
     buttonList.add(new GuiButton(2, width / 2 - 70, height / 2 - 15, 130, 20, "Extra Sugary Cappuccino"));
     buttonList.add(new GuiButton(3, width / 2 - 70, height / 2 + 15, 130, 20, "Magical Cappuccino"));
     buttonList.add(new GuiButton(4, width / 2 - 70, height / 2 + 40, 130, 20, "Sugary Magic Cappuccino"));
     
     
     
     
	//Background Texture
	GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        this.mc.getTextureManager().bindTexture(background1);
        int k1 = (this.width - this.xSizeBackground1) / 2;
        int l1 = (this.height - this.ySizeBackground1) / 2;
        this.drawTexturedModalRect(k1, l1, 0, 0, this.xSizeBackground1, this.ySizeBackground1);
        
        super.drawScreen(i, j, f); 
}
}

I Tried this code but the playerEntity is not working and I cant create an EntityPlayer in the parameters

 

Posted

You don't need to check the side, Guis are always Client-only.

So, that packet sending code looks alright to me (although you should use the PacketDispatcher class for simplicity). But you are still adding the Item from your Gui, this will not work because Guis are client-only. You need to do it when the packet is received on the server.

 

And btw: Why are you still working with 1.6.4?

I'm getting there, now all I need is to find a way to give the player an item on button click from within the PacketHandler. I cant give the player an item since there is not EntityPlayer in the onPacketData method. By the way, im using 1.6.4 so I can have my mod for 1.6.4 and 1.7.2

 

Posted

The fact alone that the packet arrives tells you that the button was pressed, because that's when you send it, right? :D

Yea, i just changed that, stupid mistake. But the real problem is I cant give the player an  item because i need an EntityPlayer in the onPacketData method.

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.