Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

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.

  • Author
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.

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.

  • Author

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.

  • Author
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.

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

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.