Skip to content

Commit

Permalink
Clean up tags rewriting (#3856)
Browse files Browse the repository at this point in the history
  • Loading branch information
RaphiMC committed May 16, 2024
1 parent 1399c90 commit 91f31b5
Show file tree
Hide file tree
Showing 29 changed files with 140 additions and 194 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ public void load() {
this.tags = new EnumMap<>(RegistryType.class);
loadTags(RegistryType.ITEM, tagsTag);
loadTags(RegistryType.BLOCK, tagsTag);
loadTags(RegistryType.ENTITY, tagsTag);
}

loadExtras(data);
Expand Down Expand Up @@ -309,4 +310,4 @@ protected int checkValidity(final int id, final int mappedId, final String type)

protected void loadExtras(final CompoundTag data) {
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ public interface TagRewriter extends MappingDataListener {

void removeTags(String registryKey);

void renameTag(RegistryType type, String registryKey, String renameTo);
void removeTag(RegistryType type, String tagId);

void renameTag(RegistryType type, String tagId, String renameTo);

/**
* Adds an empty tag (since the client crashes if a checked tag is not registered).
Expand Down Expand Up @@ -74,4 +76,4 @@ public interface TagRewriter extends MappingDataListener {
List<TagData> getNewTags(RegistryType tagType);

List<TagData> getOrComputeNewTags(RegistryType tagType);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -151,19 +151,19 @@ public Protocol1_12_2To1_13() {
for (Map.Entry<String, int[]> tag : MAPPINGS.getBlockTags().entrySet()) {
wrapper.write(Types.STRING, tag.getKey());
// Needs copy as other protocols may modify it
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.getValue());
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.getValue().clone());
}
wrapper.write(Types.VAR_INT, MAPPINGS.getItemTags().size()); // item tags
for (Map.Entry<String, int[]> tag : MAPPINGS.getItemTags().entrySet()) {
wrapper.write(Types.STRING, tag.getKey());
// Needs copy as other protocols may modify it
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.getValue());
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.getValue().clone());
}
wrapper.write(Types.VAR_INT, MAPPINGS.getFluidTags().size()); // fluid tags
for (Map.Entry<String, int[]> tag : MAPPINGS.getFluidTags().entrySet()) {
wrapper.write(Types.STRING, tag.getKey());
// Needs copy as other protocols may modify it
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.getValue());
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.getValue().clone());
}
}).scheduleSend(Protocol1_12_2To1_13.class);
};
Expand Down Expand Up @@ -920,4 +920,4 @@ public ItemPacketRewriter1_13 getItemRewriter() {
public ComponentRewriter1_13 getComponentRewriter() {
return componentRewriter;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@

import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.ClientWorld;
import com.viaversion.viaversion.api.minecraft.RegistryType;
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_14;
import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.types.misc.ParticleType;
import com.viaversion.viaversion.api.type.types.version.Types1_13_2;
import com.viaversion.viaversion.api.type.types.version.Types1_14;
Expand All @@ -40,13 +41,15 @@
import com.viaversion.viaversion.rewriter.ComponentRewriter;
import com.viaversion.viaversion.rewriter.SoundRewriter;
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
import com.viaversion.viaversion.rewriter.TagRewriter;
import org.checkerframework.checker.nullness.qual.Nullable;

public class Protocol1_13_2To1_14 extends AbstractProtocol<ClientboundPackets1_13, ClientboundPackets1_14, ServerboundPackets1_13, ServerboundPackets1_14> {

public static final MappingData1_14 MAPPINGS = new MappingData1_14();
private final EntityPacketRewriter1_14 entityRewriter = new EntityPacketRewriter1_14(this);
private final ItemPacketRewriter1_14 itemRewriter = new ItemPacketRewriter1_14(this);
private final TagRewriter<ClientboundPackets1_13> tagRewriter = new TagRewriter<>(this);

public Protocol1_13_2To1_14() {
super(ClientboundPackets1_13.class, ClientboundPackets1_14.class, ServerboundPackets1_13.class, ServerboundPackets1_14.class);
Expand Down Expand Up @@ -76,59 +79,12 @@ protected void registerPackets() {
};
commandRewriter.registerDeclareCommands(ClientboundPackets1_13.COMMANDS);

registerClientbound(ClientboundPackets1_13.UPDATE_TAGS, wrapper -> {
int blockTagsSize = wrapper.read(Types.VAR_INT);
wrapper.write(Types.VAR_INT, blockTagsSize + 6); // block tags
for (int i = 0; i < blockTagsSize; i++) {
wrapper.passthrough(Types.STRING);
int[] blockIds = wrapper.passthrough(Types.VAR_INT_ARRAY_PRIMITIVE);
for (int j = 0; j < blockIds.length; j++) {
blockIds[j] = MAPPINGS.getNewBlockId(blockIds[j]);
}
}
// Minecraft crashes if we not send signs tags
wrapper.write(Types.STRING, "minecraft:signs");
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{
MAPPINGS.getNewBlockId(150), MAPPINGS.getNewBlockId(155)
});
wrapper.write(Types.STRING, "minecraft:wall_signs");
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{
MAPPINGS.getNewBlockId(155)
});
wrapper.write(Types.STRING, "minecraft:standing_signs");
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{
MAPPINGS.getNewBlockId(150)
});
// Fences and walls tags - used for block connections
wrapper.write(Types.STRING, "minecraft:fences");
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{189, 248, 472, 473, 474, 475});
wrapper.write(Types.STRING, "minecraft:walls");
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{271, 272});
wrapper.write(Types.STRING, "minecraft:wooden_fences");
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{189, 472, 473, 474, 475});
int itemTagsSize = wrapper.read(Types.VAR_INT);
wrapper.write(Types.VAR_INT, itemTagsSize + 2); // item tags
for (int i = 0; i < itemTagsSize; i++) {
wrapper.passthrough(Types.STRING);
int[] itemIds = wrapper.passthrough(Types.VAR_INT_ARRAY_PRIMITIVE);
for (int j = 0; j < itemIds.length; j++) {
itemIds[j] = MAPPINGS.getNewItemId(itemIds[j]);
}
}
// Should fix fuel shift clicking
wrapper.write(Types.STRING, "minecraft:signs");
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{
MAPPINGS.getNewItemId(541)
});
// Arrows tag (used by bow)
wrapper.write(Types.STRING, "minecraft:arrows");
wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{526, 825, 826});
int fluidTagsSize = wrapper.passthrough(Types.VAR_INT); // fluid tags
for (int i = 0; i < fluidTagsSize; i++) {
wrapper.passthrough(Types.STRING);
wrapper.passthrough(Types.VAR_INT_ARRAY_PRIMITIVE);
registerClientbound(ClientboundPackets1_13.UPDATE_TAGS, new PacketHandlers() {
@Override
protected void register() {
handler(tagRewriter.getHandler(RegistryType.FLUID));
handler(wrapper -> tagRewriter.appendNewTags(wrapper, RegistryType.ENTITY));
}
wrapper.write(Types.VAR_INT, 0); // new entity tags - do we need to send this?
});

// Set Difficulty packet added in 19w11a
Expand Down Expand Up @@ -157,6 +113,8 @@ protected void onMappingDataLoaded() {
.reader("falling_dust", ParticleType.Readers.BLOCK)
.reader("item", ParticleType.Readers.ITEM1_13_2);

tagRewriter.addEmptyTag(RegistryType.BLOCK, "bamboo_plantable_on");

super.onMappingDataLoaded();
}

Expand All @@ -182,4 +140,9 @@ public EntityPacketRewriter1_14 getEntityRewriter() {
public ItemPacketRewriter1_14 getItemRewriter() {
return itemRewriter;
}
}

@Override
public TagRewriter<ClientboundPackets1_13> getTagRewriter() {
return tagRewriter;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,10 @@ protected void registerPackets() {
protected void onMappingDataLoaded() {
EntityTypes1_15.initialize(this);

int[] shulkerBoxes = new int[17];
int shulkerBoxOffset = 501;
for (int i = 0; i < 17; i++) {
shulkerBoxes[i] = shulkerBoxOffset + i;
}
tagRewriter.addTag(RegistryType.BLOCK, "minecraft:shulker_boxes", shulkerBoxes);
tagRewriter.removeTag(RegistryType.BLOCK, "minecraft:dirt_like");
tagRewriter.addEmptyTag(RegistryType.ITEM, "minecraft:lectern_books");
tagRewriter.addEmptyTags(RegistryType.BLOCK, "minecraft:bee_growables", "minecraft:beehives");
tagRewriter.addEmptyTag(RegistryType.ENTITY, "minecraft:beehive_inhabitors");

super.onMappingDataLoaded();
}
Expand Down Expand Up @@ -101,4 +99,4 @@ public ItemPacketRewriter1_15 getItemRewriter() {
public TagRewriter<ClientboundPackets1_14_4> getTagRewriter() {
return tagRewriter;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -213,56 +213,19 @@ public void register() {

@Override
protected void onMappingDataLoaded() {
int[] wallPostOverrideTag = new int[47];
int arrayIndex = 0;
wallPostOverrideTag[arrayIndex++] = 140;
wallPostOverrideTag[arrayIndex++] = 179;
wallPostOverrideTag[arrayIndex++] = 264;
for (int i = 153; i <= 158; i++) {
wallPostOverrideTag[arrayIndex++] = i;
}
for (int i = 163; i <= 168; i++) {
wallPostOverrideTag[arrayIndex++] = i;
}
for (int i = 408; i <= 439; i++) {
wallPostOverrideTag[arrayIndex++] = i;
}

tagRewriter.addTag(RegistryType.BLOCK, "minecraft:wall_post_override", wallPostOverrideTag);
tagRewriter.addTag(RegistryType.BLOCK, "minecraft:beacon_base_blocks", 133, 134, 148, 265);
tagRewriter.addTag(RegistryType.BLOCK, "minecraft:climbable", 160, 241, 658);
tagRewriter.addTag(RegistryType.BLOCK, "minecraft:fire", 142);
tagRewriter.addTag(RegistryType.BLOCK, "minecraft:campfires", 679);
tagRewriter.addTag(RegistryType.BLOCK, "minecraft:fence_gates", 242, 467, 468, 469, 470, 471);
tagRewriter.addTag(RegistryType.BLOCK, "minecraft:unstable_bottom_center", 242, 467, 468, 469, 470, 471);
tagRewriter.addTag(RegistryType.BLOCK, "minecraft:wooden_trapdoors", 193, 194, 195, 196, 197, 198);
tagRewriter.addTag(RegistryType.ITEM, "minecraft:wooden_trapdoors", 215, 216, 217, 218, 219, 220);
tagRewriter.addTag(RegistryType.ITEM, "minecraft:beacon_payment_items", 529, 530, 531, 760);
tagRewriter.addTag(RegistryType.ENTITY, "minecraft:impact_projectiles", 2, 72, 71, 37, 69, 79, 83, 15, 93);

// The client crashes if we don't send all tags it may use
tagRewriter.addEmptyTag(RegistryType.BLOCK, "minecraft:guarded_by_piglins");
tagRewriter.addEmptyTag(RegistryType.BLOCK, "minecraft:soul_speed_blocks");
tagRewriter.addEmptyTag(RegistryType.BLOCK, "minecraft:soul_fire_base_blocks");
tagRewriter.addEmptyTag(RegistryType.BLOCK, "minecraft:non_flammable_wood");
tagRewriter.addEmptyTag(RegistryType.ITEM, "minecraft:non_flammable_wood");

// The rest of not accessed tags added in older versions; #1830
tagRewriter.addEmptyTags(RegistryType.BLOCK, "minecraft:bamboo_plantable_on", "minecraft:beds", "minecraft:bee_growables",
"minecraft:beehives", "minecraft:coral_plants", "minecraft:crops", "minecraft:dragon_immune", "minecraft:flowers",
"minecraft:portals", "minecraft:shulker_boxes", "minecraft:small_flowers", "minecraft:tall_flowers", "minecraft:trapdoors",
"minecraft:underwater_bonemeals", "minecraft:wither_immune", "minecraft:wooden_fences", "minecraft:wooden_trapdoors");
tagRewriter.addEmptyTags(RegistryType.ENTITY, "minecraft:arrows", "minecraft:beehive_inhabitors", "minecraft:raiders", "minecraft:skeletons");
tagRewriter.addEmptyTags(RegistryType.ITEM, "minecraft:beds", "minecraft:coals", "minecraft:fences", "minecraft:flowers",
"minecraft:lectern_books", "minecraft:music_discs", "minecraft:small_flowers", "minecraft:tall_flowers", "minecraft:trapdoors", "minecraft:walls", "minecraft:wooden_fences");

EntityTypes1_16.initialize(this);
Types1_16.PARTICLE.filler(this)
.reader("block", ParticleType.Readers.BLOCK)
.reader("dust", ParticleType.Readers.DUST)
.reader("falling_dust", ParticleType.Readers.BLOCK)
.reader("item", ParticleType.Readers.ITEM1_13_2);

tagRewriter.addEmptyTags(RegistryType.ITEM, "minecraft:crimson_stems", "minecraft:non_flammable_wood", "minecraft:piglin_loved",
"minecraft:piglin_repellents", "minecraft:soul_fire_base_blocks", "minecraft:warped_stems");
tagRewriter.addEmptyTags(RegistryType.BLOCK, "minecraft:crimson_stems", "minecraft:guarded_by_piglins", "minecraft:hoglin_repellents",
"minecraft:non_flammable_wood", "minecraft:nylium", "minecraft:piglin_repellents", "minecraft:soul_fire_base_blocks", "minecraft:soul_speed_blocks",
"minecraft:strider_warm_blocks", "minecraft:warped_stems");

super.onMappingDataLoaded();
}

Expand Down Expand Up @@ -300,4 +263,4 @@ public ComponentRewriter1_16 getComponentRewriter() {
public TagRewriter<ClientboundPackets1_15> getTagRewriter() {
return tagRewriter;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@
import com.viaversion.viaversion.protocols.v1_15_2to1_16.packet.ClientboundPackets1_16;
import com.viaversion.viaversion.protocols.v1_15_2to1_16.packet.ServerboundPackets1_16;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.data.MappingData1_16_2;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.rewriter.EntityPacketRewriter1_16_2;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ClientboundPackets1_16_2;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ServerboundPackets1_16_2;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.rewriter.EntityPacketRewriter1_16_2;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.rewriter.ItemPacketRewriter1_16_2;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.rewriter.WorldPacketRewriter1_16_2;
import com.viaversion.viaversion.rewriter.SoundRewriter;
Expand Down Expand Up @@ -86,19 +86,7 @@ protected void registerPackets() {
protected void onMappingDataLoaded() {
EntityTypes1_16_2.initialize(this);

tagRewriter.addTag(RegistryType.ITEM, "minecraft:stone_crafting_materials", 14, 962);
tagRewriter.addEmptyTag(RegistryType.BLOCK, "minecraft:mushroom_grow_block");

// The client now wants ALL (previous) tags to be sent, sooooo :>
tagRewriter.addEmptyTags(RegistryType.ITEM, "minecraft:soul_fire_base_blocks", "minecraft:furnace_materials", "minecraft:crimson_stems",
"minecraft:gold_ores", "minecraft:piglin_loved", "minecraft:piglin_repellents", "minecraft:creeper_drop_music_discs",
"minecraft:logs_that_burn", "minecraft:stone_tool_materials", "minecraft:warped_stems");
tagRewriter.addEmptyTags(RegistryType.BLOCK, "minecraft:infiniburn_nether", "minecraft:crimson_stems",
"minecraft:wither_summon_base_blocks", "minecraft:infiniburn_overworld", "minecraft:piglin_repellents",
"minecraft:hoglin_repellents", "minecraft:prevent_mob_spawning_inside", "minecraft:wart_blocks",
"minecraft:stone_pressure_plates", "minecraft:nylium", "minecraft:gold_ores", "minecraft:pressure_plates",
"minecraft:logs_that_burn", "minecraft:strider_warm_blocks", "minecraft:warped_stems", "minecraft:infiniburn_end",
"minecraft:base_stone_nether", "minecraft:base_stone_overworld");
tagRewriter.removeTag(RegistryType.ITEM, "minecraft:furnace_materials");

super.onMappingDataLoaded();
}
Expand Down Expand Up @@ -127,4 +115,4 @@ public ItemPacketRewriter1_16_2 getItemRewriter() {
public TagRewriter<ClientboundPackets1_16> getTagRewriter() {
return tagRewriter;
}
}
}

0 comments on commit 91f31b5

Please sign in to comment.