Jump to content

Recommended Posts

Posted (edited)

Hi,

 

I want to how I can rename an item. For example I've got an item with which you can open up a GUI and inside of this GUI

you can change the name of the item. I just don't know how to achieve this (besides of sending packets to the Server).

 

Thx in advance.

Bektor

Edited by Bektor

Developer of Primeval Forest.

Posted
1 minute ago, Jay Avery said:

You can use Item#getItemStackDisplayName, to read information from the stack and return the String to display.

Hm, I just don't see how to change with this the name of the item.

Developer of Primeval Forest.

Posted

I'm not sure what else to tell you. You override the method in your class, it takes an ItemStack parameter, and returns a String. The String will be used as the ItemStack's display name. Take a look at the vanilla Item class to see the default implementation.

Posted (edited)

As it seems like stuff changed in the network handler (as it's been a long time I send packets the last time), how

do I execute this code:

 

I mean, the network stuff is now running in an extra thread and so I don't have access to the code I want to execute in my onMessage method.

public class MessageItemNameChanged implements IMessage {
    
    private String name;
    
    /** Default constructor, as it is required. */
    public MessageItemNameChanged() { }
    
    public MessageItemNameChanged(String name) {
        this.name = name;
    }
    
    @Override
    public void fromBytes(ByteBuf buf) {
        ByteBufUtils.readUTF8String(buf);
    }
    
    @Override
    public void toBytes(ByteBuf buf) {
        ByteBufUtils.writeUTF8String(buf, this.name);
    }
    
    public static class MessageItemNameChangedHandler implements IMessageHandler<MessageItemNameChanged, IMessage> {
        
        @Override
        public IMessage onMessage(MessageItemNameChanged message, MessageContext ctx) {
            // This is the player the packet was sent to the server from
            EntityPlayerMP serverPlayer = ctx.getServerHandler().player;
            
            ItemStack stack = serverPlayer.getActiveItemStack();
            stack.setStackDisplayName(message.name);
            
            // No respond packet
            return null;
        }
    }
}

 

Just to mention, the packet gets send from the Client to the Server to inform the server about the change in the name of the item.

Edited by Bektor

Developer of Primeval Forest.

Posted
Just now, Jay Avery said:

There should be no need for packets. Where do you change the item name (where do you send the packet)?

There is a need for sending packets as the code which has the name is Client Side only.

I also don't have any Container stuff, it's just a normal GuiScreen. So the GuiScreen has to send a packet

to the Server as the GuiScreen is client side and the server doesn't know about that stuff.

Developer of Primeval Forest.

Posted

You can wrap your actions you want to perform upon the packet's arrival in a Runnable. Then obtain a IThreadListener for the respective side (Client = Minecraft.getMinecraft().world, server = DimensionManager.getWorld(dimensionID)). That thread listener object has addScheduledTask method to execute your code on that thread. 

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.