diff --git a/build.gradle.kts b/build.gradle.kts index fb3b0965..773e3f85 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { allprojects { group = "com.viaversion" - version = "4.1.0-21w41a-SNAPSHOT" + version = "4.1.0-21w42a-SNAPSHOT" description = "Allow older clients to join newer server versions." } diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_17_1to1_18/packets/BlockItemPackets1_18.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_17_1to1_18/packets/BlockItemPackets1_18.java index 30c88011..e147724e 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_17_1to1_18/packets/BlockItemPackets1_18.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_17_1to1_18/packets/BlockItemPackets1_18.java @@ -21,6 +21,7 @@ import com.viaversion.viabackwards.api.rewriters.ItemRewriter; import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter; import com.viaversion.viabackwards.protocol.protocol1_17_1to1_18.Protocol1_17_1To1_18; import com.viaversion.viabackwards.protocol.protocol1_17_1to1_18.data.BlockEntityIds; +import com.viaversion.viaversion.api.data.ParticleMappings; import com.viaversion.viaversion.api.data.entity.EntityTracker; import com.viaversion.viaversion.api.minecraft.blockentity.BlockEntity; import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk; @@ -34,7 +35,9 @@ import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag; +import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.data.RecipeRewriter1_16; import com.viaversion.viaversion.protocols.protocol1_17_1to1_17.ClientboundPackets1_17_1; +import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17; import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.types.Chunk1_17Type; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.types.Chunk1_18Type; @@ -46,43 +49,74 @@ import java.util.List; public final class BlockItemPackets1_18 extends ItemRewriter { - private static final int WIDTH_BITS = 2; - private static final int HORIZONTAL_MASK = 3; - public BlockItemPackets1_18(final Protocol1_17_1To1_18 protocol, final TranslatableRewriter translatableRewriter) { super(protocol, translatableRewriter); } @Override protected void registerPackets() { - /*final BlockRewriter blockRewriter = new BlockRewriter(protocol, Type.POSITION1_14); + //final BlockRewriter blockRewriter = new BlockRewriter(protocol, Type.POSITION1_14); new RecipeRewriter1_16(protocol).registerDefaultHandler(ClientboundPackets1_18.DECLARE_RECIPES); registerSetCooldown(ClientboundPackets1_18.COOLDOWN); - registerWindowItems(ClientboundPackets1_18.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); - registerSetSlot(ClientboundPackets1_18.SET_SLOT, Type.FLAT_VAR_INT_ITEM); + registerWindowItems1_17_1(ClientboundPackets1_18.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT, Type.FLAT_VAR_INT_ITEM); + registerSetSlot1_17_1(ClientboundPackets1_18.SET_SLOT, Type.FLAT_VAR_INT_ITEM); registerEntityEquipmentArray(ClientboundPackets1_18.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM); registerTradeList(ClientboundPackets1_18.TRADE_LIST, Type.FLAT_VAR_INT_ITEM); registerAdvancements(ClientboundPackets1_18.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); - registerClickWindow1_17(ClientboundPackets1_18.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); + registerClickWindow1_17_1(ServerboundPackets1_17.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); - blockRewriter.registerAcknowledgePlayerDigging(ClientboundPackets1_18.ACKNOWLEDGE_PLAYER_DIGGING); + /*blockRewriter.registerAcknowledgePlayerDigging(ClientboundPackets1_18.ACKNOWLEDGE_PLAYER_DIGGING); blockRewriter.registerBlockAction(ClientboundPackets1_18.BLOCK_ACTION); blockRewriter.registerEffect(ClientboundPackets1_18.EFFECT, 1010, 2001); blockRewriter.registerBlockChange(ClientboundPackets1_18.BLOCK_CHANGE); - blockRewriter.registerVarLongMultiBlockChange(ClientboundPackets1_18.MULTI_BLOCK_CHANGE); + blockRewriter.registerVarLongMultiBlockChange(ClientboundPackets1_18.MULTI_BLOCK_CHANGE);*/ - registerCreativeInvAction(ClientboundPackets1_18.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); - protocol.registerServerbound(ClientboundPackets1_18.EDIT_BOOK, new PacketRemapper() { + registerCreativeInvAction(ServerboundPackets1_17.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); + + protocol.registerClientbound(ClientboundPackets1_18.SPAWN_PARTICLE, new PacketRemapper() { @Override public void registerMap() { - handler(wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM))); + map(Type.INT); // Particle id + map(Type.BOOLEAN); // Override limiter + map(Type.DOUBLE); // X + map(Type.DOUBLE); // Y + map(Type.DOUBLE); // Z + map(Type.FLOAT); // Offset X + map(Type.FLOAT); // Offset Y + map(Type.FLOAT); // Offset Z + map(Type.FLOAT); // Max speed + map(Type.INT); // Particle Count + handler(wrapper -> { + int id = wrapper.get(Type.INT, 0); + if (id == 3) { // Block marker + int blockState = wrapper.read(Type.VAR_INT); + if (blockState == 7786) { // Light block + wrapper.set(Type.INT, 0, 3); + } else { + // Else assume barrier block + wrapper.set(Type.INT, 0, 2); + } + return; + } + + ParticleMappings mappings = protocol.getMappingData().getParticleMappings(); + if (id == mappings.getBlockId() || id == mappings.getFallingDustId()) { + int data = wrapper.passthrough(Type.VAR_INT); + wrapper.set(Type.VAR_INT, 0, protocol.getMappingData().getNewBlockStateId(data)); + } else if (id == mappings.getItemId()) { + handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); + } + + int newId = protocol.getMappingData().getNewParticleId(id); + if (newId != id) { + wrapper.set(Type.INT, 0, newId); + } + }); } }); - registerSpawnParticle(ClientboundPackets1_17_1.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.DOUBLE);*/ - protocol.registerClientbound(ClientboundPackets1_18.BLOCK_ENTITY_DATA, new PacketRemapper() { @Override public void registerMap() { diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_17_1to1_18/packets/EntityPackets1_18.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_17_1to1_18/packets/EntityPackets1_18.java index 8de8788c..fcf2c77a 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_17_1to1_18/packets/EntityPackets1_18.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_17_1to1_18/packets/EntityPackets1_18.java @@ -21,8 +21,14 @@ import com.viaversion.viabackwards.api.rewriters.EntityRewriter; import com.viaversion.viabackwards.protocol.protocol1_17_1to1_18.Protocol1_17_1To1_18; import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types; import com.viaversion.viaversion.api.minecraft.entities.EntityType; +import com.viaversion.viaversion.api.minecraft.metadata.MetaType; +import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_17; +import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_18; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.api.type.types.Particle; +import com.viaversion.viaversion.api.type.types.version.Types1_17; +import com.viaversion.viaversion.api.type.types.version.Types1_18; import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.FloatTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag; @@ -45,8 +51,8 @@ public final class EntityPackets1_18 extends EntityRewriter { + meta.setMetaType(MetaType1_18.byId(meta.metaType().typeId())); + + MetaType type = meta.metaType(); + if (type == MetaType1_18.PARTICLE) { + Particle particle = (Particle) meta.getValue(); + if (particle.getId() == 3) { // Block marker + Particle.ParticleData data = particle.getArguments().remove(0); + int blockState = (int) data.getValue(); + if (blockState == 7786) { // Light block + particle.setId(3); + } else { + // Else assume barrier block + particle.setId(2); + } + return; + } + + rewriteParticle(particle); + } + }); + // Particles have already been handled - //registerMetaTypeHandler(MetaType1_17.ITEM, MetaType1_17.BLOCK_STATE, null, MetaType1_17.OPT_COMPONENT); //TODO correct types + registerMetaTypeHandler(MetaType1_17.ITEM, null, null, null); //TODO } @Override diff --git a/common/src/main/resources/assets/viabackwards/data/mapping-1.17to1.18.json b/common/src/main/resources/assets/viabackwards/data/mapping-1.17to1.18.json index a4373a07..9e760cd5 100644 --- a/common/src/main/resources/assets/viabackwards/data/mapping-1.17to1.18.json +++ b/common/src/main/resources/assets/viabackwards/data/mapping-1.17to1.18.json @@ -3,6 +3,18 @@ "item.bundle.drop_contents": "", "item.bundle.insert": "", "item.bundle.remove_one": "", - "block.growing_plant.crop": "" + "block.growing_plant.crop": "", + "music_disc.otherside": "", + "music.overworld.dripstone_caves": "", + "music.overworld.grove": "", + "music.overworld.jagged_peaks": "", + "music.overworld.lush_caves": "", + "music.overworld.meadow": "", + "music.overworld.frozen_peaks": "", + "music.overworld.snowy_slopes": "", + "music.overworld.stony_peaks": "" + }, + "particles": { + "block_marker": "barrier" } } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4d0c1211..a0121ccc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ metadata.format.version = "1.1" [versions] # ViaVersion -viaver = "4.1.0-21w40a-SNAPSHOT" +viaver = "4.1.0-21w42a-SNAPSHOT" # Common provided netty = "4.0.20.Final"