3
0
Mirror von https://github.com/ViaVersion/ViaVersion.git synchronisiert 2024-12-26 16:12:42 +01:00
Dieser Commit ist enthalten in:
Nassim Jahnke 2024-02-29 12:08:29 +01:00
Ursprung 6cdca97d35
Commit 01bb8dedda
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: EF6771C01F6EF02F
9 geänderte Dateien mit 70 neuen und 56 gelöschten Zeilen

Datei anzeigen

@ -26,7 +26,6 @@ import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import com.viaversion.viaversion.api.minecraft.data.StructuredData; import com.viaversion.viaversion.api.minecraft.data.StructuredData;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
@ -96,8 +95,18 @@ public class DataItem implements Item {
} }
@Override @Override
public Int2ObjectMap<Optional<StructuredData<?>>> itemData() { public Int2ObjectMap<Optional<StructuredData<?>>> structuredData() {
return new Int2ObjectOpenHashMap<>(); throw new UnsupportedOperationException();
}
@Override
public void addData(final StructuredData<?> data) {
throw new UnsupportedOperationException();
}
@Override
public void removeDefaultData(final int id) {
throw new UnsupportedOperationException();
} }
@Override @Override

Datei anzeigen

@ -91,7 +91,11 @@ public interface Item {
*/ */
void setTag(@Nullable CompoundTag tag); void setTag(@Nullable CompoundTag tag);
Int2ObjectMap<Optional<StructuredData<?>>> itemData(); Int2ObjectMap<Optional<StructuredData<?>>> structuredData();
void addData(StructuredData<?> data);
void removeDefaultData(int id);
/** /**
* Returns a copy of the item. * Returns a copy of the item.

Datei anzeigen

@ -29,16 +29,16 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import java.util.Optional; import java.util.Optional;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public class DynamicItem implements Item { public class StructuredItem implements Item {
private final Int2ObjectMap<Optional<StructuredData<?>>> data; private final Int2ObjectMap<Optional<StructuredData<?>>> data;
private int identifier; private int identifier;
private byte amount; private byte amount;
public DynamicItem() { public StructuredItem() {
this(0, (byte) 0, new Int2ObjectOpenHashMap<>()); this(0, (byte) 0, new Int2ObjectOpenHashMap<>());
} }
public DynamicItem(int identifier, byte amount, Int2ObjectMap<Optional<StructuredData<?>>> data) { public StructuredItem(final int identifier, final byte amount, final Int2ObjectMap<Optional<StructuredData<?>>> data) {
this.identifier = identifier; this.identifier = identifier;
this.amount = amount; this.amount = amount;
this.data = data; this.data = data;
@ -50,7 +50,7 @@ public class DynamicItem implements Item {
} }
@Override @Override
public void setIdentifier(int identifier) { public void setIdentifier(final int identifier) {
this.identifier = identifier; this.identifier = identifier;
} }
@ -60,7 +60,7 @@ public class DynamicItem implements Item {
} }
@Override @Override
public void setAmount(int amount) { public void setAmount(final int amount) {
if (amount > Byte.MAX_VALUE || amount < Byte.MIN_VALUE) { if (amount > Byte.MAX_VALUE || amount < Byte.MIN_VALUE) {
throw new IllegalArgumentException("Invalid item amount: " + amount); throw new IllegalArgumentException("Invalid item amount: " + amount);
} }
@ -73,34 +73,36 @@ public class DynamicItem implements Item {
} }
@Override @Override
public void setTag(@Nullable CompoundTag tag) { public void setTag(@Nullable final CompoundTag tag) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
@Override @Override
public Int2ObjectMap<Optional<StructuredData<?>>> itemData() { public Int2ObjectMap<Optional<StructuredData<?>>> structuredData() {
return data; return data;
} }
public void addData(StructuredData<?> data) { @Override
public void addData(final StructuredData<?> data) {
this.data.put(data.id(), Optional.of(data)); this.data.put(data.id(), Optional.of(data));
} }
public void removeDefault(int id) { @Override
public void removeDefaultData(final int id) {
// Empty optional to override the Minecraft default // Empty optional to override the Minecraft default
this.data.put(id, Optional.empty()); this.data.put(id, Optional.empty());
} }
@Override @Override
public Item copy() { public StructuredItem copy() {
return new DynamicItem(identifier, amount, data); return new StructuredItem(identifier, amount, new Int2ObjectOpenHashMap<>(data));
} }
@Override @Override
public boolean equals(final Object o) { public boolean equals(final Object o) {
if (this == o) return true; if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; if (o == null || getClass() != o.getClass()) return false;
final DynamicItem that = (DynamicItem) o; final StructuredItem that = (StructuredItem) o;
if (identifier != that.identifier) return false; if (identifier != that.identifier) return false;
if (amount != that.amount) return false; if (amount != that.amount) return false;
return data.equals(that.data); return data.equals(that.data);

Datei anzeigen

@ -22,9 +22,9 @@
*/ */
package com.viaversion.viaversion.api.type.types.item; package com.viaversion.viaversion.api.type.types.item;
import com.viaversion.viaversion.api.minecraft.item.DynamicItem;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.data.StructuredData; import com.viaversion.viaversion.api.minecraft.data.StructuredData;
import com.viaversion.viaversion.api.minecraft.item.StructuredItem;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
@ -50,7 +50,7 @@ public class ItemType1_20_5 extends Type<Item> {
final int id = Type.VAR_INT.readPrimitive(buffer); final int id = Type.VAR_INT.readPrimitive(buffer);
final Int2ObjectMap<Optional<StructuredData<?>>> data = readData(buffer); final Int2ObjectMap<Optional<StructuredData<?>>> data = readData(buffer);
return new DynamicItem(id, amount, data); return new StructuredItem(id, amount, data);
} }
private Int2ObjectMap<Optional<StructuredData<?>>> readData(final ByteBuf buffer) throws Exception { private Int2ObjectMap<Optional<StructuredData<?>>> readData(final ByteBuf buffer) throws Exception {
@ -83,7 +83,7 @@ public class ItemType1_20_5 extends Type<Item> {
buffer.writeByte(object.amount()); buffer.writeByte(object.amount());
Type.VAR_INT.writePrimitive(buffer, object.identifier()); Type.VAR_INT.writePrimitive(buffer, object.identifier());
final Int2ObjectMap<Optional<StructuredData<?>>> data = object.itemData(); final Int2ObjectMap<Optional<StructuredData<?>>> data = object.structuredData();
int valuesSize = 0; int valuesSize = 0;
int markersSize = 0; int markersSize = 0;
for (final Int2ObjectMap.Entry<Optional<StructuredData<?>>> entry : data.int2ObjectEntrySet()) { for (final Int2ObjectMap.Entry<Optional<StructuredData<?>>> entry : data.int2ObjectEntrySet()) {

Datei anzeigen

@ -36,12 +36,11 @@ import java.util.List;
public final class Types1_20_5 { public final class Types1_20_5 {
// Only safe to use after protocol loading // Most of these are only safe to use after protocol loading
public static final ParticleType PARTICLE = new ParticleType(); public static final ParticleType PARTICLE = new ParticleType();
public static final StructuredDataType ITEM_DATA = new StructuredDataType(); public static final StructuredDataType ITEM_DATA = new StructuredDataType();
public static final Type<Item> ITEM = new ItemType1_20_5(ITEM_DATA); public static final Type<Item> ITEM = new ItemType1_20_5(ITEM_DATA);
public static final Type<Item[]> ITEM_ARRAY = new ArrayType<>(ITEM); public static final Type<Item[]> ITEM_ARRAY = new ArrayType<>(ITEM);
public static final MetaTypes1_20_5 META_TYPES = new MetaTypes1_20_5(PARTICLE); public static final MetaTypes1_20_5 META_TYPES = new MetaTypes1_20_5(PARTICLE);
public static final Type<Metadata> METADATA = new MetadataType(META_TYPES); public static final Type<Metadata> METADATA = new MetadataType(META_TYPES);
public static final Type<List<Metadata>> METADATA_LIST = new MetaListType(METADATA); public static final Type<List<Metadata>> METADATA_LIST = new MetaListType(METADATA);

Datei anzeigen

@ -62,7 +62,7 @@ public class InventoryPackets extends ItemRewriter<ClientboundPackets1_12_1, Ser
map(Type.SHORT); // 1 - Slot ID map(Type.SHORT); // 1 - Slot ID
map(Type.ITEM1_8, Type.ITEM1_13); // 2 - Slot Value map(Type.ITEM1_8, Type.ITEM1_13); // 2 - Slot Value
handler(itemToClientHandler(Type.ITEM1_13)); handler(wrapper -> handleItemToClient(wrapper.get(Type.ITEM1_13, 0)));
} }
}); });
protocol.registerClientbound(ClientboundPackets1_12_1.WINDOW_ITEMS, new PacketHandlers() { protocol.registerClientbound(ClientboundPackets1_12_1.WINDOW_ITEMS, new PacketHandlers() {
@ -196,7 +196,7 @@ public class InventoryPackets extends ItemRewriter<ClientboundPackets1_12_1, Ser
map(Type.VAR_INT); // 1 - Slot ID map(Type.VAR_INT); // 1 - Slot ID
map(Type.ITEM1_8, Type.ITEM1_13); // 2 - Item map(Type.ITEM1_8, Type.ITEM1_13); // 2 - Item
handler(itemToClientHandler(Type.ITEM1_13)); handler(wrapper -> handleItemToClient(wrapper.get(Type.ITEM1_13, 0)));
} }
}); });
@ -211,7 +211,7 @@ public class InventoryPackets extends ItemRewriter<ClientboundPackets1_12_1, Ser
map(Type.VAR_INT); // 4 - Mode map(Type.VAR_INT); // 4 - Mode
map(Type.ITEM1_13, Type.ITEM1_8); // 5 - Clicked Item map(Type.ITEM1_13, Type.ITEM1_8); // 5 - Clicked Item
handler(itemToServerHandler(Type.ITEM1_8)); handler(wrapper -> handleItemToServer(wrapper.get(Type.ITEM1_8, 0)));
} }
}); });
@ -253,7 +253,7 @@ public class InventoryPackets extends ItemRewriter<ClientboundPackets1_12_1, Ser
map(Type.SHORT); // 0 - Slot map(Type.SHORT); // 0 - Slot
map(Type.ITEM1_13, Type.ITEM1_8); // 1 - Clicked Item map(Type.ITEM1_13, Type.ITEM1_8); // 1 - Clicked Item
handler(itemToServerHandler(Type.ITEM1_8)); handler(wrapper -> handleItemToServer(wrapper.get(Type.ITEM1_8, 0)));
} }
}); });
} }

