Merge pull request #1568 from KennyTV/abstraction

Merge master into abstraction
This commit is contained in:
Myles 2019-12-11 09:11:56 +00:00 committed by GitHub
commit dd5c1bb1a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 85 additions and 58 deletions

View File

@ -1,4 +1,4 @@
# ViaVersion 2.1.3 - Spigot, Sponge, BungeeCord, Velocity
# ViaVersion 2.2.0 - Spigot, Sponge, BungeeCord, Velocity
[![Build Status](https://travis-ci.com/ViaVersion/ViaVersion.svg?branch=master)](https://travis-ci.com/ViaVersion/ViaVersion)
[![Discord](https://img.shields.io/badge/chat-on%20discord-blue.svg)](https://viaversion.com/discord)

View File

@ -18,10 +18,7 @@ import us.myles.ViaVersion.protocols.base.ProtocolInfo;
import us.myles.ViaVersion.util.PipelineUtil;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.*;
public class PacketWrapper {
public static final int PASSTHROUGH_ID = 1000;
@ -326,13 +323,14 @@ public class PacketWrapper {
// Other way if outgoing
Collections.reverse(protocols);
}
int index = 0;
int index = -1;
for (int i = 0; i < protocols.size(); i++) {
if (protocols.get(i).getClass().equals(packetProtocol)) {
index = skipCurrentPipeline ? (i + 1) : (i);
break;
}
}
if (index == -1) throw new NoSuchElementException(packetProtocol.getCanonicalName());
// Reset reader before we start
resetReader();

View File

@ -77,7 +77,7 @@ public class ProtocolVersion {
register(v1_14_2 = new ProtocolVersion(485, "1.14.2"));
register(v1_14_3 = new ProtocolVersion(490, "1.14.3"));
register(v1_14_4 = new ProtocolVersion(498, "1.14.4"));
register(v1_15 = new ProtocolVersion(571, "1.15"));
register(v1_15 = new ProtocolVersion(573, "1.15"));
register(unknown = new ProtocolVersion(-1, "UNKNOWN"));
}

View File

@ -2,70 +2,73 @@ package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.providers.blockentiti
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import us.myles.ViaVersion.api.Pair;
import us.myles.ViaVersion.api.Via;
import us.myles.ViaVersion.api.data.UserConnection;
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.providers.BlockEntityProvider;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class FlowerPotHandler implements BlockEntityProvider.BlockEntityHandler {
private static final Map<Pair<String, Byte>, Integer> flowers = new HashMap<>();
private static final Map<Pair<Byte, Byte>, Integer> flowersNumberId = new HashMap<>();
// Object -> string (id without namespace) or byte (numeric id)
private static final Map<Pair<?, Byte>, Integer> flowers = new ConcurrentHashMap<>();
static {
register("minecraft:air", (byte) 0, (byte) 0, 5265);
register("minecraft:sapling", (byte) 6, (byte) 0, 5266);
register("minecraft:sapling", (byte) 6, (byte) 1, 5267);
register("minecraft:sapling", (byte) 6, (byte) 2, 5268);
register("minecraft:sapling", (byte) 6, (byte) 3, 5269);
register("minecraft:sapling", (byte) 6, (byte) 4, 5270);
register("minecraft:sapling", (byte) 6, (byte) 5, 5271);
register("minecraft:tallgrass", (byte) 31, (byte) 2, 5272);
register("minecraft:yellow_flower", (byte) 37, (byte) 0, 5273);
register("minecraft:red_flower", (byte) 38, (byte) 0, 5274);
register("minecraft:red_flower", (byte) 38, (byte) 1, 5275);
register("minecraft:red_flower", (byte) 38, (byte) 2, 5276);
register("minecraft:red_flower", (byte) 38, (byte) 3, 5277);
register("minecraft:red_flower", (byte) 38, (byte) 4, 5278);
register("minecraft:red_flower", (byte) 38, (byte) 5, 5279);
register("minecraft:red_flower", (byte) 38, (byte) 6, 5280);
register("minecraft:red_flower", (byte) 38, (byte) 7, 5281);
register("minecraft:red_flower", (byte) 38, (byte) 8, 5282);
register("minecraft:red_mushroom", (byte) 40, (byte) 0, 5283);
register("minecraft:brown_mushroom", (byte) 39, (byte) 0, 5284);
register("minecraft:deadbush", (byte) 32, (byte) 0, 5285);
register("minecraft:cactus", (byte) 81, (byte) 0, 5286);
register("air", (byte) 0, (byte) 0, 5265);
register("sapling", (byte) 6, (byte) 0, 5266);
register("sapling", (byte) 6, (byte) 1, 5267);
register("sapling", (byte) 6, (byte) 2, 5268);
register("sapling", (byte) 6, (byte) 3, 5269);
register("sapling", (byte) 6, (byte) 4, 5270);
register("sapling", (byte) 6, (byte) 5, 5271);
register("tallgrass", (byte) 31, (byte) 2, 5272);
register("yellow_flower", (byte) 37, (byte) 0, 5273);
register("red_flower", (byte) 38, (byte) 0, 5274);
register("red_flower", (byte) 38, (byte) 1, 5275);
register("red_flower", (byte) 38, (byte) 2, 5276);
register("red_flower", (byte) 38, (byte) 3, 5277);
register("red_flower", (byte) 38, (byte) 4, 5278);
register("red_flower", (byte) 38, (byte) 5, 5279);
register("red_flower", (byte) 38, (byte) 6, 5280);
register("red_flower", (byte) 38, (byte) 7, 5281);
register("red_flower", (byte) 38, (byte) 8, 5282);
register("red_mushroom", (byte) 40, (byte) 0, 5283);
register("brown_mushroom", (byte) 39, (byte) 0, 5284);
register("deadbush", (byte) 32, (byte) 0, 5285);
register("cactus", (byte) 81, (byte) 0, 5286);
}
public static void register(String identifier, byte numbericBlockId, byte blockData, int newId) {
flowers.put(new Pair<>(identifier, blockData), newId);
flowersNumberId.put(new Pair<>(numbericBlockId, blockData), newId);
flowers.put(new Pair<>(numbericBlockId, blockData), newId);
}
@Override
public int transform(UserConnection user, CompoundTag tag) {
Object item = tag.get("Item").getValue();
byte data = ((Number) tag.get("Data").getValue()).byteValue();
Object item = tag.contains("Item") ? tag.get("Item").getValue() : null;
Object data = tag.contains("Data") ? tag.get("Data").getValue() : null;
Pair<?, Byte> pair = item instanceof Number
? new Pair<>(((Number) item).byteValue(), data)
: new Pair<>((String) item, data);
// Return air on empty string
if (item instanceof String && ((String) item).isEmpty())
return 5265;
else if (flowers.containsKey(pair)) {
return flowers.get(pair);
} else if (flowersNumberId.containsKey(pair)) {
return flowersNumberId.get(pair);
// Convert item to String without namespace or to Byte
if (item instanceof String) {
item = ((String) item).replace("minecraft:", "");
} else if (item instanceof Number) {
item = ((Number) item).byteValue();
} else {
if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) {
Via.getPlatform().getLogger().warning("Could not find flowerpot content " + item + " for " + tag);
}
item = (byte) 0;
}
return -1;
// Convert data to Byte
if (data instanceof Number) {
data = ((Number) data).byteValue();
} else {
data = (byte) 0;
}
Integer flower = flowers.get(new Pair<>(item, (byte) data));
if (flower != null) return flower;
flower = flowers.get(new Pair<>(item, (byte) 0));
if (flower != null) return flower;
return 5265; // Fallback to empty pot
}
}

View File

@ -236,9 +236,6 @@ public class Protocol1_15To1_14_4 extends Protocol {
registerOutgoing(State.PLAY, 0x58, 0x59);
registerOutgoing(State.PLAY, 0x59, 0x5A);
registerOutgoing(State.PLAY, 0x5C, 0x08);
}
public static int getNewSoundId(int id) {

View File

@ -2,6 +2,7 @@ package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets;
import us.myles.ViaVersion.api.PacketWrapper;
import us.myles.ViaVersion.api.entities.Entity1_15Types;
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
import us.myles.ViaVersion.api.protocol.Protocol;
import us.myles.ViaVersion.api.remapper.PacketHandler;
import us.myles.ViaVersion.api.remapper.PacketRemapper;
@ -12,6 +13,7 @@ import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.Protocol1_15To1_14_4;
import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.metadata.MetadataRewriter1_15To1_14_4;
import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.storage.EntityTracker1_15;
import java.util.List;
import java.util.UUID;
public class EntityPackets {
@ -73,7 +75,6 @@ public class EntityPackets {
map(Type.SHORT); // 9 - Velocity X
map(Type.SHORT); // 10 - Velocity Y
map(Type.SHORT); // 11 - Velocity Z
map(Types1_14.METADATA_LIST, Type.NOTHING); // removed - probably sent in an update packet?
handler(new PacketHandler() {
@Override
@ -83,6 +84,13 @@ public class EntityPackets {
Entity1_15Types.EntityType entityType = Entity1_15Types.getTypeFromId(getNewEntityId(typeId));
wrapper.user().get(EntityTracker1_15.class).addEntity(entityId, entityType);
wrapper.set(Type.VAR_INT, 1, entityType.getId());
List<Metadata> metadata = wrapper.read(Types1_14.METADATA_LIST);
metadataRewriter.handleMetadata(entityId, metadata, wrapper.user());
PacketWrapper metadataUpdate = wrapper.create(0x44);
metadataUpdate.write(Type.VAR_INT, entityId);
metadataUpdate.write(Types1_14.METADATA_LIST, metadata);
metadataUpdate.send(Protocol1_15To1_14_4.class);
}
});
}
@ -99,15 +107,20 @@ public class EntityPackets {
map(Type.DOUBLE); // 4 - Z
map(Type.BYTE); // 5 - Yaw
map(Type.BYTE); // 6 - Pitch
map(Types1_14.METADATA_LIST, Type.NOTHING); // removed - probably sent in an update packet?
handler(new PacketHandler() {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
int entityId = wrapper.get(Type.VAR_INT, 0);
Entity1_15Types.EntityType entityType = Entity1_15Types.EntityType.PLAYER;
wrapper.user().get(EntityTracker1_15.class).addEntity(entityId, entityType);
List<Metadata> metadata = wrapper.read(Types1_14.METADATA_LIST);
metadataRewriter.handleMetadata(entityId, metadata, wrapper.user());
PacketWrapper metadataUpdate = wrapper.create(0x44);
metadataUpdate.write(Type.VAR_INT, entityId);
metadataUpdate.write(Types1_14.METADATA_LIST, metadata);
metadataUpdate.send(Protocol1_15To1_14_4.class);
}
});
}

View File

@ -48,6 +48,7 @@ public class InventoryPackets {
wrapper.passthrough(Type.INT);
wrapper.passthrough(Type.INT);
wrapper.passthrough(Type.FLOAT);
wrapper.passthrough(Type.INT);
}
wrapper.passthrough(Type.VAR_INT);

View File

@ -9,7 +9,6 @@ import us.myles.ViaVersion.api.remapper.PacketHandler;
import us.myles.ViaVersion.api.remapper.PacketRemapper;
import us.myles.ViaVersion.api.type.Type;
import us.myles.ViaVersion.packets.State;
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.packets.InventoryPackets;
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.types.Chunk1_14Type;
import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.Protocol1_15To1_14_4;
import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.types.Chunk1_15Type;
@ -18,6 +17,22 @@ import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
public class WorldPackets {
public static void register(Protocol protocol) {
// Acknowledge player digging
protocol.registerOutgoing(State.PLAY, 0x5C, 0x08, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.POSITION1_14);
map(Type.VAR_INT);
handler(new PacketHandler() {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
int blockState = wrapper.get(Type.VAR_INT, 0);
wrapper.set(Type.VAR_INT, 0, Protocol1_15To1_14_4.getNewBlockStateId(blockState));
}
});
}
});
// Block Action
protocol.registerOutgoing(State.PLAY, 0x0A, 0x0B, new PacketRemapper() {
@Override