mirror of
https://github.com/ViaVersion/ViaVersion.git
synced 2024-11-25 11:35:18 +01:00
Trim as well
This commit is contained in:
parent
7a6d3d42f1
commit
04e4b9a1f5
@ -97,6 +97,7 @@ import com.viaversion.viaversion.util.Unit;
|
|||||||
import it.unimi.dsi.fastutil.ints.Int2IntMap;
|
import it.unimi.dsi.fastutil.ints.Int2IntMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
|
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||||
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
|
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -154,7 +155,7 @@ public class ComponentRewriter1_20_5<C extends ClientboundPacketType> extends Co
|
|||||||
register(StructuredDataKey.SUSPICIOUS_STEW_EFFECTS, this::suspiciousStewEffectsToTag, this::suspiciousStewEffectsFromTag);
|
register(StructuredDataKey.SUSPICIOUS_STEW_EFFECTS, this::suspiciousStewEffectsToTag, this::suspiciousStewEffectsFromTag);
|
||||||
register(StructuredDataKey.WRITABLE_BOOK_CONTENT, this::writableBookContentToTag, this::writableBookContentFromTag);
|
register(StructuredDataKey.WRITABLE_BOOK_CONTENT, this::writableBookContentToTag, this::writableBookContentFromTag);
|
||||||
register(StructuredDataKey.WRITTEN_BOOK_CONTENT, this::writtenBookContentToTag, this::writtenBookContentFromTag);
|
register(StructuredDataKey.WRITTEN_BOOK_CONTENT, this::writtenBookContentToTag, this::writtenBookContentFromTag);
|
||||||
register(StructuredDataKey.TRIM, this::trimToTag);
|
register(StructuredDataKey.TRIM, this::trimToTag, this::trimFromTag);
|
||||||
register(StructuredDataKey.DEBUG_STICK_STATE, this::debugStickRateToTag, this::debugStickRateFromTag);
|
register(StructuredDataKey.DEBUG_STICK_STATE, this::debugStickRateToTag, this::debugStickRateFromTag);
|
||||||
register(StructuredDataKey.ENTITY_DATA, this::entityDataToTag, this::entityDataFromTag);
|
register(StructuredDataKey.ENTITY_DATA, this::entityDataToTag, this::entityDataFromTag);
|
||||||
register(StructuredDataKey.BUCKET_ENTITY_DATA, this::bucketEntityDataToTag, this::bucketEntityDataFromTag);
|
register(StructuredDataKey.BUCKET_ENTITY_DATA, this::bucketEntityDataToTag, this::bucketEntityDataFromTag);
|
||||||
@ -317,28 +318,28 @@ public class ComponentRewriter1_20_5<C extends ClientboundPacketType> extends Co
|
|||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<StructuredData<?>> toData(final CompoundTag tag) {
|
public List<StructuredData<?>> toData(final UserConnection connection, final CompoundTag tag) {
|
||||||
final List<StructuredData<?>> list = new ArrayList<>();
|
final List<StructuredData<?>> list = new ArrayList<>();
|
||||||
if (tag != null) {
|
if (tag != null) {
|
||||||
for (final Map.Entry<String, Tag> entry : tag.entrySet()) {
|
for (final Map.Entry<String, Tag> entry : tag.entrySet()) {
|
||||||
final StructuredData<?> data = readFromTag(entry.getKey(), entry.getValue());
|
final StructuredData<?> data = readFromTag(connection, entry.getKey(), entry.getValue());
|
||||||
list.add(data);
|
list.add(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StructuredData<?> readFromTag(final String identifier, final Tag tag) {
|
public StructuredData<?> readFromTag(final UserConnection connection, final String identifier, final Tag tag) {
|
||||||
final int id = protocol.getMappingData().getDataComponentSerializerMappings().mappedId(identifier);
|
final int id = protocol.getMappingData().getDataComponentSerializerMappings().mappedId(identifier);
|
||||||
Preconditions.checkArgument(id != -1, "Unknown data component: %s", identifier);
|
Preconditions.checkArgument(id != -1, "Unknown data component: %s", identifier);
|
||||||
final StructuredDataKey<?> key = structuredDataType.key(id);
|
final StructuredDataKey<?> key = structuredDataType.key(id);
|
||||||
return readFromTag(key, id, tag);
|
return readFromTag(connection, key, id, tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> StructuredData<T> readFromTag(final StructuredDataKey<T> key, final int id, final Tag tag) {
|
private <T> StructuredData<T> readFromTag(final UserConnection connection, final StructuredDataKey<T> key, final int id, final Tag tag) {
|
||||||
final TagConverter<T> converter = tagConverter(key);
|
final TagConverter<T> converter = tagConverter(key);
|
||||||
Preconditions.checkNotNull(converter, "No converter found for: %s", key);
|
Preconditions.checkNotNull(converter, "No converter found for: %s", key);
|
||||||
return StructuredData.of(key, converter.convert(tag), id);
|
return StructuredData.of(key, converter.convert(connection, tag), id);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String mappedIdentifier(final int id) {
|
private String mappedIdentifier(final int id) {
|
||||||
@ -814,18 +815,18 @@ public class ComponentRewriter1_20_5<C extends ClientboundPacketType> extends Co
|
|||||||
return itemArrayToTag(connection, value);
|
return itemArrayToTag(connection, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Item[] chargedProjectilesFromTag(final Tag tag) {
|
protected Item[] chargedProjectilesFromTag(final UserConnection connection, final Tag tag) {
|
||||||
final ListTag<CompoundTag> value = (ListTag<CompoundTag>) tag;
|
final ListTag<CompoundTag> value = (ListTag<CompoundTag>) tag;
|
||||||
return itemArrayFromTag(value);
|
return itemArrayFromTag(connection, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ListTag<CompoundTag> bundleContentsToTag(final UserConnection connection, final Item[] value) {
|
protected ListTag<CompoundTag> bundleContentsToTag(final UserConnection connection, final Item[] value) {
|
||||||
return itemArrayToTag(connection, value);
|
return itemArrayToTag(connection, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Item[] bundleContentsFromTag(final Tag tag) {
|
protected Item[] bundleContentsFromTag(final UserConnection connection, final Tag tag) {
|
||||||
final ListTag<CompoundTag> value = (ListTag<CompoundTag>) tag;
|
final ListTag<CompoundTag> value = (ListTag<CompoundTag>) tag;
|
||||||
return itemArrayFromTag(value);
|
return itemArrayFromTag(connection, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected CompoundTag potionContentsToTag(final PotionContents value) {
|
protected CompoundTag potionContentsToTag(final PotionContents value) {
|
||||||
@ -1033,10 +1034,48 @@ public class ComponentRewriter1_20_5<C extends ClientboundPacketType> extends Co
|
|||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ArmorTrim trimFromTag(final Tag tag) {
|
protected ArmorTrim trimFromTag(final UserConnection connection, final Tag tag) {
|
||||||
final CompoundTag value = (CompoundTag) tag;
|
final CompoundTag value = (CompoundTag) tag;
|
||||||
|
|
||||||
return null; //TODO
|
final Tag materialTag = value.get("material");
|
||||||
|
Holder<ArmorTrimMaterial> material;
|
||||||
|
final ArmorTrimStorage trimStorage = connection.get(ArmorTrimStorage.class);
|
||||||
|
if (materialTag instanceof StringTag stringTag) {
|
||||||
|
material = Holder.of(trimStorage.trimMaterials().keyToId(stringTag.getValue()));
|
||||||
|
} else {
|
||||||
|
final CompoundTag materialValue = (CompoundTag) materialTag;
|
||||||
|
final String assetName = identifierFromTag(materialValue.getStringTag("asset_name"));
|
||||||
|
final int ingredient = Protocol1_20_3To1_20_5.MAPPINGS.getFullItemMappings().mappedId(materialValue.getString("ingredient"));
|
||||||
|
final float itemModelIndex = materialValue.getFloat("item_model_index");
|
||||||
|
final Int2ObjectMap<String> overrideArmorMaterials = new Int2ObjectOpenHashMap<>();
|
||||||
|
final CompoundTag overrideArmorMaterialsTag = materialValue.getCompoundTag("override_armor_materials");
|
||||||
|
if (overrideArmorMaterialsTag != null) {
|
||||||
|
for (final Map.Entry<String, Tag> entry : overrideArmorMaterialsTag.entrySet()) {
|
||||||
|
final int materialId = ArmorMaterials1_20_5.keyToId(entry.getKey());
|
||||||
|
if (materialId != -1) {
|
||||||
|
overrideArmorMaterials.put(materialId, ((StringTag) entry.getValue()).getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final Tag description = materialValue.get("description");
|
||||||
|
material = Holder.of(new ArmorTrimMaterial(assetName, ingredient, itemModelIndex, overrideArmorMaterials, description));
|
||||||
|
}
|
||||||
|
|
||||||
|
final Tag patternTag = value.get("pattern");
|
||||||
|
Holder<ArmorTrimPattern> pattern;
|
||||||
|
if (patternTag instanceof StringTag stringTag) {
|
||||||
|
pattern = Holder.of(trimStorage.trimPatterns().keyToId(stringTag.getValue()));
|
||||||
|
} else {
|
||||||
|
final CompoundTag patternValue = (CompoundTag) patternTag;
|
||||||
|
final String assetName = identifierFromTag(patternValue.getStringTag("asset_id"));
|
||||||
|
final int templateItem = Protocol1_20_3To1_20_5.MAPPINGS.getFullItemMappings().mappedId(patternValue.getString("template_item"));
|
||||||
|
final Tag description = patternValue.get("description");
|
||||||
|
final boolean decal = patternValue.getBoolean("decal", false);
|
||||||
|
pattern = Holder.of(new ArmorTrimPattern(assetName, templateItem, description, decal));
|
||||||
|
}
|
||||||
|
|
||||||
|
final boolean showInTooltip = value.getBoolean("show_in_tooltip", true);
|
||||||
|
return new ArmorTrim(material, pattern, showInTooltip);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected CompoundTag debugStickRateToTag(final CompoundTag value) {
|
protected CompoundTag debugStickRateToTag(final CompoundTag value) {
|
||||||
@ -1310,12 +1349,12 @@ public class ComponentRewriter1_20_5<C extends ClientboundPacketType> extends Co
|
|||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Item[] containerFromTag(final Tag tag) {
|
protected Item[] containerFromTag(final UserConnection connection, final Tag tag) {
|
||||||
final ListTag<CompoundTag> value = (ListTag<CompoundTag>) tag;
|
final ListTag<CompoundTag> value = (ListTag<CompoundTag>) tag;
|
||||||
final Item[] items = new Item[27];
|
final Item[] items = new Item[27];
|
||||||
for (final CompoundTag itemTag : value) {
|
for (final CompoundTag itemTag : value) {
|
||||||
final int slot = itemTag.getInt("slot");
|
final int slot = itemTag.getInt("slot");
|
||||||
final Item item = itemFromTag(itemTag.getCompoundTag("item"));
|
final Item item = itemFromTag(connection, itemTag.getCompoundTag("item"));
|
||||||
items[slot] = item;
|
items[slot] = item;
|
||||||
}
|
}
|
||||||
return items;
|
return items;
|
||||||
@ -1503,10 +1542,10 @@ public class ComponentRewriter1_20_5<C extends ClientboundPacketType> extends Co
|
|||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Item[] itemArrayFromTag(final ListTag<CompoundTag> tag) {
|
protected Item[] itemArrayFromTag(final UserConnection connection, final ListTag<CompoundTag> tag) {
|
||||||
final Item[] items = new Item[tag.size()];
|
final Item[] items = new Item[tag.size()];
|
||||||
for (int i = 0; i < tag.size(); i++) {
|
for (int i = 0; i < tag.size(); i++) {
|
||||||
items[i] = itemFromTag(tag.get(i));
|
items[i] = itemFromTag(connection, tag.get(i));
|
||||||
}
|
}
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
@ -1526,10 +1565,10 @@ public class ComponentRewriter1_20_5<C extends ClientboundPacketType> extends Co
|
|||||||
tag.put("components", toTag(connection, components, true));
|
tag.put("components", toTag(connection, components, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Item itemFromTag(final CompoundTag tag) {
|
protected Item itemFromTag(final UserConnection connection, final CompoundTag tag) {
|
||||||
final int id = mappedId(tag.getString("id", ""));
|
final int id = mappedId(tag.getString("id", ""));
|
||||||
final int amount = checkPositiveInt(tag.getInt("count", 1));
|
final int amount = checkPositiveInt(tag.getInt("count", 1));
|
||||||
final List<StructuredData<?>> components = toData(tag.getCompoundTag("components"));
|
final List<StructuredData<?>> components = toData(connection, tag.getCompoundTag("components"));
|
||||||
|
|
||||||
return new StructuredItem(id, amount, new StructuredDataContainer(components.toArray(StructuredData[]::new)));
|
return new StructuredItem(id, amount, new StructuredDataContainer(components.toArray(StructuredData[]::new)));
|
||||||
}
|
}
|
||||||
@ -1816,15 +1855,16 @@ public class ComponentRewriter1_20_5<C extends ClientboundPacketType> extends Co
|
|||||||
converters.put(key, new ConverterPair<>(null, null));
|
converters.put(key, new ConverterPair<>(null, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected <T> void register(final StructuredDataKey<T> key, final DataConverter<T> dataConverter) { // TODO Remove this method
|
|
||||||
converters.put(key, new ConverterPair<>(dataConverter, null));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected <T> void register(final StructuredDataKey<T> key, final SimpleDataConverter<T> dataConverter) {
|
protected <T> void register(final StructuredDataKey<T> key, final SimpleDataConverter<T> dataConverter) {
|
||||||
final DataConverter<T> converter = ($, value) -> dataConverter.convert(value);
|
final DataConverter<T> converter = ($, value) -> dataConverter.convert(value);
|
||||||
converters.put(key, new ConverterPair<>(converter, null));
|
converters.put(key, new ConverterPair<>(converter, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected <T> void register(final StructuredDataKey<T> key, final SimpleDataConverter<T> dataConverter, final SimpleTagConverter<T> tagConverter) {
|
||||||
|
final DataConverter<T> converter = ($, value) -> dataConverter.convert(value);
|
||||||
|
converters.put(key, new ConverterPair<>(converter, (connection, tag) -> tagConverter.convert(tag)));
|
||||||
|
}
|
||||||
|
|
||||||
protected <T> void register(final StructuredDataKey<T> key, final SimpleDataConverter<T> dataConverter, final TagConverter<T> tagConverter) {
|
protected <T> void register(final StructuredDataKey<T> key, final SimpleDataConverter<T> dataConverter, final TagConverter<T> tagConverter) {
|
||||||
final DataConverter<T> converter = ($, value) -> dataConverter.convert(value);
|
final DataConverter<T> converter = ($, value) -> dataConverter.convert(value);
|
||||||
converters.put(key, new ConverterPair<>(converter, tagConverter));
|
converters.put(key, new ConverterPair<>(converter, tagConverter));
|
||||||
@ -1863,11 +1903,17 @@ public class ComponentRewriter1_20_5<C extends ClientboundPacketType> extends Co
|
|||||||
}
|
}
|
||||||
|
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
protected interface TagConverter<T> {
|
protected interface SimpleTagConverter<T> {
|
||||||
|
|
||||||
T convert(final Tag tag);
|
T convert(final Tag tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
protected interface TagConverter<T> {
|
||||||
|
|
||||||
|
T convert(UserConnection connection, Tag tag);
|
||||||
|
}
|
||||||
|
|
||||||
private record ConverterPair<T>(DataConverter<T> dataConverter, TagConverter<T> tagConverter) {
|
private record ConverterPair<T>(DataConverter<T> dataConverter, TagConverter<T> tagConverter) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,8 +39,8 @@ import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets;
|
|||||||
import com.viaversion.viaversion.util.ComponentUtil;
|
import com.viaversion.viaversion.util.ComponentUtil;
|
||||||
import com.viaversion.viaversion.util.SerializerVersion;
|
import com.viaversion.viaversion.util.SerializerVersion;
|
||||||
import com.viaversion.viaversion.util.TagUtil;
|
import com.viaversion.viaversion.util.TagUtil;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
import java.util.BitSet;
|
import java.util.BitSet;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles json and tag components, containing methods to override certain parts of the handling.
|
* Handles json and tag components, containing methods to override certain parts of the handling.
|
||||||
@ -355,7 +355,6 @@ public class ComponentRewriter<C extends ClientboundPacketType> implements com.v
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Until they're properly parsed
|
|
||||||
final CompoundTag componentsTag = contentsTag.getCompoundTag("components");
|
final CompoundTag componentsTag = contentsTag.getCompoundTag("components");
|
||||||
handleShowItem(connection, contentsTag, componentsTag);
|
handleShowItem(connection, contentsTag, componentsTag);
|
||||||
if (componentsTag != null) {
|
if (componentsTag != null) {
|
||||||
|
Loading…
Reference in New Issue
Block a user