mirror of
https://github.com/ViaVersion/ViaVersion.git
synced 2024-11-28 21:15:51 +01:00
Fix various issues in hover events serialization
This commit is contained in:
parent
9dd3348510
commit
b13fbbe175
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
|
||||||
|
* Copyright (C) 2023 ViaVersion and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data;
|
||||||
|
|
||||||
|
import com.viaversion.viaversion.util.KeyMappings;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
|
public final class ArmorMaterials1_20_5 {
|
||||||
|
|
||||||
|
private static final KeyMappings MATERIALS = new KeyMappings(
|
||||||
|
"leather",
|
||||||
|
"chainmail",
|
||||||
|
"iron",
|
||||||
|
"gold",
|
||||||
|
"diamond",
|
||||||
|
"turtle",
|
||||||
|
"netherite",
|
||||||
|
"armadillo"
|
||||||
|
);
|
||||||
|
|
||||||
|
public static @Nullable String idToKey(final int id) {
|
||||||
|
return MATERIALS.idToKey(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int keyToId(final String material) {
|
||||||
|
return MATERIALS.keyToId(material);
|
||||||
|
}
|
||||||
|
}
|
@ -20,6 +20,7 @@ package com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data;
|
|||||||
import com.viaversion.viaversion.util.KeyMappings;
|
import com.viaversion.viaversion.util.KeyMappings;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
|
// Same as 1.20.5
|
||||||
public final class Instruments1_20_3 {
|
public final class Instruments1_20_3 {
|
||||||
|
|
||||||
private static final KeyMappings MAPPINGS = new KeyMappings(
|
private static final KeyMappings MAPPINGS = new KeyMappings(
|
||||||
|
@ -469,8 +469,11 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter<Clientboun
|
|||||||
}
|
}
|
||||||
|
|
||||||
final ListTag<CompoundTag> attributeModifiersTag = tag.getListTag("AttributeModifiers", CompoundTag.class);
|
final ListTag<CompoundTag> attributeModifiersTag = tag.getListTag("AttributeModifiers", CompoundTag.class);
|
||||||
|
final boolean showAttributes = (hideFlagsValue & StructuredDataConverter.HIDE_ATTRIBUTES) == 0;
|
||||||
if (attributeModifiersTag != null) {
|
if (attributeModifiersTag != null) {
|
||||||
updateAttributes(data, attributeModifiersTag, (hideFlagsValue & StructuredDataConverter.HIDE_ATTRIBUTES) == 0);
|
updateAttributes(data, attributeModifiersTag, showAttributes);
|
||||||
|
} else if (!showAttributes) {
|
||||||
|
data.set(StructuredDataKey.ATTRIBUTE_MODIFIERS, new AttributeModifiers(new AttributeModifier[0], false));
|
||||||
}
|
}
|
||||||
|
|
||||||
final CompoundTag fireworksTag = tag.getCompoundTag("Fireworks");
|
final CompoundTag fireworksTag = tag.getCompoundTag("Fireworks");
|
||||||
|
@ -73,12 +73,17 @@ import com.viaversion.viaversion.api.minecraft.item.data.WrittenBook;
|
|||||||
import com.viaversion.viaversion.api.protocol.Protocol;
|
import com.viaversion.viaversion.api.protocol.Protocol;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPacket1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPacket1_20_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5To1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5To1_20_3;
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.ArmorMaterials1_20_5;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.Attributes1_20_5;
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.Attributes1_20_5;
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.BannerPatterns1_20_5;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.DyeColors;
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.DyeColors;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.Enchantments1_20_5;
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.Enchantments1_20_5;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.EquipmentSlots1_20_5;
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.EquipmentSlots1_20_5;
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.Instruments1_20_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.PotionEffects1_20_5;
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.PotionEffects1_20_5;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.Potions1_20_5;
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.Potions1_20_5;
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.TrimMaterials1_20_3;
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.TrimPatterns1_20_3;
|
||||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||||
import com.viaversion.viaversion.util.ComponentUtil;
|
import com.viaversion.viaversion.util.ComponentUtil;
|
||||||
import com.viaversion.viaversion.util.Either;
|
import com.viaversion.viaversion.util.Either;
|
||||||
@ -413,6 +418,7 @@ public class ComponentRewriter1_20_5 extends ComponentRewriter<ClientboundPacket
|
|||||||
|
|
||||||
modifiers.add(modifierTag);
|
modifiers.add(modifierTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
tag.put("modifiers", modifiers);
|
tag.put("modifiers", modifiers);
|
||||||
if (!value.showInTooltip()) {
|
if (!value.showInTooltip()) {
|
||||||
tag.putBoolean("show_in_tooltip", false);
|
tag.putBoolean("show_in_tooltip", false);
|
||||||
@ -618,21 +624,27 @@ public class ComponentRewriter1_20_5 extends ComponentRewriter<ClientboundPacket
|
|||||||
final CompoundTag tag = new CompoundTag();
|
final CompoundTag tag = new CompoundTag();
|
||||||
final Holder<ArmorTrimMaterial> material = value.material();
|
final Holder<ArmorTrimMaterial> material = value.material();
|
||||||
if (material.hasId()) {
|
if (material.hasId()) {
|
||||||
tag.putInt("material", material.id());
|
final String trimMaterial = TrimMaterials1_20_3.idToKey(material.id());
|
||||||
|
tag.putString("material", trimMaterial);
|
||||||
} else {
|
} else {
|
||||||
final ArmorTrimMaterial armorTrimMaterial = material.value();
|
final ArmorTrimMaterial armorTrimMaterial = material.value();
|
||||||
final CompoundTag materialTag = new CompoundTag();
|
final CompoundTag materialTag = new CompoundTag();
|
||||||
materialTag.putString("asset_name", armorTrimMaterial.assetName());
|
|
||||||
final String ingredient = Protocol1_20_5To1_20_3.MAPPINGS.getFullItemMappings().identifier(armorTrimMaterial.itemId());
|
final String ingredient = Protocol1_20_5To1_20_3.MAPPINGS.getFullItemMappings().identifier(armorTrimMaterial.itemId());
|
||||||
if (ingredient == null) {
|
if (ingredient == null) {
|
||||||
throw new IllegalArgumentException("Unknown item: " + armorTrimMaterial.itemId());
|
throw new IllegalArgumentException("Unknown item: " + armorTrimMaterial.itemId());
|
||||||
}
|
}
|
||||||
materialTag.putString("ingredient", ingredient);
|
|
||||||
materialTag.putFloat("item_model_index", armorTrimMaterial.itemModelIndex());
|
|
||||||
final CompoundTag overrideArmorMaterialsTag = new CompoundTag();
|
final CompoundTag overrideArmorMaterialsTag = new CompoundTag();
|
||||||
for (final Int2ObjectMap.Entry<String> entry : armorTrimMaterial.overrideArmorMaterials().int2ObjectEntrySet()) {
|
for (final Int2ObjectMap.Entry<String> entry : armorTrimMaterial.overrideArmorMaterials().int2ObjectEntrySet()) {
|
||||||
overrideArmorMaterialsTag.putString(String.valueOf(entry.getIntKey()), entry.getValue());
|
final String materialKey = ArmorMaterials1_20_5.idToKey(entry.getIntKey());
|
||||||
|
if (materialKey != null) {
|
||||||
|
overrideArmorMaterialsTag.putString(materialKey, entry.getValue());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
materialTag.putString("asset_name", armorTrimMaterial.assetName());
|
||||||
|
materialTag.putString("ingredient", ingredient);
|
||||||
|
materialTag.putFloat("item_model_index", armorTrimMaterial.itemModelIndex());
|
||||||
materialTag.put("override_armor_materials", overrideArmorMaterialsTag);
|
materialTag.put("override_armor_materials", overrideArmorMaterialsTag);
|
||||||
materialTag.put("description", armorTrimMaterial.description());
|
materialTag.put("description", armorTrimMaterial.description());
|
||||||
tag.put("material", materialTag);
|
tag.put("material", materialTag);
|
||||||
@ -640,21 +652,26 @@ public class ComponentRewriter1_20_5 extends ComponentRewriter<ClientboundPacket
|
|||||||
|
|
||||||
final Holder<ArmorTrimPattern> pattern = value.pattern();
|
final Holder<ArmorTrimPattern> pattern = value.pattern();
|
||||||
if (pattern.hasId()) {
|
if (pattern.hasId()) {
|
||||||
tag.putInt("pattern", pattern.id());
|
tag.putString("pattern", TrimPatterns1_20_3.idToKey(pattern.id()));
|
||||||
} else {
|
} else {
|
||||||
final ArmorTrimPattern armorTrimPattern = pattern.value();
|
final ArmorTrimPattern armorTrimPattern = pattern.value();
|
||||||
final CompoundTag patternTag = new CompoundTag();
|
final CompoundTag patternTag = new CompoundTag();
|
||||||
patternTag.put("asset_id", convertIdentifier(armorTrimPattern.assetName()));
|
|
||||||
final String templateItem = Protocol1_20_5To1_20_3.MAPPINGS.getFullItemMappings().identifier(armorTrimPattern.itemId());
|
final String templateItem = Protocol1_20_5To1_20_3.MAPPINGS.getFullItemMappings().identifier(armorTrimPattern.itemId());
|
||||||
if (templateItem == null) {
|
if (templateItem == null) {
|
||||||
throw new IllegalArgumentException("Unknown item: " + armorTrimPattern.itemId());
|
throw new IllegalArgumentException("Unknown item: " + armorTrimPattern.itemId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
patternTag.put("asset_id", convertIdentifier(armorTrimPattern.assetName()));
|
||||||
patternTag.putString("template_item", templateItem);
|
patternTag.putString("template_item", templateItem);
|
||||||
patternTag.put("description", armorTrimPattern.description());
|
patternTag.put("description", armorTrimPattern.description());
|
||||||
|
tag.put("pattern", patternTag);
|
||||||
if (armorTrimPattern.decal()) {
|
if (armorTrimPattern.decal()) {
|
||||||
patternTag.putBoolean("decal", true);
|
patternTag.putBoolean("decal", true);
|
||||||
}
|
}
|
||||||
tag.put("pattern", patternTag);
|
}
|
||||||
|
|
||||||
|
if (!value.showInTooltip()) {
|
||||||
|
tag.putBoolean("show_in_tooltip", false);
|
||||||
}
|
}
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
@ -677,13 +694,14 @@ public class ComponentRewriter1_20_5 extends ComponentRewriter<ClientboundPacket
|
|||||||
|
|
||||||
protected Tag convertInstrument(final Holder<Instrument> value) {
|
protected Tag convertInstrument(final Holder<Instrument> value) {
|
||||||
if (value.hasId()) {
|
if (value.hasId()) {
|
||||||
return new IntTag(value.id());
|
return new StringTag(Instruments1_20_3.idToKey(value.id()));
|
||||||
}
|
}
|
||||||
|
|
||||||
final Instrument instrument = value.value();
|
final Instrument instrument = value.value();
|
||||||
final CompoundTag tag = new CompoundTag();
|
final CompoundTag tag = new CompoundTag();
|
||||||
final Holder<SoundEvent> sound = instrument.soundEvent();
|
final Holder<SoundEvent> sound = instrument.soundEvent();
|
||||||
if (sound.hasId()) {
|
if (sound.hasId()) {
|
||||||
tag.putInt("sound_event", sound.id());
|
tag.putString("sound_event", Protocol1_20_5To1_20_3.MAPPINGS.soundName(sound.id()));
|
||||||
} else {
|
} else {
|
||||||
final SoundEvent soundEvent = sound.value();
|
final SoundEvent soundEvent = sound.value();
|
||||||
final CompoundTag soundEventTag = new CompoundTag();
|
final CompoundTag soundEventTag = new CompoundTag();
|
||||||
@ -692,6 +710,7 @@ public class ComponentRewriter1_20_5 extends ComponentRewriter<ClientboundPacket
|
|||||||
soundEventTag.putFloat("range", soundEvent.fixedRange());
|
soundEventTag.putFloat("range", soundEvent.fixedRange());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tag.put("use_duration", convertPositiveInt(instrument.useDuration()));
|
tag.put("use_duration", convertPositiveInt(instrument.useDuration()));
|
||||||
tag.put("range", convertPositiveFloat(instrument.range()));
|
tag.put("range", convertPositiveFloat(instrument.range()));
|
||||||
return tag;
|
return tag;
|
||||||
@ -945,9 +964,10 @@ public class ComponentRewriter1_20_5 extends ComponentRewriter<ClientboundPacket
|
|||||||
|
|
||||||
protected void convertBannerPattern(final CompoundTag tag, final String name, final Holder<BannerPattern> pattern) {
|
protected void convertBannerPattern(final CompoundTag tag, final String name, final Holder<BannerPattern> pattern) {
|
||||||
if (pattern.hasId()) {
|
if (pattern.hasId()) {
|
||||||
tag.putInt(name, pattern.id());
|
tag.putString(name, BannerPatterns1_20_5.idToKey(pattern.id()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final BannerPattern bannerPattern = pattern.value();
|
final BannerPattern bannerPattern = pattern.value();
|
||||||
final CompoundTag patternTag = new CompoundTag();
|
final CompoundTag patternTag = new CompoundTag();
|
||||||
patternTag.put("asset_id", convertIdentifier(bannerPattern.assetId()));
|
patternTag.put("asset_id", convertIdentifier(bannerPattern.assetId()));
|
||||||
|
Loading…
Reference in New Issue
Block a user