3
0
Mirror von https://github.com/ViaVersion/ViaVersion.git synchronisiert 2024-12-27 08:30:09 +01:00

Possibility to add 'isCompatible' with other types. Fixes crashes on a 1.8 server

Dieser Commit ist enthalten in:
Matsv 2016-05-21 20:54:26 +02:00
Ursprung 957284930e
Commit 50a3e03649
4 geänderte Dateien mit 22 neuen und 2 gelöschten Zeilen

Datei anzeigen

@ -117,7 +117,7 @@ public class PacketWrapper {
} }
} else { } else {
Pair<Type, Object> read = readableObjects.poll(); Pair<Type, Object> read = readableObjects.poll();
if (read.getKey().equals(type)) { if (read.getKey().equals(type) || (type.isCompatibleWith(read.getKey()) && type.getOutputClass().equals(read.getKey().getOutputClass()))) {
return (T) read.getValue(); return (T) read.getValue();
} else { } else {
if (type == Type.NOTHING) { if (type == Type.NOTHING) {
@ -173,7 +173,7 @@ public class PacketWrapper {
packetValues.addAll(readableObjects); packetValues.addAll(readableObjects);
readableObjects.clear(); readableObjects.clear();
// If the buffer has readable bytes, copy them. // If the buffer has readable bytes, copy them.
if(inputBuffer.readableBytes() > 0){ if (inputBuffer.readableBytes() > 0) {
passthrough(Type.REMAINING_BYTES); passthrough(Type.REMAINING_BYTES);
} }
} }

Datei anzeigen

@ -10,6 +10,8 @@ import us.myles.ViaVersion.api.minecraft.item.Item;
import us.myles.ViaVersion.api.type.types.*; import us.myles.ViaVersion.api.type.types.*;
import us.myles.ViaVersion.api.type.types.minecraft.*; import us.myles.ViaVersion.api.type.types.minecraft.*;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
@Getter @Getter
@ -68,6 +70,7 @@ public abstract class Type<T> implements ByteBufReader<T>, ByteBufWriter<T> {
/* Actual Class */ /* Actual Class */
private final Class<? super T> outputClass; private final Class<? super T> outputClass;
private final Set<Class<? extends Type>> compatibilities;
private final String typeName; private final String typeName;
public Type(Class<? super T> outputClass) { public Type(Class<? super T> outputClass) {
@ -77,6 +80,19 @@ public abstract class Type<T> implements ByteBufReader<T>, ByteBufWriter<T> {
public Type(String typeName, Class<? super T> outputClass) { public Type(String typeName, Class<? super T> outputClass) {
this.outputClass = outputClass; this.outputClass = outputClass;
this.typeName = typeName; this.typeName = typeName;
this.compatibilities = new HashSet<>();
}
public void addCompatibility(Class<? extends Type> claz) {
compatibilities.add(claz);
}
public void addCompatibility(Type claz) {
addCompatibility(claz.getClass());
}
public boolean isCompatibleWith(Type claz) {
return compatibilities.contains(claz.getClass());
} }
@Override @Override

Datei anzeigen

@ -3,6 +3,7 @@ package us.myles.ViaVersion.protocols.protocolsnapshotto1_9_3;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import us.myles.ViaVersion.api.minecraft.metadata.Metadata; import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.Type;
import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9TO1_8;
import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.NewType; import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.NewType;
import java.util.ArrayList; import java.util.ArrayList;
@ -11,6 +12,7 @@ import java.util.List;
public class MetaListSnapshotType extends Type<List<Metadata>> { public class MetaListSnapshotType extends Type<List<Metadata>> {
public MetaListSnapshotType() { public MetaListSnapshotType() {
super(List.class); super(List.class);
addCompatibility(Protocol1_9TO1_8.METADATA_LIST);
} }
@Override @Override

Datei anzeigen

@ -3,11 +3,13 @@ package us.myles.ViaVersion.protocols.protocolsnapshotto1_9_3;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import us.myles.ViaVersion.api.minecraft.metadata.Metadata; import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.Type;
import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9TO1_8;
import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.NewType; import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.NewType;
public class MetaSnapshotType extends Type<Metadata> { public class MetaSnapshotType extends Type<Metadata> {
public MetaSnapshotType() { public MetaSnapshotType() {
super(Metadata.class); super(Metadata.class);
addCompatibility(Protocol1_9TO1_8.METADATA);
} }
@Override @Override