Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-11-03 14:50:30 +01:00
Possibility to add 'isCompatible' with other types. Fixes crashes on a 1.8 server
Dieser Commit ist enthalten in:
Ursprung
957284930e
Commit
50a3e03649
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren