Mirror von
https://github.com/ViaVersion/ViaBackwards.git
synchronisiert 2024-10-05 01:41:05 +02:00
Greatly reduce the number of inner classes
Dieser Commit ist enthalten in:
Ursprung
8715c243c9
Commit
82c01c4b2d
@ -18,14 +18,13 @@
|
|||||||
package com.viaversion.viabackwards;
|
package com.viaversion.viabackwards;
|
||||||
|
|
||||||
import com.viaversion.viaversion.util.Config;
|
import com.viaversion.viaversion.util.Config;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public class ViaBackwardsConfig extends Config implements com.viaversion.viabackwards.api.ViaBackwardsConfig {
|
public class ViaBackwardsConfig extends Config implements com.viaversion.viabackwards.api.ViaBackwardsConfig {
|
||||||
|
|
||||||
|
@ -55,7 +55,6 @@ import com.viaversion.viaversion.api.Via;
|
|||||||
import com.viaversion.viaversion.api.protocol.ProtocolManager;
|
import com.viaversion.viaversion.api.protocol.ProtocolManager;
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
||||||
import com.viaversion.viaversion.update.Version;
|
import com.viaversion.viaversion.update.Version;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
@ -26,10 +26,9 @@ import com.viaversion.viaversion.api.data.Mappings;
|
|||||||
import com.viaversion.viaversion.api.protocol.Protocol;
|
import com.viaversion.viaversion.api.protocol.Protocol;
|
||||||
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
|
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonObject;
|
import com.viaversion.viaversion.libs.gson.JsonObject;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public class BackwardsMappings extends MappingDataBase {
|
public class BackwardsMappings extends MappingDataBase {
|
||||||
|
|
||||||
|
@ -29,8 +29,6 @@ import com.viaversion.viaversion.libs.gson.JsonObject;
|
|||||||
import com.viaversion.viaversion.libs.gson.JsonPrimitive;
|
import com.viaversion.viaversion.libs.gson.JsonPrimitive;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonSyntaxException;
|
import com.viaversion.viaversion.libs.gson.JsonSyntaxException;
|
||||||
import com.viaversion.viaversion.util.GsonUtil;
|
import com.viaversion.viaversion.util.GsonUtil;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -38,6 +36,7 @@ import java.io.InputStream;
|
|||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public final class VBMappingDataLoader {
|
public final class VBMappingDataLoader {
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@ package com.viaversion.viabackwards.api.data;
|
|||||||
import com.viaversion.viaversion.api.data.IntArrayMappings;
|
import com.viaversion.viaversion.api.data.IntArrayMappings;
|
||||||
import com.viaversion.viaversion.api.data.MappingDataLoader;
|
import com.viaversion.viaversion.api.data.MappingDataLoader;
|
||||||
import com.viaversion.viaversion.api.data.Mappings;
|
import com.viaversion.viaversion.api.data.Mappings;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
public final class VBMappings extends IntArrayMappings {
|
public final class VBMappings extends IntArrayMappings {
|
||||||
|
@ -22,9 +22,8 @@ import com.viaversion.viabackwards.ViaBackwards;
|
|||||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public class EntityData {
|
public class EntityData {
|
||||||
private final BackwardsProtocol<?, ?, ?, ?> protocol;
|
private final BackwardsProtocol<?, ?, ?, ?> protocol;
|
||||||
|
@ -24,7 +24,6 @@ import com.viaversion.viaversion.api.connection.UserConnection;
|
|||||||
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
|
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class EntityPositionHandler {
|
public class EntityPositionHandler {
|
||||||
|
@ -19,9 +19,8 @@
|
|||||||
package com.viaversion.viabackwards.api.entities.storage;
|
package com.viaversion.viabackwards.api.entities.storage;
|
||||||
|
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public final class WrappedMetadata {
|
public final class WrappedMetadata {
|
||||||
private final List<Metadata> metadataList;
|
private final List<Metadata> metadataList;
|
||||||
|
@ -25,7 +25,6 @@ import com.viaversion.viaversion.libs.opennbt.tag.builtin.ShortTag;
|
|||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
@ -24,7 +24,7 @@ import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
|
|||||||
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_14;
|
import com.viaversion.viaversion.api.type.types.version.Types1_14;
|
||||||
|
|
||||||
@ -40,9 +40,9 @@ public abstract class EntityRewriter<C extends ClientboundPacketType, T extends
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerTrackerWithData(C packetType, EntityType fallingBlockType) {
|
public void registerTrackerWithData(C packetType, EntityType fallingBlockType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - Entity UUID
|
map(Type.UUID); // 1 - Entity UUID
|
||||||
map(Type.VAR_INT); // 2 - Entity Type
|
map(Type.VAR_INT); // 2 - Entity Type
|
||||||
@ -59,9 +59,9 @@ public abstract class EntityRewriter<C extends ClientboundPacketType, T extends
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerTrackerWithData1_19(C packetType, EntityType fallingBlockType) {
|
public void registerTrackerWithData1_19(C packetType, EntityType fallingBlockType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Entity id
|
map(Type.VAR_INT); // Entity id
|
||||||
map(Type.UUID); // Entity UUID
|
map(Type.UUID); // Entity UUID
|
||||||
map(Type.VAR_INT); // Entity type
|
map(Type.VAR_INT); // Entity type
|
||||||
@ -100,9 +100,9 @@ public abstract class EntityRewriter<C extends ClientboundPacketType, T extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void registerSpawnTracker(C packetType) {
|
public void registerSpawnTracker(C packetType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Entity UUID
|
map(Type.UUID); // 1 - Entity UUID
|
||||||
map(Type.VAR_INT); // 2 - Entity Type
|
map(Type.VAR_INT); // 2 - Entity Type
|
||||||
|
@ -67,15 +67,15 @@ public abstract class EntityRewriterBase<C extends ClientboundPacketType, T exte
|
|||||||
public void handleMetadata(int entityId, List<Metadata> metadataList, UserConnection connection) {
|
public void handleMetadata(int entityId, List<Metadata> metadataList, UserConnection connection) {
|
||||||
final TrackedEntity entity = tracker(connection).entity(entityId);
|
final TrackedEntity entity = tracker(connection).entity(entityId);
|
||||||
final boolean initialMetadata = !(entity != null && entity.hasSentMetadata());
|
final boolean initialMetadata = !(entity != null && entity.hasSentMetadata());
|
||||||
|
|
||||||
super.handleMetadata(entityId, metadataList, connection);
|
super.handleMetadata(entityId, metadataList, connection);
|
||||||
|
|
||||||
if (entity == null) {
|
if (entity == null) {
|
||||||
return; // Don't handle untracked entities - basically always the fault of a plugin sending virtual entities through concurrency-unsafe handling
|
return; // Don't handle untracked entities - basically always the fault of a plugin sending virtual entities through concurrency-unsafe handling
|
||||||
}
|
}
|
||||||
|
|
||||||
final EntityData entityData = entityDataForType(entity.entityType());
|
|
||||||
|
|
||||||
// Set the mapped entity name if there is no custom name set already
|
// Set the mapped entity name if there is no custom name set already
|
||||||
|
final EntityData entityData = entityDataForType(entity.entityType());
|
||||||
if (entityData != null && entityData.mobName() != null) {
|
if (entityData != null && entityData.mobName() != null) {
|
||||||
final Metadata displayName = getMeta(displayNameIndex, metadataList);
|
final Metadata displayName = getMeta(displayNameIndex, metadataList);
|
||||||
if (initialMetadata) {
|
if (initialMetadata) {
|
||||||
|
@ -22,7 +22,7 @@ import com.viaversion.viabackwards.api.data.MappedItem;
|
|||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
|
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ByteTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ByteTag;
|
||||||
@ -122,9 +122,9 @@ public class ItemRewriter<C extends ClientboundPacketType, S extends Serverbound
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerAdvancements(C packetType, Type<Item> type) {
|
public void registerAdvancements(C packetType, Type<Item> type) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Reset/clear
|
wrapper.passthrough(Type.BOOLEAN); // Reset/clear
|
||||||
final int size = wrapper.passthrough(Type.VAR_INT); // Mapping size
|
final int size = wrapper.passthrough(Type.VAR_INT); // Mapping size
|
||||||
|
@ -42,10 +42,9 @@ import com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag;
|
|||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public abstract class LegacyBlockItemRewriter<C extends ClientboundPacketType, S extends ServerboundPacketType,
|
public abstract class LegacyBlockItemRewriter<C extends ClientboundPacketType, S extends ServerboundPacketType,
|
||||||
T extends BackwardsProtocol<C, ?, ?, S>> extends ItemRewriterBase<C, S, T> {
|
T extends BackwardsProtocol<C, ?, ?, S>> extends ItemRewriterBase<C, S, T> {
|
||||||
|
@ -25,7 +25,6 @@ import com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag;
|
|||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ShortTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ShortTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
@ -30,15 +30,14 @@ import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_9;
|
|||||||
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public abstract class LegacyEntityRewriter<C extends ClientboundPacketType, T extends BackwardsProtocol<C, ?, ?, ?>> extends EntityRewriterBase<C, T> {
|
public abstract class LegacyEntityRewriter<C extends ClientboundPacketType, T extends BackwardsProtocol<C, ?, ?, ?>> extends EntityRewriterBase<C, T> {
|
||||||
private final Map<ObjectType, EntityData> objectTypes = new HashMap<>();
|
private final Map<ObjectType, EntityData> objectTypes = new HashMap<>();
|
||||||
@ -62,9 +61,9 @@ public abstract class LegacyEntityRewriter<C extends ClientboundPacketType, T ex
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void registerRespawn(C packetType) {
|
protected void registerRespawn(C packetType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT);
|
map(Type.INT);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
||||||
@ -75,9 +74,9 @@ public abstract class LegacyEntityRewriter<C extends ClientboundPacketType, T ex
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void registerJoinGame(C packetType, EntityType playerType) {
|
protected void registerJoinGame(C packetType, EntityType playerType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Entity ID
|
map(Type.INT); // 0 - Entity ID
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
||||||
map(Type.INT); // 2 - Dimension
|
map(Type.INT); // 2 - Dimension
|
||||||
@ -92,9 +91,9 @@ public abstract class LegacyEntityRewriter<C extends ClientboundPacketType, T ex
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerMetadataRewriter(C packetType, Type<List<Metadata>> oldMetaType, Type<List<Metadata>> newMetaType) {
|
public void registerMetadataRewriter(C packetType, Type<List<Metadata>> oldMetaType, Type<List<Metadata>> newMetaType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
if (oldMetaType != null) {
|
if (oldMetaType != null) {
|
||||||
map(oldMetaType, newMetaType);
|
map(oldMetaType, newMetaType);
|
||||||
|
@ -20,7 +20,7 @@ package com.viaversion.viabackwards.api.rewriters;
|
|||||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
|
|
||||||
public class SoundRewriter<C extends ClientboundPacketType> extends com.viaversion.viaversion.rewriter.SoundRewriter<C> {
|
public class SoundRewriter<C extends ClientboundPacketType> extends com.viaversion.viaversion.rewriter.SoundRewriter<C> {
|
||||||
@ -33,9 +33,9 @@ public class SoundRewriter<C extends ClientboundPacketType> extends com.viaversi
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void registerNamedSound(C packetType) {
|
public void registerNamedSound(C packetType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Sound identifier
|
map(Type.STRING); // Sound identifier
|
||||||
handler(getNamedSoundHandler());
|
handler(getNamedSoundHandler());
|
||||||
}
|
}
|
||||||
@ -43,9 +43,9 @@ public class SoundRewriter<C extends ClientboundPacketType> extends com.viaversi
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void registerStopSound(C packetType) {
|
public void registerStopSound(C packetType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
handler(getStopSoundHandler());
|
handler(getStopSoundHandler());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -22,12 +22,11 @@ import com.viaversion.viabackwards.api.BackwardsProtocol;
|
|||||||
import com.viaversion.viabackwards.api.data.VBMappingDataLoader;
|
import com.viaversion.viabackwards.api.data.VBMappingDataLoader;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State;
|
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonObject;
|
import com.viaversion.viaversion.libs.gson.JsonObject;
|
||||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -63,27 +62,17 @@ public class TranslatableRewriter<C extends ClientboundPacketType> extends Compo
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void registerPing() {
|
public void registerPing() {
|
||||||
protocol.registerClientbound(State.LOGIN, 0x00, 0x00, new PacketRemapper() {
|
protocol.registerClientbound(State.LOGIN, 0x00, 0x00, wrapper -> processText(wrapper.passthrough(Type.COMPONENT)));
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> processText(wrapper.passthrough(Type.COMPONENT)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerDisconnect(C packetType) {
|
public void registerDisconnect(C packetType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, wrapper -> processText(wrapper.passthrough(Type.COMPONENT)));
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> processText(wrapper.passthrough(Type.COMPONENT)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerLegacyOpenWindow(C packetType) {
|
public void registerLegacyOpenWindow(C packetType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE); // Id
|
map(Type.UNSIGNED_BYTE); // Id
|
||||||
map(Type.STRING); // Window Type
|
map(Type.STRING); // Window Type
|
||||||
handler(wrapper -> processText(wrapper.passthrough(Type.COMPONENT)));
|
handler(wrapper -> processText(wrapper.passthrough(Type.COMPONENT)));
|
||||||
@ -92,9 +81,9 @@ public class TranslatableRewriter<C extends ClientboundPacketType> extends Compo
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void registerOpenWindow(C packetType) {
|
public void registerOpenWindow(C packetType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Id
|
map(Type.VAR_INT); // Id
|
||||||
map(Type.VAR_INT); // Window Type
|
map(Type.VAR_INT); // Window Type
|
||||||
handler(wrapper -> processText(wrapper.passthrough(Type.COMPONENT)));
|
handler(wrapper -> processText(wrapper.passthrough(Type.COMPONENT)));
|
||||||
@ -103,21 +92,16 @@ public class TranslatableRewriter<C extends ClientboundPacketType> extends Compo
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void registerTabList(C packetType) {
|
public void registerTabList(C packetType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, wrapper -> {
|
||||||
@Override
|
processText(wrapper.passthrough(Type.COMPONENT));
|
||||||
public void registerMap() {
|
processText(wrapper.passthrough(Type.COMPONENT));
|
||||||
handler(wrapper -> {
|
|
||||||
processText(wrapper.passthrough(Type.COMPONENT));
|
|
||||||
processText(wrapper.passthrough(Type.COMPONENT));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerCombatKill(C packetType) {
|
public void registerCombatKill(C packetType) {
|
||||||
protocol.registerClientbound(packetType, new PacketRemapper() {
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.INT);
|
map(Type.INT);
|
||||||
handler(wrapper -> processText(wrapper.passthrough(Type.COMPONENT)));
|
handler(wrapper -> processText(wrapper.passthrough(Type.COMPONENT)));
|
||||||
|
@ -34,7 +34,7 @@ import com.viaversion.viaversion.api.minecraft.item.DataItem;
|
|||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
|
||||||
@ -45,7 +45,6 @@ import com.viaversion.viaversion.protocols.protocol1_9_1_2to1_9_3_4.types.Chunk1
|
|||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@ -59,9 +58,9 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.SET_SLOT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.SET_SLOT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
||||||
map(Type.SHORT); // 1 - Slot ID
|
map(Type.SHORT); // 1 - Slot ID
|
||||||
map(Type.ITEM); // 2 - Slot Value
|
map(Type.ITEM); // 2 - Slot Value
|
||||||
@ -86,32 +85,29 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.WINDOW_ITEMS, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.WINDOW_ITEMS, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
||||||
map(Type.ITEM_ARRAY); // 1 - Window Values
|
map(Type.ITEM_ARRAY); // 1 - Window Values
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
Item[] stacks = wrapper.get(Type.ITEM_ARRAY, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
for (int i = 0; i < stacks.length; i++)
|
||||||
Item[] stacks = wrapper.get(Type.ITEM_ARRAY, 0);
|
stacks[i] = handleItemToClient(stacks[i]);
|
||||||
for (int i = 0; i < stacks.length; i++)
|
|
||||||
stacks[i] = handleItemToClient(stacks[i]);
|
|
||||||
|
|
||||||
if (isLlama(wrapper.user())) {
|
if (isLlama(wrapper.user())) {
|
||||||
Optional<ChestedHorseStorage> horse = getChestedHorse(wrapper.user());
|
Optional<ChestedHorseStorage> horse = getChestedHorse(wrapper.user());
|
||||||
if (!horse.isPresent())
|
if (!horse.isPresent())
|
||||||
return;
|
return;
|
||||||
ChestedHorseStorage storage = horse.get();
|
ChestedHorseStorage storage = horse.get();
|
||||||
stacks = Arrays.copyOf(stacks, !storage.isChested() ? 38 : 53);
|
stacks = Arrays.copyOf(stacks, !storage.isChested() ? 38 : 53);
|
||||||
|
|
||||||
for (int i = stacks.length - 1; i >= 0; i--) {
|
for (int i = stacks.length - 1; i >= 0; i--) {
|
||||||
stacks[getNewSlotId(storage, i)] = stacks[i];
|
stacks[getNewSlotId(storage, i)] = stacks[i];
|
||||||
stacks[i] = getNewItem(storage, i, stacks[i]);
|
stacks[i] = getNewItem(storage, i, stacks[i]);
|
||||||
}
|
|
||||||
wrapper.set(Type.ITEM_ARRAY, 0, stacks);
|
|
||||||
}
|
}
|
||||||
|
wrapper.set(Type.ITEM_ARRAY, 0, stacks);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -120,40 +116,37 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
registerEntityEquipment(ClientboundPackets1_9_3.ENTITY_EQUIPMENT, Type.ITEM);
|
registerEntityEquipment(ClientboundPackets1_9_3.ENTITY_EQUIPMENT, Type.ITEM);
|
||||||
|
|
||||||
// Plugin message Packet -> Trading
|
// Plugin message Packet -> Trading
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.PLUGIN_MESSAGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.PLUGIN_MESSAGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // 0 - Channel
|
map(Type.STRING); // 0 - Channel
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
if (wrapper.get(Type.STRING, 0).equalsIgnoreCase("MC|TrList")) {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.passthrough(Type.INT); // Passthrough Window ID
|
||||||
if (wrapper.get(Type.STRING, 0).equalsIgnoreCase("MC|TrList")) {
|
|
||||||
wrapper.passthrough(Type.INT); // Passthrough Window ID
|
|
||||||
|
|
||||||
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Input Item
|
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Input Item
|
||||||
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Output Item
|
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Output Item
|
||||||
|
|
||||||
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
||||||
if (secondItem) {
|
if (secondItem) {
|
||||||
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Second Item
|
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Second Item
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
|
||||||
wrapper.passthrough(Type.INT); // Number of tools uses
|
|
||||||
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
||||||
|
wrapper.passthrough(Type.INT); // Number of tools uses
|
||||||
|
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_9_3.CLICK_WINDOW, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_9_3.CLICK_WINDOW, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
||||||
map(Type.SHORT); // 1 - Slot
|
map(Type.SHORT); // 1 - Slot
|
||||||
map(Type.BYTE); // 2 - Button
|
map(Type.BYTE); // 2 - Button
|
||||||
@ -164,19 +157,16 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
handler(itemToServerHandler(Type.ITEM));
|
handler(itemToServerHandler(Type.ITEM));
|
||||||
|
|
||||||
// Llama slot
|
// Llama slot
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
if (isLlama(wrapper.user())) {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
Optional<ChestedHorseStorage> horse = getChestedHorse(wrapper.user());
|
||||||
if (isLlama(wrapper.user())) {
|
if (!horse.isPresent())
|
||||||
Optional<ChestedHorseStorage> horse = getChestedHorse(wrapper.user());
|
return;
|
||||||
if (!horse.isPresent())
|
ChestedHorseStorage storage = horse.get();
|
||||||
return;
|
int clickSlot = wrapper.get(Type.SHORT, 0);
|
||||||
ChestedHorseStorage storage = horse.get();
|
int correctSlot = getOldSlotId(storage, clickSlot);
|
||||||
int clickSlot = wrapper.get(Type.SHORT, 0);
|
|
||||||
int correctSlot = getOldSlotId(storage, clickSlot);
|
|
||||||
|
|
||||||
wrapper.set(Type.SHORT, 0, ((Integer) correctSlot).shortValue());
|
wrapper.set(Type.SHORT, 0, ((Integer) correctSlot).shortValue());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -184,151 +174,125 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
|
|
||||||
registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM);
|
registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.CHUNK_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.CHUNK_DATA, wrapper -> {
|
||||||
@Override
|
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
||||||
public void registerMap() {
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
|
||||||
|
|
||||||
Chunk1_9_3_4Type type = new Chunk1_9_3_4Type(clientWorld); // Use the 1.10 Chunk type since nothing changed.
|
Chunk1_9_3_4Type type = new Chunk1_9_3_4Type(clientWorld); // Use the 1.10 Chunk type since nothing changed.
|
||||||
Chunk chunk = wrapper.passthrough(type);
|
Chunk chunk = wrapper.passthrough(type);
|
||||||
|
|
||||||
handleChunk(chunk);
|
handleChunk(chunk);
|
||||||
|
|
||||||
// only patch it for signs for now
|
// only patch it for signs for now
|
||||||
for (CompoundTag tag : chunk.getBlockEntities()) {
|
for (CompoundTag tag : chunk.getBlockEntities()) {
|
||||||
Tag idTag = tag.get("id");
|
Tag idTag = tag.get("id");
|
||||||
if (!(idTag instanceof StringTag)) continue;
|
if (!(idTag instanceof StringTag)) continue;
|
||||||
|
|
||||||
String id = (String) idTag.getValue();
|
String id = (String) idTag.getValue();
|
||||||
if (id.equals("minecraft:sign")) {
|
if (id.equals("minecraft:sign")) {
|
||||||
((StringTag) idTag).setValue("Sign");
|
((StringTag) idTag).setValue("Sign");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.BLOCK_CHANGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.BLOCK_CHANGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION); // 0 - Block Position
|
map(Type.POSITION); // 0 - Block Position
|
||||||
map(Type.VAR_INT); // 1 - Block
|
map(Type.VAR_INT); // 1 - Block
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int idx = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.set(Type.VAR_INT, 0, handleBlockID(idx));
|
||||||
int idx = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
wrapper.set(Type.VAR_INT, 0, handleBlockID(idx));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.MULTI_BLOCK_CHANGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.MULTI_BLOCK_CHANGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Chunk X
|
map(Type.INT); // 0 - Chunk X
|
||||||
map(Type.INT); // 1 - Chunk Z
|
map(Type.INT); // 1 - Chunk Z
|
||||||
map(Type.BLOCK_CHANGE_RECORD_ARRAY);
|
map(Type.BLOCK_CHANGE_RECORD_ARRAY);
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
for (BlockChangeRecord record : wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0)) {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
record.setBlockId(handleBlockID(record.getBlockId()));
|
||||||
for (BlockChangeRecord record : wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0)) {
|
|
||||||
record.setBlockId(handleBlockID(record.getBlockId()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.BLOCK_ENTITY_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.BLOCK_ENTITY_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION); // 0 - Position
|
map(Type.POSITION); // 0 - Position
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Action
|
map(Type.UNSIGNED_BYTE); // 1 - Action
|
||||||
map(Type.NBT); // 2 - NBT
|
map(Type.NBT); // 2 - NBT
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
// Remove on shulkerbox decleration
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (wrapper.get(Type.UNSIGNED_BYTE, 0) == 10) {
|
||||||
// Remove on shulkerbox decleration
|
wrapper.cancel();
|
||||||
if (wrapper.get(Type.UNSIGNED_BYTE, 0) == 10) {
|
}
|
||||||
wrapper.cancel();
|
// Handler Spawners
|
||||||
}
|
if (wrapper.get(Type.UNSIGNED_BYTE, 0) == 1) {
|
||||||
// Handler Spawners
|
CompoundTag tag = wrapper.get(Type.NBT, 0);
|
||||||
if (wrapper.get(Type.UNSIGNED_BYTE, 0) == 1) {
|
EntityIdRewriter.toClientSpawner(tag, true);
|
||||||
CompoundTag tag = wrapper.get(Type.NBT, 0);
|
|
||||||
EntityIdRewriter.toClientSpawner(tag, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.OPEN_WINDOW, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.OPEN_WINDOW, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
||||||
map(Type.STRING); // 1 - Window Type
|
map(Type.STRING); // 1 - Window Type
|
||||||
map(Type.COMPONENT); // 2 - Title
|
map(Type.COMPONENT); // 2 - Title
|
||||||
map(Type.UNSIGNED_BYTE); // 3 - Slots
|
map(Type.UNSIGNED_BYTE); // 3 - Slots
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int entityId = -1;
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
// Passthrough Entity ID
|
||||||
int entityId = -1;
|
if (wrapper.get(Type.STRING, 0).equals("EntityHorse")) {
|
||||||
// Passthrough Entity ID
|
entityId = wrapper.passthrough(Type.INT);
|
||||||
if (wrapper.get(Type.STRING, 0).equals("EntityHorse")) {
|
}
|
||||||
entityId = wrapper.passthrough(Type.INT);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Track Inventory
|
// Track Inventory
|
||||||
String inventory = wrapper.get(Type.STRING, 0);
|
String inventory = wrapper.get(Type.STRING, 0);
|
||||||
WindowTracker windowTracker = wrapper.user().get(WindowTracker.class);
|
WindowTracker windowTracker = wrapper.user().get(WindowTracker.class);
|
||||||
windowTracker.setInventory(inventory);
|
windowTracker.setInventory(inventory);
|
||||||
windowTracker.setEntityId(entityId);
|
windowTracker.setEntityId(entityId);
|
||||||
|
|
||||||
// Change llama slotcount to the donkey one
|
// Change llama slotcount to the donkey one
|
||||||
if (isLlama(wrapper.user())) {
|
if (isLlama(wrapper.user())) {
|
||||||
wrapper.set(Type.UNSIGNED_BYTE, 1, (short) 17);
|
wrapper.set(Type.UNSIGNED_BYTE, 1, (short) 17);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.CLOSE_WINDOW, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.CLOSE_WINDOW, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
// Inventory tracking
|
// Inventory tracking
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
WindowTracker windowTracker = wrapper.user().get(WindowTracker.class);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
windowTracker.setInventory(null);
|
||||||
WindowTracker windowTracker = wrapper.user().get(WindowTracker.class);
|
windowTracker.setEntityId(-1);
|
||||||
windowTracker.setInventory(null);
|
|
||||||
windowTracker.setEntityId(-1);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_9_3.CLOSE_WINDOW, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_9_3.CLOSE_WINDOW, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
// Inventory tracking
|
// Inventory tracking
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
WindowTracker windowTracker = wrapper.user().get(WindowTracker.class);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
windowTracker.setInventory(null);
|
||||||
WindowTracker windowTracker = wrapper.user().get(WindowTracker.class);
|
windowTracker.setEntityId(-1);
|
||||||
windowTracker.setInventory(null);
|
|
||||||
windowTracker.setEntityId(-1);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -31,13 +31,10 @@ import com.viaversion.viaversion.api.minecraft.entities.Entity1_12Types;
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_9;
|
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_9;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_9;
|
import com.viaversion.viaversion.api.type.types.version.Types1_9;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@ -49,9 +46,9 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.EFFECT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.EFFECT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT);
|
map(Type.INT);
|
||||||
map(Type.POSITION);
|
map(Type.POSITION);
|
||||||
map(Type.INT);
|
map(Type.INT);
|
||||||
@ -72,9 +69,9 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_ENTITY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_ENTITY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - UUID
|
map(Type.UUID); // 1 - UUID
|
||||||
map(Type.BYTE); // 2 - Type
|
map(Type.BYTE); // 2 - Type
|
||||||
@ -90,21 +87,18 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
handler(getObjectRewriter(id -> Entity1_11Types.ObjectType.findById(id).orElse(null)));
|
handler(getObjectRewriter(id -> Entity1_11Types.ObjectType.findById(id).orElse(null)));
|
||||||
|
|
||||||
// Handle FallingBlock blocks
|
// Handle FallingBlock blocks
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
Optional<Entity1_12Types.ObjectType> type = Entity1_12Types.ObjectType.findById(wrapper.get(Type.BYTE, 0));
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (type.isPresent() && type.get() == Entity1_12Types.ObjectType.FALLING_BLOCK) {
|
||||||
Optional<Entity1_12Types.ObjectType> type = Entity1_12Types.ObjectType.findById(wrapper.get(Type.BYTE, 0));
|
int objectData = wrapper.get(Type.INT, 0);
|
||||||
if (type.isPresent() && type.get() == Entity1_12Types.ObjectType.FALLING_BLOCK) {
|
int objType = objectData & 4095;
|
||||||
int objectData = wrapper.get(Type.INT, 0);
|
int data = objectData >> 12 & 15;
|
||||||
int objType = objectData & 4095;
|
|
||||||
int data = objectData >> 12 & 15;
|
|
||||||
|
|
||||||
Block block = protocol.getItemRewriter().handleBlock(objType, data);
|
Block block = protocol.getItemRewriter().handleBlock(objType, data);
|
||||||
if (block == null)
|
if (block == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wrapper.set(Type.INT, 0, block.getId() | block.getData() << 12);
|
wrapper.set(Type.INT, 0, block.getId() | block.getData() << 12);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -113,9 +107,9 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
registerTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_11Types.EntityType.EXPERIENCE_ORB);
|
registerTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_11Types.EntityType.EXPERIENCE_ORB);
|
||||||
registerTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_11Types.EntityType.WEATHER);
|
registerTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_11Types.EntityType.WEATHER);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - UUID
|
map(Type.UUID); // 1 - UUID
|
||||||
map(Type.VAR_INT, Type.UNSIGNED_BYTE); // 2 - Entity Type
|
map(Type.VAR_INT, Type.UNSIGNED_BYTE); // 2 - Entity Type
|
||||||
@ -161,9 +155,9 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_11Types.EntityType.PLAYER);
|
registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_11Types.EntityType.PLAYER);
|
||||||
registerRespawn(ClientboundPackets1_9_3.RESPAWN);
|
registerRespawn(ClientboundPackets1_9_3.RESPAWN);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_PLAYER, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_PLAYER, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Player UUID
|
map(Type.UUID); // 1 - Player UUID
|
||||||
map(Type.DOUBLE); // 2 - X
|
map(Type.DOUBLE); // 2 - X
|
||||||
@ -187,23 +181,20 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
registerRemoveEntities(ClientboundPackets1_9_3.DESTROY_ENTITIES);
|
registerRemoveEntities(ClientboundPackets1_9_3.DESTROY_ENTITIES);
|
||||||
registerMetadataRewriter(ClientboundPackets1_9_3.ENTITY_METADATA, Types1_9.METADATA_LIST);
|
registerMetadataRewriter(ClientboundPackets1_9_3.ENTITY_METADATA, Types1_9.METADATA_LIST);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.ENTITY_STATUS, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.ENTITY_STATUS, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Entity ID
|
map(Type.INT); // 0 - Entity ID
|
||||||
map(Type.BYTE); // 1 - Entity Status
|
map(Type.BYTE); // 1 - Entity Status
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
byte b = wrapper.get(Type.BYTE, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
byte b = wrapper.get(Type.BYTE, 0);
|
|
||||||
|
|
||||||
if (b == 35) {
|
if (b == 35) {
|
||||||
wrapper.clearPacket();
|
wrapper.clearPacket();
|
||||||
wrapper.setPacketType(ClientboundPackets1_9_3.GAME_EVENT);
|
wrapper.setPacketType(ClientboundPackets1_9_3.GAME_EVENT);
|
||||||
wrapper.write(Type.UNSIGNED_BYTE, (short) 10); // Play Elder Guardian animation
|
wrapper.write(Type.UNSIGNED_BYTE, (short) 10); // Play Elder Guardian animation
|
||||||
wrapper.write(Type.FLOAT, 0F);
|
wrapper.write(Type.FLOAT, 0F);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ package com.viaversion.viabackwards.protocol.protocol1_10to1_11.packets;
|
|||||||
|
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_10to1_11.Protocol1_10To1_11;
|
import com.viaversion.viabackwards.protocol.protocol1_10to1_11.Protocol1_10To1_11;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
|
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||||
@ -39,9 +39,9 @@ public class PlayerPackets1_11 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public void register(Protocol1_10To1_11 protocol) {
|
public void register(Protocol1_10To1_11 protocol) {
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.TITLE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.TITLE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Action
|
map(Type.VAR_INT); // 0 - Action
|
||||||
|
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
@ -67,9 +67,9 @@ public class PlayerPackets1_11 {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.COLLECT_ITEM, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.COLLECT_ITEM, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Collected entity id
|
map(Type.VAR_INT); // 0 - Collected entity id
|
||||||
map(Type.VAR_INT); // 1 - Collector entity id
|
map(Type.VAR_INT); // 1 - Collector entity id
|
||||||
|
|
||||||
@ -78,9 +78,9 @@ public class PlayerPackets1_11 {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_9_3.PLAYER_BLOCK_PLACEMENT, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_9_3.PLAYER_BLOCK_PLACEMENT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION); // 0 - Location
|
map(Type.POSITION); // 0 - Location
|
||||||
map(Type.VAR_INT); // 1 - Face
|
map(Type.VAR_INT); // 1 - Face
|
||||||
map(Type.VAR_INT); // 2 - Hand
|
map(Type.VAR_INT); // 2 - Hand
|
||||||
|
@ -27,7 +27,6 @@ import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets.EntityP
|
|||||||
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets.SoundPackets1_12;
|
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets.SoundPackets1_12;
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_12Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_12Types;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||||
@ -60,16 +59,11 @@ public class Protocol1_11_1To1_12 extends BackwardsProtocol<ClientboundPackets1_
|
|||||||
new SoundPackets1_12(this).register();
|
new SoundPackets1_12(this).register();
|
||||||
new ChatPackets1_12(this).register();
|
new ChatPackets1_12(this).register();
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_12.TITLE, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_12.TITLE, wrapper -> {
|
||||||
@Override
|
int action = wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
if (action >= 0 && action <= 2) {
|
||||||
handler(wrapper -> {
|
JsonElement component = wrapper.read(Type.COMPONENT);
|
||||||
int action = wrapper.passthrough(Type.VAR_INT);
|
wrapper.write(Type.COMPONENT, Protocol1_9To1_8.fixJson(component.toString()));
|
||||||
if (action >= 0 && action <= 2) {
|
|
||||||
JsonElement component = wrapper.read(Type.COMPONENT);
|
|
||||||
wrapper.write(Type.COMPONENT, Protocol1_9To1_8.fixJson(component.toString()));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -25,8 +25,7 @@ import com.viaversion.viaversion.api.minecraft.BlockChangeRecord;
|
|||||||
import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
|
import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.IntArrayTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.IntArrayTag;
|
||||||
@ -37,10 +36,9 @@ import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.ServerboundPacke
|
|||||||
import com.viaversion.viaversion.protocols.protocol1_9_1_2to1_9_3_4.types.Chunk1_9_3_4Type;
|
import com.viaversion.viaversion.protocols.protocol1_9_1_2to1_9_3_4.types.Chunk1_9_3_4Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public class BlockItemPackets1_12 extends LegacyBlockItemRewriter<ClientboundPackets1_12, ServerboundPackets1_9_3, Protocol1_11_1To1_12> {
|
public class BlockItemPackets1_12 extends LegacyBlockItemRewriter<ClientboundPackets1_12, ServerboundPackets1_9_3, Protocol1_11_1To1_12> {
|
||||||
|
|
||||||
@ -50,9 +48,9 @@ public class BlockItemPackets1_12 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.MAP_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.MAP_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.BYTE);
|
map(Type.BYTE);
|
||||||
map(Type.BOOLEAN);
|
map(Type.BOOLEAN);
|
||||||
@ -87,39 +85,36 @@ public class BlockItemPackets1_12 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
registerEntityEquipment(ClientboundPackets1_12.ENTITY_EQUIPMENT, Type.ITEM);
|
registerEntityEquipment(ClientboundPackets1_12.ENTITY_EQUIPMENT, Type.ITEM);
|
||||||
|
|
||||||
// Plugin message Packet -> Trading
|
// Plugin message Packet -> Trading
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.PLUGIN_MESSAGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.PLUGIN_MESSAGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // 0 - Channel
|
map(Type.STRING); // 0 - Channel
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
if (wrapper.get(Type.STRING, 0).equalsIgnoreCase("MC|TrList")) {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.passthrough(Type.INT); // Passthrough Window ID
|
||||||
if (wrapper.get(Type.STRING, 0).equalsIgnoreCase("MC|TrList")) {
|
|
||||||
wrapper.passthrough(Type.INT); // Passthrough Window ID
|
|
||||||
|
|
||||||
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Input Item
|
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Input Item
|
||||||
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Output Item
|
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Output Item
|
||||||
|
|
||||||
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
||||||
if (secondItem)
|
if (secondItem)
|
||||||
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Second Item
|
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Second Item
|
||||||
|
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
||||||
wrapper.passthrough(Type.INT); // Number of tools uses
|
wrapper.passthrough(Type.INT); // Number of tools uses
|
||||||
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_9_3.CLICK_WINDOW, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_9_3.CLICK_WINDOW, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
||||||
map(Type.SHORT); // 1 - Slot
|
map(Type.SHORT); // 1 - Slot
|
||||||
map(Type.BYTE); // 2 - Button
|
map(Type.BYTE); // 2 - Button
|
||||||
@ -127,102 +122,82 @@ public class BlockItemPackets1_12 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
map(Type.VAR_INT); // 4 - Mode
|
map(Type.VAR_INT); // 4 - Mode
|
||||||
map(Type.ITEM); // 5 - Clicked Item
|
map(Type.ITEM); // 5 - Clicked Item
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
if (wrapper.get(Type.VAR_INT, 0) == 1) { // Shift click
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
// https://github.com/ViaVersion/ViaVersion/pull/754
|
||||||
if (wrapper.get(Type.VAR_INT, 0) == 1) { // Shift click
|
// Previously clients grab the item from the clicked slot *before* it has
|
||||||
// https://github.com/ViaVersion/ViaVersion/pull/754
|
// been moved however now they grab the slot item *after* it has been moved
|
||||||
// Previously clients grab the item from the clicked slot *before* it has
|
// and send that in the packet.
|
||||||
// been moved however now they grab the slot item *after* it has been moved
|
wrapper.set(Type.ITEM, 0, null); // Set null item (probably will work)
|
||||||
// and send that in the packet.
|
|
||||||
wrapper.set(Type.ITEM, 0, null); // Set null item (probably will work)
|
|
||||||
|
|
||||||
// Apologize (may happen in some cases, maybe if inventory is full?)
|
// Apologize (may happen in some cases, maybe if inventory is full?)
|
||||||
PacketWrapper confirm = wrapper.create(ServerboundPackets1_12.WINDOW_CONFIRMATION);
|
PacketWrapper confirm = wrapper.create(ServerboundPackets1_12.WINDOW_CONFIRMATION);
|
||||||
confirm.write(Type.UNSIGNED_BYTE, wrapper.get(Type.UNSIGNED_BYTE, 0));
|
confirm.write(Type.UNSIGNED_BYTE, wrapper.get(Type.UNSIGNED_BYTE, 0));
|
||||||
confirm.write(Type.SHORT, wrapper.get(Type.SHORT, 1));
|
confirm.write(Type.SHORT, wrapper.get(Type.SHORT, 1));
|
||||||
confirm.write(Type.BOOLEAN, false); // Success - not used
|
confirm.write(Type.BOOLEAN, false); // Success - not used
|
||||||
|
|
||||||
wrapper.sendToServer(Protocol1_11_1To1_12.class);
|
wrapper.sendToServer(Protocol1_11_1To1_12.class);
|
||||||
wrapper.cancel();
|
wrapper.cancel();
|
||||||
confirm.sendToServer(Protocol1_11_1To1_12.class);
|
confirm.sendToServer(Protocol1_11_1To1_12.class);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
|
||||||
Item item = wrapper.get(Type.ITEM, 0);
|
|
||||||
handleItemToServer(item);
|
|
||||||
}
|
}
|
||||||
|
Item item = wrapper.get(Type.ITEM, 0);
|
||||||
|
handleItemToServer(item);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM);
|
registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.CHUNK_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.CHUNK_DATA, wrapper -> {
|
||||||
@Override
|
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
||||||
public void registerMap() {
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
|
||||||
|
|
||||||
Chunk1_9_3_4Type type = new Chunk1_9_3_4Type(clientWorld); // Use the 1.9.4 Chunk type since nothing changed.
|
Chunk1_9_3_4Type type = new Chunk1_9_3_4Type(clientWorld); // Use the 1.9.4 Chunk type since nothing changed.
|
||||||
Chunk chunk = wrapper.passthrough(type);
|
Chunk chunk = wrapper.passthrough(type);
|
||||||
|
|
||||||
handleChunk(chunk);
|
handleChunk(chunk);
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.BLOCK_CHANGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.BLOCK_CHANGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION); // 0 - Block Position
|
map(Type.POSITION); // 0 - Block Position
|
||||||
map(Type.VAR_INT); // 1 - Block
|
map(Type.VAR_INT); // 1 - Block
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int idx = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.set(Type.VAR_INT, 0, handleBlockID(idx));
|
||||||
int idx = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
wrapper.set(Type.VAR_INT, 0, handleBlockID(idx));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.MULTI_BLOCK_CHANGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.MULTI_BLOCK_CHANGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Chunk X
|
map(Type.INT); // 0 - Chunk X
|
||||||
map(Type.INT); // 1 - Chunk Z
|
map(Type.INT); // 1 - Chunk Z
|
||||||
map(Type.BLOCK_CHANGE_RECORD_ARRAY);
|
map(Type.BLOCK_CHANGE_RECORD_ARRAY);
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
for (BlockChangeRecord record : wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0)) {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
record.setBlockId(handleBlockID(record.getBlockId()));
|
||||||
for (BlockChangeRecord record : wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0)) {
|
|
||||||
record.setBlockId(handleBlockID(record.getBlockId()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.BLOCK_ENTITY_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.BLOCK_ENTITY_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION); // 0 - Position
|
map(Type.POSITION); // 0 - Position
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Action
|
map(Type.UNSIGNED_BYTE); // 1 - Action
|
||||||
map(Type.NBT); // 2 - NBT
|
map(Type.NBT); // 2 - NBT
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
// Remove bed color
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (wrapper.get(Type.UNSIGNED_BYTE, 0) == 11)
|
||||||
// Remove bed color
|
wrapper.cancel();
|
||||||
if (wrapper.get(Type.UNSIGNED_BYTE, 0) == 11)
|
|
||||||
wrapper.cancel();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -232,18 +207,15 @@ public class BlockItemPackets1_12 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
meta.setValue(handleItemToClient((Item) meta.getValue()));
|
meta.setValue(handleItemToClient((Item) meta.getValue()));
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_9_3.CLIENT_STATUS, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_9_3.CLIENT_STATUS, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Action ID
|
map(Type.VAR_INT); // Action ID
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
// Open Inventory
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (wrapper.get(Type.VAR_INT, 0) == 2) {
|
||||||
// Open Inventory
|
wrapper.cancel();
|
||||||
if (wrapper.get(Type.VAR_INT, 0) == 2) {
|
|
||||||
wrapper.cancel();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@ package com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets;
|
|||||||
|
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.Protocol1_11_1To1_12;
|
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.Protocol1_11_1To1_12;
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.AdvancementTranslations;
|
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.AdvancementTranslations;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.rewriter.RewriterBase;
|
import com.viaversion.viaversion.api.rewriter.RewriterBase;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||||
@ -46,14 +45,9 @@ public class ChatPackets1_12 extends RewriterBase<Protocol1_11_1To1_12> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.CHAT_MESSAGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.CHAT_MESSAGE, wrapper -> {
|
||||||
@Override
|
JsonElement element = wrapper.passthrough(Type.COMPONENT);
|
||||||
public void registerMap() {
|
componentRewriter.processText(element);
|
||||||
handler(wrapper -> {
|
|
||||||
JsonElement element = wrapper.passthrough(Type.COMPONENT);
|
|
||||||
componentRewriter.processText(element);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,13 +29,11 @@ import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
|||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_12;
|
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_12;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_12;
|
import com.viaversion.viaversion.api.type.types.version.Types1_12;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.ClientboundPackets1_12;
|
import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.ClientboundPackets1_12;
|
||||||
|
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@ -47,9 +45,9 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.SPAWN_ENTITY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.SPAWN_ENTITY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - UUID
|
map(Type.UUID); // 1 - UUID
|
||||||
map(Type.BYTE); // 2 - Type
|
map(Type.BYTE); // 2 - Type
|
||||||
@ -65,22 +63,19 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
handler(getObjectRewriter(id -> Entity1_12Types.ObjectType.findById(id).orElse(null)));
|
handler(getObjectRewriter(id -> Entity1_12Types.ObjectType.findById(id).orElse(null)));
|
||||||
|
|
||||||
// Handle FallingBlock blocks
|
// Handle FallingBlock blocks
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
Optional<Entity1_12Types.ObjectType> type = Entity1_12Types.ObjectType.findById(wrapper.get(Type.BYTE, 0));
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (type.isPresent() && type.get() == Entity1_12Types.ObjectType.FALLING_BLOCK) {
|
||||||
Optional<Entity1_12Types.ObjectType> type = Entity1_12Types.ObjectType.findById(wrapper.get(Type.BYTE, 0));
|
int objectData = wrapper.get(Type.INT, 0);
|
||||||
if (type.isPresent() && type.get() == Entity1_12Types.ObjectType.FALLING_BLOCK) {
|
int objType = objectData & 4095;
|
||||||
int objectData = wrapper.get(Type.INT, 0);
|
int data = objectData >> 12 & 15;
|
||||||
int objType = objectData & 4095;
|
|
||||||
int data = objectData >> 12 & 15;
|
|
||||||
|
|
||||||
Block block = protocol.getItemRewriter().handleBlock(objType, data);
|
Block block = protocol.getItemRewriter().handleBlock(objType, data);
|
||||||
if (block == null) {
|
if (block == null) {
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.set(Type.INT, 0, block.getId() | block.getData() << 12);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.set(Type.INT, 0, block.getId() | block.getData() << 12);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -89,9 +84,9 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
registerTracker(ClientboundPackets1_12.SPAWN_EXPERIENCE_ORB, Entity1_12Types.EntityType.EXPERIENCE_ORB);
|
registerTracker(ClientboundPackets1_12.SPAWN_EXPERIENCE_ORB, Entity1_12Types.EntityType.EXPERIENCE_ORB);
|
||||||
registerTracker(ClientboundPackets1_12.SPAWN_GLOBAL_ENTITY, Entity1_12Types.EntityType.WEATHER);
|
registerTracker(ClientboundPackets1_12.SPAWN_GLOBAL_ENTITY, Entity1_12Types.EntityType.WEATHER);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.SPAWN_MOB, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.SPAWN_MOB, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - UUID
|
map(Type.UUID); // 1 - UUID
|
||||||
map(Type.VAR_INT); // 2 - Entity Type
|
map(Type.VAR_INT); // 2 - Entity Type
|
||||||
@ -116,9 +111,9 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
|
|
||||||
registerTracker(ClientboundPackets1_12.SPAWN_PAINTING, Entity1_12Types.EntityType.PAINTING);
|
registerTracker(ClientboundPackets1_12.SPAWN_PAINTING, Entity1_12Types.EntityType.PAINTING);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.SPAWN_PLAYER, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.SPAWN_PLAYER, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Player UUID
|
map(Type.UUID); // 1 - Player UUID
|
||||||
map(Type.DOUBLE); // 2 - X
|
map(Type.DOUBLE); // 2 - X
|
||||||
@ -132,9 +127,9 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.JOIN_GAME, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Entity ID
|
map(Type.INT); // 0 - Entity ID
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
||||||
map(Type.INT); // 2 - Dimension
|
map(Type.INT); // 2 - Dimension
|
||||||
@ -143,26 +138,20 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
|
|
||||||
handler(getDimensionHandler(1));
|
handler(getDimensionHandler(1));
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
ShoulderTracker tracker = wrapper.user().get(ShoulderTracker.class);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
tracker.setEntityId(wrapper.get(Type.INT, 0));
|
||||||
ShoulderTracker tracker = wrapper.user().get(ShoulderTracker.class);
|
|
||||||
tracker.setEntityId(wrapper.get(Type.INT, 0));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Send fake inventory achievement
|
// Send fake inventory achievement
|
||||||
handler(new PacketHandler() {
|
handler(packetWrapper -> {
|
||||||
@Override
|
PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_9_3.STATISTICS, packetWrapper.user());
|
||||||
public void handle(PacketWrapper packetWrapper) throws Exception {
|
|
||||||
PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_9_3.STATISTICS, packetWrapper.user());
|
|
||||||
|
|
||||||
wrapper.write(Type.VAR_INT, 1);
|
wrapper.write(Type.VAR_INT, 1);
|
||||||
wrapper.write(Type.STRING, "achievement.openInventory");
|
wrapper.write(Type.STRING, "achievement.openInventory");
|
||||||
wrapper.write(Type.VAR_INT, 1);
|
wrapper.write(Type.VAR_INT, 1);
|
||||||
|
|
||||||
wrapper.scheduleSend(Protocol1_11_1To1_12.class);
|
wrapper.scheduleSend(Protocol1_11_1To1_12.class);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -171,9 +160,9 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
registerRemoveEntities(ClientboundPackets1_12.DESTROY_ENTITIES);
|
registerRemoveEntities(ClientboundPackets1_12.DESTROY_ENTITIES);
|
||||||
registerMetadataRewriter(ClientboundPackets1_12.ENTITY_METADATA, Types1_12.METADATA_LIST);
|
registerMetadataRewriter(ClientboundPackets1_12.ENTITY_METADATA, Types1_12.METADATA_LIST);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.ENTITY_PROPERTIES, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.ENTITY_PROPERTIES, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.INT);
|
map(Type.INT);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
|
@ -20,9 +20,7 @@ package com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets;
|
|||||||
|
|
||||||
import com.viaversion.viabackwards.api.rewriters.LegacySoundRewriter;
|
import com.viaversion.viabackwards.api.rewriters.LegacySoundRewriter;
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.Protocol1_11_1To1_12;
|
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.Protocol1_11_1To1_12;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.ClientboundPackets1_12;
|
import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.ClientboundPackets1_12;
|
||||||
|
|
||||||
@ -34,9 +32,9 @@ public class SoundPackets1_12 extends LegacySoundRewriter<Protocol1_11_1To1_12>
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.NAMED_SOUND, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.NAMED_SOUND, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // 0 - Sound name
|
map(Type.STRING); // 0 - Sound name
|
||||||
map(Type.VAR_INT); // 1 - Sound Category
|
map(Type.VAR_INT); // 1 - Sound Category
|
||||||
map(Type.INT); // 2 - x
|
map(Type.INT); // 2 - x
|
||||||
@ -47,9 +45,9 @@ public class SoundPackets1_12 extends LegacySoundRewriter<Protocol1_11_1To1_12>
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_12.SOUND, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_12.SOUND, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Sound name
|
map(Type.VAR_INT); // 0 - Sound name
|
||||||
map(Type.VAR_INT); // 1 - Sound Category
|
map(Type.VAR_INT); // 1 - Sound Category
|
||||||
map(Type.INT); // 2 - x
|
map(Type.INT); // 2 - x
|
||||||
@ -58,21 +56,18 @@ public class SoundPackets1_12 extends LegacySoundRewriter<Protocol1_11_1To1_12>
|
|||||||
map(Type.FLOAT); // 5 - Volume
|
map(Type.FLOAT); // 5 - Volume
|
||||||
map(Type.FLOAT); // 6 - Pitch
|
map(Type.FLOAT); // 6 - Pitch
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int oldId = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
int newId = handleSounds(oldId);
|
||||||
int oldId = wrapper.get(Type.VAR_INT, 0);
|
if (newId == -1) {
|
||||||
int newId = handleSounds(oldId);
|
wrapper.cancel();
|
||||||
if (newId == -1) {
|
return;
|
||||||
wrapper.cancel();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasPitch(oldId)) {
|
|
||||||
wrapper.set(Type.FLOAT, 1, handlePitch(oldId));
|
|
||||||
}
|
|
||||||
wrapper.set(Type.VAR_INT, 0, newId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hasPitch(oldId)) {
|
||||||
|
wrapper.set(Type.FLOAT, 1, handlePitch(oldId));
|
||||||
|
}
|
||||||
|
wrapper.set(Type.VAR_INT, 0, newId);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -22,7 +22,7 @@ import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter;
|
|||||||
import com.viaversion.viabackwards.protocol.protocol1_11to1_11_1.Protocol1_11To1_11_1;
|
import com.viaversion.viabackwards.protocol.protocol1_11to1_11_1.Protocol1_11To1_11_1;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_11Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_11Types;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_9;
|
import com.viaversion.viaversion.api.type.types.version.Types1_9;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
||||||
@ -35,9 +35,9 @@ public class EntityPackets1_11_1 extends LegacyEntityRewriter<ClientboundPackets
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_ENTITY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_ENTITY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - UUID
|
map(Type.UUID); // 1 - UUID
|
||||||
map(Type.BYTE); // 2 - Type
|
map(Type.BYTE); // 2 - Type
|
||||||
@ -57,9 +57,9 @@ public class EntityPackets1_11_1 extends LegacyEntityRewriter<ClientboundPackets
|
|||||||
registerTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_11Types.EntityType.EXPERIENCE_ORB);
|
registerTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_11Types.EntityType.EXPERIENCE_ORB);
|
||||||
registerTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_11Types.EntityType.WEATHER);
|
registerTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_11Types.EntityType.WEATHER);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - UUID
|
map(Type.UUID); // 1 - UUID
|
||||||
map(Type.VAR_INT); // 2 - Entity Type
|
map(Type.VAR_INT); // 2 - Entity Type
|
||||||
@ -86,9 +86,9 @@ public class EntityPackets1_11_1 extends LegacyEntityRewriter<ClientboundPackets
|
|||||||
registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_11Types.EntityType.PLAYER);
|
registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_11Types.EntityType.PLAYER);
|
||||||
registerRespawn(ClientboundPackets1_9_3.RESPAWN);
|
registerRespawn(ClientboundPackets1_9_3.RESPAWN);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_PLAYER, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_PLAYER, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Player UUID
|
map(Type.UUID); // 1 - Player UUID
|
||||||
map(Type.DOUBLE); // 2 - X
|
map(Type.DOUBLE); // 2 - X
|
||||||
|
@ -22,9 +22,7 @@ import com.viaversion.viabackwards.api.rewriters.LegacyBlockItemRewriter;
|
|||||||
import com.viaversion.viabackwards.api.rewriters.LegacyEnchantmentRewriter;
|
import com.viaversion.viabackwards.api.rewriters.LegacyEnchantmentRewriter;
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_11to1_11_1.Protocol1_11To1_11_1;
|
import com.viaversion.viabackwards.protocol.protocol1_11to1_11_1.Protocol1_11To1_11_1;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
|
||||||
@ -46,31 +44,28 @@ public class ItemPackets1_11_1 extends LegacyBlockItemRewriter<ClientboundPacket
|
|||||||
registerEntityEquipment(ClientboundPackets1_9_3.ENTITY_EQUIPMENT, Type.ITEM);
|
registerEntityEquipment(ClientboundPackets1_9_3.ENTITY_EQUIPMENT, Type.ITEM);
|
||||||
|
|
||||||
// Plugin message Packet -> Trading
|
// Plugin message Packet -> Trading
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.PLUGIN_MESSAGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.PLUGIN_MESSAGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // 0 - Channel
|
map(Type.STRING); // 0 - Channel
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
if (wrapper.get(Type.STRING, 0).equalsIgnoreCase("MC|TrList")) {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.passthrough(Type.INT); // Passthrough Window ID
|
||||||
if (wrapper.get(Type.STRING, 0).equalsIgnoreCase("MC|TrList")) {
|
|
||||||
wrapper.passthrough(Type.INT); // Passthrough Window ID
|
|
||||||
|
|
||||||
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Input Item
|
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Input Item
|
||||||
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Output Item
|
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Output Item
|
||||||
|
|
||||||
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
||||||
if (secondItem) {
|
if (secondItem) {
|
||||||
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Second Item
|
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Second Item
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
|
||||||
wrapper.passthrough(Type.INT); // Number of tools uses
|
|
||||||
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
||||||
|
wrapper.passthrough(Type.INT); // Number of tools uses
|
||||||
|
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -20,9 +20,7 @@ package com.viaversion.viabackwards.protocol.protocol1_12_1to1_12_2;
|
|||||||
|
|
||||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ClientboundPackets1_12_1;
|
import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ClientboundPackets1_12_1;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ServerboundPackets1_12_1;
|
import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ServerboundPackets1_12_1;
|
||||||
@ -35,36 +33,30 @@ public class Protocol1_12_1To1_12_2 extends BackwardsProtocol<ClientboundPackets
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
registerClientbound(ClientboundPackets1_12_1.KEEP_ALIVE, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_12_1.KEEP_ALIVE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
handler(new PacketHandler() {
|
handler(packetWrapper -> {
|
||||||
@Override
|
Long keepAlive = packetWrapper.read(Type.LONG);
|
||||||
public void handle(PacketWrapper packetWrapper) throws Exception {
|
packetWrapper.user().get(KeepAliveTracker.class).setKeepAlive(keepAlive);
|
||||||
Long keepAlive = packetWrapper.read(Type.LONG);
|
packetWrapper.write(Type.VAR_INT, keepAlive.hashCode());
|
||||||
packetWrapper.user().get(KeepAliveTracker.class).setKeepAlive(keepAlive);
|
|
||||||
packetWrapper.write(Type.VAR_INT, keepAlive.hashCode());
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_12_1.KEEP_ALIVE, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_12_1.KEEP_ALIVE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
handler(new PacketHandler() {
|
handler(packetWrapper -> {
|
||||||
@Override
|
int keepAlive = packetWrapper.read(Type.VAR_INT);
|
||||||
public void handle(PacketWrapper packetWrapper) throws Exception {
|
long realKeepAlive = packetWrapper.user().get(KeepAliveTracker.class).getKeepAlive();
|
||||||
int keepAlive = packetWrapper.read(Type.VAR_INT);
|
if (keepAlive != Long.hashCode(realKeepAlive)) {
|
||||||
long realKeepAlive = packetWrapper.user().get(KeepAliveTracker.class).getKeepAlive();
|
packetWrapper.cancel(); // Wrong data, cancel packet
|
||||||
if (keepAlive != Long.hashCode(realKeepAlive)) {
|
return;
|
||||||
packetWrapper.cancel(); // Wrong data, cancel packet
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
packetWrapper.write(Type.LONG, realKeepAlive);
|
|
||||||
// Reset KeepAliveTracker (to prevent sending same valid value in a row causing a timeout)
|
|
||||||
packetWrapper.user().get(KeepAliveTracker.class).setKeepAlive(Integer.MAX_VALUE);
|
|
||||||
}
|
}
|
||||||
|
packetWrapper.write(Type.LONG, realKeepAlive);
|
||||||
|
// Reset KeepAliveTracker (to prevent sending same valid value in a row causing a timeout)
|
||||||
|
packetWrapper.user().get(KeepAliveTracker.class).setKeepAlive(Integer.MAX_VALUE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -29,7 +29,6 @@ import com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag;
|
|||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.blockconnections.ConnectionData;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.blockconnections.ConnectionData;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -20,7 +20,6 @@ package com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.data;
|
|||||||
import com.viaversion.viaversion.libs.fastutil.ints.Int2IntMap;
|
import com.viaversion.viaversion.libs.fastutil.ints.Int2IntMap;
|
||||||
import com.viaversion.viaversion.libs.fastutil.ints.Int2IntOpenHashMap;
|
import com.viaversion.viaversion.libs.fastutil.ints.Int2IntOpenHashMap;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.EntityTypeRewriter;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.EntityTypeRewriter;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
public class EntityTypeMapping {
|
public class EntityTypeMapping {
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
package com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.data;
|
package com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.data;
|
||||||
|
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.NamedSoundRewriter;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.NamedSoundRewriter;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -23,7 +23,6 @@ import com.viaversion.viaversion.api.minecraft.item.Item;
|
|||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.Particle;
|
import com.viaversion.viaversion.api.type.types.Particle;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ParticleMapping {
|
public class ParticleMapping {
|
||||||
|
@ -35,8 +35,7 @@ import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
|||||||
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.opennbt.conversion.ConverterRegistry;
|
import com.viaversion.viaversion.libs.opennbt.conversion.ConverterRegistry;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ByteTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ByteTag;
|
||||||
@ -57,7 +56,6 @@ import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.SpawnEggRew
|
|||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.types.Chunk1_13Type;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.types.Chunk1_13Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_1_2to1_9_3_4.types.Chunk1_9_3_4Type;
|
import com.viaversion.viaversion.protocols.protocol1_9_1_2to1_9_3_4.types.Chunk1_9_3_4Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -91,178 +89,153 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.COOLDOWN, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.COOLDOWN, wrapper -> {
|
||||||
@Override
|
int itemId = wrapper.read(Type.VAR_INT);
|
||||||
public void registerMap() {
|
int oldId = protocol.getMappingData().getItemMappings().get(itemId);
|
||||||
handler(wrapper -> {
|
if (oldId == -1) {
|
||||||
int itemId = wrapper.read(Type.VAR_INT);
|
wrapper.cancel();
|
||||||
int oldId = protocol.getMappingData().getItemMappings().get(itemId);
|
return;
|
||||||
if (oldId == -1) {
|
|
||||||
wrapper.cancel();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SpawnEggRewriter.getEntityId(oldId).isPresent()) {
|
|
||||||
wrapper.write(Type.VAR_INT, 383 << 4);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.write(Type.VAR_INT, oldId >> 4);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SpawnEggRewriter.getEntityId(oldId).isPresent()) {
|
||||||
|
wrapper.write(Type.VAR_INT, 383 << 4);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapper.write(Type.VAR_INT, oldId >> 4);
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.BLOCK_ACTION, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.BLOCK_ACTION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION); // Location
|
map(Type.POSITION); // Location
|
||||||
map(Type.UNSIGNED_BYTE); // Action Id
|
map(Type.UNSIGNED_BYTE); // Action Id
|
||||||
map(Type.UNSIGNED_BYTE); // Action param
|
map(Type.UNSIGNED_BYTE); // Action param
|
||||||
map(Type.VAR_INT); // Block Id - /!\ NOT BLOCK STATE ID
|
map(Type.VAR_INT); // Block Id - /!\ NOT BLOCK STATE ID
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int blockId = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
int blockId = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
|
|
||||||
if (blockId == 73)
|
if (blockId == 73)
|
||||||
blockId = 25;
|
blockId = 25;
|
||||||
else if (blockId == 99)
|
else if (blockId == 99)
|
||||||
blockId = 33;
|
blockId = 33;
|
||||||
else if (blockId == 92)
|
else if (blockId == 92)
|
||||||
blockId = 29;
|
blockId = 29;
|
||||||
else if (blockId == 142)
|
else if (blockId == 142)
|
||||||
blockId = 54;
|
blockId = 54;
|
||||||
else if (blockId == 305)
|
else if (blockId == 305)
|
||||||
blockId = 146;
|
blockId = 146;
|
||||||
else if (blockId == 249)
|
else if (blockId == 249)
|
||||||
blockId = 130;
|
blockId = 130;
|
||||||
else if (blockId == 257)
|
else if (blockId == 257)
|
||||||
blockId = 138;
|
blockId = 138;
|
||||||
else if (blockId == 140)
|
else if (blockId == 140)
|
||||||
blockId = 52;
|
blockId = 52;
|
||||||
else if (blockId == 472)
|
else if (blockId == 472)
|
||||||
blockId = 209;
|
blockId = 209;
|
||||||
else if (blockId >= 483 && blockId <= 498)
|
else if (blockId >= 483 && blockId <= 498)
|
||||||
blockId = blockId - 483 + 219;
|
blockId = blockId - 483 + 219;
|
||||||
|
|
||||||
wrapper.set(Type.VAR_INT, 0, blockId);
|
wrapper.set(Type.VAR_INT, 0, blockId);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.BLOCK_ENTITY_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.BLOCK_ENTITY_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION); // 0 - Position
|
map(Type.POSITION); // 0 - Position
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Action
|
map(Type.UNSIGNED_BYTE); // 1 - Action
|
||||||
map(Type.NBT); // 2 - NBT Data
|
map(Type.NBT); // 2 - NBT Data
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
BackwardsBlockEntityProvider provider = Via.getManager().getProviders().get(BackwardsBlockEntityProvider.class);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
BackwardsBlockEntityProvider provider = Via.getManager().getProviders().get(BackwardsBlockEntityProvider.class);
|
|
||||||
|
|
||||||
// TODO conduit handling
|
// TODO conduit handling
|
||||||
if (wrapper.get(Type.UNSIGNED_BYTE, 0) == 5) {
|
if (wrapper.get(Type.UNSIGNED_BYTE, 0) == 5) {
|
||||||
wrapper.cancel();
|
wrapper.cancel();
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.set(Type.NBT, 0,
|
|
||||||
provider.transform(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.POSITION, 0),
|
|
||||||
wrapper.get(Type.NBT, 0)
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.set(Type.NBT, 0,
|
||||||
|
provider.transform(
|
||||||
|
wrapper.user(),
|
||||||
|
wrapper.get(Type.POSITION, 0),
|
||||||
|
wrapper.get(Type.NBT, 0)
|
||||||
|
));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.UNLOAD_CHUNK, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.UNLOAD_CHUNK, wrapper -> {
|
||||||
@Override
|
int chunkMinX = wrapper.passthrough(Type.INT) << 4;
|
||||||
public void registerMap() {
|
int chunkMinZ = wrapper.passthrough(Type.INT) << 4;
|
||||||
handler(new PacketHandler() {
|
int chunkMaxX = chunkMinX + 15;
|
||||||
@Override
|
int chunkMaxZ = chunkMinZ + 15;
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
BackwardsBlockStorage blockStorage = wrapper.user().get(BackwardsBlockStorage.class);
|
||||||
int chunkMinX = wrapper.passthrough(Type.INT) << 4;
|
blockStorage.getBlocks().entrySet().removeIf(entry -> {
|
||||||
int chunkMinZ = wrapper.passthrough(Type.INT) << 4;
|
Position position = entry.getKey();
|
||||||
int chunkMaxX = chunkMinX + 15;
|
return position.x() >= chunkMinX && position.z() >= chunkMinZ
|
||||||
int chunkMaxZ = chunkMinZ + 15;
|
&& position.x() <= chunkMaxX && position.z() <= chunkMaxZ;
|
||||||
BackwardsBlockStorage blockStorage = wrapper.user().get(BackwardsBlockStorage.class);
|
});
|
||||||
blockStorage.getBlocks().entrySet().removeIf(entry -> {
|
|
||||||
Position position = entry.getKey();
|
|
||||||
return position.x() >= chunkMinX && position.z() >= chunkMinZ
|
|
||||||
&& position.x() <= chunkMaxX && position.z() <= chunkMaxZ;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Block Change
|
// Block Change
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.BLOCK_CHANGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.BLOCK_CHANGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION); // 0 - Position
|
map(Type.POSITION); // 0 - Position
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int blockState = wrapper.read(Type.VAR_INT);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
Position position = wrapper.get(Type.POSITION, 0);
|
||||||
int blockState = wrapper.read(Type.VAR_INT);
|
|
||||||
Position position = wrapper.get(Type.POSITION, 0);
|
|
||||||
|
|
||||||
// Store blocks
|
// Store blocks
|
||||||
BackwardsBlockStorage storage = wrapper.user().get(BackwardsBlockStorage.class);
|
BackwardsBlockStorage storage = wrapper.user().get(BackwardsBlockStorage.class);
|
||||||
storage.checkAndStore(position, blockState);
|
storage.checkAndStore(position, blockState);
|
||||||
|
|
||||||
wrapper.write(Type.VAR_INT, protocol.getMappingData().getNewBlockStateId(blockState));
|
wrapper.write(Type.VAR_INT, protocol.getMappingData().getNewBlockStateId(blockState));
|
||||||
|
|
||||||
// Flower pot special treatment
|
// Flower pot special treatment
|
||||||
flowerPotSpecialTreatment(wrapper.user(), blockState, position);
|
flowerPotSpecialTreatment(wrapper.user(), blockState, position);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Multi Block Change
|
// Multi Block Change
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.MULTI_BLOCK_CHANGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.MULTI_BLOCK_CHANGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Chunk X
|
map(Type.INT); // 0 - Chunk X
|
||||||
map(Type.INT); // 1 - Chunk Z
|
map(Type.INT); // 1 - Chunk Z
|
||||||
map(Type.BLOCK_CHANGE_RECORD_ARRAY);
|
map(Type.BLOCK_CHANGE_RECORD_ARRAY);
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
BackwardsBlockStorage storage = wrapper.user().get(BackwardsBlockStorage.class);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
BackwardsBlockStorage storage = wrapper.user().get(BackwardsBlockStorage.class);
|
|
||||||
|
|
||||||
for (BlockChangeRecord record : wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0)) {
|
for (BlockChangeRecord record : wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0)) {
|
||||||
int chunkX = wrapper.get(Type.INT, 0);
|
int chunkX = wrapper.get(Type.INT, 0);
|
||||||
int chunkZ = wrapper.get(Type.INT, 1);
|
int chunkZ = wrapper.get(Type.INT, 1);
|
||||||
int block = record.getBlockId();
|
int block = record.getBlockId();
|
||||||
Position position = new Position(
|
Position position = new Position(
|
||||||
record.getSectionX() + (chunkX * 16),
|
record.getSectionX() + (chunkX * 16),
|
||||||
record.getY(),
|
record.getY(),
|
||||||
record.getSectionZ() + (chunkZ * 16));
|
record.getSectionZ() + (chunkZ * 16));
|
||||||
|
|
||||||
// Store if needed
|
// Store if needed
|
||||||
storage.checkAndStore(position, block);
|
storage.checkAndStore(position, block);
|
||||||
|
|
||||||
// Flower pot special treatment
|
// Flower pot special treatment
|
||||||
flowerPotSpecialTreatment(wrapper.user(), block, position);
|
flowerPotSpecialTreatment(wrapper.user(), block, position);
|
||||||
|
|
||||||
// Change to old id
|
// Change to old id
|
||||||
record.setBlockId(protocol.getMappingData().getNewBlockStateId(block));
|
record.setBlockId(protocol.getMappingData().getNewBlockStateId(block));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.WINDOW_ITEMS, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.WINDOW_ITEMS, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE);
|
map(Type.UNSIGNED_BYTE);
|
||||||
map(Type.FLAT_ITEM_ARRAY, Type.ITEM_ARRAY);
|
map(Type.FLAT_ITEM_ARRAY, Type.ITEM_ARRAY);
|
||||||
|
|
||||||
@ -270,9 +243,9 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SET_SLOT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SET_SLOT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE);
|
map(Type.UNSIGNED_BYTE);
|
||||||
map(Type.SHORT);
|
map(Type.SHORT);
|
||||||
map(Type.FLAT_ITEM, Type.ITEM);
|
map(Type.FLAT_ITEM, Type.ITEM);
|
||||||
@ -281,181 +254,170 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.CHUNK_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.CHUNK_DATA, wrapper -> {
|
||||||
@Override
|
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> {
|
|
||||||
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
|
||||||
|
|
||||||
Chunk1_9_3_4Type type_old = new Chunk1_9_3_4Type(clientWorld);
|
Chunk1_9_3_4Type type_old = new Chunk1_9_3_4Type(clientWorld);
|
||||||
Chunk1_13Type type = new Chunk1_13Type(clientWorld);
|
Chunk1_13Type type = new Chunk1_13Type(clientWorld);
|
||||||
Chunk chunk = wrapper.read(type);
|
Chunk chunk = wrapper.read(type);
|
||||||
|
|
||||||
// Handle Block Entities before block rewrite
|
// Handle Block Entities before block rewrite
|
||||||
BackwardsBlockEntityProvider provider = Via.getManager().getProviders().get(BackwardsBlockEntityProvider.class);
|
BackwardsBlockEntityProvider provider = Via.getManager().getProviders().get(BackwardsBlockEntityProvider.class);
|
||||||
BackwardsBlockStorage storage = wrapper.user().get(BackwardsBlockStorage.class);
|
BackwardsBlockStorage storage = wrapper.user().get(BackwardsBlockStorage.class);
|
||||||
for (CompoundTag tag : chunk.getBlockEntities()) {
|
for (CompoundTag tag : chunk.getBlockEntities()) {
|
||||||
Tag idTag = tag.get("id");
|
Tag idTag = tag.get("id");
|
||||||
if (idTag == null) continue;
|
if (idTag == null) continue;
|
||||||
|
|
||||||
String id = (String) idTag.getValue();
|
String id = (String) idTag.getValue();
|
||||||
|
|
||||||
// Ignore if we don't handle it
|
// Ignore if we don't handle it
|
||||||
if (!provider.isHandled(id)) continue;
|
if (!provider.isHandled(id)) continue;
|
||||||
|
|
||||||
int sectionIndex = ((NumberTag) tag.get("y")).asInt() >> 4;
|
int sectionIndex = ((NumberTag) tag.get("y")).asInt() >> 4;
|
||||||
if (sectionIndex < 0 || sectionIndex > 15) {
|
if (sectionIndex < 0 || sectionIndex > 15) {
|
||||||
// 1.17 chunks
|
// 1.17 chunks
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ChunkSection section = chunk.getSections()[sectionIndex];
|
ChunkSection section = chunk.getSections()[sectionIndex];
|
||||||
|
|
||||||
int x = ((NumberTag) tag.get("x")).asInt();
|
int x = ((NumberTag) tag.get("x")).asInt();
|
||||||
int y = ((NumberTag) tag.get("y")).asInt();
|
int y = ((NumberTag) tag.get("y")).asInt();
|
||||||
int z = ((NumberTag) tag.get("z")).asInt();
|
int z = ((NumberTag) tag.get("z")).asInt();
|
||||||
Position position = new Position(x, (short) y, z);
|
Position position = new Position(x, (short) y, z);
|
||||||
|
|
||||||
int block = section.palette(PaletteType.BLOCKS).idAt(x & 0xF, y & 0xF, z & 0xF);
|
int block = section.palette(PaletteType.BLOCKS).idAt(x & 0xF, y & 0xF, z & 0xF);
|
||||||
storage.checkAndStore(position, block);
|
storage.checkAndStore(position, block);
|
||||||
|
|
||||||
provider.transform(wrapper.user(), position, tag);
|
provider.transform(wrapper.user(), position, tag);
|
||||||
}
|
|
||||||
|
|
||||||
// Rewrite new blocks to old blocks
|
|
||||||
for (int i = 0; i < chunk.getSections().length; i++) {
|
|
||||||
ChunkSection section = chunk.getSections()[i];
|
|
||||||
if (section == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
|
||||||
// Flower pots require a special treatment, they are no longer block entities :(
|
|
||||||
for (int y = 0; y < 16; y++) {
|
|
||||||
for (int z = 0; z < 16; z++) {
|
|
||||||
for (int x = 0; x < 16; x++) {
|
|
||||||
int block = palette.idAt(x, y, z);
|
|
||||||
|
|
||||||
// Check if the block is a flower
|
|
||||||
if (FlowerPotHandler.isFlowah(block)) {
|
|
||||||
Position pos = new Position(
|
|
||||||
(x + (chunk.getX() << 4)),
|
|
||||||
(short) (y + (i << 4)),
|
|
||||||
(z + (chunk.getZ() << 4))
|
|
||||||
);
|
|
||||||
// Store block
|
|
||||||
storage.checkAndStore(pos, block);
|
|
||||||
|
|
||||||
CompoundTag nbt = provider.transform(wrapper.user(), pos, "minecraft:flower_pot");
|
|
||||||
|
|
||||||
chunk.getBlockEntities().add(nbt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int j = 0; j < palette.size(); j++) {
|
|
||||||
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j));
|
|
||||||
palette.setIdByIndex(j, mappedBlockStateId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (chunk.isBiomeData()) {
|
|
||||||
for (int i = 0; i < 256; i++) {
|
|
||||||
int biome = chunk.getBiomeData()[i];
|
|
||||||
int newId = -1;
|
|
||||||
switch (biome) {
|
|
||||||
case 40: // end biomes
|
|
||||||
case 41:
|
|
||||||
case 42:
|
|
||||||
case 43:
|
|
||||||
newId = 9;
|
|
||||||
break;
|
|
||||||
case 47: // deep ocean biomes
|
|
||||||
case 48:
|
|
||||||
case 49:
|
|
||||||
newId = 24;
|
|
||||||
break;
|
|
||||||
case 50: // deep frozen... let's just pick the frozen variant
|
|
||||||
newId = 10;
|
|
||||||
break;
|
|
||||||
case 44: // the other new ocean biomes
|
|
||||||
case 45:
|
|
||||||
case 46:
|
|
||||||
newId = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newId != -1) {
|
|
||||||
chunk.getBiomeData()[i] = newId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.write(type_old, chunk);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Rewrite new blocks to old blocks
|
||||||
|
for (int i = 0; i < chunk.getSections().length; i++) {
|
||||||
|
ChunkSection section = chunk.getSections()[i];
|
||||||
|
if (section == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
||||||
|
// Flower pots require a special treatment, they are no longer block entities :(
|
||||||
|
for (int y = 0; y < 16; y++) {
|
||||||
|
for (int z = 0; z < 16; z++) {
|
||||||
|
for (int x = 0; x < 16; x++) {
|
||||||
|
int block = palette.idAt(x, y, z);
|
||||||
|
|
||||||
|
// Check if the block is a flower
|
||||||
|
if (FlowerPotHandler.isFlowah(block)) {
|
||||||
|
Position pos = new Position(
|
||||||
|
(x + (chunk.getX() << 4)),
|
||||||
|
(short) (y + (i << 4)),
|
||||||
|
(z + (chunk.getZ() << 4))
|
||||||
|
);
|
||||||
|
// Store block
|
||||||
|
storage.checkAndStore(pos, block);
|
||||||
|
|
||||||
|
CompoundTag nbt = provider.transform(wrapper.user(), pos, "minecraft:flower_pot");
|
||||||
|
|
||||||
|
chunk.getBlockEntities().add(nbt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int j = 0; j < palette.size(); j++) {
|
||||||
|
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j));
|
||||||
|
palette.setIdByIndex(j, mappedBlockStateId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (chunk.isBiomeData()) {
|
||||||
|
for (int i = 0; i < 256; i++) {
|
||||||
|
int biome = chunk.getBiomeData()[i];
|
||||||
|
int newId = -1;
|
||||||
|
switch (biome) {
|
||||||
|
case 40: // end biomes
|
||||||
|
case 41:
|
||||||
|
case 42:
|
||||||
|
case 43:
|
||||||
|
newId = 9;
|
||||||
|
break;
|
||||||
|
case 47: // deep ocean biomes
|
||||||
|
case 48:
|
||||||
|
case 49:
|
||||||
|
newId = 24;
|
||||||
|
break;
|
||||||
|
case 50: // deep frozen... let's just pick the frozen variant
|
||||||
|
newId = 10;
|
||||||
|
break;
|
||||||
|
case 44: // the other new ocean biomes
|
||||||
|
case 45:
|
||||||
|
case 46:
|
||||||
|
newId = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newId != -1) {
|
||||||
|
chunk.getBiomeData()[i] = newId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapper.write(type_old, chunk);
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.EFFECT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.EFFECT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Effect Id
|
map(Type.INT); // Effect Id
|
||||||
map(Type.POSITION); // Location
|
map(Type.POSITION); // Location
|
||||||
map(Type.INT); // Data
|
map(Type.INT); // Data
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int id = wrapper.get(Type.INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
int data = wrapper.get(Type.INT, 1);
|
||||||
int id = wrapper.get(Type.INT, 0);
|
if (id == 1010) { // Play record
|
||||||
int data = wrapper.get(Type.INT, 1);
|
wrapper.set(Type.INT, 1, protocol.getMappingData().getItemMappings().get(data) >> 4);
|
||||||
if (id == 1010) { // Play record
|
} else if (id == 2001) { // Block break + block break sound
|
||||||
wrapper.set(Type.INT, 1, protocol.getMappingData().getItemMappings().get(data) >> 4);
|
data = protocol.getMappingData().getNewBlockStateId(data);
|
||||||
} else if (id == 2001) { // Block break + block break sound
|
int blockId = data >> 4;
|
||||||
data = protocol.getMappingData().getNewBlockStateId(data);
|
int blockData = data & 0xF;
|
||||||
int blockId = data >> 4;
|
wrapper.set(Type.INT, 1, (blockId & 0xFFF) | (blockData << 12));
|
||||||
int blockData = data & 0xF;
|
|
||||||
wrapper.set(Type.INT, 1, (blockId & 0xFFF) | (blockData << 12));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.MAP_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.MAP_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.BYTE);
|
map(Type.BYTE);
|
||||||
map(Type.BOOLEAN);
|
map(Type.BOOLEAN);
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int iconCount = wrapper.passthrough(Type.VAR_INT);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
for (int i = 0; i < iconCount; i++) {
|
||||||
int iconCount = wrapper.passthrough(Type.VAR_INT);
|
int type = wrapper.read(Type.VAR_INT);
|
||||||
for (int i = 0; i < iconCount; i++) {
|
byte x = wrapper.read(Type.BYTE);
|
||||||
int type = wrapper.read(Type.VAR_INT);
|
byte z = wrapper.read(Type.BYTE);
|
||||||
byte x = wrapper.read(Type.BYTE);
|
byte direction = wrapper.read(Type.BYTE);
|
||||||
byte z = wrapper.read(Type.BYTE);
|
if (wrapper.read(Type.BOOLEAN)) {
|
||||||
byte direction = wrapper.read(Type.BYTE);
|
wrapper.read(Type.COMPONENT);
|
||||||
if (wrapper.read(Type.BOOLEAN)) {
|
|
||||||
wrapper.read(Type.COMPONENT);
|
|
||||||
}
|
|
||||||
if (type > 9) {
|
|
||||||
wrapper.set(Type.VAR_INT, 1, wrapper.get(Type.VAR_INT, 1) - 1);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
wrapper.write(Type.BYTE, (byte) ((type << 4) | (direction & 0x0F)));
|
|
||||||
wrapper.write(Type.BYTE, x);
|
|
||||||
wrapper.write(Type.BYTE, z);
|
|
||||||
}
|
}
|
||||||
|
if (type > 9) {
|
||||||
|
wrapper.set(Type.VAR_INT, 1, wrapper.get(Type.VAR_INT, 1) - 1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
wrapper.write(Type.BYTE, (byte) ((type << 4) | (direction & 0x0F)));
|
||||||
|
wrapper.write(Type.BYTE, x);
|
||||||
|
wrapper.write(Type.BYTE, z);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.ENTITY_EQUIPMENT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.ENTITY_EQUIPMENT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.FLAT_ITEM, Type.ITEM);
|
map(Type.FLAT_ITEM, Type.ITEM);
|
||||||
@ -464,9 +426,9 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.WINDOW_PROPERTY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.WINDOW_PROPERTY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE); // Window Id
|
map(Type.UNSIGNED_BYTE); // Window Id
|
||||||
map(Type.SHORT); // Property
|
map(Type.SHORT); // Property
|
||||||
map(Type.SHORT); // Value
|
map(Type.SHORT); // Value
|
||||||
@ -482,9 +444,9 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_12_1.CREATIVE_INVENTORY_ACTION, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_12_1.CREATIVE_INVENTORY_ACTION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.SHORT);
|
map(Type.SHORT);
|
||||||
map(Type.ITEM, Type.FLAT_ITEM);
|
map(Type.ITEM, Type.FLAT_ITEM);
|
||||||
|
|
||||||
@ -492,9 +454,9 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_12_1.CLICK_WINDOW, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_12_1.CLICK_WINDOW, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE);
|
map(Type.UNSIGNED_BYTE);
|
||||||
map(Type.SHORT);
|
map(Type.SHORT);
|
||||||
map(Type.BYTE);
|
map(Type.BYTE);
|
||||||
|
@ -32,8 +32,7 @@ import com.viaversion.viaversion.api.minecraft.item.Item;
|
|||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_12;
|
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_12;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.Particle;
|
import com.viaversion.viaversion.api.type.types.Particle;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_12;
|
import com.viaversion.viaversion.api.type.types.version.Types1_12;
|
||||||
@ -42,7 +41,6 @@ import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ClientboundPacke
|
|||||||
import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ServerboundPackets1_12_1;
|
import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ServerboundPackets1_12_1;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_13, Protocol1_12_2To1_13> {
|
public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_13, Protocol1_12_2To1_13> {
|
||||||
@ -53,38 +51,30 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.PLAYER_POSITION, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.PLAYER_POSITION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
map(Type.FLOAT);
|
map(Type.FLOAT);
|
||||||
map(Type.FLOAT);
|
map(Type.FLOAT);
|
||||||
map(Type.BYTE);
|
map(Type.BYTE);
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
if (!ViaBackwards.getConfig().isFix1_13FacePlayer()) return;
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
if (!ViaBackwards.getConfig().isFix1_13FacePlayer()) return;
|
|
||||||
|
|
||||||
PlayerPositionStorage1_13 playerStorage = wrapper.user().get(PlayerPositionStorage1_13.class);
|
PlayerPositionStorage1_13 playerStorage = wrapper.user().get(PlayerPositionStorage1_13.class);
|
||||||
byte bitField = wrapper.get(Type.BYTE, 0);
|
byte bitField = wrapper.get(Type.BYTE, 0);
|
||||||
playerStorage.setX(toSet(bitField, 0, playerStorage.getX(), wrapper.get(Type.DOUBLE, 0)));
|
playerStorage.setX(toSet(bitField, 0, playerStorage.getX(), wrapper.get(Type.DOUBLE, 0)));
|
||||||
playerStorage.setY(toSet(bitField, 1, playerStorage.getY(), wrapper.get(Type.DOUBLE, 1)));
|
playerStorage.setY(toSet(bitField, 1, playerStorage.getY(), wrapper.get(Type.DOUBLE, 1)));
|
||||||
playerStorage.setZ(toSet(bitField, 2, playerStorage.getZ(), wrapper.get(Type.DOUBLE, 2)));
|
playerStorage.setZ(toSet(bitField, 2, playerStorage.getZ(), wrapper.get(Type.DOUBLE, 2)));
|
||||||
}
|
|
||||||
|
|
||||||
private double toSet(int field, int bitIndex, double origin, double packetValue) {
|
|
||||||
// If bit is set, coordinate is relative
|
|
||||||
return (field & (1 << bitIndex)) != 0 ? origin + packetValue : packetValue;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_ENTITY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_ENTITY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.UUID);
|
map(Type.UUID);
|
||||||
map(Type.BYTE);
|
map(Type.BYTE);
|
||||||
@ -97,35 +87,32 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
|
|
||||||
handler(getObjectTrackerHandler());
|
handler(getObjectTrackerHandler());
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
Optional<Entity1_13Types.ObjectType> optionalType = Entity1_13Types.ObjectType.findById(wrapper.get(Type.BYTE, 0));
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (!optionalType.isPresent()) return;
|
||||||
Optional<Entity1_13Types.ObjectType> optionalType = Entity1_13Types.ObjectType.findById(wrapper.get(Type.BYTE, 0));
|
|
||||||
if (!optionalType.isPresent()) return;
|
|
||||||
|
|
||||||
Entity1_13Types.ObjectType type = optionalType.get();
|
Entity1_13Types.ObjectType type = optionalType.get();
|
||||||
if (type == Entity1_13Types.ObjectType.FALLING_BLOCK) {
|
if (type == Entity1_13Types.ObjectType.FALLING_BLOCK) {
|
||||||
int blockState = wrapper.get(Type.INT, 0);
|
int blockState = wrapper.get(Type.INT, 0);
|
||||||
int combined = Protocol1_12_2To1_13.MAPPINGS.getNewBlockStateId(blockState);
|
int combined = Protocol1_12_2To1_13.MAPPINGS.getNewBlockStateId(blockState);
|
||||||
combined = ((combined >> 4) & 0xFFF) | ((combined & 0xF) << 12);
|
combined = ((combined >> 4) & 0xFFF) | ((combined & 0xF) << 12);
|
||||||
wrapper.set(Type.INT, 0, combined);
|
wrapper.set(Type.INT, 0, combined);
|
||||||
} else if (type == Entity1_13Types.ObjectType.ITEM_FRAME) {
|
} else if (type == Entity1_13Types.ObjectType.ITEM_FRAME) {
|
||||||
int data = wrapper.get(Type.INT, 0);
|
int data = wrapper.get(Type.INT, 0);
|
||||||
switch (data) {
|
switch (data) {
|
||||||
case 3:
|
case 3:
|
||||||
data = 0;
|
data = 0;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
data = 1;
|
data = 1;
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
data = 3;
|
data = 3;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
wrapper.set(Type.INT, 0, data);
|
|
||||||
} else if (type == Entity1_13Types.ObjectType.TRIDENT) {
|
|
||||||
wrapper.set(Type.BYTE, 0, (byte) Entity1_13Types.ObjectType.TIPPED_ARROW.getId());
|
|
||||||
}
|
}
|
||||||
|
wrapper.set(Type.INT, 0, data);
|
||||||
|
} else if (type == Entity1_13Types.ObjectType.TRIDENT) {
|
||||||
|
wrapper.set(Type.BYTE, 0, (byte) Entity1_13Types.ObjectType.TIPPED_ARROW.getId());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -134,9 +121,9 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
registerTracker(ClientboundPackets1_13.SPAWN_EXPERIENCE_ORB, Entity1_13Types.EntityType.EXPERIENCE_ORB);
|
registerTracker(ClientboundPackets1_13.SPAWN_EXPERIENCE_ORB, Entity1_13Types.EntityType.EXPERIENCE_ORB);
|
||||||
registerTracker(ClientboundPackets1_13.SPAWN_GLOBAL_ENTITY, Entity1_13Types.EntityType.LIGHTNING_BOLT);
|
registerTracker(ClientboundPackets1_13.SPAWN_GLOBAL_ENTITY, Entity1_13Types.EntityType.LIGHTNING_BOLT);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_MOB, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_MOB, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.UUID);
|
map(Type.UUID);
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
@ -151,21 +138,18 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
map(Type.SHORT);
|
map(Type.SHORT);
|
||||||
map(Types1_13.METADATA_LIST, Types1_12.METADATA_LIST);
|
map(Types1_13.METADATA_LIST, Types1_12.METADATA_LIST);
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int type = wrapper.get(Type.VAR_INT, 1);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
EntityType entityType = Entity1_13Types.getTypeFromId(type, false);
|
||||||
int type = wrapper.get(Type.VAR_INT, 1);
|
tracker(wrapper.user()).addEntity(wrapper.get(Type.VAR_INT, 0), entityType);
|
||||||
EntityType entityType = Entity1_13Types.getTypeFromId(type, false);
|
|
||||||
tracker(wrapper.user()).addEntity(wrapper.get(Type.VAR_INT, 0), entityType);
|
|
||||||
|
|
||||||
int oldId = EntityTypeMapping.getOldId(type);
|
int oldId = EntityTypeMapping.getOldId(type);
|
||||||
if (oldId == -1) {
|
if (oldId == -1) {
|
||||||
if (!hasData(entityType)) {
|
if (!hasData(entityType)) {
|
||||||
ViaBackwards.getPlatform().getLogger().warning("Could not find 1.12 entity type for 1.13 entity type " + type + "/" + entityType);
|
ViaBackwards.getPlatform().getLogger().warning("Could not find 1.12 entity type for 1.13 entity type " + type + "/" + entityType);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
wrapper.set(Type.VAR_INT, 1, oldId);
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
wrapper.set(Type.VAR_INT, 1, oldId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -174,9 +158,9 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_PLAYER, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_PLAYER, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.UUID);
|
map(Type.UUID);
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
@ -190,29 +174,26 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_PAINTING, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_PAINTING, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.UUID);
|
map(Type.UUID);
|
||||||
|
|
||||||
handler(getTrackerHandler(Entity1_13Types.EntityType.PAINTING, Type.VAR_INT));
|
handler(getTrackerHandler(Entity1_13Types.EntityType.PAINTING, Type.VAR_INT));
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int motive = wrapper.read(Type.VAR_INT);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
String title = PaintingMapping.getStringId(motive);
|
||||||
int motive = wrapper.read(Type.VAR_INT);
|
wrapper.write(Type.STRING, title);
|
||||||
String title = PaintingMapping.getStringId(motive);
|
|
||||||
wrapper.write(Type.STRING, title);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerJoinGame(ClientboundPackets1_13.JOIN_GAME, Entity1_13Types.EntityType.PLAYER);
|
registerJoinGame(ClientboundPackets1_13.JOIN_GAME, Entity1_13Types.EntityType.PLAYER);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.RESPAWN, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.RESPAWN, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Dimension ID
|
map(Type.INT); // 0 - Dimension ID
|
||||||
|
|
||||||
handler(getDimensionHandler(0));
|
handler(getDimensionHandler(0));
|
||||||
@ -224,48 +205,40 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
registerMetadataRewriter(ClientboundPackets1_13.ENTITY_METADATA, Types1_13.METADATA_LIST, Types1_12.METADATA_LIST);
|
registerMetadataRewriter(ClientboundPackets1_13.ENTITY_METADATA, Types1_13.METADATA_LIST, Types1_12.METADATA_LIST);
|
||||||
|
|
||||||
// Face Player (new packet)
|
// Face Player (new packet)
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.FACE_PLAYER, null, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.FACE_PLAYER, null, wrapper -> {
|
||||||
@Override
|
wrapper.cancel();
|
||||||
public void registerMap() {
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
wrapper.cancel();
|
|
||||||
|
|
||||||
if (!ViaBackwards.getConfig().isFix1_13FacePlayer()) return;
|
if (!ViaBackwards.getConfig().isFix1_13FacePlayer()) return;
|
||||||
|
|
||||||
// We will just accept a possible, very minor mismatch between server and client position,
|
// We will just accept a possible, very minor mismatch between server and client position,
|
||||||
// and will take the server's one in both cases, else we would have to cache all entities' positions.
|
// and will take the server's one in both cases, else we would have to cache all entities' positions.
|
||||||
final int anchor = wrapper.read(Type.VAR_INT); // feet/eyes enum
|
final int anchor = wrapper.read(Type.VAR_INT); // feet/eyes enum
|
||||||
final double x = wrapper.read(Type.DOUBLE);
|
final double x = wrapper.read(Type.DOUBLE);
|
||||||
final double y = wrapper.read(Type.DOUBLE);
|
final double y = wrapper.read(Type.DOUBLE);
|
||||||
final double z = wrapper.read(Type.DOUBLE);
|
final double z = wrapper.read(Type.DOUBLE);
|
||||||
|
|
||||||
PlayerPositionStorage1_13 positionStorage = wrapper.user().get(PlayerPositionStorage1_13.class);
|
PlayerPositionStorage1_13 positionStorage = wrapper.user().get(PlayerPositionStorage1_13.class);
|
||||||
|
|
||||||
// Send teleport packet to client
|
// Send teleport packet to client
|
||||||
PacketWrapper positionAndLook = wrapper.create(ClientboundPackets1_12_1.PLAYER_POSITION);
|
PacketWrapper positionAndLook = wrapper.create(ClientboundPackets1_12_1.PLAYER_POSITION);
|
||||||
positionAndLook.write(Type.DOUBLE, 0D);
|
positionAndLook.write(Type.DOUBLE, 0D);
|
||||||
positionAndLook.write(Type.DOUBLE, 0D);
|
positionAndLook.write(Type.DOUBLE, 0D);
|
||||||
positionAndLook.write(Type.DOUBLE, 0D);
|
positionAndLook.write(Type.DOUBLE, 0D);
|
||||||
|
|
||||||
//TODO properly cache and calculate head position?
|
//TODO properly cache and calculate head position?
|
||||||
EntityPositionHandler.writeFacingDegrees(positionAndLook, positionStorage.getX(),
|
EntityPositionHandler.writeFacingDegrees(positionAndLook, positionStorage.getX(),
|
||||||
anchor == 1 ? positionStorage.getY() + 1.62 : positionStorage.getY(),
|
anchor == 1 ? positionStorage.getY() + 1.62 : positionStorage.getY(),
|
||||||
positionStorage.getZ(), x, y, z);
|
positionStorage.getZ(), x, y, z);
|
||||||
|
|
||||||
positionAndLook.write(Type.BYTE, (byte) 7); // bitfield, 0=absolute, 1=relative - x,y,z relative, yaw,pitch absolute
|
positionAndLook.write(Type.BYTE, (byte) 7); // bitfield, 0=absolute, 1=relative - x,y,z relative, yaw,pitch absolute
|
||||||
positionAndLook.write(Type.VAR_INT, -1);
|
positionAndLook.write(Type.VAR_INT, -1);
|
||||||
positionAndLook.send(Protocol1_12_2To1_13.class);
|
positionAndLook.send(Protocol1_12_2To1_13.class);
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (ViaBackwards.getConfig().isFix1_13FacePlayer()) {
|
if (ViaBackwards.getConfig().isFix1_13FacePlayer()) {
|
||||||
PacketRemapper movementRemapper = new PacketRemapper() {
|
PacketHandlers movementRemapper = new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
@ -408,4 +381,9 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
public int newEntityId(final int newId) {
|
public int newEntityId(final int newId) {
|
||||||
return EntityTypeMapping.getOldId(newId);
|
return EntityTypeMapping.getOldId(newId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static double toSet(int field, int bitIndex, double origin, double packetValue) {
|
||||||
|
// If bit is set, coordinate is relative
|
||||||
|
return (field & (1 << bitIndex)) != 0 ? origin + packetValue : packetValue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
@ -19,7 +19,7 @@ package com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.packets;
|
|||||||
|
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13;
|
import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13;
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.data.NamedSoundMapping;
|
import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.data.NamedSoundMapping;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.rewriter.RewriterBase;
|
import com.viaversion.viaversion.api.rewriter.RewriterBase;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ClientboundPackets1_12_1;
|
import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ClientboundPackets1_12_1;
|
||||||
@ -34,55 +34,45 @@ public class SoundPackets1_13 extends RewriterBase<Protocol1_12_2To1_13> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.NAMED_SOUND, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.NAMED_SOUND, wrapper -> {
|
||||||
@Override
|
String sound = wrapper.read(Type.STRING);
|
||||||
public void registerMap() {
|
String mappedSound = NamedSoundMapping.getOldId(sound);
|
||||||
handler(wrapper -> {
|
if (mappedSound != null || (mappedSound = protocol.getMappingData().getMappedNamedSound(sound)) != null) {
|
||||||
String sound = wrapper.read(Type.STRING);
|
wrapper.write(Type.STRING, mappedSound);
|
||||||
String mappedSound = NamedSoundMapping.getOldId(sound);
|
} else {
|
||||||
if (mappedSound != null || (mappedSound = protocol.getMappingData().getMappedNamedSound(sound)) != null) {
|
wrapper.write(Type.STRING, sound);
|
||||||
wrapper.write(Type.STRING, mappedSound);
|
|
||||||
} else {
|
|
||||||
wrapper.write(Type.STRING, sound);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Stop Sound -> Plugin Message
|
// Stop Sound -> Plugin Message
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.STOP_SOUND, ClientboundPackets1_12_1.PLUGIN_MESSAGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.STOP_SOUND, ClientboundPackets1_12_1.PLUGIN_MESSAGE, wrapper -> {
|
||||||
@Override
|
wrapper.write(Type.STRING, "MC|StopSound");
|
||||||
public void registerMap() {
|
byte flags = wrapper.read(Type.BYTE);
|
||||||
handler(wrapper -> {
|
String source;
|
||||||
wrapper.write(Type.STRING, "MC|StopSound");
|
if ((flags & 0x01) != 0) {
|
||||||
byte flags = wrapper.read(Type.BYTE);
|
source = SOUND_SOURCES[wrapper.read(Type.VAR_INT)];
|
||||||
String source;
|
} else {
|
||||||
if ((flags & 0x01) != 0) {
|
source = "";
|
||||||
source = SOUND_SOURCES[wrapper.read(Type.VAR_INT)];
|
|
||||||
} else {
|
|
||||||
source = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
String sound;
|
|
||||||
if ((flags & 0x02) != 0) {
|
|
||||||
String newSound = wrapper.read(Type.STRING);
|
|
||||||
sound = protocol.getMappingData().getMappedNamedSound(newSound);
|
|
||||||
if (sound == null) {
|
|
||||||
sound = "";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
sound = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.write(Type.STRING, source);
|
|
||||||
wrapper.write(Type.STRING, sound);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String sound;
|
||||||
|
if ((flags & 0x02) != 0) {
|
||||||
|
String newSound = wrapper.read(Type.STRING);
|
||||||
|
sound = protocol.getMappingData().getMappedNamedSound(newSound);
|
||||||
|
if (sound == null) {
|
||||||
|
sound = "";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sound = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapper.write(Type.STRING, source);
|
||||||
|
wrapper.write(Type.STRING, sound);
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SOUND, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SOUND, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
int newSound = wrapper.get(Type.VAR_INT, 0);
|
int newSound = wrapper.get(Type.VAR_INT, 0);
|
||||||
|
@ -22,7 +22,6 @@ import com.viaversion.viaversion.api.connection.StorableObject;
|
|||||||
import com.viaversion.viaversion.api.minecraft.Position;
|
import com.viaversion.viaversion.api.minecraft.Position;
|
||||||
import com.viaversion.viaversion.libs.fastutil.ints.IntOpenHashSet;
|
import com.viaversion.viaversion.libs.fastutil.ints.IntOpenHashSet;
|
||||||
import com.viaversion.viaversion.libs.fastutil.ints.IntSet;
|
import com.viaversion.viaversion.libs.fastutil.ints.IntSet;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
package com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.storage;
|
package com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.storage;
|
||||||
|
|
||||||
import com.viaversion.viaversion.api.connection.StorableObject;
|
import com.viaversion.viaversion.api.connection.StorableObject;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -22,9 +22,7 @@ import com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.packets.Entit
|
|||||||
import com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.packets.InventoryPackets1_13_2;
|
import com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.packets.InventoryPackets1_13_2;
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.packets.WorldPackets1_13_2;
|
import com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.packets.WorldPackets1_13_2;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13;
|
||||||
@ -41,52 +39,44 @@ public class Protocol1_13_1To1_13_2 extends BackwardsProtocol<ClientboundPackets
|
|||||||
WorldPackets1_13_2.register(this);
|
WorldPackets1_13_2.register(this);
|
||||||
EntityPackets1_13_2.register(this);
|
EntityPackets1_13_2.register(this);
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_13.EDIT_BOOK, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_13.EDIT_BOOK, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.FLAT_ITEM, Type.FLAT_VAR_INT_ITEM);
|
map(Type.FLAT_ITEM, Type.FLAT_VAR_INT_ITEM);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_13.ADVANCEMENTS, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_13.ADVANCEMENTS, wrapper -> {
|
||||||
@Override
|
wrapper.passthrough(Type.BOOLEAN); // Reset/clear
|
||||||
public void registerMap() {
|
int size = wrapper.passthrough(Type.VAR_INT); // Mapping size
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Reset/clear
|
|
||||||
int size = wrapper.passthrough(Type.VAR_INT); // Mapping size
|
|
||||||
|
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
wrapper.passthrough(Type.STRING); // Identifier
|
wrapper.passthrough(Type.STRING); // Identifier
|
||||||
|
|
||||||
// Parent
|
// Parent
|
||||||
if (wrapper.passthrough(Type.BOOLEAN))
|
if (wrapper.passthrough(Type.BOOLEAN))
|
||||||
wrapper.passthrough(Type.STRING);
|
wrapper.passthrough(Type.STRING);
|
||||||
|
|
||||||
// Display data
|
// Display data
|
||||||
if (wrapper.passthrough(Type.BOOLEAN)) {
|
if (wrapper.passthrough(Type.BOOLEAN)) {
|
||||||
wrapper.passthrough(Type.COMPONENT); // Title
|
wrapper.passthrough(Type.COMPONENT); // Title
|
||||||
wrapper.passthrough(Type.COMPONENT); // Description
|
wrapper.passthrough(Type.COMPONENT); // Description
|
||||||
Item icon = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
Item icon = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
||||||
wrapper.write(Type.FLAT_ITEM, icon);
|
wrapper.write(Type.FLAT_ITEM, icon);
|
||||||
wrapper.passthrough(Type.VAR_INT); // Frame type
|
wrapper.passthrough(Type.VAR_INT); // Frame type
|
||||||
int flags = wrapper.passthrough(Type.INT); // Flags
|
int flags = wrapper.passthrough(Type.INT); // Flags
|
||||||
if ((flags & 1) != 0)
|
if ((flags & 1) != 0)
|
||||||
wrapper.passthrough(Type.STRING); // Background texture
|
wrapper.passthrough(Type.STRING); // Background texture
|
||||||
wrapper.passthrough(Type.FLOAT); // X
|
wrapper.passthrough(Type.FLOAT); // X
|
||||||
wrapper.passthrough(Type.FLOAT); // Y
|
wrapper.passthrough(Type.FLOAT); // Y
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.passthrough(Type.STRING_ARRAY); // Criteria
|
wrapper.passthrough(Type.STRING_ARRAY); // Criteria
|
||||||
|
|
||||||
int arrayLength = wrapper.passthrough(Type.VAR_INT);
|
int arrayLength = wrapper.passthrough(Type.VAR_INT);
|
||||||
for (int array = 0; array < arrayLength; array++) {
|
for (int array = 0; array < arrayLength; array++) {
|
||||||
wrapper.passthrough(Type.STRING_ARRAY); // String array
|
wrapper.passthrough(Type.STRING_ARRAY); // String array
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -19,9 +19,7 @@ package com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.packets;
|
|||||||
|
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.Protocol1_13_1To1_13_2;
|
import com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.Protocol1_13_1To1_13_2;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_13;
|
import com.viaversion.viaversion.api.type.types.version.Types1_13;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_13_2;
|
import com.viaversion.viaversion.api.type.types.version.Types1_13_2;
|
||||||
@ -31,9 +29,9 @@ public class EntityPackets1_13_2 {
|
|||||||
|
|
||||||
|
|
||||||
public static void register(Protocol1_13_1To1_13_2 protocol) {
|
public static void register(Protocol1_13_1To1_13_2 protocol) {
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_MOB, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_MOB, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Entity UUID
|
map(Type.UUID); // 1 - Entity UUID
|
||||||
map(Type.VAR_INT); // 2 - Entity Type
|
map(Type.VAR_INT); // 2 - Entity Type
|
||||||
@ -48,20 +46,17 @@ public class EntityPackets1_13_2 {
|
|||||||
map(Type.SHORT); // 11 - Velocity Z
|
map(Type.SHORT); // 11 - Velocity Z
|
||||||
map(Types1_13_2.METADATA_LIST, Types1_13.METADATA_LIST); // 12 - Metadata
|
map(Types1_13_2.METADATA_LIST, Types1_13.METADATA_LIST); // 12 - Metadata
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
for (Metadata metadata : wrapper.get(Types1_13.METADATA_LIST, 0)) {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
metadata.setMetaType(Types1_13.META_TYPES.byId(metadata.metaType().typeId()));
|
||||||
for (Metadata metadata : wrapper.get(Types1_13.METADATA_LIST, 0)) {
|
|
||||||
metadata.setMetaType(Types1_13.META_TYPES.byId(metadata.metaType().typeId()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_PLAYER, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_PLAYER, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Player UUID
|
map(Type.UUID); // 1 - Player UUID
|
||||||
map(Type.DOUBLE); // 2 - X
|
map(Type.DOUBLE); // 2 - X
|
||||||
@ -71,29 +66,23 @@ public class EntityPackets1_13_2 {
|
|||||||
map(Type.BYTE); // 6 - Pitch
|
map(Type.BYTE); // 6 - Pitch
|
||||||
map(Types1_13_2.METADATA_LIST, Types1_13.METADATA_LIST); // 7 - Metadata
|
map(Types1_13_2.METADATA_LIST, Types1_13.METADATA_LIST); // 7 - Metadata
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
for (Metadata metadata : wrapper.get(Types1_13.METADATA_LIST, 0)) {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
metadata.setMetaType(Types1_13.META_TYPES.byId(metadata.metaType().typeId()));
|
||||||
for (Metadata metadata : wrapper.get(Types1_13.METADATA_LIST, 0)) {
|
|
||||||
metadata.setMetaType(Types1_13.META_TYPES.byId(metadata.metaType().typeId()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.ENTITY_METADATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.ENTITY_METADATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Types1_13_2.METADATA_LIST, Types1_13.METADATA_LIST); // 1 - Metadata list
|
map(Types1_13_2.METADATA_LIST, Types1_13.METADATA_LIST); // 1 - Metadata list
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
for (Metadata metadata : wrapper.get(Types1_13.METADATA_LIST, 0)) {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
metadata.setMetaType(Types1_13.META_TYPES.byId(metadata.metaType().typeId()));
|
||||||
for (Metadata metadata : wrapper.get(Types1_13.METADATA_LIST, 0)) {
|
|
||||||
metadata.setMetaType(Types1_13.META_TYPES.byId(metadata.metaType().typeId()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,7 @@
|
|||||||
package com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.packets;
|
package com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.packets;
|
||||||
|
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.Protocol1_13_1To1_13_2;
|
import com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.Protocol1_13_1To1_13_2;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13;
|
||||||
@ -28,107 +26,96 @@ import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPacke
|
|||||||
public class InventoryPackets1_13_2 {
|
public class InventoryPackets1_13_2 {
|
||||||
|
|
||||||
public static void register(Protocol1_13_1To1_13_2 protocol) {
|
public static void register(Protocol1_13_1To1_13_2 protocol) {
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SET_SLOT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SET_SLOT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
||||||
map(Type.SHORT); // 1 - Slot ID
|
map(Type.SHORT); // 1 - Slot ID
|
||||||
map(Type.FLAT_VAR_INT_ITEM, Type.FLAT_ITEM); // 2 - Slot Value
|
map(Type.FLAT_VAR_INT_ITEM, Type.FLAT_ITEM); // 2 - Slot Value
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.WINDOW_ITEMS, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.WINDOW_ITEMS, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
||||||
map(Type.FLAT_VAR_INT_ITEM_ARRAY, Type.FLAT_ITEM_ARRAY); // 1 - Window Values
|
map(Type.FLAT_VAR_INT_ITEM_ARRAY, Type.FLAT_ITEM_ARRAY); // 1 - Window Values
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.PLUGIN_MESSAGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.PLUGIN_MESSAGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Channel
|
map(Type.STRING); // Channel
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
String channel = wrapper.get(Type.STRING, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (channel.equals("minecraft:trader_list") || channel.equals("trader_list")) {
|
||||||
String channel = wrapper.get(Type.STRING, 0);
|
wrapper.passthrough(Type.INT); // Passthrough Window ID
|
||||||
if (channel.equals("minecraft:trader_list") || channel.equals("trader_list")) {
|
|
||||||
wrapper.passthrough(Type.INT); // Passthrough Window ID
|
|
||||||
|
|
||||||
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
// Input Item
|
// Input Item
|
||||||
|
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
||||||
|
// Output Item
|
||||||
|
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
||||||
|
|
||||||
|
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
||||||
|
if (secondItem) {
|
||||||
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
||||||
// Output Item
|
|
||||||
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
|
||||||
|
|
||||||
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
|
||||||
if (secondItem) {
|
|
||||||
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
|
||||||
wrapper.passthrough(Type.INT); // Number of tools uses
|
|
||||||
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
||||||
|
wrapper.passthrough(Type.INT); // Number of tools uses
|
||||||
|
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.ENTITY_EQUIPMENT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.ENTITY_EQUIPMENT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.VAR_INT); // 1 - Slot ID
|
map(Type.VAR_INT); // 1 - Slot ID
|
||||||
map(Type.FLAT_VAR_INT_ITEM, Type.FLAT_ITEM); // 2 - Item
|
map(Type.FLAT_VAR_INT_ITEM, Type.FLAT_ITEM); // 2 - Item
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.DECLARE_RECIPES, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.DECLARE_RECIPES, wrapper -> {
|
||||||
@Override
|
int recipesNo = wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
for (int i = 0; i < recipesNo; i++) {
|
||||||
handler(new PacketHandler() {
|
wrapper.passthrough(Type.STRING); // Id
|
||||||
@Override
|
String type = wrapper.passthrough(Type.STRING);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (type.equals("crafting_shapeless")) {
|
||||||
int recipesNo = wrapper.passthrough(Type.VAR_INT);
|
wrapper.passthrough(Type.STRING); // Group
|
||||||
for (int i = 0; i < recipesNo; i++) {
|
int ingredientsNo = wrapper.passthrough(Type.VAR_INT);
|
||||||
wrapper.passthrough(Type.STRING); // Id
|
for (int i1 = 0; i1 < ingredientsNo; i1++) {
|
||||||
String type = wrapper.passthrough(Type.STRING);
|
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT));
|
||||||
if (type.equals("crafting_shapeless")) {
|
|
||||||
wrapper.passthrough(Type.STRING); // Group
|
|
||||||
int ingredientsNo = wrapper.passthrough(Type.VAR_INT);
|
|
||||||
for (int i1 = 0; i1 < ingredientsNo; i1++) {
|
|
||||||
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT));
|
|
||||||
}
|
|
||||||
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
|
||||||
} else if (type.equals("crafting_shaped")) {
|
|
||||||
int ingredientsNo = wrapper.passthrough(Type.VAR_INT) * wrapper.passthrough(Type.VAR_INT);
|
|
||||||
wrapper.passthrough(Type.STRING); // Group
|
|
||||||
for (int i1 = 0; i1 < ingredientsNo; i1++) {
|
|
||||||
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT));
|
|
||||||
}
|
|
||||||
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
|
||||||
} else if (type.equals("smelting")) {
|
|
||||||
wrapper.passthrough(Type.STRING); // Group
|
|
||||||
// Ingredient start
|
|
||||||
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT));
|
|
||||||
// Ingredient end
|
|
||||||
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
|
||||||
wrapper.passthrough(Type.FLOAT); // EXP
|
|
||||||
wrapper.passthrough(Type.VAR_INT); // Cooking time
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
||||||
|
} else if (type.equals("crafting_shaped")) {
|
||||||
|
int ingredientsNo = wrapper.passthrough(Type.VAR_INT) * wrapper.passthrough(Type.VAR_INT);
|
||||||
|
wrapper.passthrough(Type.STRING); // Group
|
||||||
|
for (int i1 = 0; i1 < ingredientsNo; i1++) {
|
||||||
|
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT));
|
||||||
|
}
|
||||||
|
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
||||||
|
} else if (type.equals("smelting")) {
|
||||||
|
wrapper.passthrough(Type.STRING); // Group
|
||||||
|
// Ingredient start
|
||||||
|
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT));
|
||||||
|
// Ingredient end
|
||||||
|
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
||||||
|
wrapper.passthrough(Type.FLOAT); // EXP
|
||||||
|
wrapper.passthrough(Type.VAR_INT); // Cooking time
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_13.CLICK_WINDOW, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_13.CLICK_WINDOW, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
||||||
map(Type.SHORT); // 1 - Slot
|
map(Type.SHORT); // 1 - Slot
|
||||||
map(Type.BYTE); // 2 - Button
|
map(Type.BYTE); // 2 - Button
|
||||||
@ -138,9 +125,9 @@ public class InventoryPackets1_13_2 {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_13.CREATIVE_INVENTORY_ACTION, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_13.CREATIVE_INVENTORY_ACTION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.SHORT); // 0 - Slot
|
map(Type.SHORT); // 0 - Slot
|
||||||
map(Type.FLAT_ITEM, Type.FLAT_VAR_INT_ITEM); // 1 - Clicked Item
|
map(Type.FLAT_ITEM, Type.FLAT_VAR_INT_ITEM); // 1 - Clicked Item
|
||||||
}
|
}
|
||||||
|
@ -18,18 +18,16 @@
|
|||||||
package com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.packets;
|
package com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.packets;
|
||||||
|
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.Protocol1_13_1To1_13_2;
|
import com.viaversion.viabackwards.protocol.protocol1_13_1to1_13_2.Protocol1_13_1To1_13_2;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
||||||
|
|
||||||
public class WorldPackets1_13_2 {
|
public class WorldPackets1_13_2 {
|
||||||
|
|
||||||
public static void register(Protocol1_13_1To1_13_2 protocol) {
|
public static void register(Protocol1_13_1To1_13_2 protocol) {
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_PARTICLE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_PARTICLE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Particle ID
|
map(Type.INT); // 0 - Particle ID
|
||||||
map(Type.BOOLEAN); // 1 - Long Distance
|
map(Type.BOOLEAN); // 1 - Long Distance
|
||||||
map(Type.FLOAT); // 2 - X
|
map(Type.FLOAT); // 2 - X
|
||||||
@ -41,13 +39,10 @@ public class WorldPackets1_13_2 {
|
|||||||
map(Type.FLOAT); // 8 - Particle Data
|
map(Type.FLOAT); // 8 - Particle Data
|
||||||
map(Type.INT); // 9 - Particle Count
|
map(Type.INT); // 9 - Particle Count
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int id = wrapper.get(Type.INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (id == 27) {
|
||||||
int id = wrapper.get(Type.INT, 0);
|
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
||||||
if (id == 27) {
|
|
||||||
wrapper.write(Type.FLAT_ITEM, wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -29,9 +29,6 @@ import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.ChunkLi
|
|||||||
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.DifficultyStorage;
|
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.DifficultyStorage;
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_14Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_14Types;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
||||||
@ -79,110 +76,94 @@ public class Protocol1_13_2To1_14 extends BackwardsProtocol<ClientboundPackets1_
|
|||||||
cancelClientbound(ClientboundPackets1_14.UPDATE_VIEW_DISTANCE);
|
cancelClientbound(ClientboundPackets1_14.UPDATE_VIEW_DISTANCE);
|
||||||
cancelClientbound(ClientboundPackets1_14.ACKNOWLEDGE_PLAYER_DIGGING);
|
cancelClientbound(ClientboundPackets1_14.ACKNOWLEDGE_PLAYER_DIGGING);
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_14.TAGS, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_14.TAGS, wrapper -> {
|
||||||
@Override
|
int blockTagsSize = wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
for (int i = 0; i < blockTagsSize; i++) {
|
||||||
handler(new PacketHandler() {
|
wrapper.passthrough(Type.STRING);
|
||||||
@Override
|
int[] blockIds = wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
for (int j = 0; j < blockIds.length; j++) {
|
||||||
int blockTagsSize = wrapper.passthrough(Type.VAR_INT);
|
int id = blockIds[j];
|
||||||
for (int i = 0; i < blockTagsSize; i++) {
|
// Ignore new blocktags
|
||||||
wrapper.passthrough(Type.STRING);
|
int blockId = getMappingData().getNewBlockId(id);
|
||||||
int[] blockIds = wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE);
|
blockIds[j] = blockId;
|
||||||
for (int j = 0; j < blockIds.length; j++) {
|
}
|
||||||
int id = blockIds[j];
|
}
|
||||||
// Ignore new blocktags
|
|
||||||
int blockId = getMappingData().getNewBlockId(id);
|
|
||||||
blockIds[j] = blockId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int itemTagsSize = wrapper.passthrough(Type.VAR_INT);
|
int itemTagsSize = wrapper.passthrough(Type.VAR_INT);
|
||||||
for (int i = 0; i < itemTagsSize; i++) {
|
for (int i = 0; i < itemTagsSize; i++) {
|
||||||
wrapper.passthrough(Type.STRING);
|
wrapper.passthrough(Type.STRING);
|
||||||
int[] itemIds = wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE);
|
int[] itemIds = wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE);
|
||||||
for (int j = 0; j < itemIds.length; j++) {
|
for (int j = 0; j < itemIds.length; j++) {
|
||||||
int itemId = itemIds[j];
|
int itemId = itemIds[j];
|
||||||
// Ignore new itemtags
|
// Ignore new itemtags
|
||||||
int oldId = getMappingData().getItemMappings().get(itemId);
|
int oldId = getMappingData().getItemMappings().get(itemId);
|
||||||
itemIds[j] = oldId;
|
itemIds[j] = oldId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int fluidTagsSize = wrapper.passthrough(Type.VAR_INT); // fluid tags
|
int fluidTagsSize = wrapper.passthrough(Type.VAR_INT); // fluid tags
|
||||||
for (int i = 0; i < fluidTagsSize; i++) {
|
for (int i = 0; i < fluidTagsSize; i++) {
|
||||||
wrapper.passthrough(Type.STRING);
|
wrapper.passthrough(Type.STRING);
|
||||||
wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE);
|
wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Eat entity tags
|
// Eat entity tags
|
||||||
int entityTagsSize = wrapper.read(Type.VAR_INT);
|
int entityTagsSize = wrapper.read(Type.VAR_INT);
|
||||||
for (int i = 0; i < entityTagsSize; i++) {
|
for (int i = 0; i < entityTagsSize; i++) {
|
||||||
wrapper.read(Type.STRING);
|
wrapper.read(Type.STRING);
|
||||||
wrapper.read(Type.VAR_INT_ARRAY_PRIMITIVE);
|
wrapper.read(Type.VAR_INT_ARRAY_PRIMITIVE);
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_14.UPDATE_LIGHT, null, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_14.UPDATE_LIGHT, null, wrapper -> {
|
||||||
@Override
|
int x = wrapper.read(Type.VAR_INT);
|
||||||
public void registerMap() {
|
int z = wrapper.read(Type.VAR_INT);
|
||||||
handler(new PacketHandler() {
|
int skyLightMask = wrapper.read(Type.VAR_INT);
|
||||||
@Override
|
int blockLightMask = wrapper.read(Type.VAR_INT);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
int emptySkyLightMask = wrapper.read(Type.VAR_INT);
|
||||||
int x = wrapper.read(Type.VAR_INT);
|
int emptyBlockLightMask = wrapper.read(Type.VAR_INT);
|
||||||
int z = wrapper.read(Type.VAR_INT);
|
|
||||||
int skyLightMask = wrapper.read(Type.VAR_INT);
|
|
||||||
int blockLightMask = wrapper.read(Type.VAR_INT);
|
|
||||||
int emptySkyLightMask = wrapper.read(Type.VAR_INT);
|
|
||||||
int emptyBlockLightMask = wrapper.read(Type.VAR_INT);
|
|
||||||
|
|
||||||
byte[][] skyLight = new byte[16][];
|
byte[][] skyLight = new byte[16][];
|
||||||
// we don't need void and +256 light
|
// we don't need void and +256 light
|
||||||
if (isSet(skyLightMask, 0)) {
|
if (isSet(skyLightMask, 0)) {
|
||||||
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
|
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
|
||||||
}
|
|
||||||
for (int i = 0; i < 16; i++) {
|
|
||||||
if (isSet(skyLightMask, i + 1)) {
|
|
||||||
skyLight[i] = wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
|
|
||||||
} else if (isSet(emptySkyLightMask, i + 1)) {
|
|
||||||
skyLight[i] = ChunkLightStorage.EMPTY_LIGHT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isSet(skyLightMask, 17)) {
|
|
||||||
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[][] blockLight = new byte[16][];
|
|
||||||
if (isSet(blockLightMask, 0)) {
|
|
||||||
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < 16; i++) {
|
|
||||||
if (isSet(blockLightMask, i + 1)) {
|
|
||||||
blockLight[i] = wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
|
|
||||||
} else if (isSet(emptyBlockLightMask, i + 1)) {
|
|
||||||
blockLight[i] = ChunkLightStorage.EMPTY_LIGHT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isSet(blockLightMask, 17)) {
|
|
||||||
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO Soft memory leak: Don't store light if chunk is already loaded
|
|
||||||
wrapper.user().get(ChunkLightStorage.class).setStoredLight(skyLight, blockLight, x, z);
|
|
||||||
wrapper.cancel();
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isSet(int mask, int i) {
|
|
||||||
return (mask & (1 << i)) != 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
for (int i = 0; i < 16; i++) {
|
||||||
|
if (isSet(skyLightMask, i + 1)) {
|
||||||
|
skyLight[i] = wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
|
||||||
|
} else if (isSet(emptySkyLightMask, i + 1)) {
|
||||||
|
skyLight[i] = ChunkLightStorage.EMPTY_LIGHT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isSet(skyLightMask, 17)) {
|
||||||
|
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[][] blockLight = new byte[16][];
|
||||||
|
if (isSet(blockLightMask, 0)) {
|
||||||
|
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 16; i++) {
|
||||||
|
if (isSet(blockLightMask, i + 1)) {
|
||||||
|
blockLight[i] = wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
|
||||||
|
} else if (isSet(emptyBlockLightMask, i + 1)) {
|
||||||
|
blockLight[i] = ChunkLightStorage.EMPTY_LIGHT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isSet(blockLightMask, 17)) {
|
||||||
|
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO Soft memory leak: Don't store light if chunk is already loaded
|
||||||
|
wrapper.user().get(ChunkLightStorage.class).setStoredLight(skyLight, blockLight, x, z);
|
||||||
|
wrapper.cancel();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isSet(int mask, int i) {
|
||||||
|
return (mask & (1 << i)) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(UserConnection user) {
|
public void init(UserConnection user) {
|
||||||
// Register ClientWorld
|
// Register ClientWorld
|
||||||
|
@ -34,9 +34,7 @@ import com.viaversion.viaversion.api.minecraft.entities.Entity1_14Types;
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_13;
|
import com.viaversion.viaversion.api.type.types.version.Types1_13;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_13_2;
|
import com.viaversion.viaversion.api.type.types.version.Types1_13_2;
|
||||||
@ -57,7 +55,6 @@ import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.types.Chunk1_14T
|
|||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
||||||
import com.viaversion.viaversion.rewriter.RecipeRewriter;
|
import com.viaversion.viaversion.rewriter.RecipeRewriter;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -72,123 +69,102 @@ public class BlockItemPackets1_14 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerServerbound(ServerboundPackets1_13.EDIT_BOOK, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_13.EDIT_BOOK, wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)));
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
protocol.registerClientbound(ClientboundPackets1_14.OPEN_WINDOW, wrapper -> {
|
||||||
handler(wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)));
|
int windowId = wrapper.read(Type.VAR_INT);
|
||||||
|
wrapper.write(Type.UNSIGNED_BYTE, (short) windowId);
|
||||||
|
|
||||||
|
int type = wrapper.read(Type.VAR_INT);
|
||||||
|
String stringType = null;
|
||||||
|
String containerTitle = null;
|
||||||
|
int slotSize = 0;
|
||||||
|
if (type < 6) {
|
||||||
|
if (type == 2) containerTitle = "Barrel";
|
||||||
|
stringType = "minecraft:container";
|
||||||
|
slotSize = (type + 1) * 9;
|
||||||
|
} else {
|
||||||
|
switch (type) {
|
||||||
|
case 11:
|
||||||
|
stringType = "minecraft:crafting_table";
|
||||||
|
break;
|
||||||
|
case 9: //blast furnace
|
||||||
|
case 20: //smoker
|
||||||
|
case 13: //furnace
|
||||||
|
case 14: //grindstone
|
||||||
|
if (type == 9) containerTitle = "Blast Furnace";
|
||||||
|
else if (type == 20) containerTitle = "Smoker";
|
||||||
|
else if (type == 14) containerTitle = "Grindstone";
|
||||||
|
stringType = "minecraft:furnace";
|
||||||
|
slotSize = 3;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
stringType = "minecraft:dropper";
|
||||||
|
slotSize = 9;
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
stringType = "minecraft:enchanting_table";
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
stringType = "minecraft:brewing_stand";
|
||||||
|
slotSize = 5;
|
||||||
|
break;
|
||||||
|
case 18:
|
||||||
|
stringType = "minecraft:villager";
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
stringType = "minecraft:beacon";
|
||||||
|
slotSize = 1;
|
||||||
|
break;
|
||||||
|
case 21: //cartography_table
|
||||||
|
case 7:
|
||||||
|
if (type == 21) containerTitle = "Cartography Table";
|
||||||
|
stringType = "minecraft:anvil";
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
stringType = "minecraft:hopper";
|
||||||
|
slotSize = 5;
|
||||||
|
break;
|
||||||
|
case 19:
|
||||||
|
stringType = "minecraft:shulker_box";
|
||||||
|
slotSize = 27;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.OPEN_WINDOW, new PacketRemapper() {
|
if (stringType == null) {
|
||||||
@Override
|
ViaBackwards.getPlatform().getLogger().warning("Can't open inventory for 1.13 player! Type: " + type);
|
||||||
public void registerMap() {
|
wrapper.cancel();
|
||||||
handler(new PacketHandler() {
|
return;
|
||||||
@Override
|
}
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
int windowId = wrapper.read(Type.VAR_INT);
|
|
||||||
wrapper.write(Type.UNSIGNED_BYTE, (short) windowId);
|
|
||||||
|
|
||||||
int type = wrapper.read(Type.VAR_INT);
|
wrapper.write(Type.STRING, stringType);
|
||||||
String stringType = null;
|
|
||||||
String containerTitle = null;
|
|
||||||
int slotSize = 0;
|
|
||||||
if (type < 6) {
|
|
||||||
if (type == 2) containerTitle = "Barrel";
|
|
||||||
stringType = "minecraft:container";
|
|
||||||
slotSize = (type + 1) * 9;
|
|
||||||
} else {
|
|
||||||
switch (type) {
|
|
||||||
case 11:
|
|
||||||
stringType = "minecraft:crafting_table";
|
|
||||||
break;
|
|
||||||
case 9: //blast furnace
|
|
||||||
case 20: //smoker
|
|
||||||
case 13: //furnace
|
|
||||||
case 14: //grindstone
|
|
||||||
if (type == 9) containerTitle = "Blast Furnace";
|
|
||||||
else if (type == 20) containerTitle = "Smoker";
|
|
||||||
else if (type == 14) containerTitle = "Grindstone";
|
|
||||||
stringType = "minecraft:furnace";
|
|
||||||
slotSize = 3;
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
stringType = "minecraft:dropper";
|
|
||||||
slotSize = 9;
|
|
||||||
break;
|
|
||||||
case 12:
|
|
||||||
stringType = "minecraft:enchanting_table";
|
|
||||||
break;
|
|
||||||
case 10:
|
|
||||||
stringType = "minecraft:brewing_stand";
|
|
||||||
slotSize = 5;
|
|
||||||
break;
|
|
||||||
case 18:
|
|
||||||
stringType = "minecraft:villager";
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
stringType = "minecraft:beacon";
|
|
||||||
slotSize = 1;
|
|
||||||
break;
|
|
||||||
case 21: //cartography_table
|
|
||||||
case 7:
|
|
||||||
if (type == 21) containerTitle = "Cartography Table";
|
|
||||||
stringType = "minecraft:anvil";
|
|
||||||
break;
|
|
||||||
case 15:
|
|
||||||
stringType = "minecraft:hopper";
|
|
||||||
slotSize = 5;
|
|
||||||
break;
|
|
||||||
case 19:
|
|
||||||
stringType = "minecraft:shulker_box";
|
|
||||||
slotSize = 27;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stringType == null) {
|
JsonElement title = wrapper.read(Type.COMPONENT);
|
||||||
ViaBackwards.getPlatform().getLogger().warning("Can't open inventory for 1.13 player! Type: " + type);
|
if (containerTitle != null) {
|
||||||
wrapper.cancel();
|
// Don't rewrite renamed, only translatable titles
|
||||||
return;
|
JsonObject object;
|
||||||
}
|
if (title.isJsonObject() && (object = title.getAsJsonObject()).has("translate")) {
|
||||||
|
// Don't rewrite other 9x3 translatable containers
|
||||||
wrapper.write(Type.STRING, stringType);
|
if (type != 2 || object.getAsJsonPrimitive("translate").getAsString().equals("container.barrel")) {
|
||||||
|
title = ChatRewriter.legacyTextToJson(containerTitle);
|
||||||
JsonElement title = wrapper.read(Type.COMPONENT);
|
|
||||||
if (containerTitle != null) {
|
|
||||||
// Don't rewrite renamed, only translatable titles
|
|
||||||
JsonObject object;
|
|
||||||
if (title.isJsonObject() && (object = title.getAsJsonObject()).has("translate")) {
|
|
||||||
// Don't rewrite other 9x3 translatable containers
|
|
||||||
if (type != 2 || object.getAsJsonPrimitive("translate").getAsString().equals("container.barrel")) {
|
|
||||||
title = ChatRewriter.legacyTextToJson(containerTitle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.write(Type.COMPONENT, title);
|
|
||||||
wrapper.write(Type.UNSIGNED_BYTE, (short) slotSize);
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.write(Type.COMPONENT, title);
|
||||||
|
wrapper.write(Type.UNSIGNED_BYTE, (short) slotSize);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Horse window -> Open Window
|
// Horse window -> Open Window
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.OPEN_HORSE_WINDOW, ClientboundPackets1_13.OPEN_WINDOW, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.OPEN_HORSE_WINDOW, ClientboundPackets1_13.OPEN_WINDOW, wrapper -> {
|
||||||
@Override
|
wrapper.passthrough(Type.UNSIGNED_BYTE); // Window id
|
||||||
public void registerMap() {
|
wrapper.write(Type.STRING, "EntityHorse"); // Type
|
||||||
handler(new PacketHandler() {
|
JsonObject object = new JsonObject();
|
||||||
@Override
|
object.addProperty("translate", "minecraft.horse");
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.write(Type.COMPONENT, object); // Title
|
||||||
wrapper.passthrough(Type.UNSIGNED_BYTE); // Window id
|
wrapper.write(Type.UNSIGNED_BYTE, wrapper.read(Type.VAR_INT).shortValue()); // Number of slots
|
||||||
wrapper.write(Type.STRING, "EntityHorse"); // Type
|
wrapper.passthrough(Type.INT); // Entity id
|
||||||
JsonObject object = new JsonObject();
|
|
||||||
object.addProperty("translate", "minecraft.horse");
|
|
||||||
wrapper.write(Type.COMPONENT, object); // Title
|
|
||||||
wrapper.write(Type.UNSIGNED_BYTE, wrapper.read(Type.VAR_INT).shortValue()); // Number of slots
|
|
||||||
wrapper.passthrough(Type.INT); // Entity id
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
BlockRewriter<ClientboundPackets1_14> blockRewriter = new BlockRewriter<>(protocol, Type.POSITION);
|
BlockRewriter<ClientboundPackets1_14> blockRewriter = new BlockRewriter<>(protocol, Type.POSITION);
|
||||||
@ -199,174 +175,146 @@ public class BlockItemPackets1_14 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
registerAdvancements(ClientboundPackets1_14.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
|
registerAdvancements(ClientboundPackets1_14.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
|
||||||
|
|
||||||
// Trade List -> Plugin Message
|
// Trade List -> Plugin Message
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.TRADE_LIST, ClientboundPackets1_13.PLUGIN_MESSAGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.TRADE_LIST, ClientboundPackets1_13.PLUGIN_MESSAGE, wrapper -> {
|
||||||
@Override
|
wrapper.write(Type.STRING, "minecraft:trader_list");
|
||||||
public void registerMap() {
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
wrapper.write(Type.STRING, "minecraft:trader_list");
|
|
||||||
|
|
||||||
int windowId = wrapper.read(Type.VAR_INT);
|
int windowId = wrapper.read(Type.VAR_INT);
|
||||||
wrapper.write(Type.INT, windowId);
|
wrapper.write(Type.INT, windowId);
|
||||||
|
|
||||||
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
// Input Item
|
// Input Item
|
||||||
Item input = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
Item input = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
||||||
input = handleItemToClient(input);
|
input = handleItemToClient(input);
|
||||||
wrapper.write(Type.FLAT_VAR_INT_ITEM, input);
|
wrapper.write(Type.FLAT_VAR_INT_ITEM, input);
|
||||||
|
|
||||||
|
|
||||||
// Output Item
|
// Output Item
|
||||||
Item output = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
Item output = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
||||||
output = handleItemToClient(output);
|
output = handleItemToClient(output);
|
||||||
wrapper.write(Type.FLAT_VAR_INT_ITEM, output);
|
wrapper.write(Type.FLAT_VAR_INT_ITEM, output);
|
||||||
|
|
||||||
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
||||||
if (secondItem) {
|
if (secondItem) {
|
||||||
// Second Item
|
// Second Item
|
||||||
Item second = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
Item second = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
||||||
second = handleItemToClient(second);
|
second = handleItemToClient(second);
|
||||||
wrapper.write(Type.FLAT_VAR_INT_ITEM, second);
|
wrapper.write(Type.FLAT_VAR_INT_ITEM, second);
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
||||||
wrapper.passthrough(Type.INT); // Number of tools uses
|
wrapper.passthrough(Type.INT); // Number of tools uses
|
||||||
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
||||||
|
|
||||||
wrapper.read(Type.INT);
|
wrapper.read(Type.INT);
|
||||||
wrapper.read(Type.INT);
|
wrapper.read(Type.INT);
|
||||||
wrapper.read(Type.FLOAT);
|
wrapper.read(Type.FLOAT);
|
||||||
}
|
|
||||||
wrapper.read(Type.VAR_INT);
|
|
||||||
wrapper.read(Type.VAR_INT);
|
|
||||||
wrapper.read(Type.BOOLEAN);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
wrapper.read(Type.VAR_INT);
|
||||||
|
wrapper.read(Type.VAR_INT);
|
||||||
|
wrapper.read(Type.BOOLEAN);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Open Book -> Plugin Message
|
// Open Book -> Plugin Message
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.OPEN_BOOK, ClientboundPackets1_13.PLUGIN_MESSAGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.OPEN_BOOK, ClientboundPackets1_13.PLUGIN_MESSAGE, wrapper -> {
|
||||||
@Override
|
wrapper.write(Type.STRING, "minecraft:book_open");
|
||||||
public void registerMap() {
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
wrapper.write(Type.STRING, "minecraft:book_open");
|
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.ENTITY_EQUIPMENT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.ENTITY_EQUIPMENT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.VAR_INT); // 1 - Slot ID
|
map(Type.VAR_INT); // 1 - Slot ID
|
||||||
map(Type.FLAT_VAR_INT_ITEM); // 2 - Item
|
map(Type.FLAT_VAR_INT_ITEM); // 2 - Item
|
||||||
|
|
||||||
handler(itemToClientHandler(Type.FLAT_VAR_INT_ITEM));
|
handler(itemToClientHandler(Type.FLAT_VAR_INT_ITEM));
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int entityId = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
EntityType entityType = wrapper.user().getEntityTracker(Protocol1_13_2To1_14.class).entityType(entityId);
|
||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
if (entityType == null) return;
|
||||||
EntityType entityType = wrapper.user().getEntityTracker(Protocol1_13_2To1_14.class).entityType(entityId);
|
|
||||||
if (entityType == null) return;
|
|
||||||
|
|
||||||
if (entityType.isOrHasParent(Entity1_14Types.ABSTRACT_HORSE)) {
|
if (entityType.isOrHasParent(Entity1_14Types.ABSTRACT_HORSE)) {
|
||||||
wrapper.setPacketType(ClientboundPackets1_13.ENTITY_METADATA);
|
wrapper.setPacketType(ClientboundPackets1_13.ENTITY_METADATA);
|
||||||
wrapper.resetReader();
|
wrapper.resetReader();
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
wrapper.read(Type.VAR_INT);
|
wrapper.read(Type.VAR_INT);
|
||||||
Item item = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
Item item = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
||||||
int armorType = item == null || item.identifier() == 0 ? 0 : item.identifier() - 726;
|
int armorType = item == null || item.identifier() == 0 ? 0 : item.identifier() - 726;
|
||||||
if (armorType < 0 || armorType > 3) {
|
if (armorType < 0 || armorType > 3) {
|
||||||
wrapper.cancel();
|
wrapper.cancel();
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
List<Metadata> metadataList = new ArrayList<>();
|
|
||||||
metadataList.add(new Metadata(16, Types1_13_2.META_TYPES.varIntType, armorType));
|
|
||||||
wrapper.write(Types1_13.METADATA_LIST, metadataList);
|
|
||||||
}
|
}
|
||||||
|
List<Metadata> metadataList = new ArrayList<>();
|
||||||
|
metadataList.add(new Metadata(16, Types1_13_2.META_TYPES.varIntType, armorType));
|
||||||
|
wrapper.write(Types1_13.METADATA_LIST, metadataList);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
RecipeRewriter<ClientboundPackets1_14> recipeHandler = new RecipeRewriter1_13_2<>(protocol);
|
RecipeRewriter<ClientboundPackets1_14> recipeHandler = new RecipeRewriter1_13_2<>(protocol);
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.DECLARE_RECIPES, new PacketRemapper() {
|
final Set<String> removedTypes = ImmutableSet.of("crafting_special_suspiciousstew", "blasting", "smoking", "campfire_cooking", "stonecutting");
|
||||||
@Override
|
protocol.registerClientbound(ClientboundPackets1_14.DECLARE_RECIPES, wrapper -> {
|
||||||
public void registerMap() {
|
int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
handler(new PacketHandler() {
|
int deleted = 0;
|
||||||
private final Set<String> removedTypes = ImmutableSet.of("crafting_special_suspiciousstew", "blasting", "smoking", "campfire_cooking", "stonecutting");
|
for (int i = 0; i < size; i++) {
|
||||||
|
String type = wrapper.read(Type.STRING);
|
||||||
@Override
|
String id = wrapper.read(Type.STRING); // Recipe Identifier
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
type = type.replace("minecraft:", "");
|
||||||
int size = wrapper.passthrough(Type.VAR_INT);
|
if (removedTypes.contains(type)) {
|
||||||
int deleted = 0;
|
switch (type) {
|
||||||
for (int i = 0; i < size; i++) {
|
case "blasting":
|
||||||
String type = wrapper.read(Type.STRING);
|
case "smoking":
|
||||||
String id = wrapper.read(Type.STRING); // Recipe Identifier
|
case "campfire_cooking":
|
||||||
type = type.replace("minecraft:", "");
|
wrapper.read(Type.STRING); // Group
|
||||||
if (removedTypes.contains(type)) {
|
wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
|
||||||
switch (type) {
|
wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
||||||
case "blasting":
|
wrapper.read(Type.FLOAT); // EXP
|
||||||
case "smoking":
|
wrapper.read(Type.VAR_INT); // Cooking time
|
||||||
case "campfire_cooking":
|
break;
|
||||||
wrapper.read(Type.STRING); // Group
|
case "stonecutting":
|
||||||
wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
|
wrapper.read(Type.STRING); // Group?
|
||||||
wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
|
||||||
wrapper.read(Type.FLOAT); // EXP
|
wrapper.read(Type.FLAT_VAR_INT_ITEM); // Result
|
||||||
wrapper.read(Type.VAR_INT); // Cooking time
|
break;
|
||||||
break;
|
|
||||||
case "stonecutting":
|
|
||||||
wrapper.read(Type.STRING); // Group?
|
|
||||||
wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
|
|
||||||
wrapper.read(Type.FLAT_VAR_INT_ITEM); // Result
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
deleted++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
wrapper.write(Type.STRING, id);
|
|
||||||
wrapper.write(Type.STRING, type);
|
|
||||||
|
|
||||||
// Handle the rest of the types
|
|
||||||
recipeHandler.handle(wrapper, type);
|
|
||||||
}
|
|
||||||
wrapper.set(Type.VAR_INT, 0, size - deleted);
|
|
||||||
}
|
}
|
||||||
});
|
deleted++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
wrapper.write(Type.STRING, id);
|
||||||
|
wrapper.write(Type.STRING, type);
|
||||||
|
|
||||||
|
// Handle the rest of the types
|
||||||
|
recipeHandler.handleRecipeType(wrapper, type);
|
||||||
}
|
}
|
||||||
|
wrapper.set(Type.VAR_INT, 0, size - deleted);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
registerClickWindow(ServerboundPackets1_13.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM);
|
registerClickWindow(ServerboundPackets1_13.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM);
|
||||||
registerCreativeInvAction(ServerboundPackets1_13.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
|
registerCreativeInvAction(ServerboundPackets1_13.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.BLOCK_BREAK_ANIMATION, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.BLOCK_BREAK_ANIMATION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.POSITION1_14, Type.POSITION);
|
map(Type.POSITION1_14, Type.POSITION);
|
||||||
map(Type.BYTE);
|
map(Type.BYTE);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.BLOCK_ENTITY_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.BLOCK_ENTITY_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION1_14, Type.POSITION);
|
map(Type.POSITION1_14, Type.POSITION);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.BLOCK_ACTION, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.BLOCK_ACTION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION1_14, Type.POSITION); // Location
|
map(Type.POSITION1_14, Type.POSITION); // Location
|
||||||
map(Type.UNSIGNED_BYTE); // Action id
|
map(Type.UNSIGNED_BYTE); // Action id
|
||||||
map(Type.UNSIGNED_BYTE); // Action param
|
map(Type.UNSIGNED_BYTE); // Action param
|
||||||
@ -382,132 +330,107 @@ public class BlockItemPackets1_14 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.BLOCK_CHANGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.BLOCK_CHANGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION1_14, Type.POSITION);
|
map(Type.POSITION1_14, Type.POSITION);
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int id = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
int id = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
|
|
||||||
wrapper.set(Type.VAR_INT, 0, protocol.getMappingData().getNewBlockStateId(id));
|
wrapper.set(Type.VAR_INT, 0, protocol.getMappingData().getNewBlockStateId(id));
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
blockRewriter.registerMultiBlockChange(ClientboundPackets1_14.MULTI_BLOCK_CHANGE);
|
blockRewriter.registerMultiBlockChange(ClientboundPackets1_14.MULTI_BLOCK_CHANGE);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.EXPLOSION, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.EXPLOSION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.FLOAT); // X
|
map(Type.FLOAT); // X
|
||||||
map(Type.FLOAT); // Y
|
map(Type.FLOAT); // Y
|
||||||
map(Type.FLOAT); // Z
|
map(Type.FLOAT); // Z
|
||||||
map(Type.FLOAT); // Radius
|
map(Type.FLOAT); // Radius
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
for (int i = 0; i < 3; i++) {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
float coord = wrapper.get(Type.FLOAT, i);
|
||||||
for (int i = 0; i < 3; i++) {
|
|
||||||
float coord = wrapper.get(Type.FLOAT, i);
|
|
||||||
|
|
||||||
if (coord < 0f) {
|
if (coord < 0f) {
|
||||||
coord = (float) Math.floor(coord);
|
coord = (float) Math.floor(coord);
|
||||||
wrapper.set(Type.FLOAT, i, coord);
|
wrapper.set(Type.FLOAT, i, coord);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.CHUNK_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.CHUNK_DATA, wrapper -> {
|
||||||
@Override
|
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
||||||
public void registerMap() {
|
Chunk chunk = wrapper.read(new Chunk1_14Type());
|
||||||
handler(new PacketHandler() {
|
wrapper.write(new Chunk1_13Type(clientWorld), chunk);
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
|
||||||
Chunk chunk = wrapper.read(new Chunk1_14Type());
|
|
||||||
wrapper.write(new Chunk1_13Type(clientWorld), chunk);
|
|
||||||
|
|
||||||
ChunkLightStorage.ChunkLight chunkLight = wrapper.user().get(ChunkLightStorage.class).getStoredLight(chunk.getX(), chunk.getZ());
|
ChunkLightStorage.ChunkLight chunkLight = wrapper.user().get(ChunkLightStorage.class).getStoredLight(chunk.getX(), chunk.getZ());
|
||||||
for (int i = 0; i < chunk.getSections().length; i++) {
|
for (int i = 0; i < chunk.getSections().length; i++) {
|
||||||
ChunkSection section = chunk.getSections()[i];
|
ChunkSection section = chunk.getSections()[i];
|
||||||
if (section == null) continue;
|
if (section == null) continue;
|
||||||
|
|
||||||
ChunkSectionLight sectionLight = new ChunkSectionLightImpl();
|
ChunkSectionLight sectionLight = new ChunkSectionLightImpl();
|
||||||
section.setLight(sectionLight);
|
section.setLight(sectionLight);
|
||||||
if (chunkLight == null) {
|
if (chunkLight == null) {
|
||||||
sectionLight.setBlockLight(ChunkLightStorage.FULL_LIGHT);
|
sectionLight.setBlockLight(ChunkLightStorage.FULL_LIGHT);
|
||||||
if (clientWorld.getEnvironment() == Environment.NORMAL) {
|
if (clientWorld.getEnvironment() == Environment.NORMAL) {
|
||||||
sectionLight.setSkyLight(ChunkLightStorage.FULL_LIGHT);
|
sectionLight.setSkyLight(ChunkLightStorage.FULL_LIGHT);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
byte[] blockLight = chunkLight.getBlockLight()[i];
|
||||||
|
sectionLight.setBlockLight(blockLight != null ? blockLight : ChunkLightStorage.FULL_LIGHT);
|
||||||
|
if (clientWorld.getEnvironment() == Environment.NORMAL) {
|
||||||
|
byte[] skyLight = chunkLight.getSkyLight()[i];
|
||||||
|
sectionLight.setSkyLight(skyLight != null ? skyLight : ChunkLightStorage.FULL_LIGHT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
||||||
|
if (Via.getConfig().isNonFullBlockLightFix() && section.getNonAirBlocksCount() != 0 && sectionLight.hasBlockLight()) {
|
||||||
|
for (int x = 0; x < 16; x++) {
|
||||||
|
for (int y = 0; y < 16; y++) {
|
||||||
|
for (int z = 0; z < 16; z++) {
|
||||||
|
int id = palette.idAt(x, y, z);
|
||||||
|
if (Protocol1_14To1_13_2.MAPPINGS.getNonFullBlocks().contains(id)) {
|
||||||
|
sectionLight.getBlockLightNibbleArray().set(x, y, z, 0);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
byte[] blockLight = chunkLight.getBlockLight()[i];
|
|
||||||
sectionLight.setBlockLight(blockLight != null ? blockLight : ChunkLightStorage.FULL_LIGHT);
|
|
||||||
if (clientWorld.getEnvironment() == Environment.NORMAL) {
|
|
||||||
byte[] skyLight = chunkLight.getSkyLight()[i];
|
|
||||||
sectionLight.setSkyLight(skyLight != null ? skyLight : ChunkLightStorage.FULL_LIGHT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
|
||||||
if (Via.getConfig().isNonFullBlockLightFix() && section.getNonAirBlocksCount() != 0 && sectionLight.hasBlockLight()) {
|
|
||||||
for (int x = 0; x < 16; x++) {
|
|
||||||
for (int y = 0; y < 16; y++) {
|
|
||||||
for (int z = 0; z < 16; z++) {
|
|
||||||
int id = palette.idAt(x, y, z);
|
|
||||||
if (Protocol1_14To1_13_2.MAPPINGS.getNonFullBlocks().contains(id)) {
|
|
||||||
sectionLight.getBlockLightNibbleArray().set(x, y, z, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int j = 0; j < palette.size(); j++) {
|
|
||||||
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j));
|
|
||||||
palette.setIdByIndex(j, mappedBlockStateId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
|
for (int j = 0; j < palette.size(); j++) {
|
||||||
|
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j));
|
||||||
|
palette.setIdByIndex(j, mappedBlockStateId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.UNLOAD_CHUNK, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.UNLOAD_CHUNK, wrapper -> {
|
||||||
@Override
|
int x = wrapper.passthrough(Type.INT);
|
||||||
public void registerMap() {
|
int z = wrapper.passthrough(Type.INT);
|
||||||
handler(new PacketHandler() {
|
wrapper.user().get(ChunkLightStorage.class).unloadChunk(x, z);
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
int x = wrapper.passthrough(Type.INT);
|
|
||||||
int z = wrapper.passthrough(Type.INT);
|
|
||||||
wrapper.user().get(ChunkLightStorage.class).unloadChunk(x, z);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.EFFECT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.EFFECT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Effect Id
|
map(Type.INT); // Effect Id
|
||||||
map(Type.POSITION1_14, Type.POSITION); // Location
|
map(Type.POSITION1_14, Type.POSITION); // Location
|
||||||
map(Type.INT); // Data
|
map(Type.INT); // Data
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int id = wrapper.get(Type.INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
int data = wrapper.get(Type.INT, 1);
|
||||||
int id = wrapper.get(Type.INT, 0);
|
if (id == 1010) { // Play record
|
||||||
int data = wrapper.get(Type.INT, 1);
|
wrapper.set(Type.INT, 1, protocol.getMappingData().getNewItemId(data));
|
||||||
if (id == 1010) { // Play record
|
} else if (id == 2001) { // Block break + block break sound
|
||||||
wrapper.set(Type.INT, 1, protocol.getMappingData().getNewItemId(data));
|
wrapper.set(Type.INT, 1, protocol.getMappingData().getNewBlockStateId(data));
|
||||||
} else if (id == 2001) { // Block break + block break sound
|
|
||||||
wrapper.set(Type.INT, 1, protocol.getMappingData().getNewBlockStateId(data));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -515,9 +438,9 @@ public class BlockItemPackets1_14 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
|
|
||||||
registerSpawnParticle(ClientboundPackets1_14.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.FLOAT);
|
registerSpawnParticle(ClientboundPackets1_14.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.FLOAT);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.MAP_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.MAP_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.BYTE);
|
map(Type.BYTE);
|
||||||
map(Type.BOOLEAN);
|
map(Type.BOOLEAN);
|
||||||
@ -525,9 +448,9 @@ public class BlockItemPackets1_14 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_POSITION, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_POSITION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION1_14, Type.POSITION);
|
map(Type.POSITION1_14, Type.POSITION);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -35,8 +35,7 @@ import com.viaversion.viaversion.api.minecraft.item.Item;
|
|||||||
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
|
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.Particle;
|
import com.viaversion.viaversion.api.type.types.Particle;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_13_2;
|
import com.viaversion.viaversion.api.type.types.version.Types1_13_2;
|
||||||
@ -72,34 +71,29 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
positionHandler = new EntityPositionHandler(this, EntityPositionStorage1_14.class, EntityPositionStorage1_14::new);
|
positionHandler = new EntityPositionHandler(this, EntityPositionStorage1_14.class, EntityPositionStorage1_14::new);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.ENTITY_STATUS, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.ENTITY_STATUS, wrapper -> {
|
||||||
@Override
|
int entityId = wrapper.passthrough(Type.INT);
|
||||||
public void registerMap() {
|
byte status = wrapper.passthrough(Type.BYTE);
|
||||||
handler(wrapper -> {
|
// Check for death status
|
||||||
int entityId = wrapper.passthrough(Type.INT);
|
if (status != 3) return;
|
||||||
byte status = wrapper.passthrough(Type.BYTE);
|
|
||||||
// Check for death status
|
|
||||||
if (status != 3) return;
|
|
||||||
|
|
||||||
EntityTracker tracker = tracker(wrapper.user());
|
EntityTracker tracker = tracker(wrapper.user());
|
||||||
EntityType entityType = tracker.entityType(entityId);
|
EntityType entityType = tracker.entityType(entityId);
|
||||||
if (entityType != Entity1_14Types.PLAYER) return;
|
if (entityType != Entity1_14Types.PLAYER) return;
|
||||||
|
|
||||||
// Remove equipment, else the client will see ghost items
|
// Remove equipment, else the client will see ghost items
|
||||||
for (int i = 0; i <= 5; i++) {
|
for (int i = 0; i <= 5; i++) {
|
||||||
PacketWrapper equipmentPacket = wrapper.create(ClientboundPackets1_13.ENTITY_EQUIPMENT);
|
PacketWrapper equipmentPacket = wrapper.create(ClientboundPackets1_13.ENTITY_EQUIPMENT);
|
||||||
equipmentPacket.write(Type.VAR_INT, entityId);
|
equipmentPacket.write(Type.VAR_INT, entityId);
|
||||||
equipmentPacket.write(Type.VAR_INT, i);
|
equipmentPacket.write(Type.VAR_INT, i);
|
||||||
equipmentPacket.write(Type.FLAT_VAR_INT_ITEM, null);
|
equipmentPacket.write(Type.FLAT_VAR_INT_ITEM, null);
|
||||||
equipmentPacket.send(Protocol1_13_2To1_14.class);
|
equipmentPacket.send(Protocol1_13_2To1_14.class);
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.ENTITY_TELEPORT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.ENTITY_TELEPORT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
@ -108,30 +102,27 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
PacketRemapper relativeMoveHandler = new PacketRemapper() {
|
PacketHandlers relativeMoveHandler = new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.SHORT);
|
map(Type.SHORT);
|
||||||
map(Type.SHORT);
|
map(Type.SHORT);
|
||||||
map(Type.SHORT);
|
map(Type.SHORT);
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
double x = wrapper.get(Type.SHORT, 0) / EntityPositionHandler.RELATIVE_MOVE_FACTOR;
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
double y = wrapper.get(Type.SHORT, 1) / EntityPositionHandler.RELATIVE_MOVE_FACTOR;
|
||||||
double x = wrapper.get(Type.SHORT, 0) / EntityPositionHandler.RELATIVE_MOVE_FACTOR;
|
double z = wrapper.get(Type.SHORT, 2) / EntityPositionHandler.RELATIVE_MOVE_FACTOR;
|
||||||
double y = wrapper.get(Type.SHORT, 1) / EntityPositionHandler.RELATIVE_MOVE_FACTOR;
|
positionHandler.cacheEntityPosition(wrapper, x, y, z, false, true);
|
||||||
double z = wrapper.get(Type.SHORT, 2) / EntityPositionHandler.RELATIVE_MOVE_FACTOR;
|
|
||||||
positionHandler.cacheEntityPosition(wrapper, x, y, z, false, true);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.ENTITY_POSITION, relativeMoveHandler);
|
protocol.registerClientbound(ClientboundPackets1_14.ENTITY_POSITION, relativeMoveHandler);
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.ENTITY_POSITION_AND_ROTATION, relativeMoveHandler);
|
protocol.registerClientbound(ClientboundPackets1_14.ENTITY_POSITION_AND_ROTATION, relativeMoveHandler);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_ENTITY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_ENTITY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - UUID
|
map(Type.UUID); // 1 - UUID
|
||||||
map(Type.VAR_INT, Type.BYTE); // 2 - Type
|
map(Type.VAR_INT, Type.BYTE); // 2 - Type
|
||||||
@ -147,62 +138,59 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
|
|
||||||
handler(getObjectTrackerHandler());
|
handler(getObjectTrackerHandler());
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int id = wrapper.get(Type.BYTE, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
int mappedId = newEntityId(id);
|
||||||
int id = wrapper.get(Type.BYTE, 0);
|
Entity1_13Types.EntityType entityType = Entity1_13Types.getTypeFromId(mappedId, false);
|
||||||
int mappedId = newEntityId(id);
|
Entity1_13Types.ObjectType objectType;
|
||||||
Entity1_13Types.EntityType entityType = Entity1_13Types.getTypeFromId(mappedId, false);
|
if (entityType.isOrHasParent(Entity1_13Types.EntityType.MINECART_ABSTRACT)) {
|
||||||
Entity1_13Types.ObjectType objectType;
|
objectType = Entity1_13Types.ObjectType.MINECART;
|
||||||
if (entityType.isOrHasParent(Entity1_13Types.EntityType.MINECART_ABSTRACT)) {
|
int data = 0;
|
||||||
objectType = Entity1_13Types.ObjectType.MINECART;
|
switch (entityType) {
|
||||||
int data = 0;
|
case CHEST_MINECART:
|
||||||
switch (entityType) {
|
data = 1;
|
||||||
case CHEST_MINECART:
|
break;
|
||||||
data = 1;
|
case FURNACE_MINECART:
|
||||||
break;
|
data = 2;
|
||||||
case FURNACE_MINECART:
|
break;
|
||||||
data = 2;
|
case TNT_MINECART:
|
||||||
break;
|
data = 3;
|
||||||
case TNT_MINECART:
|
break;
|
||||||
data = 3;
|
case SPAWNER_MINECART:
|
||||||
break;
|
data = 4;
|
||||||
case SPAWNER_MINECART:
|
break;
|
||||||
data = 4;
|
case HOPPER_MINECART:
|
||||||
break;
|
data = 5;
|
||||||
case HOPPER_MINECART:
|
break;
|
||||||
data = 5;
|
case COMMAND_BLOCK_MINECART:
|
||||||
break;
|
data = 6;
|
||||||
case COMMAND_BLOCK_MINECART:
|
break;
|
||||||
data = 6;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (data != 0)
|
|
||||||
wrapper.set(Type.INT, 0, data);
|
|
||||||
} else {
|
|
||||||
objectType = Entity1_13Types.ObjectType.fromEntityType(entityType).orElse(null);
|
|
||||||
}
|
}
|
||||||
|
if (data != 0)
|
||||||
|
wrapper.set(Type.INT, 0, data);
|
||||||
|
} else {
|
||||||
|
objectType = Entity1_13Types.ObjectType.fromEntityType(entityType).orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
if (objectType == null) return;
|
if (objectType == null) return;
|
||||||
|
|
||||||
wrapper.set(Type.BYTE, 0, (byte) objectType.getId());
|
wrapper.set(Type.BYTE, 0, (byte) objectType.getId());
|
||||||
|
|
||||||
int data = wrapper.get(Type.INT, 0);
|
int data = wrapper.get(Type.INT, 0);
|
||||||
if (objectType == Entity1_13Types.ObjectType.FALLING_BLOCK) {
|
if (objectType == Entity1_13Types.ObjectType.FALLING_BLOCK) {
|
||||||
int blockState = wrapper.get(Type.INT, 0);
|
int blockState = wrapper.get(Type.INT, 0);
|
||||||
int combined = protocol.getMappingData().getNewBlockStateId(blockState);
|
int combined = protocol.getMappingData().getNewBlockStateId(blockState);
|
||||||
wrapper.set(Type.INT, 0, combined);
|
wrapper.set(Type.INT, 0, combined);
|
||||||
} else if (entityType.isOrHasParent(Entity1_13Types.EntityType.ABSTRACT_ARROW)) {
|
} else if (entityType.isOrHasParent(Entity1_13Types.EntityType.ABSTRACT_ARROW)) {
|
||||||
wrapper.set(Type.INT, 0, data + 1);
|
wrapper.set(Type.INT, 0, data + 1);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_MOB, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_MOB, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Entity UUID
|
map(Type.UUID); // 1 - Entity UUID
|
||||||
map(Type.VAR_INT); // 2 - Entity Type
|
map(Type.VAR_INT); // 2 - Entity Type
|
||||||
@ -217,25 +205,22 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
map(Type.SHORT); // 11 - Velocity Z
|
map(Type.SHORT); // 11 - Velocity Z
|
||||||
map(Types1_14.METADATA_LIST, Types1_13_2.METADATA_LIST); // 12 - Metadata
|
map(Types1_14.METADATA_LIST, Types1_13_2.METADATA_LIST); // 12 - Metadata
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int type = wrapper.get(Type.VAR_INT, 1);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
EntityType entityType = Entity1_14Types.getTypeFromId(type);
|
||||||
int type = wrapper.get(Type.VAR_INT, 1);
|
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), entityType);
|
||||||
EntityType entityType = Entity1_14Types.getTypeFromId(type);
|
|
||||||
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), entityType);
|
|
||||||
|
|
||||||
int oldId = newEntityId(type);
|
int oldId = newEntityId(type);
|
||||||
if (oldId == -1) {
|
if (oldId == -1) {
|
||||||
EntityData entityData = entityDataForType(entityType);
|
EntityData entityData = entityDataForType(entityType);
|
||||||
if (entityData == null) {
|
if (entityData == null) {
|
||||||
ViaBackwards.getPlatform().getLogger().warning("Could not find 1.13.2 entity type for 1.14 entity type " + type + "/" + entityType);
|
ViaBackwards.getPlatform().getLogger().warning("Could not find 1.13.2 entity type for 1.14 entity type " + type + "/" + entityType);
|
||||||
wrapper.cancel();
|
wrapper.cancel();
|
||||||
} else {
|
|
||||||
wrapper.set(Type.VAR_INT, 1, entityData.replacementId());
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
wrapper.set(Type.VAR_INT, 1, oldId);
|
wrapper.set(Type.VAR_INT, 1, entityData.replacementId());
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
wrapper.set(Type.VAR_INT, 1, oldId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -244,9 +229,9 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_EXPERIENCE_ORB, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_EXPERIENCE_ORB, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.DOUBLE); // Needs to be mapped for the position cache
|
map(Type.DOUBLE); // Needs to be mapped for the position cache
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
@ -255,9 +240,9 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_GLOBAL_ENTITY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_GLOBAL_ENTITY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.BYTE);
|
map(Type.BYTE);
|
||||||
map(Type.DOUBLE); // Needs to be mapped for the position cache
|
map(Type.DOUBLE); // Needs to be mapped for the position cache
|
||||||
@ -267,9 +252,9 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_PAINTING, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_PAINTING, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.UUID);
|
map(Type.UUID);
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
@ -281,9 +266,9 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_PLAYER, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_PLAYER, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Player UUID
|
map(Type.UUID); // 1 - Player UUID
|
||||||
map(Type.DOUBLE); // 2 - X
|
map(Type.DOUBLE); // 2 - X
|
||||||
@ -301,9 +286,9 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
registerRemoveEntities(ClientboundPackets1_14.DESTROY_ENTITIES);
|
registerRemoveEntities(ClientboundPackets1_14.DESTROY_ENTITIES);
|
||||||
registerMetadataRewriter(ClientboundPackets1_14.ENTITY_METADATA, Types1_14.METADATA_LIST, Types1_13_2.METADATA_LIST);
|
registerMetadataRewriter(ClientboundPackets1_14.ENTITY_METADATA, Types1_14.METADATA_LIST, Types1_13_2.METADATA_LIST);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.JOIN_GAME, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Entity ID
|
map(Type.INT); // 0 - Entity ID
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
||||||
map(Type.INT); // 2 - Dimension
|
map(Type.INT); // 2 - Dimension
|
||||||
@ -327,9 +312,9 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.RESPAWN, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.RESPAWN, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Dimension ID
|
map(Type.INT); // 0 - Dimension ID
|
||||||
|
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
|
@ -20,9 +20,7 @@ package com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.packets;
|
|||||||
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14;
|
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14;
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.DifficultyStorage;
|
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.DifficultyStorage;
|
||||||
import com.viaversion.viaversion.api.minecraft.Position;
|
import com.viaversion.viaversion.api.minecraft.Position;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.rewriter.RewriterBase;
|
import com.viaversion.viaversion.api.rewriter.RewriterBase;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13;
|
||||||
@ -36,9 +34,9 @@ public class PlayerPackets1_14 extends RewriterBase<Protocol1_13_2To1_14> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.SERVER_DIFFICULTY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.SERVER_DIFFICULTY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE);
|
map(Type.UNSIGNED_BYTE);
|
||||||
map(Type.BOOLEAN, Type.NOTHING); // Locked
|
map(Type.BOOLEAN, Type.NOTHING); // Locked
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
@ -48,96 +46,85 @@ public class PlayerPackets1_14 extends RewriterBase<Protocol1_13_2To1_14> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.OPEN_SIGN_EDITOR, new PacketRemapper() { // c
|
protocol.registerClientbound(ClientboundPackets1_14.OPEN_SIGN_EDITOR, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION1_14, Type.POSITION);
|
map(Type.POSITION1_14, Type.POSITION);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
protocol.registerServerbound(ServerboundPackets1_13.QUERY_BLOCK_NBT, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_13.QUERY_BLOCK_NBT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.POSITION, Type.POSITION1_14);
|
map(Type.POSITION, Type.POSITION1_14);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
protocol.registerServerbound(ServerboundPackets1_13.PLAYER_DIGGING, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_13.PLAYER_DIGGING, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Action
|
map(Type.VAR_INT); // Action
|
||||||
map(Type.POSITION, Type.POSITION1_14); // Position
|
map(Type.POSITION, Type.POSITION1_14); // Position
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_13.RECIPE_BOOK_DATA, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_13.RECIPE_BOOK_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int type = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (type == 0) {
|
||||||
int type = wrapper.get(Type.VAR_INT, 0);
|
wrapper.passthrough(Type.STRING);
|
||||||
if (type == 0) {
|
} else if (type == 1) {
|
||||||
wrapper.passthrough(Type.STRING);
|
wrapper.passthrough(Type.BOOLEAN); // Crafting Recipe Book Open
|
||||||
} else if (type == 1) {
|
wrapper.passthrough(Type.BOOLEAN); // Crafting Recipe Filter Active
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Crafting Recipe Book Open
|
wrapper.passthrough(Type.BOOLEAN); // Smelting Recipe Book Open
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Crafting Recipe Filter Active
|
wrapper.passthrough(Type.BOOLEAN); // Smelting Recipe Filter Active
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Smelting Recipe Book Open
|
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Smelting Recipe Filter Active
|
|
||||||
|
|
||||||
// Blast furnace/smoker data
|
// Blast furnace/smoker data
|
||||||
wrapper.write(Type.BOOLEAN, false);
|
wrapper.write(Type.BOOLEAN, false);
|
||||||
wrapper.write(Type.BOOLEAN, false);
|
wrapper.write(Type.BOOLEAN, false);
|
||||||
wrapper.write(Type.BOOLEAN, false);
|
wrapper.write(Type.BOOLEAN, false);
|
||||||
wrapper.write(Type.BOOLEAN, false);
|
wrapper.write(Type.BOOLEAN, false);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_13.UPDATE_COMMAND_BLOCK, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_13.UPDATE_COMMAND_BLOCK, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION, Type.POSITION1_14);
|
map(Type.POSITION, Type.POSITION1_14);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
protocol.registerServerbound(ServerboundPackets1_13.UPDATE_STRUCTURE_BLOCK, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_13.UPDATE_STRUCTURE_BLOCK, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION, Type.POSITION1_14);
|
map(Type.POSITION, Type.POSITION1_14);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
protocol.registerServerbound(ServerboundPackets1_13.UPDATE_SIGN, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_13.UPDATE_SIGN, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION, Type.POSITION1_14);
|
map(Type.POSITION, Type.POSITION1_14);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_13.PLAYER_BLOCK_PLACEMENT, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_13.PLAYER_BLOCK_PLACEMENT, wrapper -> {
|
||||||
@Override
|
Position position = wrapper.read(Type.POSITION);
|
||||||
public void registerMap() {
|
int face = wrapper.read(Type.VAR_INT);
|
||||||
handler(new PacketHandler() {
|
int hand = wrapper.read(Type.VAR_INT);
|
||||||
@Override
|
float x = wrapper.read(Type.FLOAT);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
float y = wrapper.read(Type.FLOAT);
|
||||||
Position position = wrapper.read(Type.POSITION);
|
float z = wrapper.read(Type.FLOAT);
|
||||||
int face = wrapper.read(Type.VAR_INT);
|
|
||||||
int hand = wrapper.read(Type.VAR_INT);
|
|
||||||
float x = wrapper.read(Type.FLOAT);
|
|
||||||
float y = wrapper.read(Type.FLOAT);
|
|
||||||
float z = wrapper.read(Type.FLOAT);
|
|
||||||
|
|
||||||
wrapper.write(Type.VAR_INT, hand);
|
wrapper.write(Type.VAR_INT, hand);
|
||||||
wrapper.write(Type.POSITION1_14, position);
|
wrapper.write(Type.POSITION1_14, position);
|
||||||
wrapper.write(Type.VAR_INT, face);
|
wrapper.write(Type.VAR_INT, face);
|
||||||
wrapper.write(Type.FLOAT, x);
|
wrapper.write(Type.FLOAT, x);
|
||||||
wrapper.write(Type.FLOAT, y);
|
wrapper.write(Type.FLOAT, y);
|
||||||
wrapper.write(Type.FLOAT, z);
|
wrapper.write(Type.FLOAT, z);
|
||||||
wrapper.write(Type.BOOLEAN, false); // Inside block
|
wrapper.write(Type.BOOLEAN, false); // Inside block
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,6 @@ import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2T
|
|||||||
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.EntityPositionStorage1_14;
|
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.EntityPositionStorage1_14;
|
||||||
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
|
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.rewriter.RewriterBase;
|
import com.viaversion.viaversion.api.rewriter.RewriterBase;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
||||||
@ -43,43 +42,38 @@ public class SoundPackets1_14 extends RewriterBase<Protocol1_13_2To1_14> {
|
|||||||
soundRewriter.registerStopSound(ClientboundPackets1_14.STOP_SOUND);
|
soundRewriter.registerStopSound(ClientboundPackets1_14.STOP_SOUND);
|
||||||
|
|
||||||
// Entity Sound Effect
|
// Entity Sound Effect
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.ENTITY_SOUND, null, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.ENTITY_SOUND, null, wrapper -> {
|
||||||
@Override
|
wrapper.cancel();
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> {
|
|
||||||
wrapper.cancel();
|
|
||||||
|
|
||||||
int soundId = wrapper.read(Type.VAR_INT);
|
int soundId = wrapper.read(Type.VAR_INT);
|
||||||
int newId = protocol.getMappingData().getSoundMappings().getNewId(soundId);
|
int newId = protocol.getMappingData().getSoundMappings().getNewId(soundId);
|
||||||
if (newId == -1) return;
|
if (newId == -1) return;
|
||||||
|
|
||||||
int category = wrapper.read(Type.VAR_INT);
|
int category = wrapper.read(Type.VAR_INT);
|
||||||
int entityId = wrapper.read(Type.VAR_INT);
|
int entityId = wrapper.read(Type.VAR_INT);
|
||||||
|
|
||||||
StoredEntityData storedEntity = wrapper.user().getEntityTracker(protocol.getClass()).entityData(entityId);
|
StoredEntityData storedEntity = wrapper.user().getEntityTracker(protocol.getClass()).entityData(entityId);
|
||||||
EntityPositionStorage1_14 entityStorage;
|
EntityPositionStorage1_14 entityStorage;
|
||||||
if (storedEntity == null || (entityStorage = storedEntity.get(EntityPositionStorage1_14.class)) == null) {
|
if (storedEntity == null || (entityStorage = storedEntity.get(EntityPositionStorage1_14.class)) == null) {
|
||||||
ViaBackwards.getPlatform().getLogger().warning("Untracked entity with id " + entityId);
|
ViaBackwards.getPlatform().getLogger().warning("Untracked entity with id " + entityId);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
float volume = wrapper.read(Type.FLOAT);
|
|
||||||
float pitch = wrapper.read(Type.FLOAT);
|
|
||||||
int x = (int) (entityStorage.getX() * 8D);
|
|
||||||
int y = (int) (entityStorage.getY() * 8D);
|
|
||||||
int z = (int) (entityStorage.getZ() * 8D);
|
|
||||||
|
|
||||||
PacketWrapper soundPacket = wrapper.create(ClientboundPackets1_13.SOUND);
|
|
||||||
soundPacket.write(Type.VAR_INT, newId);
|
|
||||||
soundPacket.write(Type.VAR_INT, category);
|
|
||||||
soundPacket.write(Type.INT, x);
|
|
||||||
soundPacket.write(Type.INT, y);
|
|
||||||
soundPacket.write(Type.INT, z);
|
|
||||||
soundPacket.write(Type.FLOAT, volume);
|
|
||||||
soundPacket.write(Type.FLOAT, pitch);
|
|
||||||
soundPacket.send(Protocol1_13_2To1_14.class);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float volume = wrapper.read(Type.FLOAT);
|
||||||
|
float pitch = wrapper.read(Type.FLOAT);
|
||||||
|
int x = (int) (entityStorage.getX() * 8D);
|
||||||
|
int y = (int) (entityStorage.getY() * 8D);
|
||||||
|
int z = (int) (entityStorage.getZ() * 8D);
|
||||||
|
|
||||||
|
PacketWrapper soundPacket = wrapper.create(ClientboundPackets1_13.SOUND);
|
||||||
|
soundPacket.write(Type.VAR_INT, newId);
|
||||||
|
soundPacket.write(Type.VAR_INT, category);
|
||||||
|
soundPacket.write(Type.INT, x);
|
||||||
|
soundPacket.write(Type.INT, y);
|
||||||
|
soundPacket.write(Type.INT, z);
|
||||||
|
soundPacket.write(Type.FLOAT, volume);
|
||||||
|
soundPacket.write(Type.FLOAT, pitch);
|
||||||
|
soundPacket.send(Protocol1_13_2To1_14.class);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,6 @@ package com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage;
|
|||||||
|
|
||||||
import com.viaversion.viaversion.api.connection.StoredObject;
|
import com.viaversion.viaversion.api.connection.StoredObject;
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
@ -30,8 +30,7 @@ import com.viaversion.viaversion.api.minecraft.RegistryType;
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_13Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_13Types;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
|
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
@ -73,9 +72,9 @@ public class Protocol1_13To1_13_1 extends BackwardsProtocol<ClientboundPackets1_
|
|||||||
|
|
||||||
new CommandRewriter1_13_1(this).registerDeclareCommands(ClientboundPackets1_13.DECLARE_COMMANDS);
|
new CommandRewriter1_13_1(this).registerDeclareCommands(ClientboundPackets1_13.DECLARE_COMMANDS);
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_13.TAB_COMPLETE, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_13.TAB_COMPLETE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.STRING, new ValueTransformer<String, String>(Type.STRING) {
|
map(Type.STRING, new ValueTransformer<String, String>(Type.STRING) {
|
||||||
@Override
|
@Override
|
||||||
@ -87,24 +86,21 @@ public class Protocol1_13To1_13_1 extends BackwardsProtocol<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_13.EDIT_BOOK, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_13.EDIT_BOOK, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.FLAT_ITEM);
|
map(Type.FLAT_ITEM);
|
||||||
map(Type.BOOLEAN);
|
map(Type.BOOLEAN);
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
itemRewriter.handleItemToServer(wrapper.get(Type.FLAT_ITEM, 0));
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.write(Type.VAR_INT, 0);
|
||||||
itemRewriter.handleItemToServer(wrapper.get(Type.FLAT_ITEM, 0));
|
|
||||||
wrapper.write(Type.VAR_INT, 0);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_13.OPEN_WINDOW, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_13.OPEN_WINDOW, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE); // Id
|
map(Type.UNSIGNED_BYTE); // Id
|
||||||
map(Type.STRING); // Window Type
|
map(Type.STRING); // Window Type
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
@ -127,96 +123,82 @@ public class Protocol1_13To1_13_1 extends BackwardsProtocol<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_13.TAB_COMPLETE, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_13.TAB_COMPLETE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Transaction id
|
map(Type.VAR_INT); // Transaction id
|
||||||
map(Type.VAR_INT); // Start
|
map(Type.VAR_INT); // Start
|
||||||
map(Type.VAR_INT); // Length
|
map(Type.VAR_INT); // Length
|
||||||
map(Type.VAR_INT); // Count
|
map(Type.VAR_INT); // Count
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int start = wrapper.get(Type.VAR_INT, 1);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.set(Type.VAR_INT, 1, start - 1); // Offset by +1 to take into account / at beginning
|
||||||
int start = wrapper.get(Type.VAR_INT, 1);
|
// Passthrough suggestions
|
||||||
wrapper.set(Type.VAR_INT, 1, start - 1); // Offset by +1 to take into account / at beginning
|
int count = wrapper.get(Type.VAR_INT, 3);
|
||||||
// Passthrough suggestions
|
for (int i = 0; i < count; i++) {
|
||||||
int count = wrapper.get(Type.VAR_INT, 3);
|
wrapper.passthrough(Type.STRING);
|
||||||
for (int i = 0; i < count; i++) {
|
boolean hasTooltip = wrapper.passthrough(Type.BOOLEAN);
|
||||||
wrapper.passthrough(Type.STRING);
|
if (hasTooltip) {
|
||||||
boolean hasTooltip = wrapper.passthrough(Type.BOOLEAN);
|
wrapper.passthrough(Type.STRING); // JSON Tooltip
|
||||||
if (hasTooltip) {
|
|
||||||
wrapper.passthrough(Type.STRING); // JSON Tooltip
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_13.BOSSBAR, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_13.BOSSBAR, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UUID);
|
map(Type.UUID);
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int action = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (action == 0 || action == 3) {
|
||||||
int action = wrapper.get(Type.VAR_INT, 0);
|
translatableRewriter.processText(wrapper.passthrough(Type.COMPONENT));
|
||||||
if (action == 0 || action == 3) {
|
if (action == 0) {
|
||||||
translatableRewriter.processText(wrapper.passthrough(Type.COMPONENT));
|
wrapper.passthrough(Type.FLOAT);
|
||||||
if (action == 0) {
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
wrapper.passthrough(Type.FLOAT);
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
short flags = wrapper.read(Type.UNSIGNED_BYTE);
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
if ((flags & 0x04) != 0) flags |= 0x02;
|
||||||
short flags = wrapper.read(Type.UNSIGNED_BYTE);
|
wrapper.write(Type.UNSIGNED_BYTE, flags);
|
||||||
if ((flags & 0x04) != 0) flags |= 0x02;
|
|
||||||
wrapper.write(Type.UNSIGNED_BYTE, flags);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_13.ADVANCEMENTS, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_13.ADVANCEMENTS, wrapper -> {
|
||||||
@Override
|
wrapper.passthrough(Type.BOOLEAN); // Reset/clear
|
||||||
public void registerMap() {
|
int size = wrapper.passthrough(Type.VAR_INT); // Mapping size
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Reset/clear
|
|
||||||
int size = wrapper.passthrough(Type.VAR_INT); // Mapping size
|
|
||||||
|
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
wrapper.passthrough(Type.STRING); // Identifier
|
wrapper.passthrough(Type.STRING); // Identifier
|
||||||
|
|
||||||
// Parent
|
// Parent
|
||||||
if (wrapper.passthrough(Type.BOOLEAN))
|
if (wrapper.passthrough(Type.BOOLEAN))
|
||||||
wrapper.passthrough(Type.STRING);
|
wrapper.passthrough(Type.STRING);
|
||||||
|
|
||||||
// Display data
|
// Display data
|
||||||
if (wrapper.passthrough(Type.BOOLEAN)) {
|
if (wrapper.passthrough(Type.BOOLEAN)) {
|
||||||
wrapper.passthrough(Type.COMPONENT); // Title
|
wrapper.passthrough(Type.COMPONENT); // Title
|
||||||
wrapper.passthrough(Type.COMPONENT); // Description
|
wrapper.passthrough(Type.COMPONENT); // Description
|
||||||
Item icon = wrapper.passthrough(Type.FLAT_ITEM);
|
Item icon = wrapper.passthrough(Type.FLAT_ITEM);
|
||||||
itemRewriter.handleItemToClient(icon);
|
itemRewriter.handleItemToClient(icon);
|
||||||
wrapper.passthrough(Type.VAR_INT); // Frame type
|
wrapper.passthrough(Type.VAR_INT); // Frame type
|
||||||
int flags = wrapper.passthrough(Type.INT); // Flags
|
int flags = wrapper.passthrough(Type.INT); // Flags
|
||||||
if ((flags & 1) != 0)
|
if ((flags & 1) != 0)
|
||||||
wrapper.passthrough(Type.STRING); // Background texture
|
wrapper.passthrough(Type.STRING); // Background texture
|
||||||
wrapper.passthrough(Type.FLOAT); // X
|
wrapper.passthrough(Type.FLOAT); // X
|
||||||
wrapper.passthrough(Type.FLOAT); // Y
|
wrapper.passthrough(Type.FLOAT); // Y
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.passthrough(Type.STRING_ARRAY); // Criteria
|
wrapper.passthrough(Type.STRING_ARRAY); // Criteria
|
||||||
|
|
||||||
int arrayLength = wrapper.passthrough(Type.VAR_INT);
|
int arrayLength = wrapper.passthrough(Type.VAR_INT);
|
||||||
for (int array = 0; array < arrayLength; array++) {
|
for (int array = 0; array < arrayLength; array++) {
|
||||||
wrapper.passthrough(Type.STRING_ARRAY); // String array
|
wrapper.passthrough(Type.STRING_ARRAY); // String array
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -24,14 +24,11 @@ import com.viaversion.viaversion.api.minecraft.entities.Entity1_13Types;
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.Particle;
|
import com.viaversion.viaversion.api.type.types.Particle;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_13;
|
import com.viaversion.viaversion.api.type.types.version.Types1_13;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class EntityPackets1_13_1 extends LegacyEntityRewriter<ClientboundPackets1_13, Protocol1_13To1_13_1> {
|
public class EntityPackets1_13_1 extends LegacyEntityRewriter<ClientboundPackets1_13, Protocol1_13To1_13_1> {
|
||||||
@ -42,9 +39,9 @@ public class EntityPackets1_13_1 extends LegacyEntityRewriter<ClientboundPackets
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_ENTITY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_ENTITY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - UUID
|
map(Type.UUID); // 1 - UUID
|
||||||
map(Type.BYTE); // 2 - Type
|
map(Type.BYTE); // 2 - Type
|
||||||
@ -55,26 +52,23 @@ public class EntityPackets1_13_1 extends LegacyEntityRewriter<ClientboundPackets
|
|||||||
map(Type.BYTE); // 7 - Yaw
|
map(Type.BYTE); // 7 - Yaw
|
||||||
map(Type.INT); // 8 - Data
|
map(Type.INT); // 8 - Data
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int entityId = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
byte type = wrapper.get(Type.BYTE, 0);
|
||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
Entity1_13Types.EntityType entType = Entity1_13Types.getTypeFromId(type, true);
|
||||||
byte type = wrapper.get(Type.BYTE, 0);
|
if (entType == null) {
|
||||||
Entity1_13Types.EntityType entType = Entity1_13Types.getTypeFromId(type, true);
|
ViaBackwards.getPlatform().getLogger().warning("Could not find 1.13 entity type " + type);
|
||||||
if (entType == null) {
|
return;
|
||||||
ViaBackwards.getPlatform().getLogger().warning("Could not find 1.13 entity type " + type);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Rewrite falling block
|
|
||||||
if (entType.is(Entity1_13Types.EntityType.FALLING_BLOCK)) {
|
|
||||||
int data = wrapper.get(Type.INT, 0);
|
|
||||||
wrapper.set(Type.INT, 0, protocol.getMappingData().getNewBlockStateId(data));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Track Entity
|
|
||||||
tracker(wrapper.user()).addEntity(entityId, entType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Rewrite falling block
|
||||||
|
if (entType.is(Entity1_13Types.EntityType.FALLING_BLOCK)) {
|
||||||
|
int data = wrapper.get(Type.INT, 0);
|
||||||
|
wrapper.set(Type.INT, 0, protocol.getMappingData().getNewBlockStateId(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Track Entity
|
||||||
|
tracker(wrapper.user()).addEntity(entityId, entType);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -82,9 +76,9 @@ public class EntityPackets1_13_1 extends LegacyEntityRewriter<ClientboundPackets
|
|||||||
registerTracker(ClientboundPackets1_13.SPAWN_EXPERIENCE_ORB, Entity1_13Types.EntityType.EXPERIENCE_ORB);
|
registerTracker(ClientboundPackets1_13.SPAWN_EXPERIENCE_ORB, Entity1_13Types.EntityType.EXPERIENCE_ORB);
|
||||||
registerTracker(ClientboundPackets1_13.SPAWN_GLOBAL_ENTITY, Entity1_13Types.EntityType.LIGHTNING_BOLT);
|
registerTracker(ClientboundPackets1_13.SPAWN_GLOBAL_ENTITY, Entity1_13Types.EntityType.LIGHTNING_BOLT);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_MOB, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_MOB, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Entity UUID
|
map(Type.UUID); // 1 - Entity UUID
|
||||||
map(Type.VAR_INT); // 2 - Entity Type
|
map(Type.VAR_INT); // 2 - Entity Type
|
||||||
@ -103,19 +97,16 @@ public class EntityPackets1_13_1 extends LegacyEntityRewriter<ClientboundPackets
|
|||||||
handler(getTrackerHandler());
|
handler(getTrackerHandler());
|
||||||
|
|
||||||
// Rewrite Metadata
|
// Rewrite Metadata
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
List<Metadata> metadata = wrapper.get(Types1_13.METADATA_LIST, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
handleMetadata(wrapper.get(Type.VAR_INT, 0), metadata, wrapper.user());
|
||||||
List<Metadata> metadata = wrapper.get(Types1_13.METADATA_LIST, 0);
|
|
||||||
handleMetadata(wrapper.get(Type.VAR_INT, 0), metadata, wrapper.user());
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_PLAYER, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_PLAYER, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Player UUID
|
map(Type.UUID); // 1 - Player UUID
|
||||||
map(Type.DOUBLE); // 2 - X
|
map(Type.DOUBLE); // 2 - X
|
||||||
|
@ -19,9 +19,6 @@ package com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.packets;
|
|||||||
|
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.Protocol1_13To1_13_1;
|
import com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.Protocol1_13To1_13_1;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13;
|
||||||
@ -39,39 +36,31 @@ public class InventoryPackets1_13_1 extends ItemRewriter<ClientboundPackets1_13,
|
|||||||
registerWindowItems(ClientboundPackets1_13.WINDOW_ITEMS, Type.FLAT_ITEM_ARRAY);
|
registerWindowItems(ClientboundPackets1_13.WINDOW_ITEMS, Type.FLAT_ITEM_ARRAY);
|
||||||
registerSetSlot(ClientboundPackets1_13.SET_SLOT, Type.FLAT_ITEM);
|
registerSetSlot(ClientboundPackets1_13.SET_SLOT, Type.FLAT_ITEM);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.PLUGIN_MESSAGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.PLUGIN_MESSAGE, wrapper -> {
|
||||||
@Override
|
String channel = wrapper.passthrough(Type.STRING);
|
||||||
public void registerMap() {
|
if (channel.equals("minecraft:trader_list")) {
|
||||||
handler(new PacketHandler() {
|
wrapper.passthrough(Type.INT); //Passthrough Window ID
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
String channel = wrapper.passthrough(Type.STRING);
|
|
||||||
if (channel.equals("minecraft:trader_list")) {
|
|
||||||
wrapper.passthrough(Type.INT); //Passthrough Window ID
|
|
||||||
|
|
||||||
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
//Input Item
|
//Input Item
|
||||||
Item input = wrapper.passthrough(Type.FLAT_ITEM);
|
Item input = wrapper.passthrough(Type.FLAT_ITEM);
|
||||||
handleItemToClient(input);
|
handleItemToClient(input);
|
||||||
//Output Item
|
//Output Item
|
||||||
Item output = wrapper.passthrough(Type.FLAT_ITEM);
|
Item output = wrapper.passthrough(Type.FLAT_ITEM);
|
||||||
handleItemToClient(output);
|
handleItemToClient(output);
|
||||||
|
|
||||||
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); //Has second item
|
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); //Has second item
|
||||||
if (secondItem) {
|
if (secondItem) {
|
||||||
//Second Item
|
//Second Item
|
||||||
Item second = wrapper.passthrough(Type.FLAT_ITEM);
|
Item second = wrapper.passthrough(Type.FLAT_ITEM);
|
||||||
handleItemToClient(second);
|
handleItemToClient(second);
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.passthrough(Type.BOOLEAN); //Trade disabled
|
|
||||||
wrapper.passthrough(Type.INT); //Number of tools uses
|
|
||||||
wrapper.passthrough(Type.INT); //Maximum number of trade uses
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
wrapper.passthrough(Type.BOOLEAN); //Trade disabled
|
||||||
|
wrapper.passthrough(Type.INT); //Number of tools uses
|
||||||
|
wrapper.passthrough(Type.INT); //Maximum number of trade uses
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -24,10 +24,7 @@ import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
|
|||||||
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
|
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
|
||||||
import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
||||||
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
||||||
import com.viaversion.viaversion.api.protocol.Protocol;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.types.Chunk1_13Type;
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.types.Chunk1_13Type;
|
||||||
@ -39,34 +36,29 @@ public class WorldPackets1_13_1 {
|
|||||||
public static void register(Protocol1_13To1_13_1 protocol) {
|
public static void register(Protocol1_13To1_13_1 protocol) {
|
||||||
BlockRewriter<ClientboundPackets1_13> blockRewriter = new BlockRewriter<>(protocol, Type.POSITION);
|
BlockRewriter<ClientboundPackets1_13> blockRewriter = new BlockRewriter<>(protocol, Type.POSITION);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.CHUNK_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.CHUNK_DATA, wrapper -> {
|
||||||
@Override
|
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
||||||
public void registerMap() {
|
Chunk chunk = wrapper.passthrough(new Chunk1_13Type(clientWorld));
|
||||||
handler(wrapper -> {
|
|
||||||
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
|
||||||
Chunk chunk = wrapper.passthrough(new Chunk1_13Type(clientWorld));
|
|
||||||
|
|
||||||
for (ChunkSection section : chunk.getSections()) {
|
for (ChunkSection section : chunk.getSections()) {
|
||||||
if (section == null) {
|
if (section == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
||||||
for (int i = 0; i < palette.size(); i++) {
|
for (int i = 0; i < palette.size(); i++) {
|
||||||
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(i));
|
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(i));
|
||||||
palette.setIdByIndex(i, mappedBlockStateId);
|
palette.setIdByIndex(i, mappedBlockStateId);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
blockRewriter.registerBlockAction(ClientboundPackets1_13.BLOCK_ACTION);
|
blockRewriter.registerBlockAction(ClientboundPackets1_13.BLOCK_ACTION);
|
||||||
blockRewriter.registerBlockChange(ClientboundPackets1_13.BLOCK_CHANGE);
|
blockRewriter.registerBlockChange(ClientboundPackets1_13.BLOCK_CHANGE);
|
||||||
blockRewriter.registerMultiBlockChange(ClientboundPackets1_13.MULTI_BLOCK_CHANGE);
|
blockRewriter.registerMultiBlockChange(ClientboundPackets1_13.MULTI_BLOCK_CHANGE);
|
||||||
protocol.registerClientbound(ClientboundPackets1_13.EFFECT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_13.EFFECT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Effect Id
|
map(Type.INT); // Effect Id
|
||||||
map(Type.POSITION); // Location
|
map(Type.POSITION); // Location
|
||||||
map(Type.INT); // Data
|
map(Type.INT); // Data
|
||||||
|
@ -18,9 +18,6 @@
|
|||||||
package com.viaversion.viabackwards.protocol.protocol1_14_2to1_14_3;
|
package com.viaversion.viabackwards.protocol.protocol1_14_2to1_14_3;
|
||||||
|
|
||||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
|
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
|
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
|
||||||
@ -35,63 +32,50 @@ public class Protocol1_14_2To1_14_3 extends BackwardsProtocol<ClientboundPackets
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
registerClientbound(ClientboundPackets1_14.TRADE_LIST, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_14.TRADE_LIST, wrapper -> {
|
||||||
@Override
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
handler(new PacketHandler() {
|
for (int i = 0; i < size; i++) {
|
||||||
@Override
|
wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
if (wrapper.passthrough(Type.BOOLEAN)) {
|
||||||
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
||||||
for (int i = 0; i < size; i++) {
|
}
|
||||||
wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
wrapper.passthrough(Type.BOOLEAN);
|
||||||
wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
wrapper.passthrough(Type.INT);
|
||||||
if (wrapper.passthrough(Type.BOOLEAN)) {
|
wrapper.passthrough(Type.INT);
|
||||||
wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
wrapper.passthrough(Type.INT);
|
||||||
}
|
wrapper.passthrough(Type.INT);
|
||||||
wrapper.passthrough(Type.BOOLEAN);
|
wrapper.passthrough(Type.FLOAT);
|
||||||
wrapper.passthrough(Type.INT);
|
|
||||||
wrapper.passthrough(Type.INT);
|
|
||||||
wrapper.passthrough(Type.INT);
|
|
||||||
wrapper.passthrough(Type.INT);
|
|
||||||
wrapper.passthrough(Type.FLOAT);
|
|
||||||
}
|
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
|
||||||
|
|
||||||
wrapper.passthrough(Type.BOOLEAN);
|
|
||||||
wrapper.read(Type.BOOLEAN);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.BOOLEAN);
|
||||||
|
wrapper.read(Type.BOOLEAN);
|
||||||
});
|
});
|
||||||
|
|
||||||
RecipeRewriter<ClientboundPackets1_14> recipeHandler = new RecipeRewriter1_14<>(this);
|
RecipeRewriter<ClientboundPackets1_14> recipeHandler = new RecipeRewriter1_14<>(this);
|
||||||
registerClientbound(ClientboundPackets1_14.DECLARE_RECIPES, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_14.DECLARE_RECIPES, wrapper -> {
|
||||||
@Override
|
int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
int deleted = 0;
|
||||||
handler(wrapper -> {
|
for (int i = 0; i < size; i++) {
|
||||||
int size = wrapper.passthrough(Type.VAR_INT);
|
String fullType = wrapper.read(Type.STRING);
|
||||||
int deleted = 0;
|
String type = fullType.replace("minecraft:", "");
|
||||||
for (int i = 0; i < size; i++) {
|
String id = wrapper.read(Type.STRING); // id
|
||||||
String fullType = wrapper.read(Type.STRING);
|
|
||||||
String type = fullType.replace("minecraft:", "");
|
|
||||||
String id = wrapper.read(Type.STRING); // id
|
|
||||||
|
|
||||||
if (type.equals("crafting_special_repairitem")) {
|
if (type.equals("crafting_special_repairitem")) {
|
||||||
deleted++;
|
deleted++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.write(Type.STRING, fullType);
|
wrapper.write(Type.STRING, fullType);
|
||||||
wrapper.write(Type.STRING, id);
|
wrapper.write(Type.STRING, id);
|
||||||
|
|
||||||
recipeHandler.handle(wrapper, type);
|
recipeHandler.handleRecipeType(wrapper, type);
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.set(Type.VAR_INT, 0, size - deleted);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.set(Type.VAR_INT, 0, size - deleted);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,7 @@
|
|||||||
package com.viaversion.viabackwards.protocol.protocol1_14_3to1_14_4;
|
package com.viaversion.viabackwards.protocol.protocol1_14_3to1_14_4;
|
||||||
|
|
||||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
|
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
|
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
|
||||||
@ -34,9 +32,9 @@ public class Protocol1_14_3To1_14_4 extends BackwardsProtocol<ClientboundPackets
|
|||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
// Acknowledge Player Digging - added in pre4
|
// Acknowledge Player Digging - added in pre4
|
||||||
registerClientbound(ClientboundPackets1_14.ACKNOWLEDGE_PLAYER_DIGGING, ClientboundPackets1_14.BLOCK_CHANGE, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_14.ACKNOWLEDGE_PLAYER_DIGGING, ClientboundPackets1_14.BLOCK_CHANGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION1_14);
|
map(Type.POSITION1_14);
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
@ -49,30 +47,22 @@ public class Protocol1_14_3To1_14_4 extends BackwardsProtocol<ClientboundPackets
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_14.TRADE_LIST, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_14.TRADE_LIST, wrapper -> {
|
||||||
@Override
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
handler(new PacketHandler() {
|
for (int i = 0; i < size; i++) {
|
||||||
@Override
|
wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
if (wrapper.passthrough(Type.BOOLEAN)) {
|
||||||
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
||||||
for (int i = 0; i < size; i++) {
|
}
|
||||||
wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
wrapper.passthrough(Type.BOOLEAN);
|
||||||
wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
wrapper.passthrough(Type.INT);
|
||||||
if (wrapper.passthrough(Type.BOOLEAN)) {
|
wrapper.passthrough(Type.INT);
|
||||||
wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
wrapper.passthrough(Type.INT);
|
||||||
}
|
wrapper.passthrough(Type.INT);
|
||||||
wrapper.passthrough(Type.BOOLEAN);
|
wrapper.passthrough(Type.FLOAT);
|
||||||
wrapper.passthrough(Type.INT);
|
wrapper.read(Type.INT); // demand value added in pre-5
|
||||||
wrapper.passthrough(Type.INT);
|
|
||||||
wrapper.passthrough(Type.INT);
|
|
||||||
wrapper.passthrough(Type.INT);
|
|
||||||
wrapper.passthrough(Type.FLOAT);
|
|
||||||
wrapper.read(Type.INT); // demand value added in pre-5
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ import com.viaversion.viaversion.api.connection.UserConnection;
|
|||||||
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_15Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_15Types;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
|
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
|
||||||
@ -72,9 +72,9 @@ public class Protocol1_14_4To1_15 extends BackwardsProtocol<ClientboundPackets1_
|
|||||||
soundRewriter.registerStopSound(ClientboundPackets1_15.STOP_SOUND);
|
soundRewriter.registerStopSound(ClientboundPackets1_15.STOP_SOUND);
|
||||||
|
|
||||||
// Explosion - manually send an explosion sound
|
// Explosion - manually send an explosion sound
|
||||||
registerClientbound(ClientboundPackets1_15.EXPLOSION, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_15.EXPLOSION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.FLOAT); // x
|
map(Type.FLOAT); // x
|
||||||
map(Type.FLOAT); // y
|
map(Type.FLOAT); // y
|
||||||
map(Type.FLOAT); // z
|
map(Type.FLOAT); // z
|
||||||
|
@ -23,9 +23,7 @@ import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
|
|||||||
import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
||||||
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
|
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.data.RecipeRewriter1_14;
|
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.data.RecipeRewriter1_14;
|
||||||
@ -46,12 +44,7 @@ public class BlockItemPackets1_15 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
|
|
||||||
new RecipeRewriter1_14<>(protocol).registerDefaultHandler(ClientboundPackets1_15.DECLARE_RECIPES);
|
new RecipeRewriter1_14<>(protocol).registerDefaultHandler(ClientboundPackets1_15.DECLARE_RECIPES);
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_14.EDIT_BOOK, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_14.EDIT_BOOK, wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)));
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
registerSetCooldown(ClientboundPackets1_15.COOLDOWN);
|
registerSetCooldown(ClientboundPackets1_15.COOLDOWN);
|
||||||
registerWindowItems(ClientboundPackets1_15.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY);
|
registerWindowItems(ClientboundPackets1_15.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY);
|
||||||
@ -67,60 +60,52 @@ public class BlockItemPackets1_15 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
blockRewriter.registerBlockChange(ClientboundPackets1_15.BLOCK_CHANGE);
|
blockRewriter.registerBlockChange(ClientboundPackets1_15.BLOCK_CHANGE);
|
||||||
blockRewriter.registerMultiBlockChange(ClientboundPackets1_15.MULTI_BLOCK_CHANGE);
|
blockRewriter.registerMultiBlockChange(ClientboundPackets1_15.MULTI_BLOCK_CHANGE);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_15.CHUNK_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_15.CHUNK_DATA, wrapper -> {
|
||||||
@Override
|
Chunk chunk = wrapper.read(new Chunk1_15Type());
|
||||||
public void registerMap() {
|
wrapper.write(new Chunk1_14Type(), chunk);
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
Chunk chunk = wrapper.read(new Chunk1_15Type());
|
|
||||||
wrapper.write(new Chunk1_14Type(), chunk);
|
|
||||||
|
|
||||||
if (chunk.isFullChunk()) {
|
if (chunk.isFullChunk()) {
|
||||||
int[] biomeData = chunk.getBiomeData();
|
int[] biomeData = chunk.getBiomeData();
|
||||||
int[] newBiomeData = new int[256];
|
int[] newBiomeData = new int[256];
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
for (int j = 0; j < 4; ++j) {
|
for (int j = 0; j < 4; ++j) {
|
||||||
int x = j << 2;
|
int x = j << 2;
|
||||||
int z = i << 2;
|
int z = i << 2;
|
||||||
int newIndex = z << 4 | x;
|
int newIndex = z << 4 | x;
|
||||||
int oldIndex = i << 2 | j;
|
int oldIndex = i << 2 | j;
|
||||||
|
|
||||||
int biome = biomeData[oldIndex];
|
int biome = biomeData[oldIndex];
|
||||||
for (int k = 0; k < 4; k++) {
|
for (int k = 0; k < 4; k++) {
|
||||||
int offX = newIndex + (k << 4);
|
int offX = newIndex + (k << 4);
|
||||||
for (int l = 0; l < 4; l++) {
|
for (int l = 0; l < 4; l++) {
|
||||||
newBiomeData[offX + l] = biome;
|
newBiomeData[offX + l] = biome;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
chunk.setBiomeData(newBiomeData);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < chunk.getSections().length; i++) {
|
|
||||||
ChunkSection section = chunk.getSections()[i];
|
|
||||||
if (section == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
|
||||||
for (int j = 0; j < palette.size(); j++) {
|
|
||||||
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j));
|
|
||||||
palette.setIdByIndex(j, mappedBlockStateId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
|
chunk.setBiomeData(newBiomeData);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < chunk.getSections().length; i++) {
|
||||||
|
ChunkSection section = chunk.getSections()[i];
|
||||||
|
if (section == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
||||||
|
for (int j = 0; j < palette.size(); j++) {
|
||||||
|
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j));
|
||||||
|
palette.setIdByIndex(j, mappedBlockStateId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
blockRewriter.registerEffect(ClientboundPackets1_15.EFFECT, 1010, 2001);
|
blockRewriter.registerEffect(ClientboundPackets1_15.EFFECT, 1010, 2001);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_15.SPAWN_PARTICLE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_15.SPAWN_PARTICLE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Particle ID
|
map(Type.INT); // 0 - Particle ID
|
||||||
map(Type.BOOLEAN); // 1 - Long Distance
|
map(Type.BOOLEAN); // 1 - Long Distance
|
||||||
map(Type.DOUBLE, Type.FLOAT); // 2 - X
|
map(Type.DOUBLE, Type.FLOAT); // 2 - X
|
||||||
@ -131,22 +116,19 @@ public class BlockItemPackets1_15 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
map(Type.FLOAT); // 7 - Offset Z
|
map(Type.FLOAT); // 7 - Offset Z
|
||||||
map(Type.FLOAT); // 8 - Particle Data
|
map(Type.FLOAT); // 8 - Particle Data
|
||||||
map(Type.INT); // 9 - Particle Count
|
map(Type.INT); // 9 - Particle Count
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int id = wrapper.get(Type.INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (id == 3 || id == 23) {
|
||||||
int id = wrapper.get(Type.INT, 0);
|
int data = wrapper.passthrough(Type.VAR_INT);
|
||||||
if (id == 3 || id == 23) {
|
wrapper.set(Type.VAR_INT, 0, protocol.getMappingData().getNewBlockStateId(data));
|
||||||
int data = wrapper.passthrough(Type.VAR_INT);
|
} else if (id == 32) {
|
||||||
wrapper.set(Type.VAR_INT, 0, protocol.getMappingData().getNewBlockStateId(data));
|
Item item = handleItemToClient(wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
||||||
} else if (id == 32) {
|
wrapper.write(Type.FLAT_VAR_INT_ITEM, item);
|
||||||
Item item = handleItemToClient(wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
}
|
||||||
wrapper.write(Type.FLAT_VAR_INT_ITEM, item);
|
|
||||||
}
|
|
||||||
|
|
||||||
int mappedId = protocol.getMappingData().getNewParticleId(id);
|
int mappedId = protocol.getMappingData().getNewParticleId(id);
|
||||||
if (id != mappedId) {
|
if (id != mappedId) {
|
||||||
wrapper.set(Type.INT, 0, mappedId);
|
wrapper.set(Type.INT, 0, mappedId);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -25,12 +25,11 @@ import com.viaversion.viaversion.api.minecraft.entities.Entity1_15Types;
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_14;
|
import com.viaversion.viaversion.api.type.types.version.Types1_14;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
|
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.ClientboundPackets1_15;
|
import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.ClientboundPackets1_15;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class EntityPackets1_15 extends EntityRewriter<ClientboundPackets1_15, Protocol1_14_4To1_15> {
|
public class EntityPackets1_15 extends EntityRewriter<ClientboundPackets1_15, Protocol1_14_4To1_15> {
|
||||||
@ -41,25 +40,20 @@ public class EntityPackets1_15 extends EntityRewriter<ClientboundPackets1_15, Pr
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_15.UPDATE_HEALTH, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_15.UPDATE_HEALTH, wrapper -> {
|
||||||
@Override
|
float health = wrapper.passthrough(Type.FLOAT);
|
||||||
public void registerMap() {
|
if (health > 0) return;
|
||||||
handler(wrapper -> {
|
if (!wrapper.user().get(ImmediateRespawn.class).isImmediateRespawn()) return;
|
||||||
float health = wrapper.passthrough(Type.FLOAT);
|
|
||||||
if (health > 0) return;
|
|
||||||
if (!wrapper.user().get(ImmediateRespawn.class).isImmediateRespawn()) return;
|
|
||||||
|
|
||||||
// Instantly request respawn when 1.15 gamerule is set
|
// Instantly request respawn when 1.15 gamerule is set
|
||||||
PacketWrapper statusPacket = wrapper.create(ServerboundPackets1_14.CLIENT_STATUS);
|
PacketWrapper statusPacket = wrapper.create(ServerboundPackets1_14.CLIENT_STATUS);
|
||||||
statusPacket.write(Type.VAR_INT, 0);
|
statusPacket.write(Type.VAR_INT, 0);
|
||||||
statusPacket.sendToServer(Protocol1_14_4To1_15.class);
|
statusPacket.sendToServer(Protocol1_14_4To1_15.class);
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_15.GAME_EVENT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_15.GAME_EVENT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE);
|
map(Type.UNSIGNED_BYTE);
|
||||||
map(Type.FLOAT);
|
map(Type.FLOAT);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
@ -72,9 +66,9 @@ public class EntityPackets1_15 extends EntityRewriter<ClientboundPackets1_15, Pr
|
|||||||
|
|
||||||
registerTrackerWithData(ClientboundPackets1_15.SPAWN_ENTITY, Entity1_15Types.FALLING_BLOCK);
|
registerTrackerWithData(ClientboundPackets1_15.SPAWN_ENTITY, Entity1_15Types.FALLING_BLOCK);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_15.SPAWN_MOB, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_15.SPAWN_MOB, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Entity UUID
|
map(Type.UUID); // 1 - Entity UUID
|
||||||
map(Type.VAR_INT); // 2 - Entity Type
|
map(Type.VAR_INT); // 2 - Entity Type
|
||||||
@ -98,17 +92,17 @@ public class EntityPackets1_15 extends EntityRewriter<ClientboundPackets1_15, Pr
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_15.RESPAWN, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_15.RESPAWN, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT);
|
map(Type.INT);
|
||||||
map(Type.LONG, Type.NOTHING); // Seed
|
map(Type.LONG, Type.NOTHING); // Seed
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_15.JOIN_GAME, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_15.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Entity ID
|
map(Type.INT); // 0 - Entity ID
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
||||||
map(Type.INT); // 2 - Dimension
|
map(Type.INT); // 2 - Dimension
|
||||||
@ -133,9 +127,9 @@ public class EntityPackets1_15 extends EntityRewriter<ClientboundPackets1_15, Pr
|
|||||||
registerTracker(ClientboundPackets1_15.SPAWN_GLOBAL_ENTITY, Entity1_15Types.LIGHTNING_BOLT);
|
registerTracker(ClientboundPackets1_15.SPAWN_GLOBAL_ENTITY, Entity1_15Types.LIGHTNING_BOLT);
|
||||||
registerTracker(ClientboundPackets1_15.SPAWN_PAINTING, Entity1_15Types.PAINTING);
|
registerTracker(ClientboundPackets1_15.SPAWN_PAINTING, Entity1_15Types.PAINTING);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_15.SPAWN_PLAYER, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_15.SPAWN_PLAYER, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Player UUID
|
map(Type.UUID); // 1 - Player UUID
|
||||||
map(Type.DOUBLE); // 2 - X
|
map(Type.DOUBLE); // 2 - X
|
||||||
@ -153,9 +147,9 @@ public class EntityPackets1_15 extends EntityRewriter<ClientboundPackets1_15, Pr
|
|||||||
registerMetadataRewriter(ClientboundPackets1_15.ENTITY_METADATA, Types1_14.METADATA_LIST);
|
registerMetadataRewriter(ClientboundPackets1_15.ENTITY_METADATA, Types1_14.METADATA_LIST);
|
||||||
|
|
||||||
// Attributes (get rid of generic.flyingSpeed for the Bee remap)
|
// Attributes (get rid of generic.flyingSpeed for the Bee remap)
|
||||||
protocol.registerClientbound(ClientboundPackets1_15.ENTITY_PROPERTIES, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_15.ENTITY_PROPERTIES, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.INT);
|
map(Type.INT);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
|
@ -22,13 +22,10 @@ import com.viaversion.viabackwards.protocol.protocol1_14to1_14_1.Protocol1_14To1
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_14Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_14Types;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_14;
|
import com.viaversion.viaversion.api.type.types.version.Types1_14;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
|
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class EntityPackets1_14_1 extends LegacyEntityRewriter<ClientboundPackets1_14, Protocol1_14To1_14_1> {
|
public class EntityPackets1_14_1 extends LegacyEntityRewriter<ClientboundPackets1_14, Protocol1_14To1_14_1> {
|
||||||
@ -46,9 +43,9 @@ public class EntityPackets1_14_1 extends LegacyEntityRewriter<ClientboundPackets
|
|||||||
registerTracker(ClientboundPackets1_14.JOIN_GAME, Entity1_14Types.PLAYER, Type.INT);
|
registerTracker(ClientboundPackets1_14.JOIN_GAME, Entity1_14Types.PLAYER, Type.INT);
|
||||||
registerRemoveEntities(ClientboundPackets1_14.DESTROY_ENTITIES);
|
registerRemoveEntities(ClientboundPackets1_14.DESTROY_ENTITIES);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_ENTITY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_ENTITY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - UUID
|
map(Type.UUID); // 1 - UUID
|
||||||
map(Type.VAR_INT); // 2 - Type
|
map(Type.VAR_INT); // 2 - Type
|
||||||
@ -57,9 +54,9 @@ public class EntityPackets1_14_1 extends LegacyEntityRewriter<ClientboundPackets
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_MOB, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_MOB, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Entity UUID
|
map(Type.UUID); // 1 - Entity UUID
|
||||||
map(Type.VAR_INT); // 2 - Entity Type
|
map(Type.VAR_INT); // 2 - Entity Type
|
||||||
@ -74,18 +71,15 @@ public class EntityPackets1_14_1 extends LegacyEntityRewriter<ClientboundPackets
|
|||||||
map(Type.SHORT); // 11 - Velocity Z
|
map(Type.SHORT); // 11 - Velocity Z
|
||||||
map(Types1_14.METADATA_LIST); // 12 - Metadata
|
map(Types1_14.METADATA_LIST); // 12 - Metadata
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int entityId = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
int type = wrapper.get(Type.VAR_INT, 1);
|
||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
int type = wrapper.get(Type.VAR_INT, 1);
|
|
||||||
|
|
||||||
// Register Type ID
|
// Register Type ID
|
||||||
tracker(wrapper.user()).addEntity(entityId, Entity1_14Types.getTypeFromId(type));
|
tracker(wrapper.user()).addEntity(entityId, Entity1_14Types.getTypeFromId(type));
|
||||||
|
|
||||||
List<Metadata> metadata = wrapper.get(Types1_14.METADATA_LIST, 0);
|
List<Metadata> metadata = wrapper.get(Types1_14.METADATA_LIST, 0);
|
||||||
handleMetadata(entityId, metadata, wrapper.user());
|
handleMetadata(entityId, metadata, wrapper.user());
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -30,7 +30,7 @@ import com.viaversion.viaversion.api.connection.UserConnection;
|
|||||||
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16Types;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State;
|
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||||
@ -44,7 +44,6 @@ import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.Client
|
|||||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||||
import com.viaversion.viaversion.util.GsonUtil;
|
import com.viaversion.viaversion.util.GsonUtil;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class Protocol1_15_2To1_16 extends BackwardsProtocol<ClientboundPackets1_16, ClientboundPackets1_15, ServerboundPackets1_16, ServerboundPackets1_14> {
|
public class Protocol1_15_2To1_16 extends BackwardsProtocol<ClientboundPackets1_16, ClientboundPackets1_15, ServerboundPackets1_16, ServerboundPackets1_14> {
|
||||||
@ -74,33 +73,28 @@ public class Protocol1_15_2To1_16 extends BackwardsProtocol<ClientboundPackets1_
|
|||||||
(blockItemPackets = new BlockItemPackets1_16(this)).register();
|
(blockItemPackets = new BlockItemPackets1_16(this)).register();
|
||||||
entityRewriter.register();
|
entityRewriter.register();
|
||||||
|
|
||||||
registerClientbound(State.STATUS, 0x00, 0x00, new PacketRemapper() {
|
registerClientbound(State.STATUS, 0x00, 0x00, wrapper -> {
|
||||||
@Override
|
String original = wrapper.passthrough(Type.STRING);
|
||||||
public void registerMap() {
|
JsonObject object = GsonUtil.getGson().fromJson(original, JsonObject.class);
|
||||||
handler(wrapper -> {
|
JsonElement description = object.get("description");
|
||||||
String original = wrapper.passthrough(Type.STRING);
|
if (description == null) return;
|
||||||
JsonObject object = GsonUtil.getGson().fromJson(original, JsonObject.class);
|
|
||||||
JsonElement description = object.get("description");
|
|
||||||
if (description == null) return;
|
|
||||||
|
|
||||||
translatableRewriter.processText(description);
|
translatableRewriter.processText(description);
|
||||||
wrapper.set(Type.STRING, 0, object.toString());
|
wrapper.set(Type.STRING, 0, object.toString());
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_16.CHAT_MESSAGE, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_16.CHAT_MESSAGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
handler(wrapper -> translatableRewriter.processText(wrapper.passthrough(Type.COMPONENT)));
|
handler(wrapper -> translatableRewriter.processText(wrapper.passthrough(Type.COMPONENT)));
|
||||||
map(Type.BYTE);
|
map(Type.BYTE);
|
||||||
map(Type.UUID, Type.NOTHING); // Sender
|
map(Type.UUID, Type.NOTHING); // Sender
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_16.OPEN_WINDOW, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_16.OPEN_WINDOW, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Window Id
|
map(Type.VAR_INT); // Window Id
|
||||||
map(Type.VAR_INT); // Window Type
|
map(Type.VAR_INT); // Window Type
|
||||||
handler(wrapper -> translatableRewriter.processText(wrapper.passthrough(Type.COMPONENT)));
|
handler(wrapper -> translatableRewriter.processText(wrapper.passthrough(Type.COMPONENT)));
|
||||||
@ -122,71 +116,51 @@ public class Protocol1_15_2To1_16 extends BackwardsProtocol<ClientboundPackets1_
|
|||||||
soundRewriter.registerStopSound(ClientboundPackets1_16.STOP_SOUND);
|
soundRewriter.registerStopSound(ClientboundPackets1_16.STOP_SOUND);
|
||||||
|
|
||||||
// Login success
|
// Login success
|
||||||
registerClientbound(State.LOGIN, 0x02, 0x02, new PacketRemapper() {
|
registerClientbound(State.LOGIN, 0x02, 0x02, wrapper -> {
|
||||||
@Override
|
// Transform uuid to plain string
|
||||||
public void registerMap() {
|
UUID uuid = wrapper.read(Type.UUID);
|
||||||
handler(wrapper -> {
|
wrapper.write(Type.STRING, uuid.toString());
|
||||||
// Transform uuid to plain string
|
|
||||||
UUID uuid = wrapper.read(Type.UUID);
|
|
||||||
wrapper.write(Type.STRING, uuid.toString());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
new TagRewriter<>(this).register(ClientboundPackets1_16.TAGS, RegistryType.ENTITY);
|
new TagRewriter<>(this).register(ClientboundPackets1_16.TAGS, RegistryType.ENTITY);
|
||||||
|
|
||||||
new StatisticsRewriter<>(this).register(ClientboundPackets1_16.STATISTICS);
|
new StatisticsRewriter<>(this).register(ClientboundPackets1_16.STATISTICS);
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_14.ENTITY_ACTION, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_14.ENTITY_ACTION, wrapper -> {
|
||||||
@Override
|
wrapper.passthrough(Type.VAR_INT); // player id
|
||||||
public void registerMap() {
|
int action = wrapper.passthrough(Type.VAR_INT);
|
||||||
handler(wrapper -> {
|
if (action == 0) {
|
||||||
wrapper.passthrough(Type.VAR_INT); // player id
|
wrapper.user().get(PlayerSneakStorage.class).setSneaking(true);
|
||||||
int action = wrapper.passthrough(Type.VAR_INT);
|
} else if (action == 1) {
|
||||||
if (action == 0) {
|
wrapper.user().get(PlayerSneakStorage.class).setSneaking(false);
|
||||||
wrapper.user().get(PlayerSneakStorage.class).setSneaking(true);
|
|
||||||
} else if (action == 1) {
|
|
||||||
wrapper.user().get(PlayerSneakStorage.class).setSneaking(false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_14.INTERACT_ENTITY, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_14.INTERACT_ENTITY, wrapper -> {
|
||||||
@Override
|
wrapper.passthrough(Type.VAR_INT); // Entity Id
|
||||||
public void registerMap() {
|
int action = wrapper.passthrough(Type.VAR_INT);
|
||||||
handler(wrapper -> {
|
if (action == 0 || action == 2) {
|
||||||
wrapper.passthrough(Type.VAR_INT); // Entity Id
|
if (action == 2) {
|
||||||
int action = wrapper.passthrough(Type.VAR_INT);
|
// Location
|
||||||
if (action == 0 || action == 2) {
|
wrapper.passthrough(Type.FLOAT);
|
||||||
if (action == 2) {
|
wrapper.passthrough(Type.FLOAT);
|
||||||
// Location
|
wrapper.passthrough(Type.FLOAT);
|
||||||
wrapper.passthrough(Type.FLOAT);
|
}
|
||||||
wrapper.passthrough(Type.FLOAT);
|
|
||||||
wrapper.passthrough(Type.FLOAT);
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.passthrough(Type.VAR_INT); // Hand
|
wrapper.passthrough(Type.VAR_INT); // Hand
|
||||||
}
|
|
||||||
|
|
||||||
// New boolean: Whether the client is sneaking
|
|
||||||
wrapper.write(Type.BOOLEAN, wrapper.user().get(PlayerSneakStorage.class).isSneaking());
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// New boolean: Whether the client is sneaking
|
||||||
|
wrapper.write(Type.BOOLEAN, wrapper.user().get(PlayerSneakStorage.class).isSneaking());
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_14.PLAYER_ABILITIES, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_14.PLAYER_ABILITIES, wrapper -> {
|
||||||
@Override
|
byte flags = wrapper.read(Type.BYTE);
|
||||||
public void registerMap() {
|
flags &= 2; // Only take the isFlying value (everything else has been removed and wasn't used anyways)
|
||||||
handler(wrapper -> {
|
wrapper.write(Type.BYTE, flags);
|
||||||
byte flags = wrapper.read(Type.BYTE);
|
|
||||||
flags &= 2; // Only take the isFlying value (everything else has been removed and wasn't used anyways)
|
|
||||||
wrapper.write(Type.BYTE, flags);
|
|
||||||
|
|
||||||
wrapper.read(Type.FLOAT);
|
wrapper.read(Type.FLOAT);
|
||||||
wrapper.read(Type.FLOAT);
|
wrapper.read(Type.FLOAT);
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
cancelServerbound(ServerboundPackets1_14.UPDATE_JIGSAW_BLOCK);
|
cancelServerbound(ServerboundPackets1_14.UPDATE_JIGSAW_BLOCK);
|
||||||
|
@ -25,7 +25,6 @@ import com.viaversion.viaversion.libs.gson.JsonPrimitive;
|
|||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@ package com.viaversion.viabackwards.protocol.protocol1_15_2to1_16.data;
|
|||||||
|
|
||||||
import com.viaversion.viaversion.libs.gson.JsonObject;
|
import com.viaversion.viaversion.libs.gson.JsonObject;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.Protocol1_16To1_15_2;
|
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.Protocol1_16To1_15_2;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -23,14 +23,13 @@ import com.viaversion.viabackwards.api.rewriters.MapColorRewriter;
|
|||||||
import com.viaversion.viabackwards.protocol.protocol1_15_2to1_16.Protocol1_15_2To1_16;
|
import com.viaversion.viabackwards.protocol.protocol1_15_2to1_16.Protocol1_15_2To1_16;
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_15_2to1_16.data.MapColorRewrites;
|
import com.viaversion.viabackwards.protocol.protocol1_15_2to1_16.data.MapColorRewrites;
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_16_1to1_16_2.storage.BiomeStorage;
|
import com.viaversion.viabackwards.protocol.protocol1_16_1to1_16_2.storage.BiomeStorage;
|
||||||
import com.viaversion.viaversion.api.minecraft.Position;
|
|
||||||
import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
|
import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
|
||||||
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
|
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
|
||||||
import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
||||||
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.UUIDIntArrayType;
|
import com.viaversion.viaversion.api.type.types.UUIDIntArrayType;
|
||||||
@ -48,7 +47,6 @@ import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.packets.Inventor
|
|||||||
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.types.Chunk1_16Type;
|
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.types.Chunk1_16Type;
|
||||||
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
||||||
import com.viaversion.viaversion.util.CompactArrayUtil;
|
import com.viaversion.viaversion.util.CompactArrayUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -68,33 +66,28 @@ public class BlockItemPackets1_16 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
|
|
||||||
RecipeRewriter1_14<ClientboundPackets1_16> recipeRewriter = new RecipeRewriter1_14<>(protocol);
|
RecipeRewriter1_14<ClientboundPackets1_16> recipeRewriter = new RecipeRewriter1_14<>(protocol);
|
||||||
// Remove new smithing type, only in this handler
|
// Remove new smithing type, only in this handler
|
||||||
protocol.registerClientbound(ClientboundPackets1_16.DECLARE_RECIPES, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16.DECLARE_RECIPES, wrapper -> {
|
||||||
@Override
|
int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
int newSize = size;
|
||||||
handler(wrapper -> {
|
for (int i = 0; i < size; i++) {
|
||||||
int size = wrapper.passthrough(Type.VAR_INT);
|
String originalType = wrapper.read(Type.STRING);
|
||||||
int newSize = size;
|
String type = originalType.replace("minecraft:", "");
|
||||||
for (int i = 0; i < size; i++) {
|
if (type.equals("smithing")) {
|
||||||
String originalType = wrapper.read(Type.STRING);
|
newSize--;
|
||||||
String type = originalType.replace("minecraft:", "");
|
|
||||||
if (type.equals("smithing")) {
|
|
||||||
newSize--;
|
|
||||||
|
|
||||||
wrapper.read(Type.STRING);
|
wrapper.read(Type.STRING);
|
||||||
wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT);
|
wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT);
|
||||||
wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT);
|
wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT);
|
||||||
wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.write(Type.STRING, originalType);
|
wrapper.write(Type.STRING, originalType);
|
||||||
wrapper.passthrough(Type.STRING); // Recipe Identifier
|
wrapper.passthrough(Type.STRING); // Recipe Identifier
|
||||||
recipeRewriter.handle(wrapper, type);
|
recipeRewriter.handleRecipeType(wrapper, type);
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.set(Type.VAR_INT, 0, newSize);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.set(Type.VAR_INT, 0, newSize);
|
||||||
});
|
});
|
||||||
|
|
||||||
registerSetCooldown(ClientboundPackets1_16.COOLDOWN);
|
registerSetCooldown(ClientboundPackets1_16.COOLDOWN);
|
||||||
@ -108,108 +101,98 @@ public class BlockItemPackets1_16 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
blockRewriter.registerBlockChange(ClientboundPackets1_16.BLOCK_CHANGE);
|
blockRewriter.registerBlockChange(ClientboundPackets1_16.BLOCK_CHANGE);
|
||||||
blockRewriter.registerMultiBlockChange(ClientboundPackets1_16.MULTI_BLOCK_CHANGE);
|
blockRewriter.registerMultiBlockChange(ClientboundPackets1_16.MULTI_BLOCK_CHANGE);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16.ENTITY_EQUIPMENT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16.ENTITY_EQUIPMENT, wrapper -> {
|
||||||
@Override
|
int entityId = wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> {
|
|
||||||
int entityId = wrapper.passthrough(Type.VAR_INT);
|
|
||||||
|
|
||||||
List<EquipmentData> equipmentData = new ArrayList<>();
|
List<EquipmentData> equipmentData = new ArrayList<>();
|
||||||
byte slot;
|
byte slot;
|
||||||
do {
|
do {
|
||||||
slot = wrapper.read(Type.BYTE);
|
slot = wrapper.read(Type.BYTE);
|
||||||
Item item = handleItemToClient(wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
Item item = handleItemToClient(wrapper.read(Type.FLAT_VAR_INT_ITEM));
|
||||||
int rawSlot = slot & 0x7F;
|
int rawSlot = slot & 0x7F;
|
||||||
equipmentData.add(new EquipmentData(rawSlot, item));
|
equipmentData.add(new EquipmentData(rawSlot, item));
|
||||||
} while ((slot & 0xFFFFFF80) != 0);
|
} while ((slot & 0xFFFFFF80) != 0);
|
||||||
|
|
||||||
// Send first data in the current packet
|
// Send first data in the current packet
|
||||||
EquipmentData firstData = equipmentData.get(0);
|
EquipmentData firstData = equipmentData.get(0);
|
||||||
wrapper.write(Type.VAR_INT, firstData.slot);
|
wrapper.write(Type.VAR_INT, firstData.slot);
|
||||||
wrapper.write(Type.FLAT_VAR_INT_ITEM, firstData.item);
|
wrapper.write(Type.FLAT_VAR_INT_ITEM, firstData.item);
|
||||||
|
|
||||||
// If there are more items, send new packets for them
|
// If there are more items, send new packets for them
|
||||||
for (int i = 1; i < equipmentData.size(); i++) {
|
for (int i = 1; i < equipmentData.size(); i++) {
|
||||||
PacketWrapper equipmentPacket = wrapper.create(ClientboundPackets1_15.ENTITY_EQUIPMENT);
|
PacketWrapper equipmentPacket = wrapper.create(ClientboundPackets1_15.ENTITY_EQUIPMENT);
|
||||||
EquipmentData data = equipmentData.get(i);
|
EquipmentData data = equipmentData.get(i);
|
||||||
equipmentPacket.write(Type.VAR_INT, entityId);
|
equipmentPacket.write(Type.VAR_INT, entityId);
|
||||||
equipmentPacket.write(Type.VAR_INT, data.slot);
|
equipmentPacket.write(Type.VAR_INT, data.slot);
|
||||||
equipmentPacket.write(Type.FLAT_VAR_INT_ITEM, data.item);
|
equipmentPacket.write(Type.FLAT_VAR_INT_ITEM, data.item);
|
||||||
equipmentPacket.send(Protocol1_15_2To1_16.class);
|
equipmentPacket.send(Protocol1_15_2To1_16.class);
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16.UPDATE_LIGHT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16.UPDATE_LIGHT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // x
|
map(Type.VAR_INT); // x
|
||||||
map(Type.VAR_INT); // y
|
map(Type.VAR_INT); // y
|
||||||
map(Type.BOOLEAN, Type.NOTHING);
|
map(Type.BOOLEAN, Type.NOTHING);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16.CHUNK_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16.CHUNK_DATA, wrapper -> {
|
||||||
@Override
|
Chunk chunk = wrapper.read(new Chunk1_16Type());
|
||||||
public void registerMap() {
|
wrapper.write(new Chunk1_15Type(), chunk);
|
||||||
handler(wrapper -> {
|
|
||||||
Chunk chunk = wrapper.read(new Chunk1_16Type());
|
|
||||||
wrapper.write(new Chunk1_15Type(), chunk);
|
|
||||||
|
|
||||||
for (int i = 0; i < chunk.getSections().length; i++) {
|
for (int i = 0; i < chunk.getSections().length; i++) {
|
||||||
ChunkSection section = chunk.getSections()[i];
|
ChunkSection section = chunk.getSections()[i];
|
||||||
if (section == null) {
|
if (section == null) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
||||||
|
for (int j = 0; j < palette.size(); j++) {
|
||||||
|
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j));
|
||||||
|
palette.setIdByIndex(j, mappedBlockStateId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CompoundTag heightMaps = chunk.getHeightMap();
|
||||||
|
for (Tag heightMapTag : heightMaps.values()) {
|
||||||
|
LongArrayTag heightMap = (LongArrayTag) heightMapTag;
|
||||||
|
int[] heightMapData = new int[256];
|
||||||
|
CompactArrayUtil.iterateCompactArrayWithPadding(9, heightMapData.length, heightMap.getValue(), (i, v) -> heightMapData[i] = v);
|
||||||
|
heightMap.setValue(CompactArrayUtil.createCompactArray(9, heightMapData.length, i -> heightMapData[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chunk.isBiomeData()) {
|
||||||
|
if (wrapper.user().getProtocolInfo().getServerProtocolVersion() >= ProtocolVersion.v1_16_2.getVersion()) {
|
||||||
|
BiomeStorage biomeStorage = wrapper.user().get(BiomeStorage.class);
|
||||||
|
for (int i = 0; i < 1024; i++) {
|
||||||
|
int biome = chunk.getBiomeData()[i];
|
||||||
|
int legacyBiome = biomeStorage.legacyBiome(biome);
|
||||||
|
if (legacyBiome == -1) {
|
||||||
|
ViaBackwards.getPlatform().getLogger().warning("Biome sent that does not exist in the biome registry: " + biome);
|
||||||
|
legacyBiome = 1;
|
||||||
}
|
}
|
||||||
|
chunk.getBiomeData()[i] = legacyBiome;
|
||||||
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
}
|
||||||
for (int j = 0; j < palette.size(); j++) {
|
} else {
|
||||||
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j));
|
for (int i = 0; i < 1024; i++) {
|
||||||
palette.setIdByIndex(j, mappedBlockStateId);
|
int biome = chunk.getBiomeData()[i];
|
||||||
|
switch (biome) {
|
||||||
|
case 170: // new nether biomes
|
||||||
|
case 171:
|
||||||
|
case 172:
|
||||||
|
case 173:
|
||||||
|
chunk.getBiomeData()[i] = 8;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CompoundTag heightMaps = chunk.getHeightMap();
|
if (chunk.getBlockEntities() == null) return;
|
||||||
for (Tag heightMapTag : heightMaps.values()) {
|
for (CompoundTag blockEntity : chunk.getBlockEntities()) {
|
||||||
LongArrayTag heightMap = (LongArrayTag) heightMapTag;
|
handleBlockEntity(blockEntity);
|
||||||
int[] heightMapData = new int[256];
|
|
||||||
CompactArrayUtil.iterateCompactArrayWithPadding(9, heightMapData.length, heightMap.getValue(), (i, v) -> heightMapData[i] = v);
|
|
||||||
heightMap.setValue(CompactArrayUtil.createCompactArray(9, heightMapData.length, i -> heightMapData[i]));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (chunk.isBiomeData()) {
|
|
||||||
if (wrapper.user().getProtocolInfo().getServerProtocolVersion() >= ProtocolVersion.v1_16_2.getVersion()) {
|
|
||||||
BiomeStorage biomeStorage = wrapper.user().get(BiomeStorage.class);
|
|
||||||
for (int i = 0; i < 1024; i++) {
|
|
||||||
int biome = chunk.getBiomeData()[i];
|
|
||||||
int legacyBiome = biomeStorage.legacyBiome(biome);
|
|
||||||
if (legacyBiome == -1) {
|
|
||||||
ViaBackwards.getPlatform().getLogger().warning("Biome sent that does not exist in the biome registry: " + biome);
|
|
||||||
legacyBiome = 1;
|
|
||||||
}
|
|
||||||
chunk.getBiomeData()[i] = legacyBiome;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int i = 0; i < 1024; i++) {
|
|
||||||
int biome = chunk.getBiomeData()[i];
|
|
||||||
switch (biome) {
|
|
||||||
case 170: // new nether biomes
|
|
||||||
case 171:
|
|
||||||
case 172:
|
|
||||||
case 173:
|
|
||||||
chunk.getBiomeData()[i] = 8;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (chunk.getBlockEntities() == null) return;
|
|
||||||
for (CompoundTag blockEntity : chunk.getBlockEntities()) {
|
|
||||||
handleBlockEntity(blockEntity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -217,9 +200,9 @@ public class BlockItemPackets1_16 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
|
|
||||||
registerSpawnParticle(ClientboundPackets1_16.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.DOUBLE);
|
registerSpawnParticle(ClientboundPackets1_16.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.DOUBLE);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16.WINDOW_PROPERTY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16.WINDOW_PROPERTY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE); // Window id
|
map(Type.UNSIGNED_BYTE); // Window id
|
||||||
map(Type.SHORT); // Property
|
map(Type.SHORT); // Property
|
||||||
map(Type.SHORT); // Value
|
map(Type.SHORT); // Value
|
||||||
@ -237,9 +220,9 @@ public class BlockItemPackets1_16 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16.MAP_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16.MAP_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Map ID
|
map(Type.VAR_INT); // Map ID
|
||||||
map(Type.BYTE); // Scale
|
map(Type.BYTE); // Scale
|
||||||
map(Type.BOOLEAN); // Tracking Position
|
map(Type.BOOLEAN); // Tracking Position
|
||||||
@ -248,27 +231,17 @@ public class BlockItemPackets1_16 extends com.viaversion.viabackwards.api.rewrit
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16.BLOCK_ENTITY_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16.BLOCK_ENTITY_DATA, wrapper -> {
|
||||||
@Override
|
wrapper.passthrough(Type.POSITION1_14); // Position
|
||||||
public void registerMap() {
|
wrapper.passthrough(Type.UNSIGNED_BYTE); // Action
|
||||||
handler(wrapper -> {
|
CompoundTag tag = wrapper.passthrough(Type.NBT);
|
||||||
Position position = wrapper.passthrough(Type.POSITION1_14);
|
handleBlockEntity(tag);
|
||||||
short action = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
|
||||||
CompoundTag tag = wrapper.passthrough(Type.NBT);
|
|
||||||
handleBlockEntity(tag);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClickWindow(ServerboundPackets1_14.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM);
|
registerClickWindow(ServerboundPackets1_14.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM);
|
||||||
registerCreativeInvAction(ServerboundPackets1_14.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
|
registerCreativeInvAction(ServerboundPackets1_14.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_14.EDIT_BOOK, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_14.EDIT_BOOK, wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)));
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleBlockEntity(CompoundTag tag) {
|
private void handleBlockEntity(CompoundTag tag) {
|
||||||
|
@ -30,7 +30,7 @@ import com.viaversion.viaversion.api.minecraft.item.Item;
|
|||||||
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
|
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
|
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
@ -65,9 +65,9 @@ public class EntityPackets1_16 extends EntityRewriter<ClientboundPackets1_16, Pr
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_16.SPAWN_ENTITY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16.SPAWN_ENTITY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - Entity UUID
|
map(Type.UUID); // 1 - Entity UUID
|
||||||
map(Type.VAR_INT); // 2 - Entity Type
|
map(Type.VAR_INT); // 2 - Entity Type
|
||||||
@ -98,9 +98,9 @@ public class EntityPackets1_16 extends EntityRewriter<ClientboundPackets1_16, Pr
|
|||||||
|
|
||||||
registerSpawnTracker(ClientboundPackets1_16.SPAWN_MOB);
|
registerSpawnTracker(ClientboundPackets1_16.SPAWN_MOB);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16.RESPAWN, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16.RESPAWN, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(dimensionTransformer); // Dimension Type
|
map(dimensionTransformer); // Dimension Type
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
// Grab the tracker for world names
|
// Grab the tracker for world names
|
||||||
@ -143,9 +143,9 @@ public class EntityPackets1_16 extends EntityRewriter<ClientboundPackets1_16, Pr
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16.JOIN_GAME, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Entity ID
|
map(Type.INT); // Entity ID
|
||||||
map(Type.UNSIGNED_BYTE); // Gamemode
|
map(Type.UNSIGNED_BYTE); // Gamemode
|
||||||
map(Type.BYTE, Type.NOTHING); // Previous gamemode
|
map(Type.BYTE, Type.NOTHING); // Previous gamemode
|
||||||
@ -184,32 +184,27 @@ public class EntityPackets1_16 extends EntityRewriter<ClientboundPackets1_16, Pr
|
|||||||
registerRemoveEntities(ClientboundPackets1_16.DESTROY_ENTITIES);
|
registerRemoveEntities(ClientboundPackets1_16.DESTROY_ENTITIES);
|
||||||
registerMetadataRewriter(ClientboundPackets1_16.ENTITY_METADATA, Types1_16.METADATA_LIST, Types1_14.METADATA_LIST);
|
registerMetadataRewriter(ClientboundPackets1_16.ENTITY_METADATA, Types1_16.METADATA_LIST, Types1_14.METADATA_LIST);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16.ENTITY_PROPERTIES, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16.ENTITY_PROPERTIES, wrapper -> {
|
||||||
@Override
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
int size = wrapper.passthrough(Type.INT);
|
||||||
handler(wrapper -> {
|
for (int i = 0; i < size; i++) {
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
String attributeIdentifier = wrapper.read(Type.STRING);
|
||||||
int size = wrapper.passthrough(Type.INT);
|
String oldKey = protocol.getMappingData().getAttributeMappings().get(attributeIdentifier);
|
||||||
for (int i = 0; i < size; i++) {
|
wrapper.write(Type.STRING, oldKey != null ? oldKey : attributeIdentifier.replace("minecraft:", ""));
|
||||||
String attributeIdentifier = wrapper.read(Type.STRING);
|
|
||||||
String oldKey = protocol.getMappingData().getAttributeMappings().get(attributeIdentifier);
|
|
||||||
wrapper.write(Type.STRING, oldKey != null ? oldKey : attributeIdentifier.replace("minecraft:", ""));
|
|
||||||
|
|
||||||
wrapper.passthrough(Type.DOUBLE);
|
wrapper.passthrough(Type.DOUBLE);
|
||||||
int modifierSize = wrapper.passthrough(Type.VAR_INT);
|
int modifierSize = wrapper.passthrough(Type.VAR_INT);
|
||||||
for (int j = 0; j < modifierSize; j++) {
|
for (int j = 0; j < modifierSize; j++) {
|
||||||
wrapper.passthrough(Type.UUID);
|
wrapper.passthrough(Type.UUID);
|
||||||
wrapper.passthrough(Type.DOUBLE);
|
wrapper.passthrough(Type.DOUBLE);
|
||||||
wrapper.passthrough(Type.BYTE);
|
wrapper.passthrough(Type.BYTE);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16.PLAYER_INFO, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16.PLAYER_INFO, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
handler(packetWrapper -> {
|
handler(packetWrapper -> {
|
||||||
int action = packetWrapper.passthrough(Type.VAR_INT);
|
int action = packetWrapper.passthrough(Type.VAR_INT);
|
||||||
int playerCount = packetWrapper.passthrough(Type.VAR_INT);
|
int playerCount = packetWrapper.passthrough(Type.VAR_INT);
|
||||||
|
@ -29,8 +29,6 @@ import com.viaversion.viaversion.api.connection.UserConnection;
|
|||||||
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16_2Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16_2Types;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||||
@ -76,56 +74,32 @@ public class Protocol1_16_1To1_16_2 extends BackwardsProtocol<ClientboundPackets
|
|||||||
soundRewriter.registerNamedSound(ClientboundPackets1_16_2.NAMED_SOUND);
|
soundRewriter.registerNamedSound(ClientboundPackets1_16_2.NAMED_SOUND);
|
||||||
soundRewriter.registerStopSound(ClientboundPackets1_16_2.STOP_SOUND);
|
soundRewriter.registerStopSound(ClientboundPackets1_16_2.STOP_SOUND);
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_16_2.CHAT_MESSAGE, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_16_2.CHAT_MESSAGE, wrapper -> {
|
||||||
@Override
|
JsonElement message = wrapper.passthrough(Type.COMPONENT);
|
||||||
public void registerMap() {
|
translatableRewriter.processText(message);
|
||||||
handler(wrapper -> {
|
byte position = wrapper.passthrough(Type.BYTE);
|
||||||
JsonElement message = wrapper.passthrough(Type.COMPONENT);
|
if (position == 2) { // https://bugs.mojang.com/browse/MC-119145
|
||||||
translatableRewriter.processText(message);
|
wrapper.clearPacket();
|
||||||
byte position = wrapper.passthrough(Type.BYTE);
|
wrapper.setPacketType(ClientboundPackets1_16.TITLE);
|
||||||
if (position == 2) { // https://bugs.mojang.com/browse/MC-119145
|
wrapper.write(Type.VAR_INT, 2);
|
||||||
wrapper.clearPacket();
|
wrapper.write(Type.COMPONENT, message);
|
||||||
wrapper.setPacketType(ClientboundPackets1_16.TITLE);
|
|
||||||
wrapper.write(Type.VAR_INT, 2);
|
|
||||||
wrapper.write(Type.COMPONENT, message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Recipe book data has been split into 2 separate packets
|
// Recipe book data has been split into 2 separate packets
|
||||||
registerServerbound(ServerboundPackets1_16.RECIPE_BOOK_DATA, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_16.RECIPE_BOOK_DATA, wrapper -> {
|
||||||
@Override
|
int type = wrapper.read(Type.VAR_INT);
|
||||||
public void registerMap() {
|
if (type == 0) {
|
||||||
handler(new PacketHandler() {
|
// Shown, change to its own packet
|
||||||
@Override
|
wrapper.passthrough(Type.STRING); // Recipe
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.setPacketType(ServerboundPackets1_16_2.SEEN_RECIPE);
|
||||||
int type = wrapper.read(Type.VAR_INT);
|
} else {
|
||||||
if (type == 0) {
|
wrapper.cancel();
|
||||||
// Shown, change to its own packet
|
|
||||||
wrapper.passthrough(Type.STRING); // Recipe
|
|
||||||
wrapper.setPacketType(ServerboundPackets1_16_2.SEEN_RECIPE);
|
|
||||||
} else {
|
|
||||||
wrapper.cancel();
|
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
sendSeenRecipePacket(i, wrapper);
|
sendSeenRecipePacket(i, wrapper);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sendSeenRecipePacket(int recipeType, PacketWrapper wrapper) throws Exception {
|
|
||||||
boolean open = wrapper.read(Type.BOOLEAN);
|
|
||||||
boolean filter = wrapper.read(Type.BOOLEAN);
|
|
||||||
|
|
||||||
PacketWrapper newPacket = wrapper.create(ServerboundPackets1_16_2.RECIPE_BOOK_DATA);
|
|
||||||
newPacket.write(Type.VAR_INT, recipeType);
|
|
||||||
newPacket.write(Type.BOOLEAN, open);
|
|
||||||
newPacket.write(Type.BOOLEAN, filter);
|
|
||||||
newPacket.sendToServer(Protocol1_16_1To1_16_2.class);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -134,6 +108,17 @@ public class Protocol1_16_1To1_16_2 extends BackwardsProtocol<ClientboundPackets
|
|||||||
new StatisticsRewriter<>(this).register(ClientboundPackets1_16_2.STATISTICS);
|
new StatisticsRewriter<>(this).register(ClientboundPackets1_16_2.STATISTICS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void sendSeenRecipePacket(int recipeType, PacketWrapper wrapper) throws Exception {
|
||||||
|
boolean open = wrapper.read(Type.BOOLEAN);
|
||||||
|
boolean filter = wrapper.read(Type.BOOLEAN);
|
||||||
|
|
||||||
|
PacketWrapper newPacket = wrapper.create(ServerboundPackets1_16_2.RECIPE_BOOK_DATA);
|
||||||
|
newPacket.write(Type.VAR_INT, recipeType);
|
||||||
|
newPacket.write(Type.BOOLEAN, open);
|
||||||
|
newPacket.write(Type.BOOLEAN, filter);
|
||||||
|
newPacket.sendToServer(Protocol1_16_1To1_16_2.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(UserConnection user) {
|
public void init(UserConnection user) {
|
||||||
user.put(new BiomeStorage());
|
user.put(new BiomeStorage());
|
||||||
|
@ -24,7 +24,6 @@ import com.viaversion.viaversion.libs.fastutil.objects.Object2IntMap;
|
|||||||
import com.viaversion.viaversion.libs.fastutil.objects.Object2IntOpenHashMap;
|
import com.viaversion.viaversion.libs.fastutil.objects.Object2IntOpenHashMap;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonObject;
|
import com.viaversion.viaversion.libs.gson.JsonObject;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public final class BiomeMappings {
|
public final class BiomeMappings {
|
||||||
|
@ -24,7 +24,7 @@ import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
|
|||||||
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
|
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
|
||||||
import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
||||||
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.IntArrayTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.IntArrayTag;
|
||||||
@ -57,61 +57,51 @@ public class BlockItemPackets1_16_2 extends com.viaversion.viabackwards.api.rewr
|
|||||||
registerTradeList(ClientboundPackets1_16_2.TRADE_LIST);
|
registerTradeList(ClientboundPackets1_16_2.TRADE_LIST);
|
||||||
registerAdvancements(ClientboundPackets1_16_2.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
|
registerAdvancements(ClientboundPackets1_16_2.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16_2.UNLOCK_RECIPES, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16_2.UNLOCK_RECIPES, wrapper -> {
|
||||||
@Override
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
wrapper.passthrough(Type.BOOLEAN); // Open
|
||||||
handler(wrapper -> {
|
wrapper.passthrough(Type.BOOLEAN); // Filter
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
wrapper.passthrough(Type.BOOLEAN); // Furnace Open
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Open
|
wrapper.passthrough(Type.BOOLEAN); // Filter furnace
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Filter
|
// Blast furnace / smoker
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Furnace Open
|
wrapper.read(Type.BOOLEAN);
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Filter furnace
|
wrapper.read(Type.BOOLEAN);
|
||||||
// Blast furnace / smoker
|
wrapper.read(Type.BOOLEAN);
|
||||||
wrapper.read(Type.BOOLEAN);
|
wrapper.read(Type.BOOLEAN);
|
||||||
wrapper.read(Type.BOOLEAN);
|
|
||||||
wrapper.read(Type.BOOLEAN);
|
|
||||||
wrapper.read(Type.BOOLEAN);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
blockRewriter.registerAcknowledgePlayerDigging(ClientboundPackets1_16_2.ACKNOWLEDGE_PLAYER_DIGGING);
|
blockRewriter.registerAcknowledgePlayerDigging(ClientboundPackets1_16_2.ACKNOWLEDGE_PLAYER_DIGGING);
|
||||||
blockRewriter.registerBlockAction(ClientboundPackets1_16_2.BLOCK_ACTION);
|
blockRewriter.registerBlockAction(ClientboundPackets1_16_2.BLOCK_ACTION);
|
||||||
blockRewriter.registerBlockChange(ClientboundPackets1_16_2.BLOCK_CHANGE);
|
blockRewriter.registerBlockChange(ClientboundPackets1_16_2.BLOCK_CHANGE);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16_2.CHUNK_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16_2.CHUNK_DATA, wrapper -> {
|
||||||
@Override
|
Chunk chunk = wrapper.read(new Chunk1_16_2Type());
|
||||||
public void registerMap() {
|
wrapper.write(new Chunk1_16Type(), chunk);
|
||||||
handler(wrapper -> {
|
|
||||||
Chunk chunk = wrapper.read(new Chunk1_16_2Type());
|
|
||||||
wrapper.write(new Chunk1_16Type(), chunk);
|
|
||||||
|
|
||||||
chunk.setIgnoreOldLightData(true);
|
chunk.setIgnoreOldLightData(true);
|
||||||
for (int i = 0; i < chunk.getSections().length; i++) {
|
for (int i = 0; i < chunk.getSections().length; i++) {
|
||||||
ChunkSection section = chunk.getSections()[i];
|
ChunkSection section = chunk.getSections()[i];
|
||||||
if (section == null) {
|
if (section == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
||||||
for (int j = 0; j < palette.size(); j++) {
|
for (int j = 0; j < palette.size(); j++) {
|
||||||
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j));
|
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j));
|
||||||
palette.setIdByIndex(j, mappedBlockStateId);
|
palette.setIdByIndex(j, mappedBlockStateId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (CompoundTag blockEntity : chunk.getBlockEntities()) {
|
for (CompoundTag blockEntity : chunk.getBlockEntities()) {
|
||||||
if (blockEntity != null) {
|
if (blockEntity != null) {
|
||||||
handleBlockEntity(blockEntity);
|
handleBlockEntity(blockEntity);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16_2.BLOCK_ENTITY_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16_2.BLOCK_ENTITY_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION1_14);
|
map(Type.POSITION1_14);
|
||||||
map(Type.UNSIGNED_BYTE);
|
map(Type.UNSIGNED_BYTE);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
@ -120,28 +110,23 @@ public class BlockItemPackets1_16_2 extends com.viaversion.viabackwards.api.rewr
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16_2.MULTI_BLOCK_CHANGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16_2.MULTI_BLOCK_CHANGE, wrapper -> {
|
||||||
@Override
|
long chunkPosition = wrapper.read(Type.LONG);
|
||||||
public void registerMap() {
|
wrapper.read(Type.BOOLEAN); // Ignore old light data
|
||||||
handler(wrapper -> {
|
|
||||||
long chunkPosition = wrapper.read(Type.LONG);
|
|
||||||
wrapper.read(Type.BOOLEAN); // Ignore old light data
|
|
||||||
|
|
||||||
int chunkX = (int) (chunkPosition >> 42);
|
int chunkX = (int) (chunkPosition >> 42);
|
||||||
int chunkY = (int) (chunkPosition << 44 >> 44);
|
int chunkY = (int) (chunkPosition << 44 >> 44);
|
||||||
int chunkZ = (int) (chunkPosition << 22 >> 42);
|
int chunkZ = (int) (chunkPosition << 22 >> 42);
|
||||||
wrapper.write(Type.INT, chunkX);
|
wrapper.write(Type.INT, chunkX);
|
||||||
wrapper.write(Type.INT, chunkZ);
|
wrapper.write(Type.INT, chunkZ);
|
||||||
|
|
||||||
BlockChangeRecord[] blockChangeRecord = wrapper.read(Type.VAR_LONG_BLOCK_CHANGE_RECORD_ARRAY);
|
BlockChangeRecord[] blockChangeRecord = wrapper.read(Type.VAR_LONG_BLOCK_CHANGE_RECORD_ARRAY);
|
||||||
wrapper.write(Type.BLOCK_CHANGE_RECORD_ARRAY, blockChangeRecord);
|
wrapper.write(Type.BLOCK_CHANGE_RECORD_ARRAY, blockChangeRecord);
|
||||||
for (int i = 0; i < blockChangeRecord.length; i++) {
|
for (int i = 0; i < blockChangeRecord.length; i++) {
|
||||||
BlockChangeRecord record = blockChangeRecord[i];
|
BlockChangeRecord record = blockChangeRecord[i];
|
||||||
int blockId = protocol.getMappingData().getNewBlockStateId(record.getBlockId());
|
int blockId = protocol.getMappingData().getNewBlockStateId(record.getBlockId());
|
||||||
// Relative y -> absolute y
|
// Relative y -> absolute y
|
||||||
blockChangeRecord[i] = new BlockChangeRecord1_8(record.getSectionX(), record.getY(chunkY), record.getSectionZ(), blockId);
|
blockChangeRecord[i] = new BlockChangeRecord1_8(record.getSectionX(), record.getY(chunkY), record.getSectionZ(), blockId);
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -151,12 +136,7 @@ public class BlockItemPackets1_16_2 extends com.viaversion.viabackwards.api.rewr
|
|||||||
|
|
||||||
registerClickWindow(ServerboundPackets1_16.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM);
|
registerClickWindow(ServerboundPackets1_16.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM);
|
||||||
registerCreativeInvAction(ServerboundPackets1_16.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
|
registerCreativeInvAction(ServerboundPackets1_16.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
|
||||||
protocol.registerServerbound(ServerboundPackets1_16.EDIT_BOOK, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_16.EDIT_BOOK, wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)));
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleBlockEntity(CompoundTag tag) {
|
private void handleBlockEntity(CompoundTag tag) {
|
||||||
|
@ -25,7 +25,7 @@ import com.viaversion.viabackwards.protocol.protocol1_16_1to1_16_2.storage.Biome
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16Types;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16_2Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16_2Types;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_16;
|
import com.viaversion.viaversion.api.type.types.version.Types1_16;
|
||||||
@ -36,7 +36,6 @@ import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
|
|||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2;
|
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.packets.EntityPackets;
|
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.packets.EntityPackets;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class EntityPackets1_16_2 extends EntityRewriter<ClientboundPackets1_16_2, Protocol1_16_1To1_16_2> {
|
public class EntityPackets1_16_2 extends EntityRewriter<ClientboundPackets1_16_2, Protocol1_16_1To1_16_2> {
|
||||||
@ -58,9 +57,9 @@ public class EntityPackets1_16_2 extends EntityRewriter<ClientboundPackets1_16_2
|
|||||||
registerRemoveEntities(ClientboundPackets1_16_2.DESTROY_ENTITIES);
|
registerRemoveEntities(ClientboundPackets1_16_2.DESTROY_ENTITIES);
|
||||||
registerMetadataRewriter(ClientboundPackets1_16_2.ENTITY_METADATA, Types1_16.METADATA_LIST);
|
registerMetadataRewriter(ClientboundPackets1_16_2.ENTITY_METADATA, Types1_16.METADATA_LIST);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16_2.JOIN_GAME, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16_2.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Entity ID
|
map(Type.INT); // Entity ID
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
boolean hardcore = wrapper.read(Type.BOOLEAN);
|
boolean hardcore = wrapper.read(Type.BOOLEAN);
|
||||||
@ -108,14 +107,9 @@ public class EntityPackets1_16_2 extends EntityRewriter<ClientboundPackets1_16_2
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_16_2.RESPAWN, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_16_2.RESPAWN, wrapper -> {
|
||||||
@Override
|
CompoundTag dimensionData = wrapper.read(Type.NBT);
|
||||||
public void registerMap() {
|
wrapper.write(Type.STRING, getDimensionFromData(dimensionData));
|
||||||
handler(wrapper -> {
|
|
||||||
CompoundTag dimensionData = wrapper.read(Type.NBT);
|
|
||||||
wrapper.write(Type.STRING, getDimensionFromData(dimensionData));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ package com.viaversion.viabackwards.protocol.protocol1_16_3to1_16_4;
|
|||||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_16_3to1_16_4.storage.PlayerHandStorage;
|
import com.viaversion.viabackwards.protocol.protocol1_16_3to1_16_4.storage.PlayerHandStorage;
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2;
|
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ServerboundPackets1_16_2;
|
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ServerboundPackets1_16_2;
|
||||||
@ -33,9 +33,9 @@ public class Protocol1_16_3To1_16_4 extends BackwardsProtocol<ClientboundPackets
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
registerServerbound(ServerboundPackets1_16_2.EDIT_BOOK, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_16_2.EDIT_BOOK, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.FLAT_VAR_INT_ITEM);
|
map(Type.FLAT_VAR_INT_ITEM);
|
||||||
map(Type.BOOLEAN);
|
map(Type.BOOLEAN);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
@ -49,14 +49,9 @@ public class Protocol1_16_3To1_16_4 extends BackwardsProtocol<ClientboundPackets
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_16_2.HELD_ITEM_CHANGE, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_16_2.HELD_ITEM_CHANGE, wrapper -> {
|
||||||
@Override
|
short slot = wrapper.passthrough(Type.SHORT);
|
||||||
public void registerMap() {
|
wrapper.user().get(PlayerHandStorage.class).setCurrentHand(slot);
|
||||||
handler(wrapper -> {
|
|
||||||
short slot = wrapper.passthrough(Type.SHORT);
|
|
||||||
wrapper.user().get(PlayerHandStorage.class).setCurrentHand(slot);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ import com.viaversion.viaversion.api.minecraft.RegistryType;
|
|||||||
import com.viaversion.viaversion.api.minecraft.TagData;
|
import com.viaversion.viaversion.api.minecraft.TagData;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
import com.viaversion.viaversion.libs.fastutil.ints.IntArrayList;
|
import com.viaversion.viaversion.libs.fastutil.ints.IntArrayList;
|
||||||
@ -84,80 +84,70 @@ public final class Protocol1_16_4To1_17 extends BackwardsProtocol<ClientboundPac
|
|||||||
soundRewriter.registerStopSound(ClientboundPackets1_17.STOP_SOUND);
|
soundRewriter.registerStopSound(ClientboundPackets1_17.STOP_SOUND);
|
||||||
|
|
||||||
TagRewriter<ClientboundPackets1_17> tagRewriter = new TagRewriter<>(this);
|
TagRewriter<ClientboundPackets1_17> tagRewriter = new TagRewriter<>(this);
|
||||||
registerClientbound(ClientboundPackets1_17.TAGS, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_17.TAGS, wrapper -> {
|
||||||
@Override
|
Map<String, List<TagData>> tags = new HashMap<>();
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> {
|
|
||||||
Map<String, List<TagData>> tags = new HashMap<>();
|
|
||||||
|
|
||||||
int length = wrapper.read(Type.VAR_INT);
|
int length = wrapper.read(Type.VAR_INT);
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
String resourceKey = wrapper.read(Type.STRING);
|
String resourceKey = wrapper.read(Type.STRING);
|
||||||
if (resourceKey.startsWith("minecraft:")) {
|
if (resourceKey.startsWith("minecraft:")) {
|
||||||
resourceKey = resourceKey.substring(10);
|
resourceKey = resourceKey.substring(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<TagData> tagList = new ArrayList<>();
|
List<TagData> tagList = new ArrayList<>();
|
||||||
tags.put(resourceKey, tagList);
|
tags.put(resourceKey, tagList);
|
||||||
|
|
||||||
int tagLength = wrapper.read(Type.VAR_INT);
|
int tagLength = wrapper.read(Type.VAR_INT);
|
||||||
for (int j = 0; j < tagLength; j++) {
|
for (int j = 0; j < tagLength; j++) {
|
||||||
String identifier = wrapper.read(Type.STRING);
|
String identifier = wrapper.read(Type.STRING);
|
||||||
int[] entries = wrapper.read(Type.VAR_INT_ARRAY_PRIMITIVE);
|
int[] entries = wrapper.read(Type.VAR_INT_ARRAY_PRIMITIVE);
|
||||||
tagList.add(new TagData(identifier, entries));
|
tagList.add(new TagData(identifier, entries));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put them into the hardcoded order of Vanilla tags (and only those), rewrite ids
|
// Put them into the hardcoded order of Vanilla tags (and only those), rewrite ids
|
||||||
for (RegistryType type : RegistryType.getValues()) {
|
for (RegistryType type : RegistryType.getValues()) {
|
||||||
List<TagData> tagList = tags.get(type.resourceLocation());
|
List<TagData> tagList = tags.get(type.resourceLocation());
|
||||||
IdRewriteFunction rewriter = tagRewriter.getRewriter(type);
|
IdRewriteFunction rewriter = tagRewriter.getRewriter(type);
|
||||||
|
|
||||||
wrapper.write(Type.VAR_INT, tagList.size());
|
wrapper.write(Type.VAR_INT, tagList.size());
|
||||||
for (TagData tagData : tagList) {
|
for (TagData tagData : tagList) {
|
||||||
int[] entries = tagData.entries();
|
int[] entries = tagData.entries();
|
||||||
if (rewriter != null) {
|
if (rewriter != null) {
|
||||||
// Handle id rewriting now
|
// Handle id rewriting now
|
||||||
IntList idList = new IntArrayList(entries.length);
|
IntList idList = new IntArrayList(entries.length);
|
||||||
for (int id : entries) {
|
for (int id : entries) {
|
||||||
int mappedId = rewriter.rewrite(id);
|
int mappedId = rewriter.rewrite(id);
|
||||||
if (mappedId != -1) {
|
if (mappedId != -1) {
|
||||||
idList.add(mappedId);
|
idList.add(mappedId);
|
||||||
}
|
|
||||||
}
|
|
||||||
entries = idList.toArray(EMPTY_ARRAY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.write(Type.STRING, tagData.identifier());
|
|
||||||
wrapper.write(Type.VAR_INT_ARRAY_PRIMITIVE, entries);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stop after the entity types
|
|
||||||
if (type == RegistryType.ENTITY) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
entries = idList.toArray(EMPTY_ARRAY);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
wrapper.write(Type.STRING, tagData.identifier());
|
||||||
|
wrapper.write(Type.VAR_INT_ARRAY_PRIMITIVE, entries);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stop after the entity types
|
||||||
|
if (type == RegistryType.ENTITY) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
new StatisticsRewriter<>(this).register(ClientboundPackets1_17.STATISTICS);
|
new StatisticsRewriter<>(this).register(ClientboundPackets1_17.STATISTICS);
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_17.RESOURCE_PACK, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_17.RESOURCE_PACK, wrapper -> {
|
||||||
@Override
|
wrapper.passthrough(Type.STRING);
|
||||||
public void registerMap() {
|
wrapper.passthrough(Type.STRING);
|
||||||
handler(wrapper -> {
|
wrapper.read(Type.BOOLEAN); // Required
|
||||||
wrapper.passthrough(Type.STRING);
|
wrapper.read(Type.OPTIONAL_COMPONENT); // Prompt message
|
||||||
wrapper.passthrough(Type.STRING);
|
|
||||||
wrapper.read(Type.BOOLEAN); // Required
|
|
||||||
wrapper.read(Type.OPTIONAL_COMPONENT); // Prompt message
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_17.EXPLOSION, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_17.EXPLOSION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.FLOAT); // X
|
map(Type.FLOAT); // X
|
||||||
map(Type.FLOAT); // Y
|
map(Type.FLOAT); // Y
|
||||||
map(Type.FLOAT); // Z
|
map(Type.FLOAT); // Z
|
||||||
@ -168,9 +158,9 @@ public final class Protocol1_16_4To1_17 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_17.SPAWN_POSITION, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_17.SPAWN_POSITION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION1_14);
|
map(Type.POSITION1_14);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
// Angle (which Mojang just forgot to write to the buffer, lol)
|
// Angle (which Mojang just forgot to write to the buffer, lol)
|
||||||
@ -179,37 +169,32 @@ public final class Protocol1_16_4To1_17 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_17.PING, null, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_17.PING, null, wrapper -> {
|
||||||
@Override
|
wrapper.cancel();
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> {
|
|
||||||
wrapper.cancel();
|
|
||||||
|
|
||||||
int id = wrapper.read(Type.INT);
|
int id = wrapper.read(Type.INT);
|
||||||
short shortId = (short) id;
|
short shortId = (short) id;
|
||||||
if (id == shortId && ViaBackwards.getConfig().handlePingsAsInvAcknowledgements()) {
|
if (id == shortId && ViaBackwards.getConfig().handlePingsAsInvAcknowledgements()) {
|
||||||
wrapper.user().get(PingRequests.class).addId(shortId);
|
wrapper.user().get(PingRequests.class).addId(shortId);
|
||||||
|
|
||||||
// Send inventory acknowledgement to replace ping packet functionality in the unsigned byte range
|
// Send inventory acknowledgement to replace ping packet functionality in the unsigned byte range
|
||||||
PacketWrapper acknowledgementPacket = wrapper.create(ClientboundPackets1_16_2.WINDOW_CONFIRMATION);
|
PacketWrapper acknowledgementPacket = wrapper.create(ClientboundPackets1_16_2.WINDOW_CONFIRMATION);
|
||||||
acknowledgementPacket.write(Type.UNSIGNED_BYTE, (short) 0); // Inventory id
|
acknowledgementPacket.write(Type.UNSIGNED_BYTE, (short) 0); // Inventory id
|
||||||
acknowledgementPacket.write(Type.SHORT, shortId); // Confirmation id
|
acknowledgementPacket.write(Type.SHORT, shortId); // Confirmation id
|
||||||
acknowledgementPacket.write(Type.BOOLEAN, false); // Accepted
|
acknowledgementPacket.write(Type.BOOLEAN, false); // Accepted
|
||||||
acknowledgementPacket.send(Protocol1_16_4To1_17.class);
|
acknowledgementPacket.send(Protocol1_16_4To1_17.class);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
// Plugins expecting a real response will have to handle this accordingly themselves
|
|
||||||
PacketWrapper pongPacket = wrapper.create(ServerboundPackets1_17.PONG);
|
|
||||||
pongPacket.write(Type.INT, id);
|
|
||||||
pongPacket.sendToServer(Protocol1_16_4To1_17.class);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Plugins expecting a real response will have to handle this accordingly themselves
|
||||||
|
PacketWrapper pongPacket = wrapper.create(ServerboundPackets1_17.PONG);
|
||||||
|
pongPacket.write(Type.INT, id);
|
||||||
|
pongPacket.sendToServer(Protocol1_16_4To1_17.class);
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_16_2.CLIENT_SETTINGS, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_16_2.CLIENT_SETTINGS, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Locale
|
map(Type.STRING); // Locale
|
||||||
map(Type.BYTE); // View distance
|
map(Type.BYTE); // View distance
|
||||||
map(Type.VAR_INT); // Chat mode
|
map(Type.VAR_INT); // Chat mode
|
||||||
@ -227,16 +212,11 @@ public final class Protocol1_16_4To1_17 extends BackwardsProtocol<ClientboundPac
|
|||||||
mergePacket(ClientboundPackets1_17.TITLE_SUBTITLE, ClientboundPackets1_16_2.TITLE, 1);
|
mergePacket(ClientboundPackets1_17.TITLE_SUBTITLE, ClientboundPackets1_16_2.TITLE, 1);
|
||||||
mergePacket(ClientboundPackets1_17.ACTIONBAR, ClientboundPackets1_16_2.TITLE, 2);
|
mergePacket(ClientboundPackets1_17.ACTIONBAR, ClientboundPackets1_16_2.TITLE, 2);
|
||||||
mergePacket(ClientboundPackets1_17.TITLE_TIMES, ClientboundPackets1_16_2.TITLE, 3);
|
mergePacket(ClientboundPackets1_17.TITLE_TIMES, ClientboundPackets1_16_2.TITLE, 3);
|
||||||
registerClientbound(ClientboundPackets1_17.CLEAR_TITLES, ClientboundPackets1_16_2.TITLE, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_17.CLEAR_TITLES, ClientboundPackets1_16_2.TITLE, wrapper -> {
|
||||||
@Override
|
if (wrapper.read(Type.BOOLEAN)) {
|
||||||
public void registerMap() {
|
wrapper.write(Type.VAR_INT, 5); // Reset times
|
||||||
handler(wrapper -> {
|
} else {
|
||||||
if (wrapper.read(Type.BOOLEAN)) {
|
wrapper.write(Type.VAR_INT, 4); // Simple clear
|
||||||
wrapper.write(Type.VAR_INT, 5); // Reset times
|
|
||||||
} else {
|
|
||||||
wrapper.write(Type.VAR_INT, 4); // Simple clear
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -262,14 +242,7 @@ public final class Protocol1_16_4To1_17 extends BackwardsProtocol<ClientboundPac
|
|||||||
|
|
||||||
public void mergePacket(ClientboundPackets1_17 newPacketType, ClientboundPackets1_16_2 oldPacketType, int type) {
|
public void mergePacket(ClientboundPackets1_17 newPacketType, ClientboundPackets1_16_2 oldPacketType, int type) {
|
||||||
// A few packets that had different handling based on an initially read enum type were split into different ones
|
// A few packets that had different handling based on an initially read enum type were split into different ones
|
||||||
registerClientbound(newPacketType, oldPacketType, new PacketRemapper() {
|
registerClientbound(newPacketType, oldPacketType, wrapper -> wrapper.write(Type.VAR_INT, type));
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> {
|
|
||||||
wrapper.write(Type.VAR_INT, type);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -32,7 +32,7 @@ import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
|||||||
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.LongArrayTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.LongArrayTag;
|
||||||
@ -48,7 +48,6 @@ import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.types.Chunk1_17T
|
|||||||
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
||||||
import com.viaversion.viaversion.util.CompactArrayUtil;
|
import com.viaversion.viaversion.util.CompactArrayUtil;
|
||||||
import com.viaversion.viaversion.util.MathUtil;
|
import com.viaversion.viaversion.util.MathUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.BitSet;
|
import java.util.BitSet;
|
||||||
@ -78,12 +77,7 @@ public final class BlockItemPackets1_17 extends ItemRewriter<ClientboundPackets1
|
|||||||
|
|
||||||
|
|
||||||
registerCreativeInvAction(ServerboundPackets1_16_2.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
|
registerCreativeInvAction(ServerboundPackets1_16_2.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
|
||||||
protocol.registerServerbound(ServerboundPackets1_16_2.EDIT_BOOK, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_16_2.EDIT_BOOK, wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)));
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// TODO Since the carried and modified items are typically set incorrectly, the server sends unnecessary
|
// TODO Since the carried and modified items are typically set incorrectly, the server sends unnecessary
|
||||||
// set slot packets after practically every window click, since it thinks the client and server
|
// set slot packets after practically every window click, since it thinks the client and server
|
||||||
@ -92,9 +86,9 @@ public final class BlockItemPackets1_17 extends ItemRewriter<ClientboundPackets1
|
|||||||
// and modified items array as appropriate here. That would be a ton of work and replicated vanilla code,
|
// and modified items array as appropriate here. That would be a ton of work and replicated vanilla code,
|
||||||
// and the hack below mitigates the worst side effects of this issue, which is an incorrect carried item
|
// and the hack below mitigates the worst side effects of this issue, which is an incorrect carried item
|
||||||
// sent to the client when a right/left click drag is started. It works, at least for now...
|
// sent to the client when a right/left click drag is started. It works, at least for now...
|
||||||
protocol.registerServerbound(ServerboundPackets1_16_2.CLICK_WINDOW, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_16_2.CLICK_WINDOW, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UNSIGNED_BYTE);
|
map(Type.UNSIGNED_BYTE);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
short slot = wrapper.passthrough(Type.SHORT); // Slot
|
short slot = wrapper.passthrough(Type.SHORT); // Slot
|
||||||
@ -142,55 +136,45 @@ public final class BlockItemPackets1_17 extends ItemRewriter<ClientboundPackets1
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.SET_SLOT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.SET_SLOT, wrapper -> {
|
||||||
@Override
|
short windowId = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
public void registerMap() {
|
short slot = wrapper.passthrough(Type.SHORT);
|
||||||
handler(wrapper -> {
|
|
||||||
short windowId = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
|
||||||
short slot = wrapper.passthrough(Type.SHORT);
|
|
||||||
|
|
||||||
Item carried = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
Item carried = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
||||||
if (carried != null && windowId == -1 && slot == -1) {
|
if (carried != null && windowId == -1 && slot == -1) {
|
||||||
// This is related to the hack to fix click and drag ghost items above.
|
// This is related to the hack to fix click and drag ghost items above.
|
||||||
// After a completed drag, we have no idea how many items remain on the cursor,
|
// After a completed drag, we have no idea how many items remain on the cursor,
|
||||||
// and vanilla logic replication would be required to calculate the value.
|
// and vanilla logic replication would be required to calculate the value.
|
||||||
// When the click drag complete packet is sent, we will send an incorrect
|
// When the click drag complete packet is sent, we will send an incorrect
|
||||||
// carried item, and the server will helpfully send this packet allowing us
|
// carried item, and the server will helpfully send this packet allowing us
|
||||||
// to update the internal state. This is necessary for fixing multiple sequential
|
// to update the internal state. This is necessary for fixing multiple sequential
|
||||||
// click drag actions without intermittent pickup actions.
|
// click drag actions without intermittent pickup actions.
|
||||||
wrapper.user().get(PlayerLastCursorItem.class).setLastCursorItem(carried);
|
wrapper.user().get(PlayerLastCursorItem.class).setLastCursorItem(carried);
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.write(Type.FLAT_VAR_INT_ITEM, handleItemToClient(carried));
|
wrapper.write(Type.FLAT_VAR_INT_ITEM, handleItemToClient(carried));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
protocol.registerServerbound(ServerboundPackets1_16_2.WINDOW_CONFIRMATION, null, wrapper -> {
|
||||||
|
wrapper.cancel();
|
||||||
|
if (!ViaBackwards.getConfig().handlePingsAsInvAcknowledgements()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle ping packet replacement
|
||||||
|
short inventoryId = wrapper.read(Type.UNSIGNED_BYTE);
|
||||||
|
short confirmationId = wrapper.read(Type.SHORT);
|
||||||
|
boolean accepted = wrapper.read(Type.BOOLEAN);
|
||||||
|
if (inventoryId == 0 && accepted && wrapper.user().get(PingRequests.class).removeId(confirmationId)) {
|
||||||
|
PacketWrapper pongPacket = wrapper.create(ServerboundPackets1_17.PONG);
|
||||||
|
pongPacket.write(Type.INT, (int) confirmationId);
|
||||||
|
pongPacket.sendToServer(Protocol1_16_4To1_17.class);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_16_2.WINDOW_CONFIRMATION, null, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.SPAWN_PARTICLE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
handler(wrapper -> {
|
|
||||||
wrapper.cancel();
|
|
||||||
if (!ViaBackwards.getConfig().handlePingsAsInvAcknowledgements()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle ping packet replacement
|
|
||||||
short inventoryId = wrapper.read(Type.UNSIGNED_BYTE);
|
|
||||||
short confirmationId = wrapper.read(Type.SHORT);
|
|
||||||
boolean accepted = wrapper.read(Type.BOOLEAN);
|
|
||||||
if (inventoryId == 0 && accepted && wrapper.user().get(PingRequests.class).removeId(confirmationId)) {
|
|
||||||
PacketWrapper pongPacket = wrapper.create(ServerboundPackets1_17.PONG);
|
|
||||||
pongPacket.write(Type.INT, (int) confirmationId);
|
|
||||||
pongPacket.sendToServer(Protocol1_16_4To1_17.class);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.SPAWN_PARTICLE, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // Particle id
|
map(Type.INT); // Particle id
|
||||||
map(Type.BOOLEAN); // Long distance
|
map(Type.BOOLEAN); // Long distance
|
||||||
map(Type.DOUBLE); // X
|
map(Type.DOUBLE); // X
|
||||||
@ -232,9 +216,9 @@ public final class BlockItemPackets1_17 extends ItemRewriter<ClientboundPackets1
|
|||||||
|
|
||||||
// The Great Shrunkening
|
// The Great Shrunkening
|
||||||
// Chunk sections *will* be lost ¯\_(ツ)_/¯
|
// Chunk sections *will* be lost ¯\_(ツ)_/¯
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.UPDATE_LIGHT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.UPDATE_LIGHT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // X
|
map(Type.VAR_INT); // X
|
||||||
map(Type.VAR_INT); // Z
|
map(Type.VAR_INT); // Z
|
||||||
map(Type.BOOLEAN); // Trust edges
|
map(Type.BOOLEAN); // Trust edges
|
||||||
@ -297,8 +281,9 @@ public final class BlockItemPackets1_17 extends ItemRewriter<ClientboundPackets1
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.MULTI_BLOCK_CHANGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.MULTI_BLOCK_CHANGE, new PacketHandlers() {
|
||||||
public void registerMap() {
|
@Override
|
||||||
|
public void register() {
|
||||||
map(Type.LONG); // Chunk pos
|
map(Type.LONG); // Chunk pos
|
||||||
map(Type.BOOLEAN); // Suppress light updates
|
map(Type.BOOLEAN); // Suppress light updates
|
||||||
handler((wrapper) -> {
|
handler((wrapper) -> {
|
||||||
@ -318,8 +303,9 @@ public final class BlockItemPackets1_17 extends ItemRewriter<ClientboundPackets1
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.BLOCK_CHANGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.BLOCK_CHANGE, new PacketHandlers() {
|
||||||
public void registerMap() {
|
@Override
|
||||||
|
public void register() {
|
||||||
map(Type.POSITION1_14);
|
map(Type.POSITION1_14);
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
handler((wrapper) -> {
|
handler((wrapper) -> {
|
||||||
@ -334,72 +320,62 @@ public final class BlockItemPackets1_17 extends ItemRewriter<ClientboundPackets1
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.CHUNK_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.CHUNK_DATA, wrapper -> {
|
||||||
@Override
|
EntityTracker tracker = wrapper.user().getEntityTracker(Protocol1_16_4To1_17.class);
|
||||||
public void registerMap() {
|
int currentWorldSectionHeight = tracker.currentWorldSectionHeight();
|
||||||
handler(wrapper -> {
|
|
||||||
EntityTracker tracker = wrapper.user().getEntityTracker(Protocol1_16_4To1_17.class);
|
|
||||||
int currentWorldSectionHeight = tracker.currentWorldSectionHeight();
|
|
||||||
|
|
||||||
Chunk chunk = wrapper.read(new Chunk1_17Type(currentWorldSectionHeight));
|
Chunk chunk = wrapper.read(new Chunk1_17Type(currentWorldSectionHeight));
|
||||||
wrapper.write(new Chunk1_16_2Type(), chunk);
|
wrapper.write(new Chunk1_16_2Type(), chunk);
|
||||||
|
|
||||||
// Cut sections
|
// Cut sections
|
||||||
int startFromSection = Math.max(0, -(tracker.currentMinY() >> 4));
|
int startFromSection = Math.max(0, -(tracker.currentMinY() >> 4));
|
||||||
chunk.setBiomeData(Arrays.copyOfRange(chunk.getBiomeData(), startFromSection * 64, (startFromSection * 64) + 1024));
|
chunk.setBiomeData(Arrays.copyOfRange(chunk.getBiomeData(), startFromSection * 64, (startFromSection * 64) + 1024));
|
||||||
|
|
||||||
chunk.setBitmask(cutMask(chunk.getChunkMask(), startFromSection, false));
|
chunk.setBitmask(cutMask(chunk.getChunkMask(), startFromSection, false));
|
||||||
chunk.setChunkMask(null);
|
chunk.setChunkMask(null);
|
||||||
|
|
||||||
ChunkSection[] sections = Arrays.copyOfRange(chunk.getSections(), startFromSection, startFromSection + 16);
|
ChunkSection[] sections = Arrays.copyOfRange(chunk.getSections(), startFromSection, startFromSection + 16);
|
||||||
chunk.setSections(sections);
|
chunk.setSections(sections);
|
||||||
|
|
||||||
CompoundTag heightMaps = chunk.getHeightMap();
|
CompoundTag heightMaps = chunk.getHeightMap();
|
||||||
for (Tag heightMapTag : heightMaps.values()) {
|
for (Tag heightMapTag : heightMaps.values()) {
|
||||||
LongArrayTag heightMap = (LongArrayTag) heightMapTag;
|
LongArrayTag heightMap = (LongArrayTag) heightMapTag;
|
||||||
int[] heightMapData = new int[256];
|
int[] heightMapData = new int[256];
|
||||||
int bitsPerEntry = MathUtil.ceilLog2((currentWorldSectionHeight << 4) + 1);
|
int bitsPerEntry = MathUtil.ceilLog2((currentWorldSectionHeight << 4) + 1);
|
||||||
// Shift back to 0 based and clamp to normal height with 9 bits
|
// Shift back to 0 based and clamp to normal height with 9 bits
|
||||||
CompactArrayUtil.iterateCompactArrayWithPadding(bitsPerEntry, heightMapData.length, heightMap.getValue(), (i, v) -> heightMapData[i] = MathUtil.clamp(v + tracker.currentMinY(), 0, 255));
|
CompactArrayUtil.iterateCompactArrayWithPadding(bitsPerEntry, heightMapData.length, heightMap.getValue(), (i, v) -> heightMapData[i] = MathUtil.clamp(v + tracker.currentMinY(), 0, 255));
|
||||||
heightMap.setValue(CompactArrayUtil.createCompactArrayWithPadding(9, heightMapData.length, i -> heightMapData[i]));
|
heightMap.setValue(CompactArrayUtil.createCompactArrayWithPadding(9, heightMapData.length, i -> heightMapData[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
ChunkSection section = sections[i];
|
ChunkSection section = sections[i];
|
||||||
if (section == null) {
|
if (section == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
DataPalette palette = section.palette(PaletteType.BLOCKS);
|
||||||
for (int j = 0; j < palette.size(); j++) {
|
for (int j = 0; j < palette.size(); j++) {
|
||||||
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j));
|
int mappedBlockStateId = protocol.getMappingData().getNewBlockStateId(palette.idByIndex(j));
|
||||||
palette.setIdByIndex(j, mappedBlockStateId);
|
palette.setIdByIndex(j, mappedBlockStateId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
chunk.getBlockEntities().removeIf(compound -> {
|
chunk.getBlockEntities().removeIf(compound -> {
|
||||||
NumberTag tag = compound.get("y");
|
NumberTag tag = compound.get("y");
|
||||||
return tag != null && (tag.asInt() < 0 || tag.asInt() > 255);
|
return tag != null && (tag.asInt() < 0 || tag.asInt() > 255);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_17.BLOCK_ENTITY_DATA, wrapper -> {
|
||||||
|
int y = wrapper.passthrough(Type.POSITION1_14).y();
|
||||||
|
if (y < 0 || y > 255) {
|
||||||
|
wrapper.cancel();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.BLOCK_ENTITY_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.BLOCK_BREAK_ANIMATION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
handler(wrapper -> {
|
|
||||||
int y = wrapper.passthrough(Type.POSITION1_14).y();
|
|
||||||
if (y < 0 || y > 255) {
|
|
||||||
wrapper.cancel();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.BLOCK_BREAK_ANIMATION, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
int y = wrapper.passthrough(Type.POSITION1_14).y();
|
int y = wrapper.passthrough(Type.POSITION1_14).y();
|
||||||
@ -410,9 +386,9 @@ public final class BlockItemPackets1_17 extends ItemRewriter<ClientboundPackets1
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.MAP_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.MAP_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Map ID
|
map(Type.VAR_INT); // Map ID
|
||||||
map(Type.BYTE); // Scale
|
map(Type.BYTE); // Scale
|
||||||
handler(wrapper -> wrapper.write(Type.BOOLEAN, true)); // Tracking position
|
handler(wrapper -> wrapper.write(Type.BOOLEAN, true)); // Tracking position
|
||||||
|
@ -24,7 +24,7 @@ import com.viaversion.viaversion.api.minecraft.entities.Entity1_16_2Types;
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
|
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.Particle;
|
import com.viaversion.viaversion.api.type.types.Particle;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_16;
|
import com.viaversion.viaversion.api.type.types.version.Types1_16;
|
||||||
@ -54,23 +54,18 @@ public final class EntityPackets1_17 extends EntityRewriter<ClientboundPackets1_
|
|||||||
registerTracker(ClientboundPackets1_17.SPAWN_PLAYER, Entity1_17Types.PLAYER);
|
registerTracker(ClientboundPackets1_17.SPAWN_PLAYER, Entity1_17Types.PLAYER);
|
||||||
registerMetadataRewriter(ClientboundPackets1_17.ENTITY_METADATA, Types1_17.METADATA_LIST, Types1_16.METADATA_LIST);
|
registerMetadataRewriter(ClientboundPackets1_17.ENTITY_METADATA, Types1_17.METADATA_LIST, Types1_16.METADATA_LIST);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.REMOVE_ENTITY, ClientboundPackets1_16_2.DESTROY_ENTITIES, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.REMOVE_ENTITY, ClientboundPackets1_16_2.DESTROY_ENTITIES, wrapper -> {
|
||||||
@Override
|
int entityId = wrapper.read(Type.VAR_INT);
|
||||||
public void registerMap() {
|
tracker(wrapper.user()).removeEntity(entityId);
|
||||||
handler(wrapper -> {
|
|
||||||
int entityId = wrapper.read(Type.VAR_INT);
|
|
||||||
tracker(wrapper.user()).removeEntity(entityId);
|
|
||||||
|
|
||||||
// Write into single value array
|
// Write into single value array
|
||||||
int[] array = {entityId};
|
int[] array = {entityId};
|
||||||
wrapper.write(Type.VAR_INT_ARRAY_PRIMITIVE, array);
|
wrapper.write(Type.VAR_INT_ARRAY_PRIMITIVE, array);
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.JOIN_GAME, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Entity ID
|
map(Type.INT); // Entity ID
|
||||||
map(Type.BOOLEAN); // Hardcore
|
map(Type.BOOLEAN); // Hardcore
|
||||||
map(Type.UNSIGNED_BYTE); // Gamemode
|
map(Type.UNSIGNED_BYTE); // Gamemode
|
||||||
@ -111,9 +106,9 @@ public final class EntityPackets1_17 extends EntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.RESPAWN, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.RESPAWN, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.NBT); // Dimension data
|
map(Type.NBT); // Dimension data
|
||||||
map(Type.STRING); // World
|
map(Type.STRING); // World
|
||||||
handler(worldDataTrackerHandler(0));
|
handler(worldDataTrackerHandler(0));
|
||||||
@ -121,9 +116,9 @@ public final class EntityPackets1_17 extends EntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.PLAYER_POSITION, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.PLAYER_POSITION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
map(Type.DOUBLE);
|
map(Type.DOUBLE);
|
||||||
@ -138,9 +133,9 @@ public final class EntityPackets1_17 extends EntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_17.ENTITY_PROPERTIES, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_17.ENTITY_PROPERTIES, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Entity id
|
map(Type.VAR_INT); // Entity id
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
wrapper.write(Type.INT, wrapper.read(Type.VAR_INT)); // Collection length
|
wrapper.write(Type.INT, wrapper.read(Type.VAR_INT)); // Collection length
|
||||||
|
@ -27,7 +27,7 @@ import com.viaversion.viaversion.api.connection.UserConnection;
|
|||||||
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_17_1to1_17.ClientboundPackets1_17_1;
|
import com.viaversion.viaversion.protocols.protocol1_17_1to1_17.ClientboundPackets1_17_1;
|
||||||
@ -76,9 +76,9 @@ public final class Protocol1_17_1To1_18 extends BackwardsProtocol<ClientboundPac
|
|||||||
tagRewriter.addEmptyTag(RegistryType.BLOCK, "minecraft:lava_pool_stone_replaceables");
|
tagRewriter.addEmptyTag(RegistryType.BLOCK, "minecraft:lava_pool_stone_replaceables");
|
||||||
tagRewriter.registerGeneric(ClientboundPackets1_18.TAGS);
|
tagRewriter.registerGeneric(ClientboundPackets1_18.TAGS);
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_17.CLIENT_SETTINGS, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_17.CLIENT_SETTINGS, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Language
|
map(Type.STRING); // Language
|
||||||
map(Type.BYTE); // View distance
|
map(Type.BYTE); // View distance
|
||||||
map(Type.VAR_INT); // Chat visibility
|
map(Type.VAR_INT); // Chat visibility
|
||||||
@ -90,31 +90,31 @@ public final class Protocol1_17_1To1_18 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_18.SCOREBOARD_OBJECTIVE, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_18.SCOREBOARD_OBJECTIVE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Name
|
map(Type.STRING); // Name
|
||||||
handler(cutName(0, 16));
|
handler(cutName(0, 16));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerClientbound(ClientboundPackets1_18.DISPLAY_SCOREBOARD, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_18.DISPLAY_SCOREBOARD, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.BYTE); // Slot
|
map(Type.BYTE); // Slot
|
||||||
map(Type.STRING); // Name
|
map(Type.STRING); // Name
|
||||||
handler(cutName(0, 16));
|
handler(cutName(0, 16));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerClientbound(ClientboundPackets1_18.TEAMS, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_18.TEAMS, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Name
|
map(Type.STRING); // Name
|
||||||
handler(cutName(0, 16));
|
handler(cutName(0, 16));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerClientbound(ClientboundPackets1_18.UPDATE_SCORE, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_18.UPDATE_SCORE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Owner
|
map(Type.STRING); // Owner
|
||||||
map(Type.VAR_INT); // Method
|
map(Type.VAR_INT); // Method
|
||||||
map(Type.STRING); // Name
|
map(Type.STRING); // Name
|
||||||
|
@ -30,7 +30,7 @@ import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
|
|||||||
import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
||||||
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
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.IntTag;
|
||||||
@ -64,9 +64,9 @@ public final class BlockItemPackets1_18 extends ItemRewriter<ClientboundPackets1
|
|||||||
registerAdvancements(ClientboundPackets1_18.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
|
registerAdvancements(ClientboundPackets1_18.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
|
||||||
registerClickWindow1_17_1(ServerboundPackets1_17.CLICK_WINDOW);
|
registerClickWindow1_17_1(ServerboundPackets1_17.CLICK_WINDOW);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_18.EFFECT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_18.EFFECT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Effect id
|
map(Type.INT); // Effect id
|
||||||
map(Type.POSITION1_14); // Location
|
map(Type.POSITION1_14); // Location
|
||||||
map(Type.INT); // Data
|
map(Type.INT); // Data
|
||||||
@ -82,9 +82,9 @@ public final class BlockItemPackets1_18 extends ItemRewriter<ClientboundPackets1
|
|||||||
|
|
||||||
registerCreativeInvAction(ServerboundPackets1_17.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
|
registerCreativeInvAction(ServerboundPackets1_17.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_18.SPAWN_PARTICLE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_18.SPAWN_PARTICLE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Particle id
|
map(Type.INT); // Particle id
|
||||||
map(Type.BOOLEAN); // Override limiter
|
map(Type.BOOLEAN); // Override limiter
|
||||||
map(Type.DOUBLE); // X
|
map(Type.DOUBLE); // X
|
||||||
@ -124,9 +124,9 @@ public final class BlockItemPackets1_18 extends ItemRewriter<ClientboundPackets1
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_18.BLOCK_ENTITY_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_18.BLOCK_ENTITY_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION1_14);
|
map(Type.POSITION1_14);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
final int id = wrapper.read(Type.VAR_INT);
|
final int id = wrapper.read(Type.VAR_INT);
|
||||||
@ -166,87 +166,82 @@ public final class BlockItemPackets1_18 extends ItemRewriter<ClientboundPackets1
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_18.CHUNK_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_18.CHUNK_DATA, wrapper -> {
|
||||||
@Override
|
final EntityTracker tracker = protocol.getEntityRewriter().tracker(wrapper.user());
|
||||||
public void registerMap() {
|
final Chunk1_18Type chunkType = new Chunk1_18Type(tracker.currentWorldSectionHeight(),
|
||||||
handler(wrapper -> {
|
MathUtil.ceilLog2(protocol.getMappingData().getBlockStateMappings().mappedSize()),
|
||||||
final EntityTracker tracker = protocol.getEntityRewriter().tracker(wrapper.user());
|
MathUtil.ceilLog2(tracker.biomesSent()));
|
||||||
final Chunk1_18Type chunkType = new Chunk1_18Type(tracker.currentWorldSectionHeight(),
|
final Chunk oldChunk = wrapper.read(chunkType);
|
||||||
MathUtil.ceilLog2(protocol.getMappingData().getBlockStateMappings().mappedSize()),
|
final ChunkSection[] sections = oldChunk.getSections();
|
||||||
MathUtil.ceilLog2(tracker.biomesSent()));
|
final BitSet mask = new BitSet(oldChunk.getSections().length);
|
||||||
final Chunk oldChunk = wrapper.read(chunkType);
|
final int[] biomeData = new int[sections.length * ChunkSection.BIOME_SIZE];
|
||||||
final ChunkSection[] sections = oldChunk.getSections();
|
int biomeIndex = 0;
|
||||||
final BitSet mask = new BitSet(oldChunk.getSections().length);
|
for (int j = 0; j < sections.length; j++) {
|
||||||
final int[] biomeData = new int[sections.length * ChunkSection.BIOME_SIZE];
|
final ChunkSection section = sections[j];
|
||||||
int biomeIndex = 0;
|
// Write biome palette into biome array
|
||||||
for (int j = 0; j < sections.length; j++) {
|
final DataPalette biomePalette = section.palette(PaletteType.BIOMES);
|
||||||
final ChunkSection section = sections[j];
|
for (int i = 0; i < ChunkSection.BIOME_SIZE; i++) {
|
||||||
// Write biome palette into biome array
|
biomeData[biomeIndex++] = biomePalette.idAt(i);
|
||||||
final DataPalette biomePalette = section.palette(PaletteType.BIOMES);
|
}
|
||||||
for (int i = 0; i < ChunkSection.BIOME_SIZE; i++) {
|
|
||||||
biomeData[biomeIndex++] = biomePalette.idAt(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Rewrite to empty section
|
// Rewrite to empty section
|
||||||
if (section.getNonAirBlocksCount() == 0) {
|
if (section.getNonAirBlocksCount() == 0) {
|
||||||
sections[j] = null;
|
sections[j] = null;
|
||||||
} else {
|
} else {
|
||||||
mask.set(j);
|
mask.set(j);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
final List<CompoundTag> blockEntityTags = new ArrayList<>(oldChunk.blockEntities().size());
|
|
||||||
for (final BlockEntity blockEntity : oldChunk.blockEntities()) {
|
|
||||||
final String id = protocol.getMappingData().blockEntities().get(blockEntity.typeId());
|
|
||||||
if (id == null) {
|
|
||||||
// Shrug
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
final CompoundTag tag;
|
|
||||||
if (blockEntity.tag() != null) {
|
|
||||||
tag = blockEntity.tag();
|
|
||||||
handleSpawner(blockEntity.typeId(), tag);
|
|
||||||
} else {
|
|
||||||
tag = new CompoundTag();
|
|
||||||
}
|
|
||||||
|
|
||||||
blockEntityTags.add(tag);
|
|
||||||
tag.put("x", new IntTag((oldChunk.getX() << 4) + blockEntity.sectionX()));
|
|
||||||
tag.put("y", new IntTag(blockEntity.y()));
|
|
||||||
tag.put("z", new IntTag((oldChunk.getZ() << 4) + blockEntity.sectionZ()));
|
|
||||||
tag.put("id", new StringTag("minecraft:" + id));
|
|
||||||
}
|
|
||||||
|
|
||||||
final Chunk chunk = new BaseChunk(oldChunk.getX(), oldChunk.getZ(), true, false, mask,
|
|
||||||
oldChunk.getSections(), biomeData, oldChunk.getHeightMap(), blockEntityTags);
|
|
||||||
wrapper.write(new Chunk1_17Type(tracker.currentWorldSectionHeight()), chunk);
|
|
||||||
|
|
||||||
// Create and send light packet first
|
|
||||||
final PacketWrapper lightPacket = wrapper.create(ClientboundPackets1_17_1.UPDATE_LIGHT);
|
|
||||||
lightPacket.write(Type.VAR_INT, chunk.getX());
|
|
||||||
lightPacket.write(Type.VAR_INT, chunk.getZ());
|
|
||||||
lightPacket.write(Type.BOOLEAN, wrapper.read(Type.BOOLEAN)); // Trust edges
|
|
||||||
lightPacket.write(Type.LONG_ARRAY_PRIMITIVE, wrapper.read(Type.LONG_ARRAY_PRIMITIVE)); // Sky light mask
|
|
||||||
lightPacket.write(Type.LONG_ARRAY_PRIMITIVE, wrapper.read(Type.LONG_ARRAY_PRIMITIVE)); // Block light mask
|
|
||||||
lightPacket.write(Type.LONG_ARRAY_PRIMITIVE, wrapper.read(Type.LONG_ARRAY_PRIMITIVE)); // Empty sky light mask
|
|
||||||
lightPacket.write(Type.LONG_ARRAY_PRIMITIVE, wrapper.read(Type.LONG_ARRAY_PRIMITIVE)); // Empty block light mask
|
|
||||||
|
|
||||||
final int skyLightLength = wrapper.read(Type.VAR_INT);
|
|
||||||
lightPacket.write(Type.VAR_INT, skyLightLength);
|
|
||||||
for (int i = 0; i < skyLightLength; i++) {
|
|
||||||
lightPacket.write(Type.BYTE_ARRAY_PRIMITIVE, wrapper.read(Type.BYTE_ARRAY_PRIMITIVE));
|
|
||||||
}
|
|
||||||
|
|
||||||
final int blockLightLength = wrapper.read(Type.VAR_INT);
|
|
||||||
lightPacket.write(Type.VAR_INT, blockLightLength);
|
|
||||||
for (int i = 0; i < blockLightLength; i++) {
|
|
||||||
lightPacket.write(Type.BYTE_ARRAY_PRIMITIVE, wrapper.read(Type.BYTE_ARRAY_PRIMITIVE));
|
|
||||||
}
|
|
||||||
|
|
||||||
lightPacket.send(Protocol1_17_1To1_18.class);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final List<CompoundTag> blockEntityTags = new ArrayList<>(oldChunk.blockEntities().size());
|
||||||
|
for (final BlockEntity blockEntity : oldChunk.blockEntities()) {
|
||||||
|
final String id = protocol.getMappingData().blockEntities().get(blockEntity.typeId());
|
||||||
|
if (id == null) {
|
||||||
|
// Shrug
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
final CompoundTag tag;
|
||||||
|
if (blockEntity.tag() != null) {
|
||||||
|
tag = blockEntity.tag();
|
||||||
|
handleSpawner(blockEntity.typeId(), tag);
|
||||||
|
} else {
|
||||||
|
tag = new CompoundTag();
|
||||||
|
}
|
||||||
|
|
||||||
|
blockEntityTags.add(tag);
|
||||||
|
tag.put("x", new IntTag((oldChunk.getX() << 4) + blockEntity.sectionX()));
|
||||||
|
tag.put("y", new IntTag(blockEntity.y()));
|
||||||
|
tag.put("z", new IntTag((oldChunk.getZ() << 4) + blockEntity.sectionZ()));
|
||||||
|
tag.put("id", new StringTag("minecraft:" + id));
|
||||||
|
}
|
||||||
|
|
||||||
|
final Chunk chunk = new BaseChunk(oldChunk.getX(), oldChunk.getZ(), true, false, mask,
|
||||||
|
oldChunk.getSections(), biomeData, oldChunk.getHeightMap(), blockEntityTags);
|
||||||
|
wrapper.write(new Chunk1_17Type(tracker.currentWorldSectionHeight()), chunk);
|
||||||
|
|
||||||
|
// Create and send light packet first
|
||||||
|
final PacketWrapper lightPacket = wrapper.create(ClientboundPackets1_17_1.UPDATE_LIGHT);
|
||||||
|
lightPacket.write(Type.VAR_INT, chunk.getX());
|
||||||
|
lightPacket.write(Type.VAR_INT, chunk.getZ());
|
||||||
|
lightPacket.write(Type.BOOLEAN, wrapper.read(Type.BOOLEAN)); // Trust edges
|
||||||
|
lightPacket.write(Type.LONG_ARRAY_PRIMITIVE, wrapper.read(Type.LONG_ARRAY_PRIMITIVE)); // Sky light mask
|
||||||
|
lightPacket.write(Type.LONG_ARRAY_PRIMITIVE, wrapper.read(Type.LONG_ARRAY_PRIMITIVE)); // Block light mask
|
||||||
|
lightPacket.write(Type.LONG_ARRAY_PRIMITIVE, wrapper.read(Type.LONG_ARRAY_PRIMITIVE)); // Empty sky light mask
|
||||||
|
lightPacket.write(Type.LONG_ARRAY_PRIMITIVE, wrapper.read(Type.LONG_ARRAY_PRIMITIVE)); // Empty block light mask
|
||||||
|
|
||||||
|
final int skyLightLength = wrapper.read(Type.VAR_INT);
|
||||||
|
lightPacket.write(Type.VAR_INT, skyLightLength);
|
||||||
|
for (int i = 0; i < skyLightLength; i++) {
|
||||||
|
lightPacket.write(Type.BYTE_ARRAY_PRIMITIVE, wrapper.read(Type.BYTE_ARRAY_PRIMITIVE));
|
||||||
|
}
|
||||||
|
|
||||||
|
final int blockLightLength = wrapper.read(Type.VAR_INT);
|
||||||
|
lightPacket.write(Type.VAR_INT, blockLightLength);
|
||||||
|
for (int i = 0; i < blockLightLength; i++) {
|
||||||
|
lightPacket.write(Type.BYTE_ARRAY_PRIMITIVE, wrapper.read(Type.BYTE_ARRAY_PRIMITIVE));
|
||||||
|
}
|
||||||
|
|
||||||
|
lightPacket.send(Protocol1_17_1To1_18.class);
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.cancelClientbound(ClientboundPackets1_18.SET_SIMULATION_DISTANCE);
|
protocol.cancelClientbound(ClientboundPackets1_18.SET_SIMULATION_DISTANCE);
|
||||||
|
@ -22,7 +22,7 @@ import com.viaversion.viabackwards.protocol.protocol1_17_1to1_18.Protocol1_17_1T
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
|
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.Particle;
|
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_17;
|
||||||
@ -44,9 +44,9 @@ public final class EntityPackets1_18 extends EntityRewriter<ClientboundPackets1_
|
|||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
registerMetadataRewriter(ClientboundPackets1_18.ENTITY_METADATA, Types1_18.METADATA_LIST, Types1_17.METADATA_LIST);
|
registerMetadataRewriter(ClientboundPackets1_18.ENTITY_METADATA, Types1_18.METADATA_LIST, Types1_17.METADATA_LIST);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_18.JOIN_GAME, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_18.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Entity ID
|
map(Type.INT); // Entity ID
|
||||||
map(Type.BOOLEAN); // Hardcore
|
map(Type.BOOLEAN); // Hardcore
|
||||||
map(Type.UNSIGNED_BYTE); // Gamemode
|
map(Type.UNSIGNED_BYTE); // Gamemode
|
||||||
@ -82,9 +82,9 @@ public final class EntityPackets1_18 extends EntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_18.RESPAWN, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_18.RESPAWN, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.NBT); // Dimension data
|
map(Type.NBT); // Dimension data
|
||||||
map(Type.STRING); // World
|
map(Type.STRING); // World
|
||||||
handler(worldDataTrackerHandler(0));
|
handler(worldDataTrackerHandler(0));
|
||||||
|
@ -23,7 +23,6 @@ import com.viaversion.viabackwards.protocol.protocol1_17to1_17_1.storage.Invento
|
|||||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
|
||||||
@ -45,139 +44,104 @@ public final class Protocol1_17To1_17_1 extends BackwardsProtocol<ClientboundPac
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
registerClientbound(ClientboundPackets1_17_1.REMOVE_ENTITIES, null, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_17_1.REMOVE_ENTITIES, null, wrapper -> {
|
||||||
@Override
|
int[] entityIds = wrapper.read(Type.VAR_INT_ARRAY_PRIMITIVE);
|
||||||
public void registerMap() {
|
wrapper.cancel();
|
||||||
handler(wrapper -> {
|
for (int entityId : entityIds) {
|
||||||
int[] entityIds = wrapper.read(Type.VAR_INT_ARRAY_PRIMITIVE);
|
// Send individual remove packets
|
||||||
wrapper.cancel();
|
PacketWrapper newPacket = wrapper.create(ClientboundPackets1_17.REMOVE_ENTITY);
|
||||||
for (int entityId : entityIds) {
|
newPacket.write(Type.VAR_INT, entityId);
|
||||||
// Send individual remove packets
|
newPacket.send(Protocol1_17To1_17_1.class);
|
||||||
PacketWrapper newPacket = wrapper.create(ClientboundPackets1_17.REMOVE_ENTITY);
|
|
||||||
newPacket.write(Type.VAR_INT, entityId);
|
|
||||||
newPacket.send(Protocol1_17To1_17_1.class);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_17_1.CLOSE_WINDOW, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_17_1.CLOSE_WINDOW, wrapper -> {
|
||||||
@Override
|
short containerId = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
public void registerMap() {
|
wrapper.user().get(InventoryStateIds.class).removeStateId(containerId);
|
||||||
handler(wrapper -> {
|
|
||||||
short containerId = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
|
||||||
wrapper.user().get(InventoryStateIds.class).removeStateId(containerId);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
registerClientbound(ClientboundPackets1_17_1.SET_SLOT, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_17_1.SET_SLOT, wrapper -> {
|
||||||
@Override
|
short containerId = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
public void registerMap() {
|
int stateId = wrapper.read(Type.VAR_INT);
|
||||||
handler(wrapper -> {
|
wrapper.user().get(InventoryStateIds.class).setStateId(containerId, stateId);
|
||||||
short containerId = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
|
||||||
int stateId = wrapper.read(Type.VAR_INT);
|
|
||||||
wrapper.user().get(InventoryStateIds.class).setStateId(containerId, stateId);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
registerClientbound(ClientboundPackets1_17_1.WINDOW_ITEMS, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_17_1.WINDOW_ITEMS, wrapper -> {
|
||||||
@Override
|
short containerId = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
public void registerMap() {
|
int stateId = wrapper.read(Type.VAR_INT);
|
||||||
handler(wrapper -> {
|
wrapper.user().get(InventoryStateIds.class).setStateId(containerId, stateId);
|
||||||
short containerId = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
|
||||||
int stateId = wrapper.read(Type.VAR_INT);
|
|
||||||
wrapper.user().get(InventoryStateIds.class).setStateId(containerId, stateId);
|
|
||||||
|
|
||||||
// Length is encoded as a var int in 1.17.1
|
// Length is encoded as a var int in 1.17.1
|
||||||
wrapper.write(Type.FLAT_VAR_INT_ITEM_ARRAY, wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT));
|
wrapper.write(Type.FLAT_VAR_INT_ITEM_ARRAY, wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT));
|
||||||
|
|
||||||
// Carried item - should work without adding it to the array above
|
// Carried item - should work without adding it to the array above
|
||||||
Item carried = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
Item carried = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
||||||
|
|
||||||
PlayerLastCursorItem lastCursorItem = wrapper.user().get(PlayerLastCursorItem.class);
|
PlayerLastCursorItem lastCursorItem = wrapper.user().get(PlayerLastCursorItem.class);
|
||||||
if (lastCursorItem != null) {
|
if (lastCursorItem != null) {
|
||||||
// For click drag ghost item fix -- since the state ID is always wrong,
|
// For click drag ghost item fix -- since the state ID is always wrong,
|
||||||
// the server always resends the entire window contents after a drag action,
|
// the server always resends the entire window contents after a drag action,
|
||||||
// which is useful since we need to update the carried item in preparation
|
// which is useful since we need to update the carried item in preparation
|
||||||
// for a subsequent drag
|
// for a subsequent drag
|
||||||
|
|
||||||
lastCursorItem.setLastCursorItem(carried);
|
lastCursorItem.setLastCursorItem(carried);
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_17.CLOSE_WINDOW, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_17.CLOSE_WINDOW, wrapper -> {
|
||||||
@Override
|
short containerId = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
public void registerMap() {
|
wrapper.user().get(InventoryStateIds.class).removeStateId(containerId);
|
||||||
handler(wrapper -> {
|
|
||||||
short containerId = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
|
||||||
wrapper.user().get(InventoryStateIds.class).removeStateId(containerId);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
registerServerbound(ServerboundPackets1_17.CLICK_WINDOW, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_17.CLICK_WINDOW, wrapper -> {
|
||||||
@Override
|
short containerId = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
public void registerMap() {
|
int stateId = wrapper.user().get(InventoryStateIds.class).removeStateId(containerId);
|
||||||
handler(wrapper -> {
|
wrapper.write(Type.VAR_INT, stateId == Integer.MAX_VALUE ? 0 : stateId);
|
||||||
short containerId = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
|
||||||
int stateId = wrapper.user().get(InventoryStateIds.class).removeStateId(containerId);
|
|
||||||
wrapper.write(Type.VAR_INT, stateId == Integer.MAX_VALUE ? 0 : stateId);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_17.EDIT_BOOK, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_17.EDIT_BOOK, wrapper -> {
|
||||||
@Override
|
Item item = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
||||||
public void registerMap() {
|
boolean signing = wrapper.read(Type.BOOLEAN);
|
||||||
handler(wrapper -> {
|
wrapper.passthrough(Type.VAR_INT); // Slot comes first
|
||||||
Item item = wrapper.read(Type.FLAT_VAR_INT_ITEM);
|
|
||||||
boolean signing = wrapper.read(Type.BOOLEAN);
|
|
||||||
wrapper.passthrough(Type.VAR_INT); // Slot comes first
|
|
||||||
|
|
||||||
CompoundTag tag = item.tag();
|
CompoundTag tag = item.tag();
|
||||||
ListTag pagesTag;
|
ListTag pagesTag;
|
||||||
StringTag titleTag = null;
|
StringTag titleTag = null;
|
||||||
// Sanity checks
|
// Sanity checks
|
||||||
if (tag == null || (pagesTag = tag.get("pages")) == null
|
if (tag == null || (pagesTag = tag.get("pages")) == null
|
||||||
|| (signing && (titleTag = tag.get("title")) == null)) {
|
|| (signing && (titleTag = tag.get("title")) == null)) {
|
||||||
wrapper.write(Type.VAR_INT, 0); // Pages length
|
wrapper.write(Type.VAR_INT, 0); // Pages length
|
||||||
wrapper.write(Type.BOOLEAN, false); // Optional title
|
wrapper.write(Type.BOOLEAN, false); // Optional title
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write pages - limit them first
|
// Write pages - limit them first
|
||||||
if (pagesTag.size() > MAX_PAGES) {
|
if (pagesTag.size() > MAX_PAGES) {
|
||||||
pagesTag = new ListTag(pagesTag.getValue().subList(0, MAX_PAGES));
|
pagesTag = new ListTag(pagesTag.getValue().subList(0, MAX_PAGES));
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.write(Type.VAR_INT, pagesTag.size());
|
wrapper.write(Type.VAR_INT, pagesTag.size());
|
||||||
for (Tag pageTag : pagesTag) {
|
for (Tag pageTag : pagesTag) {
|
||||||
String page = ((StringTag) pageTag).getValue();
|
String page = ((StringTag) pageTag).getValue();
|
||||||
// Limit page length
|
// Limit page length
|
||||||
if (page.length() > MAX_PAGE_LENGTH) {
|
if (page.length() > MAX_PAGE_LENGTH) {
|
||||||
page = page.substring(0, MAX_PAGE_LENGTH);
|
page = page.substring(0, MAX_PAGE_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.write(Type.STRING, page);
|
wrapper.write(Type.STRING, page);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write optional title
|
// Write optional title
|
||||||
wrapper.write(Type.BOOLEAN, signing);
|
wrapper.write(Type.BOOLEAN, signing);
|
||||||
if (signing) {
|
if (signing) {
|
||||||
if (titleTag == null) {
|
if (titleTag == null) {
|
||||||
titleTag = tag.get("title");
|
titleTag = tag.get("title");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Limit title length
|
// Limit title length
|
||||||
String title = titleTag.getValue();
|
String title = titleTag.getValue();
|
||||||
if (title.length() > MAX_TITLE_LENGTH) {
|
if (title.length() > MAX_TITLE_LENGTH) {
|
||||||
title = title.substring(0, MAX_TITLE_LENGTH);
|
title = title.substring(0, MAX_TITLE_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.write(Type.STRING, title);
|
wrapper.write(Type.STRING, title);
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ import com.viaversion.viaversion.api.connection.UserConnection;
|
|||||||
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19Types;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State;
|
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||||
@ -86,9 +86,9 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
|
|||||||
|
|
||||||
final SoundRewriter<ClientboundPackets1_19> soundRewriter = new SoundRewriter<>(this);
|
final SoundRewriter<ClientboundPackets1_19> soundRewriter = new SoundRewriter<>(this);
|
||||||
soundRewriter.registerStopSound(ClientboundPackets1_19.STOP_SOUND);
|
soundRewriter.registerStopSound(ClientboundPackets1_19.STOP_SOUND);
|
||||||
registerClientbound(ClientboundPackets1_19.SOUND, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19.SOUND, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Sound id
|
map(Type.VAR_INT); // Sound id
|
||||||
map(Type.VAR_INT); // Source
|
map(Type.VAR_INT); // Source
|
||||||
map(Type.INT); // X
|
map(Type.INT); // X
|
||||||
@ -100,9 +100,9 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
|
|||||||
handler(soundRewriter.getSoundHandler());
|
handler(soundRewriter.getSoundHandler());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerClientbound(ClientboundPackets1_19.ENTITY_SOUND, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19.ENTITY_SOUND, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Sound id
|
map(Type.VAR_INT); // Sound id
|
||||||
map(Type.VAR_INT); // Source
|
map(Type.VAR_INT); // Source
|
||||||
map(Type.VAR_INT); // Entity id
|
map(Type.VAR_INT); // Entity id
|
||||||
@ -112,9 +112,9 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
|
|||||||
handler(soundRewriter.getSoundHandler());
|
handler(soundRewriter.getSoundHandler());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerClientbound(ClientboundPackets1_19.NAMED_SOUND, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19.NAMED_SOUND, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Sound name
|
map(Type.STRING); // Sound name
|
||||||
map(Type.VAR_INT); // Source
|
map(Type.VAR_INT); // Source
|
||||||
map(Type.INT); // X
|
map(Type.INT); // X
|
||||||
@ -141,51 +141,46 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
|
|||||||
new StatisticsRewriter<>(this).register(ClientboundPackets1_19.STATISTICS);
|
new StatisticsRewriter<>(this).register(ClientboundPackets1_19.STATISTICS);
|
||||||
|
|
||||||
final CommandRewriter<ClientboundPackets1_19> commandRewriter = new CommandRewriter1_19(this);
|
final CommandRewriter<ClientboundPackets1_19> commandRewriter = new CommandRewriter1_19(this);
|
||||||
registerClientbound(ClientboundPackets1_19.DECLARE_COMMANDS, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19.DECLARE_COMMANDS, wrapper -> {
|
||||||
@Override
|
final int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
for (int i = 0; i < size; i++) {
|
||||||
handler(wrapper -> {
|
final byte flags = wrapper.passthrough(Type.BYTE);
|
||||||
final int size = wrapper.passthrough(Type.VAR_INT);
|
wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE); // Children indices
|
||||||
for (int i = 0; i < size; i++) {
|
if ((flags & 0x08) != 0) {
|
||||||
final byte flags = wrapper.passthrough(Type.BYTE);
|
wrapper.passthrough(Type.VAR_INT); // Redirect node index
|
||||||
wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE); // Children indices
|
}
|
||||||
if ((flags & 0x08) != 0) {
|
|
||||||
wrapper.passthrough(Type.VAR_INT); // Redirect node index
|
|
||||||
}
|
|
||||||
|
|
||||||
final int nodeType = flags & 0x03;
|
final int nodeType = flags & 0x03;
|
||||||
if (nodeType == 1 || nodeType == 2) { // Literal/argument node
|
if (nodeType == 1 || nodeType == 2) { // Literal/argument node
|
||||||
wrapper.passthrough(Type.STRING); // Name
|
wrapper.passthrough(Type.STRING); // Name
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nodeType == 2) { // Argument node
|
if (nodeType == 2) { // Argument node
|
||||||
final int argumentTypeId = wrapper.read(Type.VAR_INT);
|
final int argumentTypeId = wrapper.read(Type.VAR_INT);
|
||||||
String argumentType = MAPPINGS.argumentType(argumentTypeId);
|
String argumentType = MAPPINGS.argumentType(argumentTypeId);
|
||||||
if (argumentType == null) {
|
if (argumentType == null) {
|
||||||
ViaBackwards.getPlatform().getLogger().warning("Unknown command argument type id: " + argumentTypeId);
|
ViaBackwards.getPlatform().getLogger().warning("Unknown command argument type id: " + argumentTypeId);
|
||||||
argumentType = "minecraft:no";
|
argumentType = "minecraft:no";
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.write(Type.STRING, commandRewriter.handleArgumentType(argumentType));
|
|
||||||
commandRewriter.handleArgument(wrapper, argumentType);
|
|
||||||
|
|
||||||
if ((flags & 0x10) != 0) {
|
|
||||||
wrapper.passthrough(Type.STRING); // Suggestion type
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.passthrough(Type.VAR_INT); // Root node index
|
wrapper.write(Type.STRING, commandRewriter.handleArgumentType(argumentType));
|
||||||
});
|
commandRewriter.handleArgument(wrapper, argumentType);
|
||||||
|
|
||||||
|
if ((flags & 0x10) != 0) {
|
||||||
|
wrapper.passthrough(Type.STRING); // Suggestion type
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.VAR_INT); // Root node index
|
||||||
});
|
});
|
||||||
|
|
||||||
cancelClientbound(ClientboundPackets1_19.SERVER_DATA);
|
cancelClientbound(ClientboundPackets1_19.SERVER_DATA);
|
||||||
cancelClientbound(ClientboundPackets1_19.CHAT_PREVIEW);
|
cancelClientbound(ClientboundPackets1_19.CHAT_PREVIEW);
|
||||||
cancelClientbound(ClientboundPackets1_19.SET_DISPLAY_CHAT_PREVIEW);
|
cancelClientbound(ClientboundPackets1_19.SET_DISPLAY_CHAT_PREVIEW);
|
||||||
registerClientbound(ClientboundPackets1_19.PLAYER_CHAT, ClientboundPackets1_18.CHAT_MESSAGE, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19.PLAYER_CHAT, ClientboundPackets1_18.CHAT_MESSAGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
final JsonElement signedContent = wrapper.read(Type.COMPONENT);
|
final JsonElement signedContent = wrapper.read(Type.COMPONENT);
|
||||||
final JsonElement unsignedContent = wrapper.read(Type.OPTIONAL_COMPONENT);
|
final JsonElement unsignedContent = wrapper.read(Type.OPTIONAL_COMPONENT);
|
||||||
@ -212,9 +207,9 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_19.SYSTEM_CHAT, ClientboundPackets1_18.CHAT_MESSAGE, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19.SYSTEM_CHAT, ClientboundPackets1_18.CHAT_MESSAGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
final JsonElement content = wrapper.passthrough(Type.COMPONENT);
|
final JsonElement content = wrapper.passthrough(Type.COMPONENT);
|
||||||
translatableRewriter.processText(content);
|
translatableRewriter.processText(content);
|
||||||
@ -227,9 +222,9 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_17.CHAT_MESSAGE, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_17.CHAT_MESSAGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Message
|
map(Type.STRING); // Message
|
||||||
handler(wrapper -> wrapper.write(Type.LONG, Instant.now().toEpochMilli())); // Timestamp
|
handler(wrapper -> wrapper.write(Type.LONG, Instant.now().toEpochMilli())); // Timestamp
|
||||||
create(Type.LONG, 0L); // Salt
|
create(Type.LONG, 0L); // Salt
|
||||||
@ -248,9 +243,9 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Login changes
|
// Login changes
|
||||||
registerClientbound(State.LOGIN, ClientboundLoginPackets.GAME_PROFILE.getId(), ClientboundLoginPackets.GAME_PROFILE.getId(), new PacketRemapper() {
|
registerClientbound(State.LOGIN, ClientboundLoginPackets.GAME_PROFILE.getId(), ClientboundLoginPackets.GAME_PROFILE.getId(), new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.UUID); // UUID
|
map(Type.UUID); // UUID
|
||||||
map(Type.STRING); // Name
|
map(Type.STRING); // Name
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
@ -266,18 +261,18 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(State.LOGIN, ServerboundLoginPackets.HELLO.getId(), ServerboundLoginPackets.HELLO.getId(), new PacketRemapper() {
|
registerServerbound(State.LOGIN, ServerboundLoginPackets.HELLO.getId(), ServerboundLoginPackets.HELLO.getId(), new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Name
|
map(Type.STRING); // Name
|
||||||
// Write empty profile key - requires the enforce-secure-profiles option to be disabled on the server
|
// Write empty profile key - requires the enforce-secure-profiles option to be disabled on the server
|
||||||
create(Type.OPTIONAL_PROFILE_KEY, null);
|
create(Type.OPTIONAL_PROFILE_KEY, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(State.LOGIN, ServerboundLoginPackets.ENCRYPTION_KEY.getId(), ServerboundLoginPackets.ENCRYPTION_KEY.getId(), new PacketRemapper() {
|
registerServerbound(State.LOGIN, ServerboundLoginPackets.ENCRYPTION_KEY.getId(), ServerboundLoginPackets.ENCRYPTION_KEY.getId(), new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.BYTE_ARRAY_PRIMITIVE); // Keys
|
map(Type.BYTE_ARRAY_PRIMITIVE); // Keys
|
||||||
create(Type.BOOLEAN, true); // Is nonce
|
create(Type.BOOLEAN, true); // Is nonce
|
||||||
}
|
}
|
||||||
|
@ -29,9 +29,8 @@ import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
|
|||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.Protocol1_19To1_18_2;
|
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.Protocol1_19To1_18_2;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public final class BackwardsMappings extends com.viaversion.viabackwards.api.data.BackwardsMappings {
|
public final class BackwardsMappings extends com.viaversion.viabackwards.api.data.BackwardsMappings {
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
|||||||
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.data.RecipeRewriter1_16;
|
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.data.RecipeRewriter1_16;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17;
|
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17;
|
||||||
@ -62,9 +62,9 @@ public final class BlockItemPackets1_19 extends ItemRewriter<ClientboundPackets1
|
|||||||
|
|
||||||
registerCreativeInvAction(ServerboundPackets1_17.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
|
registerCreativeInvAction(ServerboundPackets1_17.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19.TRADE_LIST, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19.TRADE_LIST, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Container id
|
map(Type.VAR_INT); // Container id
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
final int size = wrapper.read(Type.VAR_INT);
|
final int size = wrapper.read(Type.VAR_INT);
|
||||||
@ -96,17 +96,17 @@ public final class BlockItemPackets1_19 extends ItemRewriter<ClientboundPackets1
|
|||||||
|
|
||||||
registerWindowPropertyEnchantmentHandler(ClientboundPackets1_19.WINDOW_PROPERTY);
|
registerWindowPropertyEnchantmentHandler(ClientboundPackets1_19.WINDOW_PROPERTY);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19.BLOCK_CHANGED_ACK, null, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19.BLOCK_CHANGED_ACK, null, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
read(Type.VAR_INT); // Sequence
|
read(Type.VAR_INT); // Sequence
|
||||||
handler(PacketWrapper::cancel); // This is fine:tm:
|
handler(PacketWrapper::cancel); // This is fine:tm:
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19.SPAWN_PARTICLE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19.SPAWN_PARTICLE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT, Type.INT); // Particle id
|
map(Type.VAR_INT, Type.INT); // Particle id
|
||||||
map(Type.BOOLEAN); // Override limiter
|
map(Type.BOOLEAN); // Override limiter
|
||||||
map(Type.DOUBLE); // X
|
map(Type.DOUBLE); // X
|
||||||
@ -139,39 +139,34 @@ public final class BlockItemPackets1_19 extends ItemRewriter<ClientboundPackets1
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19.CHUNK_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19.CHUNK_DATA, wrapper -> {
|
||||||
@Override
|
final EntityTracker tracker = protocol.getEntityRewriter().tracker(wrapper.user());
|
||||||
public void registerMap() {
|
final Chunk1_18Type chunkType = new Chunk1_18Type(tracker.currentWorldSectionHeight(),
|
||||||
handler(wrapper -> {
|
MathUtil.ceilLog2(protocol.getMappingData().getBlockStateMappings().mappedSize()),
|
||||||
final EntityTracker tracker = protocol.getEntityRewriter().tracker(wrapper.user());
|
MathUtil.ceilLog2(tracker.biomesSent()));
|
||||||
final Chunk1_18Type chunkType = new Chunk1_18Type(tracker.currentWorldSectionHeight(),
|
final Chunk chunk = wrapper.passthrough(chunkType);
|
||||||
MathUtil.ceilLog2(protocol.getMappingData().getBlockStateMappings().mappedSize()),
|
for (final ChunkSection section : chunk.getSections()) {
|
||||||
MathUtil.ceilLog2(tracker.biomesSent()));
|
final DataPalette blockPalette = section.palette(PaletteType.BLOCKS);
|
||||||
final Chunk chunk = wrapper.passthrough(chunkType);
|
for (int i = 0; i < blockPalette.size(); i++) {
|
||||||
for (final ChunkSection section : chunk.getSections()) {
|
final int id = blockPalette.idByIndex(i);
|
||||||
final DataPalette blockPalette = section.palette(PaletteType.BLOCKS);
|
blockPalette.setIdByIndex(i, protocol.getMappingData().getNewBlockStateId(id));
|
||||||
for (int i = 0; i < blockPalette.size(); i++) {
|
}
|
||||||
final int id = blockPalette.idByIndex(i);
|
|
||||||
blockPalette.setIdByIndex(i, protocol.getMappingData().getNewBlockStateId(id));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// The server does nothing but track the sequence, so we can just set it as 0
|
// The server does nothing but track the sequence, so we can just set it as 0
|
||||||
protocol.registerServerbound(ServerboundPackets1_17.PLAYER_DIGGING, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_17.PLAYER_DIGGING, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Action
|
map(Type.VAR_INT); // Action
|
||||||
map(Type.POSITION1_14); // Block position
|
map(Type.POSITION1_14); // Block position
|
||||||
map(Type.UNSIGNED_BYTE); // Direction
|
map(Type.UNSIGNED_BYTE); // Direction
|
||||||
create(Type.VAR_INT, 0); // Sequence
|
create(Type.VAR_INT, 0); // Sequence
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
protocol.registerServerbound(ServerboundPackets1_17.PLAYER_BLOCK_PLACEMENT, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_17.PLAYER_BLOCK_PLACEMENT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Hand
|
map(Type.VAR_INT); // Hand
|
||||||
map(Type.POSITION1_14); // Block position
|
map(Type.POSITION1_14); // Block position
|
||||||
map(Type.VAR_INT); // Direction
|
map(Type.VAR_INT); // Direction
|
||||||
@ -182,34 +177,29 @@ public final class BlockItemPackets1_19 extends ItemRewriter<ClientboundPackets1
|
|||||||
create(Type.VAR_INT, 0); // Sequence
|
create(Type.VAR_INT, 0); // Sequence
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
protocol.registerServerbound(ServerboundPackets1_17.USE_ITEM, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_17.USE_ITEM, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Hand
|
map(Type.VAR_INT); // Hand
|
||||||
create(Type.VAR_INT, 0); // Sequence
|
create(Type.VAR_INT, 0); // Sequence
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_17.SET_BEACON_EFFECT, new PacketRemapper() {
|
protocol.registerServerbound(ServerboundPackets1_17.SET_BEACON_EFFECT, wrapper -> {
|
||||||
@Override
|
final int primaryEffect = wrapper.read(Type.VAR_INT);
|
||||||
public void registerMap() {
|
if (primaryEffect != -1) {
|
||||||
handler(wrapper -> {
|
wrapper.write(Type.BOOLEAN, true);
|
||||||
final int primaryEffect = wrapper.read(Type.VAR_INT);
|
wrapper.write(Type.VAR_INT, primaryEffect);
|
||||||
if (primaryEffect != -1) {
|
} else {
|
||||||
wrapper.write(Type.BOOLEAN, true);
|
wrapper.write(Type.BOOLEAN, false);
|
||||||
wrapper.write(Type.VAR_INT, primaryEffect);
|
}
|
||||||
} else {
|
|
||||||
wrapper.write(Type.BOOLEAN, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
final int secondaryEffect = wrapper.read(Type.VAR_INT);
|
final int secondaryEffect = wrapper.read(Type.VAR_INT);
|
||||||
if (secondaryEffect != -1) {
|
if (secondaryEffect != -1) {
|
||||||
wrapper.write(Type.BOOLEAN, true);
|
wrapper.write(Type.BOOLEAN, true);
|
||||||
wrapper.write(Type.VAR_INT, secondaryEffect);
|
wrapper.write(Type.VAR_INT, secondaryEffect);
|
||||||
} else {
|
} else {
|
||||||
wrapper.write(Type.BOOLEAN, false);
|
wrapper.write(Type.BOOLEAN, false);
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ import com.viaversion.viaversion.api.minecraft.entities.Entity1_19Types;
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
|
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.Particle;
|
import com.viaversion.viaversion.api.type.types.Particle;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_18;
|
import com.viaversion.viaversion.api.type.types.version.Types1_18;
|
||||||
@ -54,9 +54,9 @@ public final class EntityPackets1_19 extends EntityRewriter<ClientboundPackets1_
|
|||||||
registerMetadataRewriter(ClientboundPackets1_19.ENTITY_METADATA, Types1_19.METADATA_LIST, Types1_18.METADATA_LIST);
|
registerMetadataRewriter(ClientboundPackets1_19.ENTITY_METADATA, Types1_19.METADATA_LIST, Types1_18.METADATA_LIST);
|
||||||
registerRemoveEntities(ClientboundPackets1_19.REMOVE_ENTITIES);
|
registerRemoveEntities(ClientboundPackets1_19.REMOVE_ENTITIES);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19.SPAWN_ENTITY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19.SPAWN_ENTITY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Entity id
|
map(Type.VAR_INT); // Entity id
|
||||||
map(Type.UUID); // Entity UUID
|
map(Type.UUID); // Entity UUID
|
||||||
map(Type.VAR_INT); // Entity Type
|
map(Type.VAR_INT); // Entity Type
|
||||||
@ -98,9 +98,9 @@ public final class EntityPackets1_19 extends EntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19.ENTITY_EFFECT, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19.ENTITY_EFFECT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Entity id
|
map(Type.VAR_INT); // Entity id
|
||||||
map(Type.VAR_INT); // Effect id
|
map(Type.VAR_INT); // Effect id
|
||||||
map(Type.BYTE); // Amplifier
|
map(Type.BYTE); // Amplifier
|
||||||
@ -115,9 +115,9 @@ public final class EntityPackets1_19 extends EntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19.JOIN_GAME, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Entity ID
|
map(Type.INT); // Entity ID
|
||||||
map(Type.BOOLEAN); // Hardcore
|
map(Type.BOOLEAN); // Hardcore
|
||||||
map(Type.UNSIGNED_BYTE); // Gamemode
|
map(Type.UNSIGNED_BYTE); // Gamemode
|
||||||
@ -180,9 +180,9 @@ public final class EntityPackets1_19 extends EntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19.RESPAWN, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19.RESPAWN, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
final String dimensionKey = wrapper.read(Type.STRING);
|
final String dimensionKey = wrapper.read(Type.STRING);
|
||||||
final CompoundTag dimension = wrapper.user().get(DimensionRegistryStorage.class).dimension(dimensionKey);
|
final CompoundTag dimension = wrapper.user().get(DimensionRegistryStorage.class).dimension(dimensionKey);
|
||||||
@ -204,37 +204,32 @@ public final class EntityPackets1_19 extends EntityRewriter<ClientboundPackets1_
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19.PLAYER_INFO, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19.PLAYER_INFO, wrapper -> {
|
||||||
@Override
|
final int action = wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
final int entries = wrapper.passthrough(Type.VAR_INT);
|
||||||
handler(wrapper -> {
|
for (int i = 0; i < entries; i++) {
|
||||||
final int action = wrapper.passthrough(Type.VAR_INT);
|
wrapper.passthrough(Type.UUID); // UUID
|
||||||
final int entries = wrapper.passthrough(Type.VAR_INT);
|
if (action == 0) { // Add player
|
||||||
for (int i = 0; i < entries; i++) {
|
wrapper.passthrough(Type.STRING); // Player Name
|
||||||
wrapper.passthrough(Type.UUID); // UUID
|
|
||||||
if (action == 0) { // Add player
|
|
||||||
wrapper.passthrough(Type.STRING); // Player Name
|
|
||||||
|
|
||||||
final int properties = wrapper.passthrough(Type.VAR_INT);
|
final int properties = wrapper.passthrough(Type.VAR_INT);
|
||||||
for (int j = 0; j < properties; j++) {
|
for (int j = 0; j < properties; j++) {
|
||||||
wrapper.passthrough(Type.STRING); // Name
|
wrapper.passthrough(Type.STRING); // Name
|
||||||
wrapper.passthrough(Type.STRING); // Value
|
wrapper.passthrough(Type.STRING); // Value
|
||||||
wrapper.passthrough(Type.OPTIONAL_STRING); // Signature
|
wrapper.passthrough(Type.OPTIONAL_STRING); // Signature
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.passthrough(Type.VAR_INT); // Gamemode
|
|
||||||
wrapper.passthrough(Type.VAR_INT); // Ping
|
|
||||||
wrapper.passthrough(Type.OPTIONAL_COMPONENT); // Display name
|
|
||||||
|
|
||||||
// Remove public profile signature
|
|
||||||
wrapper.read(Type.OPTIONAL_PROFILE_KEY);
|
|
||||||
} else if (action == 1 || action == 2) { // Update gamemode/update latency
|
|
||||||
wrapper.passthrough(Type.VAR_INT);
|
|
||||||
} else if (action == 3) { // Update display name
|
|
||||||
wrapper.passthrough(Type.OPTIONAL_COMPONENT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
wrapper.passthrough(Type.VAR_INT); // Gamemode
|
||||||
|
wrapper.passthrough(Type.VAR_INT); // Ping
|
||||||
|
wrapper.passthrough(Type.OPTIONAL_COMPONENT); // Display name
|
||||||
|
|
||||||
|
// Remove public profile signature
|
||||||
|
wrapper.read(Type.OPTIONAL_PROFILE_KEY);
|
||||||
|
} else if (action == 1 || action == 2) { // Update gamemode/update latency
|
||||||
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
|
} else if (action == 3) { // Update display name
|
||||||
|
wrapper.passthrough(Type.OPTIONAL_COMPONENT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -22,10 +22,9 @@ import com.viaversion.viaversion.api.connection.StorableObject;
|
|||||||
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
|
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
|
||||||
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap;
|
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public final class DimensionRegistryStorage implements StorableObject {
|
public final class DimensionRegistryStorage implements StorableObject {
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@ package com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.storage;
|
|||||||
|
|
||||||
import com.viaversion.viaversion.api.connection.StorableObject;
|
import com.viaversion.viaversion.api.connection.StorableObject;
|
||||||
import com.viaversion.viaversion.api.minecraft.Position;
|
import com.viaversion.viaversion.api.minecraft.Position;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public final class StoredPainting implements StorableObject {
|
public final class StoredPainting implements StorableObject {
|
||||||
|
@ -22,7 +22,7 @@ import com.viaversion.viabackwards.api.BackwardsProtocol;
|
|||||||
import com.viaversion.viabackwards.protocol.protocol1_18to1_18_2.data.CommandRewriter1_18_2;
|
import com.viaversion.viabackwards.protocol.protocol1_18to1_18_2.data.CommandRewriter1_18_2;
|
||||||
import com.viaversion.viaversion.api.Via;
|
import com.viaversion.viaversion.api.Via;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
|
||||||
@ -53,25 +53,25 @@ public final class Protocol1_18To1_18_2 extends BackwardsProtocol<ClientboundPac
|
|||||||
|
|
||||||
wrapper.write(Type.BYTE, (byte) id);
|
wrapper.write(Type.BYTE, (byte) id);
|
||||||
};
|
};
|
||||||
registerClientbound(ClientboundPackets1_18.ENTITY_EFFECT, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_18.ENTITY_EFFECT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Entity id
|
map(Type.VAR_INT); // Entity id
|
||||||
handler(entityEffectIdHandler);
|
handler(entityEffectIdHandler);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_18.REMOVE_ENTITY_EFFECT, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_18.REMOVE_ENTITY_EFFECT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Entity id
|
map(Type.VAR_INT); // Entity id
|
||||||
handler(entityEffectIdHandler);
|
handler(entityEffectIdHandler);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_18.JOIN_GAME, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_18.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Entity ID
|
map(Type.INT); // Entity ID
|
||||||
map(Type.BOOLEAN); // Hardcore
|
map(Type.BOOLEAN); // Hardcore
|
||||||
map(Type.UNSIGNED_BYTE); // Gamemode
|
map(Type.UNSIGNED_BYTE); // Gamemode
|
||||||
@ -92,12 +92,7 @@ public final class Protocol1_18To1_18_2 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_18.RESPAWN, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_18.RESPAWN, wrapper -> removeTagPrefix(wrapper.passthrough(Type.NBT)));
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> removeTagPrefix(wrapper.passthrough(Type.NBT)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeTagPrefix(CompoundTag tag) {
|
private void removeTagPrefix(CompoundTag tag) {
|
||||||
|
@ -33,7 +33,7 @@ import com.viaversion.viaversion.api.minecraft.ProfileKey;
|
|||||||
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_3Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_3Types;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State;
|
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.BitSetType;
|
import com.viaversion.viaversion.api.type.types.BitSetType;
|
||||||
import com.viaversion.viaversion.api.type.types.ByteArrayType;
|
import com.viaversion.viaversion.api.type.types.ByteArrayType;
|
||||||
@ -90,76 +90,66 @@ public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundP
|
|||||||
|
|
||||||
final SoundRewriter<ClientboundPackets1_19_3> soundRewriter = new SoundRewriter<>(this);
|
final SoundRewriter<ClientboundPackets1_19_3> soundRewriter = new SoundRewriter<>(this);
|
||||||
soundRewriter.registerStopSound(ClientboundPackets1_19_3.STOP_SOUND);
|
soundRewriter.registerStopSound(ClientboundPackets1_19_3.STOP_SOUND);
|
||||||
registerClientbound(ClientboundPackets1_19_3.SOUND, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19_3.SOUND, wrapper -> {
|
||||||
@Override
|
final int soundId = wrapper.read(Type.VAR_INT) - 1; // Normalize the id
|
||||||
public void registerMap() {
|
if (soundId != -1) {
|
||||||
handler(wrapper -> {
|
final int mappedId = MAPPINGS.getSoundMappings().getNewId(soundId);
|
||||||
final int soundId = wrapper.read(Type.VAR_INT) - 1; // Normalize the id
|
if (mappedId == -1) {
|
||||||
if (soundId != -1) {
|
wrapper.cancel();
|
||||||
final int mappedId = MAPPINGS.getSoundMappings().getNewId(soundId);
|
return;
|
||||||
if (mappedId == -1) {
|
}
|
||||||
wrapper.cancel();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.write(Type.VAR_INT, mappedId);
|
wrapper.write(Type.VAR_INT, mappedId);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
String soundIdentifier = wrapper.read(Type.STRING);
|
|
||||||
wrapper.read(Type.OPTIONAL_FLOAT); // Fixed range
|
|
||||||
final String mappedIdentifier = MAPPINGS.getMappedNamedSound(soundIdentifier);
|
|
||||||
if (mappedIdentifier != null) {
|
|
||||||
if (mappedIdentifier.isEmpty()) {
|
|
||||||
wrapper.cancel();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
soundIdentifier = mappedIdentifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.write(Type.STRING, soundIdentifier);
|
|
||||||
wrapper.setPacketType(ClientboundPackets1_19_1.NAMED_SOUND);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String soundIdentifier = wrapper.read(Type.STRING);
|
||||||
|
wrapper.read(Type.OPTIONAL_FLOAT); // Fixed range
|
||||||
|
final String mappedIdentifier = MAPPINGS.getMappedNamedSound(soundIdentifier);
|
||||||
|
if (mappedIdentifier != null) {
|
||||||
|
if (mappedIdentifier.isEmpty()) {
|
||||||
|
wrapper.cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
soundIdentifier = mappedIdentifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapper.write(Type.STRING, soundIdentifier);
|
||||||
|
wrapper.setPacketType(ClientboundPackets1_19_1.NAMED_SOUND);
|
||||||
});
|
});
|
||||||
registerClientbound(ClientboundPackets1_19_3.ENTITY_SOUND, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19_3.ENTITY_SOUND, wrapper -> {
|
||||||
@Override
|
final int soundId = wrapper.read(Type.VAR_INT) - 1; // Normalize the id
|
||||||
public void registerMap() {
|
if (soundId != -1) {
|
||||||
handler(wrapper -> {
|
final int mappedId = MAPPINGS.getSoundMappings().getNewId(soundId);
|
||||||
final int soundId = wrapper.read(Type.VAR_INT) - 1; // Normalize the id
|
if (mappedId == -1) {
|
||||||
if (soundId != -1) {
|
wrapper.cancel();
|
||||||
final int mappedId = MAPPINGS.getSoundMappings().getNewId(soundId);
|
return;
|
||||||
if (mappedId == -1) {
|
}
|
||||||
wrapper.cancel();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.write(Type.VAR_INT, mappedId);
|
wrapper.write(Type.VAR_INT, mappedId);
|
||||||
}
|
|
||||||
|
|
||||||
// Convert the resource location to the corresponding integer id
|
|
||||||
String soundIdentifier = wrapper.read(Type.STRING);
|
|
||||||
wrapper.read(Type.OPTIONAL_FLOAT); // Fixed range
|
|
||||||
final String mappedIdentifier = MAPPINGS.getMappedNamedSound(soundIdentifier);
|
|
||||||
if (mappedIdentifier != null) {
|
|
||||||
if (mappedIdentifier.isEmpty()) {
|
|
||||||
wrapper.cancel();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
soundIdentifier = mappedIdentifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
final int mappedId = MAPPINGS.mappedSound(soundIdentifier);
|
|
||||||
if (mappedId == -1) {
|
|
||||||
wrapper.cancel();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.write(Type.VAR_INT, mappedId);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Convert the resource location to the corresponding integer id
|
||||||
|
String soundIdentifier = wrapper.read(Type.STRING);
|
||||||
|
wrapper.read(Type.OPTIONAL_FLOAT); // Fixed range
|
||||||
|
final String mappedIdentifier = MAPPINGS.getMappedNamedSound(soundIdentifier);
|
||||||
|
if (mappedIdentifier != null) {
|
||||||
|
if (mappedIdentifier.isEmpty()) {
|
||||||
|
wrapper.cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
soundIdentifier = mappedIdentifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int mappedId = MAPPINGS.mappedSound(soundIdentifier);
|
||||||
|
if (mappedId == -1) {
|
||||||
|
wrapper.cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapper.write(Type.VAR_INT, mappedId);
|
||||||
});
|
});
|
||||||
|
|
||||||
final TagRewriter<ClientboundPackets1_19_3> tagRewriter = new TagRewriter<>(this);
|
final TagRewriter<ClientboundPackets1_19_3> tagRewriter = new TagRewriter<>(this);
|
||||||
@ -170,49 +160,44 @@ public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundP
|
|||||||
new StatisticsRewriter<>(this).register(ClientboundPackets1_19_3.STATISTICS);
|
new StatisticsRewriter<>(this).register(ClientboundPackets1_19_3.STATISTICS);
|
||||||
|
|
||||||
final CommandRewriter<ClientboundPackets1_19_3> commandRewriter = new CommandRewriter<>(this);
|
final CommandRewriter<ClientboundPackets1_19_3> commandRewriter = new CommandRewriter<>(this);
|
||||||
registerClientbound(ClientboundPackets1_19_3.DECLARE_COMMANDS, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19_3.DECLARE_COMMANDS, wrapper -> {
|
||||||
@Override
|
final int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
for (int i = 0; i < size; i++) {
|
||||||
handler(wrapper -> {
|
final byte flags = wrapper.passthrough(Type.BYTE);
|
||||||
final int size = wrapper.passthrough(Type.VAR_INT);
|
wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE); // Children indices
|
||||||
for (int i = 0; i < size; i++) {
|
if ((flags & 0x08) != 0) {
|
||||||
final byte flags = wrapper.passthrough(Type.BYTE);
|
wrapper.passthrough(Type.VAR_INT); // Redirect node index
|
||||||
wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE); // Children indices
|
}
|
||||||
if ((flags & 0x08) != 0) {
|
|
||||||
wrapper.passthrough(Type.VAR_INT); // Redirect node index
|
|
||||||
}
|
|
||||||
|
|
||||||
final int nodeType = flags & 0x03;
|
final int nodeType = flags & 0x03;
|
||||||
if (nodeType == 1 || nodeType == 2) { // Literal/argument node
|
if (nodeType == 1 || nodeType == 2) { // Literal/argument node
|
||||||
wrapper.passthrough(Type.STRING); // Name
|
wrapper.passthrough(Type.STRING); // Name
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nodeType == 2) { // Argument node
|
if (nodeType == 2) { // Argument node
|
||||||
final int argumentTypeId = wrapper.read(Type.VAR_INT);
|
final int argumentTypeId = wrapper.read(Type.VAR_INT);
|
||||||
final int mappedArgumentTypeId = MAPPINGS.getArgumentTypeMappings().mappings().getNewId(argumentTypeId);
|
final int mappedArgumentTypeId = MAPPINGS.getArgumentTypeMappings().mappings().getNewId(argumentTypeId);
|
||||||
Preconditions.checkArgument(mappedArgumentTypeId != -1, "Unknown command argument type id: " + argumentTypeId);
|
Preconditions.checkArgument(mappedArgumentTypeId != -1, "Unknown command argument type id: " + argumentTypeId);
|
||||||
wrapper.write(Type.VAR_INT, mappedArgumentTypeId);
|
wrapper.write(Type.VAR_INT, mappedArgumentTypeId);
|
||||||
|
|
||||||
final String identifier = MAPPINGS.getArgumentTypeMappings().identifier(argumentTypeId);
|
final String identifier = MAPPINGS.getArgumentTypeMappings().identifier(argumentTypeId);
|
||||||
commandRewriter.handleArgument(wrapper, identifier);
|
commandRewriter.handleArgument(wrapper, identifier);
|
||||||
if (identifier.equals("minecraft:gamemode")) {
|
if (identifier.equals("minecraft:gamemode")) {
|
||||||
wrapper.write(Type.VAR_INT, 0); // Word
|
wrapper.write(Type.VAR_INT, 0); // Word
|
||||||
}
|
|
||||||
|
|
||||||
if ((flags & 0x10) != 0) {
|
|
||||||
wrapper.passthrough(Type.STRING); // Suggestion type
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.passthrough(Type.VAR_INT); // Root node index
|
if ((flags & 0x10) != 0) {
|
||||||
});
|
wrapper.passthrough(Type.STRING); // Suggestion type
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.VAR_INT); // Root node index
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_19_3.SERVER_DATA, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19_3.SERVER_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.OPTIONAL_COMPONENT); // Motd
|
map(Type.OPTIONAL_COMPONENT); // Motd
|
||||||
map(Type.OPTIONAL_STRING); // Encoded icon
|
map(Type.OPTIONAL_STRING); // Encoded icon
|
||||||
create(Type.BOOLEAN, false); // Previews chat
|
create(Type.BOOLEAN, false); // Previews chat
|
||||||
@ -220,9 +205,9 @@ public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundP
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Remove the key once again
|
// Remove the key once again
|
||||||
registerServerbound(State.LOGIN, ServerboundLoginPackets.HELLO.getId(), ServerboundLoginPackets.HELLO.getId(), new PacketRemapper() {
|
registerServerbound(State.LOGIN, ServerboundLoginPackets.HELLO.getId(), ServerboundLoginPackets.HELLO.getId(), new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Name
|
map(Type.STRING); // Name
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
final ProfileKey profileKey = wrapper.read(Type.OPTIONAL_PROFILE_KEY);
|
final ProfileKey profileKey = wrapper.read(Type.OPTIONAL_PROFILE_KEY);
|
||||||
@ -232,9 +217,9 @@ public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundP
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerClientbound(State.LOGIN, ClientboundLoginPackets.HELLO.getId(), ClientboundLoginPackets.HELLO.getId(), new PacketRemapper() {
|
registerClientbound(State.LOGIN, ClientboundLoginPackets.HELLO.getId(), ClientboundLoginPackets.HELLO.getId(), new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Server id
|
map(Type.STRING); // Server id
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
if (wrapper.user().has(NonceStorage.class)) {
|
if (wrapper.user().has(NonceStorage.class)) {
|
||||||
@ -246,9 +231,9 @@ public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundP
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerServerbound(State.LOGIN, ServerboundLoginPackets.ENCRYPTION_KEY.getId(), ServerboundLoginPackets.ENCRYPTION_KEY.getId(), new PacketRemapper() {
|
registerServerbound(State.LOGIN, ServerboundLoginPackets.ENCRYPTION_KEY.getId(), ServerboundLoginPackets.ENCRYPTION_KEY.getId(), new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.BYTE_ARRAY_PRIMITIVE); // Keys
|
map(Type.BYTE_ARRAY_PRIMITIVE); // Keys
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
final NonceStorage nonceStorage = wrapper.user().remove(NonceStorage.class);
|
final NonceStorage nonceStorage = wrapper.user().remove(NonceStorage.class);
|
||||||
@ -262,9 +247,9 @@ public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundP
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_19_1.CHAT_MESSAGE, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_19_1.CHAT_MESSAGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Message
|
map(Type.STRING); // Message
|
||||||
map(Type.LONG); // Timestamp
|
map(Type.LONG); // Timestamp
|
||||||
map(Type.LONG); // Salt
|
map(Type.LONG); // Salt
|
||||||
@ -282,9 +267,9 @@ public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundP
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerServerbound(ServerboundPackets1_19_1.CHAT_COMMAND, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_19_1.CHAT_COMMAND, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Command
|
map(Type.STRING); // Command
|
||||||
map(Type.LONG); // Timestamp
|
map(Type.LONG); // Timestamp
|
||||||
map(Type.LONG); // Salt
|
map(Type.LONG); // Salt
|
||||||
@ -306,9 +291,9 @@ public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundP
|
|||||||
read(Type.OPTIONAL_PLAYER_MESSAGE_SIGNATURE); // Last received message
|
read(Type.OPTIONAL_PLAYER_MESSAGE_SIGNATURE); // Last received message
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerClientbound(ClientboundPackets1_19_3.PLAYER_CHAT, ClientboundPackets1_19_1.SYSTEM_CHAT, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19_3.PLAYER_CHAT, ClientboundPackets1_19_1.SYSTEM_CHAT, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
read(Type.UUID); // Sender
|
read(Type.UUID); // Sender
|
||||||
read(Type.VAR_INT); // Index
|
read(Type.VAR_INT); // Index
|
||||||
read(OPTIONAL_SIGNATURE_BYTES_TYPE); // Signature
|
read(OPTIONAL_SIGNATURE_BYTES_TYPE); // Signature
|
||||||
@ -346,25 +331,20 @@ public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundP
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerClientbound(ClientboundPackets1_19_3.DISGUISED_CHAT, ClientboundPackets1_19_1.SYSTEM_CHAT, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19_3.DISGUISED_CHAT, ClientboundPackets1_19_1.SYSTEM_CHAT, wrapper -> {
|
||||||
@Override
|
final JsonElement content = wrapper.read(Type.COMPONENT);
|
||||||
public void registerMap() {
|
translatableRewriter.processText(content);
|
||||||
handler(wrapper -> {
|
final int chatTypeId = wrapper.read(Type.VAR_INT);
|
||||||
final JsonElement content = wrapper.read(Type.COMPONENT);
|
final JsonElement senderName = wrapper.read(Type.COMPONENT);
|
||||||
translatableRewriter.processText(content);
|
final JsonElement targetName = wrapper.read(Type.OPTIONAL_COMPONENT);
|
||||||
final int chatTypeId = wrapper.read(Type.VAR_INT);
|
final JsonElement result = Protocol1_19To1_19_1.decorateChatMessage(wrapper.user().get(ChatTypeStorage1_19_3.class), chatTypeId, senderName, targetName, content);
|
||||||
final JsonElement senderName = wrapper.read(Type.COMPONENT);
|
if (result == null) {
|
||||||
final JsonElement targetName = wrapper.read(Type.OPTIONAL_COMPONENT);
|
wrapper.cancel();
|
||||||
final JsonElement result = Protocol1_19To1_19_1.decorateChatMessage(wrapper.user().get(ChatTypeStorage1_19_3.class), chatTypeId, senderName, targetName, content);
|
return;
|
||||||
if (result == null) {
|
|
||||||
wrapper.cancel();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.write(Type.COMPONENT, result);
|
|
||||||
wrapper.write(Type.BOOLEAN, false);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.write(Type.COMPONENT, result);
|
||||||
|
wrapper.write(Type.BOOLEAN, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
cancelClientbound(ClientboundPackets1_19_3.UPDATE_ENABLED_FEATURES);
|
cancelClientbound(ClientboundPackets1_19_3.UPDATE_ENABLED_FEATURES);
|
||||||
|
@ -20,7 +20,7 @@ package com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.packets;
|
|||||||
import com.viaversion.viabackwards.api.rewriters.ItemRewriter;
|
import com.viaversion.viabackwards.api.rewriters.ItemRewriter;
|
||||||
import com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.Protocol1_19_1To1_19_3;
|
import com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.Protocol1_19_1To1_19_3;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.data.RecipeRewriter1_16;
|
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.data.RecipeRewriter1_16;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.types.Chunk1_18Type;
|
import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.types.Chunk1_18Type;
|
||||||
@ -55,9 +55,9 @@ public final class BlockItemPackets1_19_3 extends ItemRewriter<ClientboundPacket
|
|||||||
registerWindowPropertyEnchantmentHandler(ClientboundPackets1_19_3.WINDOW_PROPERTY);
|
registerWindowPropertyEnchantmentHandler(ClientboundPackets1_19_3.WINDOW_PROPERTY);
|
||||||
registerSpawnParticle1_19(ClientboundPackets1_19_3.SPAWN_PARTICLE);
|
registerSpawnParticle1_19(ClientboundPackets1_19_3.SPAWN_PARTICLE);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19_3.EXPLOSION, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19_3.EXPLOSION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.DOUBLE, Type.FLOAT); // X
|
map(Type.DOUBLE, Type.FLOAT); // X
|
||||||
map(Type.DOUBLE, Type.FLOAT); // Y
|
map(Type.DOUBLE, Type.FLOAT); // Y
|
||||||
map(Type.DOUBLE, Type.FLOAT); // Z
|
map(Type.DOUBLE, Type.FLOAT); // Z
|
||||||
@ -65,76 +65,71 @@ public final class BlockItemPackets1_19_3 extends ItemRewriter<ClientboundPacket
|
|||||||
});
|
});
|
||||||
|
|
||||||
final RecipeRewriter1_16<ClientboundPackets1_19_3> recipeRewriter = new RecipeRewriter1_16<>(protocol);
|
final RecipeRewriter1_16<ClientboundPackets1_19_3> recipeRewriter = new RecipeRewriter1_16<>(protocol);
|
||||||
protocol.registerClientbound(ClientboundPackets1_19_3.DECLARE_RECIPES, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19_3.DECLARE_RECIPES, wrapper -> {
|
||||||
@Override
|
final int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
public void registerMap() {
|
for (int i = 0; i < size; i++) {
|
||||||
handler(wrapper -> {
|
final String type = wrapper.passthrough(Type.STRING).replace("minecraft:", "");
|
||||||
final int size = wrapper.passthrough(Type.VAR_INT);
|
wrapper.passthrough(Type.STRING); // Recipe Identifier
|
||||||
for (int i = 0; i < size; i++) {
|
switch (type) {
|
||||||
final String type = wrapper.passthrough(Type.STRING).replace("minecraft:", "");
|
case "crafting_shapeless": {
|
||||||
wrapper.passthrough(Type.STRING); // Recipe Identifier
|
wrapper.passthrough(Type.STRING); // Group
|
||||||
switch (type) {
|
wrapper.read(Type.VAR_INT); // Crafting book category
|
||||||
case "crafting_shapeless": {
|
final int ingredients = wrapper.passthrough(Type.VAR_INT);
|
||||||
wrapper.passthrough(Type.STRING); // Group
|
for (int j = 0; j < ingredients; j++) {
|
||||||
wrapper.read(Type.VAR_INT); // Crafting book category
|
final Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
|
||||||
final int ingredients = wrapper.passthrough(Type.VAR_INT);
|
for (final Item item : items) {
|
||||||
for (int j = 0; j < ingredients; j++) {
|
handleItemToClient(item);
|
||||||
final Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
|
|
||||||
for (final Item item : items) {
|
|
||||||
handleItemToClient(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Result
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case "crafting_shaped": {
|
|
||||||
final int ingredients = wrapper.passthrough(Type.VAR_INT) * wrapper.passthrough(Type.VAR_INT);
|
|
||||||
wrapper.passthrough(Type.STRING); // Group
|
|
||||||
wrapper.read(Type.VAR_INT); // Crafting book category
|
|
||||||
for (int j = 0; j < ingredients; j++) {
|
|
||||||
final Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
|
|
||||||
for (final Item item : items) {
|
|
||||||
handleItemToClient(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Result
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "smelting":
|
|
||||||
case "campfire_cooking":
|
|
||||||
case "blasting":
|
|
||||||
case "smoking":
|
|
||||||
wrapper.passthrough(Type.STRING); // Group
|
|
||||||
wrapper.read(Type.VAR_INT); // Crafting book category
|
|
||||||
final Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
|
|
||||||
for (final Item item : items) {
|
|
||||||
handleItemToClient(item);
|
|
||||||
}
|
|
||||||
handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Result
|
|
||||||
wrapper.passthrough(Type.FLOAT); // EXP
|
|
||||||
wrapper.passthrough(Type.VAR_INT); // Cooking time
|
|
||||||
break;
|
|
||||||
case "crafting_special_armordye":
|
|
||||||
case "crafting_special_bookcloning":
|
|
||||||
case "crafting_special_mapcloning":
|
|
||||||
case "crafting_special_mapextending":
|
|
||||||
case "crafting_special_firework_rocket":
|
|
||||||
case "crafting_special_firework_star":
|
|
||||||
case "crafting_special_firework_star_fade":
|
|
||||||
case "crafting_special_tippedarrow":
|
|
||||||
case "crafting_special_bannerduplicate":
|
|
||||||
case "crafting_special_shielddecoration":
|
|
||||||
case "crafting_special_shulkerboxcoloring":
|
|
||||||
case "crafting_special_suspiciousstew":
|
|
||||||
case "crafting_special_repairitem":
|
|
||||||
wrapper.read(Type.VAR_INT); // Crafting book category
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
recipeRewriter.handle(wrapper, type);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Result
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
});
|
case "crafting_shaped": {
|
||||||
|
final int ingredients = wrapper.passthrough(Type.VAR_INT) * wrapper.passthrough(Type.VAR_INT);
|
||||||
|
wrapper.passthrough(Type.STRING); // Group
|
||||||
|
wrapper.read(Type.VAR_INT); // Crafting book category
|
||||||
|
for (int j = 0; j < ingredients; j++) {
|
||||||
|
final Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
|
||||||
|
for (final Item item : items) {
|
||||||
|
handleItemToClient(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Result
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "smelting":
|
||||||
|
case "campfire_cooking":
|
||||||
|
case "blasting":
|
||||||
|
case "smoking":
|
||||||
|
wrapper.passthrough(Type.STRING); // Group
|
||||||
|
wrapper.read(Type.VAR_INT); // Crafting book category
|
||||||
|
final Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
|
||||||
|
for (final Item item : items) {
|
||||||
|
handleItemToClient(item);
|
||||||
|
}
|
||||||
|
handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Result
|
||||||
|
wrapper.passthrough(Type.FLOAT); // EXP
|
||||||
|
wrapper.passthrough(Type.VAR_INT); // Cooking time
|
||||||
|
break;
|
||||||
|
case "crafting_special_armordye":
|
||||||
|
case "crafting_special_bookcloning":
|
||||||
|
case "crafting_special_mapcloning":
|
||||||
|
case "crafting_special_mapextending":
|
||||||
|
case "crafting_special_firework_rocket":
|
||||||
|
case "crafting_special_firework_star":
|
||||||
|
case "crafting_special_firework_star_fade":
|
||||||
|
case "crafting_special_tippedarrow":
|
||||||
|
case "crafting_special_bannerduplicate":
|
||||||
|
case "crafting_special_shielddecoration":
|
||||||
|
case "crafting_special_shulkerboxcoloring":
|
||||||
|
case "crafting_special_suspiciousstew":
|
||||||
|
case "crafting_special_repairitem":
|
||||||
|
wrapper.read(Type.VAR_INT); // Crafting book category
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
recipeRewriter.handleRecipeType(wrapper, type);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ import com.viaversion.viaversion.api.minecraft.ProfileKey;
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_3Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_3Types;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.BitSetType;
|
import com.viaversion.viaversion.api.type.types.BitSetType;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_19;
|
import com.viaversion.viaversion.api.type.types.version.Types1_19;
|
||||||
@ -37,10 +37,9 @@ import com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag;
|
|||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.ClientboundPackets1_19_1;
|
import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.ClientboundPackets1_19_1;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ClientboundPackets1_19_3;
|
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ClientboundPackets1_19_3;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
|
|
||||||
import java.util.BitSet;
|
import java.util.BitSet;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public final class EntityPackets1_19_3 extends EntityRewriter<ClientboundPackets1_19_3, Protocol1_19_1To1_19_3> {
|
public final class EntityPackets1_19_3 extends EntityRewriter<ClientboundPackets1_19_3, Protocol1_19_1To1_19_3> {
|
||||||
|
|
||||||
@ -63,9 +62,9 @@ public final class EntityPackets1_19_3 extends EntityRewriter<ClientboundPackets
|
|||||||
registerRemoveEntities(ClientboundPackets1_19_3.REMOVE_ENTITIES);
|
registerRemoveEntities(ClientboundPackets1_19_3.REMOVE_ENTITIES);
|
||||||
registerTrackerWithData1_19(ClientboundPackets1_19_3.SPAWN_ENTITY, Entity1_19_3Types.FALLING_BLOCK);
|
registerTrackerWithData1_19(ClientboundPackets1_19_3.SPAWN_ENTITY, Entity1_19_3Types.FALLING_BLOCK);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19_3.JOIN_GAME, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19_3.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Entity id
|
map(Type.INT); // Entity id
|
||||||
map(Type.BOOLEAN); // Hardcore
|
map(Type.BOOLEAN); // Hardcore
|
||||||
map(Type.UNSIGNED_BYTE); // Gamemode
|
map(Type.UNSIGNED_BYTE); // Gamemode
|
||||||
@ -91,9 +90,9 @@ public final class EntityPackets1_19_3 extends EntityRewriter<ClientboundPackets
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19_3.RESPAWN, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19_3.RESPAWN, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Dimension
|
map(Type.STRING); // Dimension
|
||||||
map(Type.STRING); // World
|
map(Type.STRING); // World
|
||||||
map(Type.LONG); // Seed
|
map(Type.LONG); // Seed
|
||||||
@ -110,104 +109,94 @@ public final class EntityPackets1_19_3 extends EntityRewriter<ClientboundPackets
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19_3.PLAYER_INFO_UPDATE, ClientboundPackets1_19_1.PLAYER_INFO, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19_3.PLAYER_INFO_UPDATE, ClientboundPackets1_19_1.PLAYER_INFO, wrapper -> {
|
||||||
@Override
|
wrapper.cancel();
|
||||||
public void registerMap() {
|
final BitSet actions = wrapper.read(PROFILE_ACTIONS_ENUM_TYPE);
|
||||||
handler(wrapper -> {
|
final int entries = wrapper.read(Type.VAR_INT);
|
||||||
wrapper.cancel();
|
if (actions.get(ADD_PLAYER)) {
|
||||||
final BitSet actions = wrapper.read(PROFILE_ACTIONS_ENUM_TYPE);
|
// Special case, as we need to write everything into one action
|
||||||
final int entries = wrapper.read(Type.VAR_INT);
|
final PacketWrapper playerInfoPacket = wrapper.create(ClientboundPackets1_19_1.PLAYER_INFO);
|
||||||
if (actions.get(ADD_PLAYER)) {
|
playerInfoPacket.write(Type.VAR_INT, 0);
|
||||||
// Special case, as we need to write everything into one action
|
playerInfoPacket.write(Type.VAR_INT, entries);
|
||||||
final PacketWrapper playerInfoPacket = wrapper.create(ClientboundPackets1_19_1.PLAYER_INFO);
|
for (int i = 0; i < entries; i++) {
|
||||||
playerInfoPacket.write(Type.VAR_INT, 0);
|
playerInfoPacket.write(Type.UUID, wrapper.read(Type.UUID));
|
||||||
playerInfoPacket.write(Type.VAR_INT, entries);
|
playerInfoPacket.write(Type.STRING, wrapper.read(Type.STRING)); // Player Name
|
||||||
for (int i = 0; i < entries; i++) {
|
|
||||||
playerInfoPacket.write(Type.UUID, wrapper.read(Type.UUID));
|
|
||||||
playerInfoPacket.write(Type.STRING, wrapper.read(Type.STRING)); // Player Name
|
|
||||||
|
|
||||||
final int properties = wrapper.read(Type.VAR_INT);
|
final int properties = wrapper.read(Type.VAR_INT);
|
||||||
playerInfoPacket.write(Type.VAR_INT, properties);
|
playerInfoPacket.write(Type.VAR_INT, properties);
|
||||||
for (int j = 0; j < properties; j++) {
|
for (int j = 0; j < properties; j++) {
|
||||||
playerInfoPacket.write(Type.STRING, wrapper.read(Type.STRING)); // Name
|
playerInfoPacket.write(Type.STRING, wrapper.read(Type.STRING)); // Name
|
||||||
playerInfoPacket.write(Type.STRING, wrapper.read(Type.STRING)); // Value
|
playerInfoPacket.write(Type.STRING, wrapper.read(Type.STRING)); // Value
|
||||||
playerInfoPacket.write(Type.OPTIONAL_STRING, wrapper.read(Type.OPTIONAL_STRING)); // Signature
|
playerInfoPacket.write(Type.OPTIONAL_STRING, wrapper.read(Type.OPTIONAL_STRING)); // Signature
|
||||||
}
|
|
||||||
|
|
||||||
// Now check for the other parts individually and add dummy values if not present
|
|
||||||
final ProfileKey profileKey;
|
|
||||||
if (actions.get(INITIALIZE_CHAT) && wrapper.read(Type.BOOLEAN)) {
|
|
||||||
wrapper.read(Type.UUID); // Session UUID
|
|
||||||
profileKey = wrapper.read(Type.PROFILE_KEY);
|
|
||||||
} else {
|
|
||||||
profileKey = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
final int gamemode = actions.get(UPDATE_GAMEMODE) ? wrapper.read(Type.VAR_INT) : 0;
|
|
||||||
|
|
||||||
if (actions.get(UPDATE_LISTED)) {
|
|
||||||
wrapper.read(Type.BOOLEAN); // Listed - throw away
|
|
||||||
}
|
|
||||||
|
|
||||||
final int latency = actions.get(UPDATE_LATENCY) ? wrapper.read(Type.VAR_INT) : 0;
|
|
||||||
|
|
||||||
final JsonElement displayName = actions.get(UPDATE_DISPLAYNAME) ? wrapper.read(Type.OPTIONAL_COMPONENT) : null;
|
|
||||||
playerInfoPacket.write(Type.VAR_INT, gamemode);
|
|
||||||
playerInfoPacket.write(Type.VAR_INT, latency);
|
|
||||||
playerInfoPacket.write(Type.OPTIONAL_COMPONENT, displayName);
|
|
||||||
playerInfoPacket.write(Type.OPTIONAL_PROFILE_KEY, profileKey);
|
|
||||||
}
|
|
||||||
playerInfoPacket.send(Protocol1_19_1To1_19_3.class);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final PlayerProfileUpdate[] updates = new PlayerProfileUpdate[entries];
|
// Now check for the other parts individually and add dummy values if not present
|
||||||
for (int i = 0; i < entries; i++) {
|
final ProfileKey profileKey;
|
||||||
final UUID uuid = wrapper.read(Type.UUID);
|
if (actions.get(INITIALIZE_CHAT) && wrapper.read(Type.BOOLEAN)) {
|
||||||
int gamemode = 0;
|
wrapper.read(Type.UUID); // Session UUID
|
||||||
int latency = 0;
|
profileKey = wrapper.read(Type.PROFILE_KEY);
|
||||||
JsonElement displayName = null;
|
} else {
|
||||||
for (final int action : PROFILE_ACTIONS) {
|
profileKey = null;
|
||||||
if (!actions.get(action)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
switch (action) {
|
|
||||||
case UPDATE_GAMEMODE:
|
|
||||||
gamemode = wrapper.read(Type.VAR_INT);
|
|
||||||
break;
|
|
||||||
case UPDATE_LATENCY:
|
|
||||||
latency = wrapper.read(Type.VAR_INT);
|
|
||||||
break;
|
|
||||||
case UPDATE_DISPLAYNAME:
|
|
||||||
displayName = wrapper.read(Type.OPTIONAL_COMPONENT);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
updates[i] = new PlayerProfileUpdate(uuid, gamemode, latency, displayName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (actions.get(UPDATE_GAMEMODE)) {
|
final int gamemode = actions.get(UPDATE_GAMEMODE) ? wrapper.read(Type.VAR_INT) : 0;
|
||||||
sendPlayerProfileUpdate(wrapper.user(), 1, updates);
|
|
||||||
} else if (actions.get(UPDATE_LATENCY)) {
|
if (actions.get(UPDATE_LISTED)) {
|
||||||
sendPlayerProfileUpdate(wrapper.user(), 2, updates);
|
wrapper.read(Type.BOOLEAN); // Listed - throw away
|
||||||
} else if (actions.get(UPDATE_DISPLAYNAME)) {
|
|
||||||
sendPlayerProfileUpdate(wrapper.user(), 3, updates);
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
final int latency = actions.get(UPDATE_LATENCY) ? wrapper.read(Type.VAR_INT) : 0;
|
||||||
|
|
||||||
|
final JsonElement displayName = actions.get(UPDATE_DISPLAYNAME) ? wrapper.read(Type.OPTIONAL_COMPONENT) : null;
|
||||||
|
playerInfoPacket.write(Type.VAR_INT, gamemode);
|
||||||
|
playerInfoPacket.write(Type.VAR_INT, latency);
|
||||||
|
playerInfoPacket.write(Type.OPTIONAL_COMPONENT, displayName);
|
||||||
|
playerInfoPacket.write(Type.OPTIONAL_PROFILE_KEY, profileKey);
|
||||||
|
}
|
||||||
|
playerInfoPacket.send(Protocol1_19_1To1_19_3.class);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final PlayerProfileUpdate[] updates = new PlayerProfileUpdate[entries];
|
||||||
|
for (int i = 0; i < entries; i++) {
|
||||||
|
final UUID uuid = wrapper.read(Type.UUID);
|
||||||
|
int gamemode = 0;
|
||||||
|
int latency = 0;
|
||||||
|
JsonElement displayName = null;
|
||||||
|
for (final int action : PROFILE_ACTIONS) {
|
||||||
|
if (!actions.get(action)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
switch (action) {
|
||||||
|
case UPDATE_GAMEMODE:
|
||||||
|
gamemode = wrapper.read(Type.VAR_INT);
|
||||||
|
break;
|
||||||
|
case UPDATE_LATENCY:
|
||||||
|
latency = wrapper.read(Type.VAR_INT);
|
||||||
|
break;
|
||||||
|
case UPDATE_DISPLAYNAME:
|
||||||
|
displayName = wrapper.read(Type.OPTIONAL_COMPONENT);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updates[i] = new PlayerProfileUpdate(uuid, gamemode, latency, displayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (actions.get(UPDATE_GAMEMODE)) {
|
||||||
|
sendPlayerProfileUpdate(wrapper.user(), 1, updates);
|
||||||
|
} else if (actions.get(UPDATE_LATENCY)) {
|
||||||
|
sendPlayerProfileUpdate(wrapper.user(), 2, updates);
|
||||||
|
} else if (actions.get(UPDATE_DISPLAYNAME)) {
|
||||||
|
sendPlayerProfileUpdate(wrapper.user(), 3, updates);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
protocol.registerClientbound(ClientboundPackets1_19_3.PLAYER_INFO_REMOVE, ClientboundPackets1_19_1.PLAYER_INFO, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19_3.PLAYER_INFO_REMOVE, ClientboundPackets1_19_1.PLAYER_INFO, wrapper -> {
|
||||||
@Override
|
final UUID[] uuids = wrapper.read(Type.UUID_ARRAY);
|
||||||
public void registerMap() {
|
wrapper.write(Type.VAR_INT, 4); // Remove player
|
||||||
handler(wrapper -> {
|
wrapper.write(Type.VAR_INT, uuids.length);
|
||||||
final UUID[] uuids = wrapper.read(Type.UUID_ARRAY);
|
for (final UUID uuid : uuids) {
|
||||||
wrapper.write(Type.VAR_INT, 4); // Remove player
|
wrapper.write(Type.UUID, uuid);
|
||||||
wrapper.write(Type.VAR_INT, uuids.length);
|
|
||||||
for (final UUID uuid : uuids) {
|
|
||||||
wrapper.write(Type.UUID, uuid);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
package com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.storage;
|
package com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.storage;
|
||||||
|
|
||||||
import com.viaversion.viaversion.api.connection.StorableObject;
|
import com.viaversion.viaversion.api.connection.StorableObject;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public final class ChatSessionStorage implements StorableObject {
|
public final class ChatSessionStorage implements StorableObject {
|
||||||
|
@ -24,7 +24,7 @@ public final class NonceStorage implements StorableObject {
|
|||||||
|
|
||||||
private final byte[] nonce;
|
private final byte[] nonce;
|
||||||
|
|
||||||
public NonceStorage(final byte @Nullable[] nonce) {
|
public NonceStorage(final byte @Nullable [] nonce) {
|
||||||
this.nonce = nonce;
|
this.nonce = nonce;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ import com.viaversion.viabackwards.protocol.protocol1_19_3to1_19_4.packets.Entit
|
|||||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_4Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_4Types;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ClientboundPackets1_19_3;
|
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ClientboundPackets1_19_3;
|
||||||
@ -77,9 +77,9 @@ public final class Protocol1_19_3To1_19_4 extends BackwardsProtocol<ClientboundP
|
|||||||
|
|
||||||
cancelClientbound(ClientboundPackets1_19_4.BUNDLE);
|
cancelClientbound(ClientboundPackets1_19_4.BUNDLE);
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_19_4.DAMAGE_EVENT, ClientboundPackets1_19_3.ENTITY_STATUS, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19_4.DAMAGE_EVENT, ClientboundPackets1_19_3.ENTITY_STATUS, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT, Type.INT); // Entity id
|
map(Type.VAR_INT, Type.INT); // Entity id
|
||||||
read(Type.VAR_INT); // Damage type
|
read(Type.VAR_INT); // Damage type
|
||||||
read(Type.VAR_INT); // Cause entity
|
read(Type.VAR_INT); // Cause entity
|
||||||
|
@ -23,7 +23,7 @@ import com.viaversion.viabackwards.protocol.protocol1_19_3to1_19_4.Protocol1_19_
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_4Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_4Types;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_19_3;
|
import com.viaversion.viaversion.api.type.types.version.Types1_19_3;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_19_4;
|
import com.viaversion.viaversion.api.type.types.version.Types1_19_4;
|
||||||
@ -47,9 +47,9 @@ public final class EntityPackets1_19_4 extends EntityRewriter<ClientboundPackets
|
|||||||
registerRemoveEntities(ClientboundPackets1_19_4.REMOVE_ENTITIES);
|
registerRemoveEntities(ClientboundPackets1_19_4.REMOVE_ENTITIES);
|
||||||
registerMetadataRewriter(ClientboundPackets1_19_4.ENTITY_METADATA, Types1_19_4.METADATA_LIST, Types1_19_3.METADATA_LIST);
|
registerMetadataRewriter(ClientboundPackets1_19_4.ENTITY_METADATA, Types1_19_4.METADATA_LIST, Types1_19_3.METADATA_LIST);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19_4.JOIN_GAME, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19_4.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Entity id
|
map(Type.INT); // Entity id
|
||||||
map(Type.BOOLEAN); // Hardcore
|
map(Type.BOOLEAN); // Hardcore
|
||||||
map(Type.UNSIGNED_BYTE); // Gamemode
|
map(Type.UNSIGNED_BYTE); // Gamemode
|
||||||
@ -78,18 +78,18 @@ public final class EntityPackets1_19_4 extends EntityRewriter<ClientboundPackets
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19_4.HIT_ANIMATION, ClientboundPackets1_19_3.ENTITY_ANIMATION, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19_4.HIT_ANIMATION, ClientboundPackets1_19_3.ENTITY_ANIMATION, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // Entity id
|
map(Type.VAR_INT); // Entity id
|
||||||
read(Type.FLOAT); // Yaw
|
read(Type.FLOAT); // Yaw
|
||||||
create(Type.UNSIGNED_BYTE, (short) 1); // Hit
|
create(Type.UNSIGNED_BYTE, (short) 1); // Hit
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_19_4.RESPAWN, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_19_4.RESPAWN, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Dimension
|
map(Type.STRING); // Dimension
|
||||||
map(Type.STRING); // World
|
map(Type.STRING); // World
|
||||||
handler(worldDataTrackerHandlerByKey());
|
handler(worldDataTrackerHandlerByKey());
|
||||||
|
@ -32,7 +32,7 @@ import com.viaversion.viaversion.api.minecraft.ProfileKey;
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19Types;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State;
|
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||||
@ -88,9 +88,9 @@ public final class Protocol1_19To1_19_1 extends BackwardsProtocol<ClientboundPac
|
|||||||
|
|
||||||
entityRewriter.register();
|
entityRewriter.register();
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_19_1.JOIN_GAME, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19_1.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // Entity ID
|
map(Type.INT); // Entity ID
|
||||||
map(Type.BOOLEAN); // Hardcore
|
map(Type.BOOLEAN); // Hardcore
|
||||||
map(Type.UNSIGNED_BYTE); // Gamemode
|
map(Type.UNSIGNED_BYTE); // Gamemode
|
||||||
@ -119,87 +119,77 @@ public final class Protocol1_19To1_19_1 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_19_1.PLAYER_CHAT, ClientboundPackets1_19.SYSTEM_CHAT, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19_1.PLAYER_CHAT, ClientboundPackets1_19.SYSTEM_CHAT, wrapper -> {
|
||||||
@Override
|
wrapper.read(Type.OPTIONAL_BYTE_ARRAY_PRIMITIVE); // Previous signature
|
||||||
public void registerMap() {
|
|
||||||
handler(wrapper -> {
|
|
||||||
wrapper.read(Type.OPTIONAL_BYTE_ARRAY_PRIMITIVE); // Previous signature
|
|
||||||
|
|
||||||
final PlayerMessageSignature signature = wrapper.read(Type.PLAYER_MESSAGE_SIGNATURE);
|
final PlayerMessageSignature signature = wrapper.read(Type.PLAYER_MESSAGE_SIGNATURE);
|
||||||
|
|
||||||
// Store message signature for last seen
|
// Store message signature for last seen
|
||||||
if (!signature.uuid().equals(ZERO_UUID) && signature.signatureBytes().length != 0) {
|
if (!signature.uuid().equals(ZERO_UUID) && signature.signatureBytes().length != 0) {
|
||||||
final ReceivedMessagesStorage messagesStorage = wrapper.user().get(ReceivedMessagesStorage.class);
|
final ReceivedMessagesStorage messagesStorage = wrapper.user().get(ReceivedMessagesStorage.class);
|
||||||
messagesStorage.add(signature);
|
messagesStorage.add(signature);
|
||||||
if (messagesStorage.tickUnacknowledged() > 64) {
|
if (messagesStorage.tickUnacknowledged() > 64) {
|
||||||
messagesStorage.resetUnacknowledgedCount();
|
messagesStorage.resetUnacknowledgedCount();
|
||||||
|
|
||||||
// Send chat acknowledgement
|
// Send chat acknowledgement
|
||||||
final PacketWrapper chatAckPacket = wrapper.create(ServerboundPackets1_19_1.CHAT_ACK);
|
final PacketWrapper chatAckPacket = wrapper.create(ServerboundPackets1_19_1.CHAT_ACK);
|
||||||
chatAckPacket.write(Type.PLAYER_MESSAGE_SIGNATURE_ARRAY, messagesStorage.lastSignatures());
|
chatAckPacket.write(Type.PLAYER_MESSAGE_SIGNATURE_ARRAY, messagesStorage.lastSignatures());
|
||||||
chatAckPacket.write(Type.OPTIONAL_PLAYER_MESSAGE_SIGNATURE, null);
|
chatAckPacket.write(Type.OPTIONAL_PLAYER_MESSAGE_SIGNATURE, null);
|
||||||
chatAckPacket.sendToServer(Protocol1_19To1_19_1.class);
|
chatAckPacket.sendToServer(Protocol1_19To1_19_1.class);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Send the unsigned message if present, otherwise the signed message
|
|
||||||
final String plainMessage = wrapper.read(Type.STRING); // Plain message
|
|
||||||
JsonElement message = null;
|
|
||||||
JsonElement decoratedMessage = wrapper.read(Type.OPTIONAL_COMPONENT);
|
|
||||||
if (decoratedMessage != null) {
|
|
||||||
message = decoratedMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.read(Type.LONG); // Timestamp
|
|
||||||
wrapper.read(Type.LONG); // Salt
|
|
||||||
wrapper.read(Type.PLAYER_MESSAGE_SIGNATURE_ARRAY); // Last seen
|
|
||||||
|
|
||||||
final JsonElement unsignedMessage = wrapper.read(Type.OPTIONAL_COMPONENT);
|
|
||||||
if (unsignedMessage != null) {
|
|
||||||
message = unsignedMessage;
|
|
||||||
}
|
|
||||||
if (message == null) {
|
|
||||||
// If no decorated or unsigned message is given, use the plain one
|
|
||||||
message = GsonComponentSerializer.gson().serializeToTree(Component.text(plainMessage));
|
|
||||||
}
|
|
||||||
|
|
||||||
final int filterMaskType = wrapper.read(Type.VAR_INT);
|
|
||||||
if (filterMaskType == 2) { // Partially filtered
|
|
||||||
wrapper.read(Type.LONG_ARRAY_PRIMITIVE); // Mask
|
|
||||||
}
|
|
||||||
|
|
||||||
final int chatTypeId = wrapper.read(Type.VAR_INT);
|
|
||||||
final JsonElement senderName = wrapper.read(Type.COMPONENT);
|
|
||||||
final JsonElement targetName = wrapper.read(Type.OPTIONAL_COMPONENT);
|
|
||||||
decoratedMessage = decorateChatMessage(wrapper.user().get(ChatRegistryStorage1_19_1.class), chatTypeId, senderName, targetName, message);
|
|
||||||
if (decoratedMessage == null) {
|
|
||||||
wrapper.cancel();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
translatableRewriter.processText(decoratedMessage);
|
|
||||||
wrapper.write(Type.COMPONENT, decoratedMessage);
|
|
||||||
wrapper.write(Type.VAR_INT, SYSTEM_CHAT_ID);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Send the unsigned message if present, otherwise the signed message
|
||||||
|
final String plainMessage = wrapper.read(Type.STRING); // Plain message
|
||||||
|
JsonElement message = null;
|
||||||
|
JsonElement decoratedMessage = wrapper.read(Type.OPTIONAL_COMPONENT);
|
||||||
|
if (decoratedMessage != null) {
|
||||||
|
message = decoratedMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapper.read(Type.LONG); // Timestamp
|
||||||
|
wrapper.read(Type.LONG); // Salt
|
||||||
|
wrapper.read(Type.PLAYER_MESSAGE_SIGNATURE_ARRAY); // Last seen
|
||||||
|
|
||||||
|
final JsonElement unsignedMessage = wrapper.read(Type.OPTIONAL_COMPONENT);
|
||||||
|
if (unsignedMessage != null) {
|
||||||
|
message = unsignedMessage;
|
||||||
|
}
|
||||||
|
if (message == null) {
|
||||||
|
// If no decorated or unsigned message is given, use the plain one
|
||||||
|
message = GsonComponentSerializer.gson().serializeToTree(Component.text(plainMessage));
|
||||||
|
}
|
||||||
|
|
||||||
|
final int filterMaskType = wrapper.read(Type.VAR_INT);
|
||||||
|
if (filterMaskType == 2) { // Partially filtered
|
||||||
|
wrapper.read(Type.LONG_ARRAY_PRIMITIVE); // Mask
|
||||||
|
}
|
||||||
|
|
||||||
|
final int chatTypeId = wrapper.read(Type.VAR_INT);
|
||||||
|
final JsonElement senderName = wrapper.read(Type.COMPONENT);
|
||||||
|
final JsonElement targetName = wrapper.read(Type.OPTIONAL_COMPONENT);
|
||||||
|
decoratedMessage = decorateChatMessage(wrapper.user().get(ChatRegistryStorage1_19_1.class), chatTypeId, senderName, targetName, message);
|
||||||
|
if (decoratedMessage == null) {
|
||||||
|
wrapper.cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
translatableRewriter.processText(decoratedMessage);
|
||||||
|
wrapper.write(Type.COMPONENT, decoratedMessage);
|
||||||
|
wrapper.write(Type.VAR_INT, SYSTEM_CHAT_ID);
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_19_1.SYSTEM_CHAT, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19_1.SYSTEM_CHAT, wrapper -> {
|
||||||
@Override
|
final JsonElement content = wrapper.passthrough(Type.COMPONENT);
|
||||||
public void registerMap() {
|
translatableRewriter.processText(content);
|
||||||
handler(wrapper -> {
|
|
||||||
final JsonElement content = wrapper.passthrough(Type.COMPONENT);
|
|
||||||
translatableRewriter.processText(content);
|
|
||||||
|
|
||||||
final boolean overlay = wrapper.read(Type.BOOLEAN);
|
final boolean overlay = wrapper.read(Type.BOOLEAN);
|
||||||
wrapper.write(Type.VAR_INT, overlay ? GAME_INFO_ID : SYSTEM_CHAT_ID);
|
wrapper.write(Type.VAR_INT, overlay ? GAME_INFO_ID : SYSTEM_CHAT_ID);
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_19.CHAT_MESSAGE, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_19.CHAT_MESSAGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Message
|
map(Type.STRING); // Message
|
||||||
map(Type.LONG); // Timestamp
|
map(Type.LONG); // Timestamp
|
||||||
map(Type.LONG); // Salt
|
map(Type.LONG); // Salt
|
||||||
@ -216,9 +206,9 @@ public final class Protocol1_19To1_19_1 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_19.CHAT_COMMAND, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_19.CHAT_COMMAND, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Command
|
map(Type.STRING); // Command
|
||||||
map(Type.LONG); // Timestamp
|
map(Type.LONG); // Timestamp
|
||||||
map(Type.LONG); // Salt
|
map(Type.LONG); // Salt
|
||||||
@ -242,9 +232,9 @@ public final class Protocol1_19To1_19_1 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_19_1.SERVER_DATA, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_19_1.SERVER_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.OPTIONAL_COMPONENT); // Motd
|
map(Type.OPTIONAL_COMPONENT); // Motd
|
||||||
map(Type.OPTIONAL_STRING); // Encoded icon
|
map(Type.OPTIONAL_STRING); // Encoded icon
|
||||||
map(Type.BOOLEAN); // Previews chat
|
map(Type.BOOLEAN); // Previews chat
|
||||||
@ -252,9 +242,9 @@ public final class Protocol1_19To1_19_1 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(State.LOGIN, ServerboundLoginPackets.HELLO.getId(), ServerboundLoginPackets.HELLO.getId(), new PacketRemapper() {
|
registerServerbound(State.LOGIN, ServerboundLoginPackets.HELLO.getId(), ServerboundLoginPackets.HELLO.getId(), new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Name
|
map(Type.STRING); // Name
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
final ProfileKey profileKey = wrapper.read(Type.OPTIONAL_PROFILE_KEY);
|
final ProfileKey profileKey = wrapper.read(Type.OPTIONAL_PROFILE_KEY);
|
||||||
@ -268,9 +258,9 @@ public final class Protocol1_19To1_19_1 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(State.LOGIN, ClientboundLoginPackets.HELLO.getId(), ClientboundLoginPackets.HELLO.getId(), new PacketRemapper() {
|
registerClientbound(State.LOGIN, ClientboundLoginPackets.HELLO.getId(), ClientboundLoginPackets.HELLO.getId(), new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // Server id
|
map(Type.STRING); // Server id
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
if (wrapper.user().get(NonceStorage.class) != null) {
|
if (wrapper.user().get(NonceStorage.class) != null) {
|
||||||
@ -285,9 +275,9 @@ public final class Protocol1_19To1_19_1 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(State.LOGIN, ServerboundLoginPackets.ENCRYPTION_KEY.getId(), ServerboundLoginPackets.ENCRYPTION_KEY.getId(), new PacketRemapper() {
|
registerServerbound(State.LOGIN, ServerboundLoginPackets.ENCRYPTION_KEY.getId(), ServerboundLoginPackets.ENCRYPTION_KEY.getId(), new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.BYTE_ARRAY_PRIMITIVE); // Key
|
map(Type.BYTE_ARRAY_PRIMITIVE); // Key
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
final NonceStorage nonceStorage = wrapper.user().remove(NonceStorage.class);
|
final NonceStorage nonceStorage = wrapper.user().remove(NonceStorage.class);
|
||||||
@ -310,9 +300,9 @@ public final class Protocol1_19To1_19_1 extends BackwardsProtocol<ClientboundPac
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerClientbound(State.LOGIN, ClientboundLoginPackets.CUSTOM_QUERY.getId(), ClientboundLoginPackets.CUSTOM_QUERY.getId(), new PacketRemapper() {
|
registerClientbound(State.LOGIN, ClientboundLoginPackets.CUSTOM_QUERY.getId(), ClientboundLoginPackets.CUSTOM_QUERY.getId(), new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT);
|
map(Type.VAR_INT);
|
||||||
map(Type.STRING);
|
map(Type.STRING);
|
||||||
handler(wrapper -> {
|
handler(wrapper -> {
|
||||||
|
@ -24,7 +24,7 @@ public final class NonceStorage implements StorableObject {
|
|||||||
|
|
||||||
private final byte[] nonce;
|
private final byte[] nonce;
|
||||||
|
|
||||||
public NonceStorage(final byte @Nullable[] nonce) {
|
public NonceStorage(final byte @Nullable [] nonce) {
|
||||||
this.nonce = nonce;
|
this.nonce = nonce;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@ package com.viaversion.viabackwards.protocol.protocol1_19to1_19_1.storage;
|
|||||||
|
|
||||||
import com.viaversion.viaversion.api.connection.StorableObject;
|
import com.viaversion.viaversion.api.connection.StorableObject;
|
||||||
import com.viaversion.viaversion.api.minecraft.PlayerMessageSignature;
|
import com.viaversion.viaversion.api.minecraft.PlayerMessageSignature;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
public final class ReceivedMessagesStorage implements StorableObject {
|
public final class ReceivedMessagesStorage implements StorableObject {
|
||||||
|
@ -26,7 +26,7 @@ import com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.packets.EntityPa
|
|||||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types;
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
|
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
@ -54,9 +54,9 @@ public class Protocol1_9_4To1_10 extends BackwardsProtocol<ClientboundPackets1_9
|
|||||||
blockItemPackets.register();
|
blockItemPackets.register();
|
||||||
|
|
||||||
SoundRewriter<ClientboundPackets1_9_3> soundRewriter = new SoundRewriter<>(this);
|
SoundRewriter<ClientboundPackets1_9_3> soundRewriter = new SoundRewriter<>(this);
|
||||||
registerClientbound(ClientboundPackets1_9_3.NAMED_SOUND, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_9_3.NAMED_SOUND, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // 0 - Sound name
|
map(Type.STRING); // 0 - Sound name
|
||||||
map(Type.VAR_INT); // 1 - Sound Category
|
map(Type.VAR_INT); // 1 - Sound Category
|
||||||
map(Type.INT); // 2 - x
|
map(Type.INT); // 2 - x
|
||||||
@ -67,9 +67,9 @@ public class Protocol1_9_4To1_10 extends BackwardsProtocol<ClientboundPackets1_9
|
|||||||
handler(soundRewriter.getNamedSoundHandler());
|
handler(soundRewriter.getNamedSoundHandler());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
registerClientbound(ClientboundPackets1_9_3.SOUND, new PacketRemapper() {
|
registerClientbound(ClientboundPackets1_9_3.SOUND, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Sound name
|
map(Type.VAR_INT); // 0 - Sound name
|
||||||
map(Type.VAR_INT); // 1 - Sound Category
|
map(Type.VAR_INT); // 1 - Sound Category
|
||||||
map(Type.INT); // 2 - x
|
map(Type.INT); // 2 - x
|
||||||
@ -81,9 +81,9 @@ public class Protocol1_9_4To1_10 extends BackwardsProtocol<ClientboundPackets1_9
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerServerbound(ServerboundPackets1_9_3.RESOURCE_PACK_STATUS, new PacketRemapper() {
|
registerServerbound(ServerboundPackets1_9_3.RESOURCE_PACK_STATUS, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING, Type.NOTHING); // 0 - Hash
|
map(Type.STRING, Type.NOTHING); // 0 - Hash
|
||||||
map(Type.VAR_INT); // 1 - Result
|
map(Type.VAR_INT); // 1 - Result
|
||||||
}
|
}
|
||||||
|
@ -23,9 +23,7 @@ import com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.Protocol1_9_4To1
|
|||||||
import com.viaversion.viaversion.api.minecraft.BlockChangeRecord;
|
import com.viaversion.viaversion.api.minecraft.BlockChangeRecord;
|
||||||
import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
|
import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_1_2to1_9_3_4.types.Chunk1_9_3_4Type;
|
import com.viaversion.viaversion.protocols.protocol1_9_1_2to1_9_3_4.types.Chunk1_9_3_4Type;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
||||||
@ -46,31 +44,28 @@ public class BlockItemPackets1_10 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
// Entity Equipment Packet
|
// Entity Equipment Packet
|
||||||
registerEntityEquipment(ClientboundPackets1_9_3.ENTITY_EQUIPMENT, Type.ITEM);
|
registerEntityEquipment(ClientboundPackets1_9_3.ENTITY_EQUIPMENT, Type.ITEM);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.PLUGIN_MESSAGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.PLUGIN_MESSAGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.STRING); // 0 - Channel
|
map(Type.STRING); // 0 - Channel
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
if (wrapper.get(Type.STRING, 0).equalsIgnoreCase("MC|TrList")) {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.passthrough(Type.INT); // Passthrough Window ID
|
||||||
if (wrapper.get(Type.STRING, 0).equalsIgnoreCase("MC|TrList")) {
|
|
||||||
wrapper.passthrough(Type.INT); // Passthrough Window ID
|
|
||||||
|
|
||||||
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Input Item
|
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Input Item
|
||||||
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Output Item
|
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Output Item
|
||||||
|
|
||||||
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
||||||
if (secondItem) {
|
if (secondItem) {
|
||||||
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Second Item
|
wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Second Item
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
|
||||||
wrapper.passthrough(Type.INT); // Number of tools uses
|
|
||||||
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
||||||
|
wrapper.passthrough(Type.INT); // Number of tools uses
|
||||||
|
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -80,54 +75,40 @@ public class BlockItemPackets1_10 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
registerClickWindow(ServerboundPackets1_9_3.CLICK_WINDOW, Type.ITEM);
|
registerClickWindow(ServerboundPackets1_9_3.CLICK_WINDOW, Type.ITEM);
|
||||||
registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM);
|
registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.CHUNK_DATA, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.CHUNK_DATA, wrapper -> {
|
||||||
@Override
|
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
||||||
public void registerMap() {
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
|
||||||
|
|
||||||
Chunk1_9_3_4Type type = new Chunk1_9_3_4Type(clientWorld);
|
Chunk1_9_3_4Type type = new Chunk1_9_3_4Type(clientWorld);
|
||||||
Chunk chunk = wrapper.passthrough(type);
|
Chunk chunk = wrapper.passthrough(type);
|
||||||
|
|
||||||
handleChunk(chunk);
|
handleChunk(chunk);
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Block Change Packet
|
// Block Change Packet
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.BLOCK_CHANGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.BLOCK_CHANGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.POSITION); // 0 - Block Position
|
map(Type.POSITION); // 0 - Block Position
|
||||||
map(Type.VAR_INT); // 1 - Block
|
map(Type.VAR_INT); // 1 - Block
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int idx = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
wrapper.set(Type.VAR_INT, 0, handleBlockID(idx));
|
||||||
int idx = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
wrapper.set(Type.VAR_INT, 0, handleBlockID(idx));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Multi Block Change Packet
|
// Multi Block Change Packet
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.MULTI_BLOCK_CHANGE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.MULTI_BLOCK_CHANGE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT); // 0 - Chunk X
|
map(Type.INT); // 0 - Chunk X
|
||||||
map(Type.INT); // 1 - Chunk Z
|
map(Type.INT); // 1 - Chunk Z
|
||||||
map(Type.BLOCK_CHANGE_RECORD_ARRAY);
|
map(Type.BLOCK_CHANGE_RECORD_ARRAY);
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
for (BlockChangeRecord record : wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0)) {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
record.setBlockId(handleBlockID(record.getBlockId()));
|
||||||
for (BlockChangeRecord record : wrapper.get(Type.BLOCK_CHANGE_RECORD_ARRAY, 0)) {
|
|
||||||
record.setBlockId(handleBlockID(record.getBlockId()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -140,9 +121,9 @@ public class BlockItemPackets1_10 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Particle
|
// Particle
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_PARTICLE, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_PARTICLE, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.INT);
|
map(Type.INT);
|
||||||
map(Type.BOOLEAN);
|
map(Type.BOOLEAN);
|
||||||
map(Type.FLOAT);
|
map(Type.FLOAT);
|
||||||
@ -154,13 +135,10 @@ public class BlockItemPackets1_10 extends LegacyBlockItemRewriter<ClientboundPac
|
|||||||
map(Type.FLOAT);
|
map(Type.FLOAT);
|
||||||
map(Type.INT);
|
map(Type.INT);
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int id = wrapper.get(Type.INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (id == 46) { // new falling_dust
|
||||||
int id = wrapper.get(Type.INT, 0);
|
wrapper.set(Type.INT, 0, 38); // -> block_dust
|
||||||
if (id == 46) { // new falling_dust
|
|
||||||
wrapper.set(Type.INT, 0, 38); // -> block_dust
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -29,13 +29,10 @@ import com.viaversion.viaversion.api.minecraft.entities.Entity1_12Types;
|
|||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_9;
|
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_9;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_9;
|
import com.viaversion.viaversion.api.type.types.version.Types1_9;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@ -47,9 +44,9 @@ public class EntityPackets1_10 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_ENTITY, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_ENTITY, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - UUID
|
map(Type.UUID); // 1 - UUID
|
||||||
map(Type.BYTE); // 2 - Type
|
map(Type.BYTE); // 2 - Type
|
||||||
@ -65,21 +62,18 @@ public class EntityPackets1_10 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
handler(getObjectRewriter(id -> Entity1_11Types.ObjectType.findById(id).orElse(null)));
|
handler(getObjectRewriter(id -> Entity1_11Types.ObjectType.findById(id).orElse(null)));
|
||||||
|
|
||||||
// Handle FallingBlock blocks
|
// Handle FallingBlock blocks
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
Optional<Entity1_12Types.ObjectType> type = Entity1_12Types.ObjectType.findById(wrapper.get(Type.BYTE, 0));
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
if (type.isPresent() && type.get() == Entity1_12Types.ObjectType.FALLING_BLOCK) {
|
||||||
Optional<Entity1_12Types.ObjectType> type = Entity1_12Types.ObjectType.findById(wrapper.get(Type.BYTE, 0));
|
int objectData = wrapper.get(Type.INT, 0);
|
||||||
if (type.isPresent() && type.get() == Entity1_12Types.ObjectType.FALLING_BLOCK) {
|
int objType = objectData & 4095;
|
||||||
int objectData = wrapper.get(Type.INT, 0);
|
int data = objectData >> 12 & 15;
|
||||||
int objType = objectData & 4095;
|
|
||||||
int data = objectData >> 12 & 15;
|
|
||||||
|
|
||||||
Block block = protocol.getItemRewriter().handleBlock(objType, data);
|
Block block = protocol.getItemRewriter().handleBlock(objType, data);
|
||||||
if (block == null)
|
if (block == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wrapper.set(Type.INT, 0, block.getId() | block.getData() << 12);
|
wrapper.set(Type.INT, 0, block.getId() | block.getData() << 12);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -88,9 +82,9 @@ public class EntityPackets1_10 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
registerTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_10Types.EntityType.EXPERIENCE_ORB);
|
registerTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_10Types.EntityType.EXPERIENCE_ORB);
|
||||||
registerTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_10Types.EntityType.WEATHER);
|
registerTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_10Types.EntityType.WEATHER);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
map(Type.UUID); // 1 - UUID
|
map(Type.UUID); // 1 - UUID
|
||||||
map(Type.UNSIGNED_BYTE); // 2 - Entity Type
|
map(Type.UNSIGNED_BYTE); // 2 - Entity Type
|
||||||
@ -109,22 +103,19 @@ public class EntityPackets1_10 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
handler(getTrackerHandler(Type.UNSIGNED_BYTE, 0));
|
handler(getTrackerHandler(Type.UNSIGNED_BYTE, 0));
|
||||||
|
|
||||||
// Rewrite entity type / metadata
|
// Rewrite entity type / metadata
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int entityId = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
EntityType type = tracker(wrapper.user()).entityType(entityId);
|
||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
EntityType type = tracker(wrapper.user()).entityType(entityId);
|
|
||||||
|
|
||||||
List<Metadata> metadata = wrapper.get(Types1_9.METADATA_LIST, 0);
|
List<Metadata> metadata = wrapper.get(Types1_9.METADATA_LIST, 0);
|
||||||
handleMetadata(wrapper.get(Type.VAR_INT, 0), metadata, wrapper.user());
|
handleMetadata(wrapper.get(Type.VAR_INT, 0), metadata, wrapper.user());
|
||||||
|
|
||||||
EntityData entityData = entityDataForType(type);
|
EntityData entityData = entityDataForType(type);
|
||||||
if (entityData != null) {
|
if (entityData != null) {
|
||||||
WrappedMetadata storage = new WrappedMetadata(metadata);
|
WrappedMetadata storage = new WrappedMetadata(metadata);
|
||||||
wrapper.set(Type.UNSIGNED_BYTE, 0, (short) entityData.replacementId());
|
wrapper.set(Type.UNSIGNED_BYTE, 0, (short) entityData.replacementId());
|
||||||
if (entityData.hasBaseMeta())
|
if (entityData.hasBaseMeta())
|
||||||
entityData.defaultMeta().createMeta(storage);
|
entityData.defaultMeta().createMeta(storage);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -135,9 +126,9 @@ public class EntityPackets1_10 extends LegacyEntityRewriter<ClientboundPackets1_
|
|||||||
registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_10Types.EntityType.PLAYER);
|
registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_10Types.EntityType.PLAYER);
|
||||||
registerRespawn(ClientboundPackets1_9_3.RESPAWN);
|
registerRespawn(ClientboundPackets1_9_3.RESPAWN);
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_PLAYER, new PacketRemapper() {
|
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_PLAYER, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void register() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Type.UUID); // 1 - Player UUID
|
map(Type.UUID); // 1 - Player UUID
|
||||||
map(Type.DOUBLE); // 2 - X
|
map(Type.DOUBLE); // 2 - X
|
||||||
|
@ -20,12 +20,11 @@ package com.viaversion.viabackwards;
|
|||||||
|
|
||||||
import com.viaversion.viabackwards.api.ViaBackwardsPlatform;
|
import com.viaversion.viabackwards.api.ViaBackwardsPlatform;
|
||||||
import com.viaversion.viabackwards.fabric.util.LoggerWrapper;
|
import com.viaversion.viabackwards.fabric.util.LoggerWrapper;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
public class ViaFabricAddon implements ViaBackwardsPlatform, Runnable {
|
public class ViaFabricAddon implements ViaBackwardsPlatform, Runnable {
|
||||||
private final Logger logger = new LoggerWrapper(LogManager.getLogger("ViaBackwards"));
|
private final Logger logger = new LoggerWrapper(LogManager.getLogger("ViaBackwards"));
|
||||||
|
@ -22,15 +22,14 @@ import com.google.inject.Inject;
|
|||||||
import com.viaversion.viabackwards.api.ViaBackwardsPlatform;
|
import com.viaversion.viabackwards.api.ViaBackwardsPlatform;
|
||||||
import com.viaversion.viaversion.api.Via;
|
import com.viaversion.viaversion.api.Via;
|
||||||
import com.viaversion.viaversion.sponge.util.LoggerWrapper;
|
import com.viaversion.viaversion.sponge.util.LoggerWrapper;
|
||||||
|
import java.io.File;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.logging.Logger;
|
||||||
import org.spongepowered.api.config.ConfigDir;
|
import org.spongepowered.api.config.ConfigDir;
|
||||||
import org.spongepowered.api.event.Listener;
|
import org.spongepowered.api.event.Listener;
|
||||||
import org.spongepowered.api.event.lifecycle.ConstructPluginEvent;
|
import org.spongepowered.api.event.lifecycle.ConstructPluginEvent;
|
||||||
import org.spongepowered.plugin.builtin.jvm.Plugin;
|
import org.spongepowered.plugin.builtin.jvm.Plugin;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
@Plugin("viabackwards")
|
@Plugin("viabackwards")
|
||||||
public class SpongePlugin implements ViaBackwardsPlatform {
|
public class SpongePlugin implements ViaBackwardsPlatform {
|
||||||
@SuppressWarnings("SpongeLogging")
|
@SuppressWarnings("SpongeLogging")
|
||||||
|
@ -29,7 +29,6 @@ import com.viaversion.viabackwards.api.ViaBackwardsPlatform;
|
|||||||
import com.viaversion.viabackwards.utils.VersionInfo;
|
import com.viaversion.viabackwards.utils.VersionInfo;
|
||||||
import com.viaversion.viaversion.api.Via;
|
import com.viaversion.viaversion.api.Via;
|
||||||
import com.viaversion.viaversion.velocity.util.LoggerWrapper;
|
import com.viaversion.viaversion.velocity.util.LoggerWrapper;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren