Posted April 28, 20178 yr 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 April 29, 20178 yr by Bektor Developer of Primeval Forest.
April 28, 20178 yr You can use Item#getItemStackDisplayName, to read information from the stack and return the String to display.
April 28, 20178 yr 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.
April 28, 20178 yr 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.
April 29, 20178 yr 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 April 29, 20178 yr by Bektor Developer of Primeval Forest.
April 29, 20178 yr There should be no need for packets. Where do you change the item name (where do you send the packet)?
April 29, 20178 yr 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.
April 29, 20178 yr 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.