Fix Inventory not using a Component as title

This commit is contained in:
themode 2021-04-04 15:33:53 +02:00
parent 992f7feb77
commit d6b6d41f41
4 changed files with 29 additions and 17 deletions

View File

@ -1,5 +1,6 @@
package net.minestom.server.data.type; package net.minestom.server.data.type;
import net.kyori.adventure.text.Component;
import net.minestom.server.data.DataType; import net.minestom.server.data.DataType;
import net.minestom.server.inventory.Inventory; import net.minestom.server.inventory.Inventory;
import net.minestom.server.inventory.InventoryType; import net.minestom.server.inventory.InventoryType;
@ -15,7 +16,7 @@ public class InventoryData extends DataType<Inventory> {
final int size = inventoryType.getSize(); final int size = inventoryType.getSize();
// Inventory title & type // Inventory title & type
writer.writeSizedString(value.getTitle()); writer.writeComponent(value.getTitle());
writer.writeSizedString(inventoryType.name()); writer.writeSizedString(inventoryType.name());
// Write all item stacks // Write all item stacks
@ -27,7 +28,7 @@ public class InventoryData extends DataType<Inventory> {
@NotNull @NotNull
@Override @Override
public Inventory decode(@NotNull BinaryReader reader) { public Inventory decode(@NotNull BinaryReader reader) {
final String title = reader.readSizedString(Integer.MAX_VALUE); final Component title = reader.readComponent(Integer.MAX_VALUE);
final InventoryType inventoryType = InventoryType.valueOf(reader.readSizedString(Integer.MAX_VALUE)); final InventoryType inventoryType = InventoryType.valueOf(reader.readSizedString(Integer.MAX_VALUE));
final int size = inventoryType.getSize(); final int size = inventoryType.getSize();

View File

@ -1,5 +1,6 @@
package net.minestom.server.inventory; package net.minestom.server.inventory;
import net.kyori.adventure.text.Component;
import net.minestom.server.Viewable; import net.minestom.server.Viewable;
import net.minestom.server.entity.Player; import net.minestom.server.entity.Player;
import net.minestom.server.inventory.click.ClickType; import net.minestom.server.inventory.click.ClickType;
@ -37,8 +38,8 @@ public class Inventory extends AbstractInventory implements Viewable {
private final byte id; private final byte id;
// the type of this inventory // the type of this inventory
private final InventoryType inventoryType; private final InventoryType inventoryType;
// the title of this inventory) // the title of this inventory
private String title; private Component title;
private final int offset; private final int offset;
@ -48,7 +49,7 @@ public class Inventory extends AbstractInventory implements Viewable {
// (player -> cursor item) map, used by the click listeners // (player -> cursor item) map, used by the click listeners
private final ConcurrentHashMap<Player, ItemStack> cursorPlayersItem = new ConcurrentHashMap<>(); private final ConcurrentHashMap<Player, ItemStack> cursorPlayersItem = new ConcurrentHashMap<>();
public Inventory(@NotNull InventoryType inventoryType, @NotNull String title) { public Inventory(@NotNull InventoryType inventoryType, @NotNull Component title) {
super(inventoryType.getSize()); super(inventoryType.getSize());
this.id = generateId(); this.id = generateId();
this.inventoryType = inventoryType; this.inventoryType = inventoryType;
@ -57,6 +58,14 @@ public class Inventory extends AbstractInventory implements Viewable {
this.offset = getSize(); this.offset = getSize();
} }
/**
* @deprecated use {@link Inventory#Inventory(InventoryType, Component)}
*/
@Deprecated
public Inventory(@NotNull InventoryType inventoryType, @NotNull String title) {
this(inventoryType, Component.text(title));
}
private static byte generateId() { private static byte generateId() {
byte newInventoryId = (byte) LAST_INVENTORY_ID.incrementAndGet(); byte newInventoryId = (byte) LAST_INVENTORY_ID.incrementAndGet();
if (newInventoryId == Byte.MAX_VALUE) if (newInventoryId == Byte.MAX_VALUE)
@ -80,7 +89,7 @@ public class Inventory extends AbstractInventory implements Viewable {
* @return the inventory title * @return the inventory title
*/ */
@NotNull @NotNull
public String getTitle() { public Component getTitle() {
return title; return title;
} }
@ -89,7 +98,7 @@ public class Inventory extends AbstractInventory implements Viewable {
* *
* @param title the new inventory title * @param title the new inventory title
*/ */
public void setTitle(@NotNull String title) { public void setTitle(@NotNull Component title) {
this.title = title; this.title = title;
OpenWindowPacket packet = new OpenWindowPacket(title); OpenWindowPacket packet = new OpenWindowPacket(title);

View File

@ -1,7 +1,6 @@
package net.minestom.server.network.packet.server.play; package net.minestom.server.network.packet.server.play;
import net.minestom.server.chat.ColoredText; import net.kyori.adventure.text.Component;
import net.minestom.server.chat.JsonMessage;
import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacket;
import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.network.packet.server.ServerPacketIdentifier;
import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryReader;
@ -12,26 +11,27 @@ public class OpenWindowPacket implements ServerPacket {
public int windowId; public int windowId;
public int windowType; public int windowType;
public JsonMessage title = ColoredText.of(""); public Component title = Component.text("");
public OpenWindowPacket() {} public OpenWindowPacket() {
}
public OpenWindowPacket(String title) { public OpenWindowPacket(Component title) {
this.title = ColoredText.of(title); this.title = title;
} }
@Override @Override
public void write(@NotNull BinaryWriter writer) { public void write(@NotNull BinaryWriter writer) {
writer.writeVarInt(windowId); writer.writeVarInt(windowId);
writer.writeVarInt(windowType); writer.writeVarInt(windowType);
writer.writeJsonMessage(title); writer.writeComponent(title);
} }
@Override @Override
public void read(@NotNull BinaryReader reader) { public void read(@NotNull BinaryReader reader) {
windowId = reader.readVarInt(); windowId = reader.readVarInt();
windowType = reader.readVarInt(); windowType = reader.readVarInt();
title = reader.readJsonMessage(Integer.MAX_VALUE); title = reader.readComponent(Integer.MAX_VALUE);
} }
@Override @Override

View File

@ -57,13 +57,13 @@ public class PlayerInit {
instanceContainer.enableAutoChunkLoad(true); instanceContainer.enableAutoChunkLoad(true);
instanceContainer.setChunkGenerator(chunkGeneratorDemo); instanceContainer.setChunkGenerator(chunkGeneratorDemo);
inventory = new Inventory(InventoryType.CHEST_1_ROW, "Test inventory"); inventory = new Inventory(InventoryType.CHEST_1_ROW, Component.text("Test inventory"));
/*inventory.addInventoryCondition((p, slot, clickType, inventoryConditionResult) -> { /*inventory.addInventoryCondition((p, slot, clickType, inventoryConditionResult) -> {
p.sendMessage("click type inventory: " + clickType); p.sendMessage("click type inventory: " + clickType);
System.out.println("slot inv: " + slot)0; System.out.println("slot inv: " + slot)0;
inventoryConditionResult.setCancel(slot == 3); inventoryConditionResult.setCancel(slot == 3);
});*/ });*/
//inventory.setItemStack(3, new ItemStack(Material.DIAMOND, (byte) 34)); inventory.setItemStack(3, ItemStack.of(Material.DIAMOND, 34));
{ {
CompassMeta compassMeta = new CompassMeta.Builder() CompassMeta compassMeta = new CompassMeta.Builder()
@ -245,6 +245,8 @@ public class PlayerInit {
//inventory.setChestplate(item); //inventory.setChestplate(item);
} }
player.openInventory(PlayerInit.inventory);
//player.getInventory().addItemStack(new ItemStack(Material.STONE, (byte) 32)); //player.getInventory().addItemStack(new ItemStack(Material.STONE, (byte) 32));
}); });