Datei anzeigen

@ -22,10 +22,10 @@ import com.github.steveice10.opennbt.tag.builtin.NumberTag;
import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.data.ParticleMappings; import com.viaversion.viaversion.api.data.ParticleMappings;
import com.viaversion.viaversion.api.minecraft.Particle; import com.viaversion.viaversion.api.minecraft.Particle;
import com.viaversion.viaversion.api.minecraft.item.DataItem;
import com.viaversion.viaversion.api.minecraft.item.DynamicItem;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.data.StructuredData; import com.viaversion.viaversion.api.minecraft.data.StructuredData;
import com.viaversion.viaversion.api.minecraft.item.DataItem;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.item.StructuredItem;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2; import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2;
import com.viaversion.viaversion.api.type.types.version.Types1_20_3; import com.viaversion.viaversion.api.type.types.version.Types1_20_3;
@ -175,27 +175,45 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter<Clientboun
if (item == null) return null; if (item == null) return null;
super.handleItemToClient(item); super.handleItemToClient(item);
return toStructuredItem(item);
}
final CompoundTag tag = item.tag(); @Override
final DynamicItem dynamicItem = new DynamicItem(item.identifier(), (byte) item.amount(), new Int2ObjectOpenHashMap<>()); public @Nullable Item handleItemToServer(@Nullable final Item item) {
if (item == null) return null;
super.handleItemToServer(item);
return toOldItem(item);
}
public static Item toOldItem(final Item item) {
final CompoundTag tag = new CompoundTag();
// TODO
return new DataItem(item.identifier(), (byte) item.amount(), (short) 0, tag);
}
public static Item toStructuredItem(final Item old) {
final CompoundTag tag = old.tag();
final StructuredItem item = new StructuredItem(old.identifier(), (byte) old.amount(), new Int2ObjectOpenHashMap<>());
if (tag == null) { if (tag == null) {
return dynamicItem; return item;
} }
// Rewrite nbt to new data structures // Rewrite nbt to new data structures
final NumberTag damage = tag.getNumberTag("Damage"); final NumberTag damage = tag.getNumberTag("Damage");
if (damage != null) { if (damage != null) {
addData(dynamicItem, "damage", Type.VAR_INT, damage.asInt()); addData(item, "damage", Type.VAR_INT, damage.asInt());
} }
final NumberTag repairCost = tag.getNumberTag("RepairCost"); final NumberTag repairCost = tag.getNumberTag("RepairCost");
if (repairCost != null) { if (repairCost != null) {
addData(dynamicItem, "repair_cost", Type.VAR_INT, repairCost.asInt()); addData(item, "repair_cost", Type.VAR_INT, repairCost.asInt());
} }
return dynamicItem; // TODO
return item;
} }
private <T> void addData(final DynamicItem item, final String serializer, final Type<T> type, final T value) { private static <T> void addData(final StructuredItem item, final String serializer, final Type<T> type, final T value) {
final int id = serializerId(serializer); final int id = serializerId(serializer);
if (id == -1) { if (id == -1) {
Via.getPlatform().getLogger().severe("Could not find item data serializer for type " + type); Via.getPlatform().getLogger().severe("Could not find item data serializer for type " + type);
@ -205,17 +223,7 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter<Clientboun
item.addData(new StructuredData<>(type, value, id)); item.addData(new StructuredData<>(type, value, id));
} }
private int serializerId(final String type) { private static int serializerId(final String type) {
return protocol.getMappingData().getDataComponentSerializerMappings().mappedId(type); return Protocol1_20_5To1_20_3.MAPPINGS.getDataComponentSerializerMappings().mappedId(type);
}
@Override
public @Nullable Item handleItemToServer(@Nullable final Item item) {
if (item == null) return null;
super.handleItemToServer(item);
final CompoundTag tag = new CompoundTag();
return new DataItem(item.identifier(), (byte) item.amount(), (short) 0, tag);
} }
} }

Datei anzeigen

@ -528,14 +528,6 @@ public class ItemRewriter<C extends ClientboundPacketType, S extends Serverbound
}; };
} }
public PacketHandler itemToClientHandler(Type<Item> type) {
return wrapper -> handleItemToClient(wrapper.get(type, 0));
}
public PacketHandler itemToServerHandler(Type<Item> type) {
return wrapper -> handleItemToServer(wrapper.get(type, 0));
}
private void handleClientboundItem(final PacketWrapper wrapper) throws Exception { private void handleClientboundItem(final PacketWrapper wrapper) throws Exception {
final Item item = handleItemToClient(wrapper.read(itemType)); final Item item = handleItemToClient(wrapper.read(itemType));
wrapper.write(mappedItemType, item); wrapper.write(mappedItemType, item);

Datei anzeigen

@ -35,7 +35,7 @@ import com.viaversion.viaversion.template.protocols.Protocol1_99To_98;
public final class BlockItemPacketRewriter1_99 extends ItemRewriter<ClientboundPacket1_20_5, ServerboundPacket1_20_5, Protocol1_99To_98> { public final class BlockItemPacketRewriter1_99 extends ItemRewriter<ClientboundPacket1_20_5, ServerboundPacket1_20_5, Protocol1_99To_98> {
public BlockItemPacketRewriter1_99(final Protocol1_99To_98 protocol) { public BlockItemPacketRewriter1_99(final Protocol1_99To_98 protocol) {
super(protocol, Type.ITEM1_20_2, Type.ITEM1_20_2_ARRAY); super(protocol, Type.ITEM1_20_2, Type.ITEM1_20_2_ARRAY); // Add two more types if they changed
} }
@Override @Override