3
0
Mirror von https://github.com/ViaVersion/ViaBackwards.git synchronisiert 2024-12-27 00:22:53 +01:00

Start working on 5.0.0

Dieser Commit ist enthalten in:
Nassim Jahnke 2021-09-05 13:23:58 +02:00
Ursprung abb1803aaf
Commit 5e7371d39b
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: EF6771C01F6EF02F
66 geänderte Dateien mit 337 neuen und 627 gelöschten Zeilen

Datei anzeigen

@ -21,7 +21,7 @@ tasks {
} }
java { java {
javaTarget(8) javaTarget(17)
withSourcesJar() withSourcesJar()
} }

Datei anzeigen

@ -68,7 +68,7 @@ import java.util.logging.Logger;
public interface ViaBackwardsPlatform { public interface ViaBackwardsPlatform {
String MINIMUM_VV_VERSION = "4.10.2"; String MINIMUM_VV_VERSION = "5.0.0";
/** /**
* Initialize ViaBackwards. * Initialize ViaBackwards.

Datei anzeigen

@ -41,12 +41,12 @@ public class EntityPositionHandler {
this.storageSupplier = storageSupplier; this.storageSupplier = storageSupplier;
} }
public void cacheEntityPosition(PacketWrapper wrapper, boolean create, boolean relative) throws Exception { public void cacheEntityPosition(PacketWrapper wrapper, boolean create, boolean relative) {
cacheEntityPosition(wrapper, cacheEntityPosition(wrapper,
wrapper.get(Type.DOUBLE, 0), wrapper.get(Type.DOUBLE, 1), wrapper.get(Type.DOUBLE, 2), create, relative); wrapper.get(Type.DOUBLE, 0), wrapper.get(Type.DOUBLE, 1), wrapper.get(Type.DOUBLE, 2), create, relative);
} }
public void cacheEntityPosition(PacketWrapper wrapper, double x, double y, double z, boolean create, boolean relative) throws Exception { public void cacheEntityPosition(PacketWrapper wrapper, double x, double y, double z, boolean create, boolean relative) {
int entityId = wrapper.get(Type.VAR_INT, 0); int entityId = wrapper.get(Type.VAR_INT, 0);
StoredEntityData storedEntity = entityRewriter.tracker(wrapper.user()).entityData(entityId); StoredEntityData storedEntity = entityRewriter.tracker(wrapper.user()).entityData(entityId);
if (storedEntity == null) { if (storedEntity == null) {

Datei anzeigen

@ -22,15 +22,15 @@ public abstract class EntityPositionStorage {
private double y; private double y;
private double z; private double z;
public double getX() { public double x() {
return x; return x;
} }
public double getY() { public double y() {
return y; return y;
} }
public double getZ() { public double z() {
return z; return z;
} }

Datei anzeigen

@ -29,15 +29,15 @@ public abstract class PlayerPositionStorage implements StorableObject {
protected PlayerPositionStorage() { protected PlayerPositionStorage() {
} }
public double getX() { public double x() {
return x; return x;
} }
public double getY() { public double y() {
return y; return y;
} }
public double getZ() { public double z() {
return z; return z;
} }
@ -53,7 +53,7 @@ public abstract class PlayerPositionStorage implements StorableObject {
this.z = z; this.z = z;
} }
public void setCoordinates(PacketWrapper wrapper, boolean relative) throws Exception { public void setCoordinates(PacketWrapper wrapper, boolean relative) {
setCoordinates(wrapper.get(Type.DOUBLE, 0), wrapper.get(Type.DOUBLE, 1), wrapper.get(Type.DOUBLE, 2), relative); setCoordinates(wrapper.get(Type.DOUBLE, 0), wrapper.get(Type.DOUBLE, 1), wrapper.get(Type.DOUBLE, 2), relative);
} }

Datei anzeigen

@ -22,12 +22,7 @@ import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import java.util.List; import java.util.List;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public final class WrappedMetadata { public record WrappedMetadata(List<Metadata> metadataList) {
private final List<Metadata> metadataList;
public WrappedMetadata(List<Metadata> metadataList) {
this.metadataList = metadataList;
}
public boolean has(Metadata data) { public boolean has(Metadata data) {
return this.metadataList.contains(data); return this.metadataList.contains(data);
@ -53,13 +48,4 @@ public final class WrappedMetadata {
} }
return null; return null;
} }
public List<Metadata> metadataList() {
return metadataList;
}
@Override
public String toString() {
return "MetaStorage{" + "metaDataList=" + metadataList + '}';
}
} }

Datei anzeigen

@ -146,29 +146,18 @@ public class EnchantmentRewriter {
} }
public static String getRomanNumber(int number) { public static String getRomanNumber(int number) {
switch (number) { return switch (number) {
case 1: case 1 -> "I";
return "I"; case 2 -> "II";
case 2: case 3 -> "III";
return "II"; case 4 -> "IV";
case 3: case 5 -> "V";
return "III"; case 6 -> "VI";
case 4: case 7 -> "VII";
return "IV"; case 8 -> "VIII";
case 5: case 9 -> "IX";
return "V"; case 10 -> "X";
case 6: default -> Integer.toString(number);
return "VI"; };
case 7:
return "VII";
case 8:
return "VIII";
case 9:
return "IX";
case 10:
return "X";
default:
return Integer.toString(number);
}
} }
} }

Datei anzeigen

@ -138,7 +138,7 @@ public abstract class EntityRewriter<C extends ClientboundPacketType, T extends
* @param wrapper packet wrapper * @param wrapper packet wrapper
* @return unmapped (!) entity type * @return unmapped (!) entity type
*/ */
protected EntityType trackAndMapEntity(PacketWrapper wrapper) throws Exception { protected EntityType trackAndMapEntity(PacketWrapper wrapper) {
int typeId = wrapper.get(Type.VAR_INT, 1); int typeId = wrapper.get(Type.VAR_INT, 1);
EntityType entityType = typeFromId(typeId); EntityType entityType = typeFromId(typeId);
tracker(wrapper.user()).addEntity(wrapper.get(Type.VAR_INT, 0), entityType); tracker(wrapper.user()).addEntity(wrapper.get(Type.VAR_INT, 0), entityType);

Datei anzeigen

@ -279,12 +279,12 @@ public abstract class LegacyBlockItemRewriter<C extends ClientboundPacketType, S
tags.put(pos, tag); tags.put(pos, tag);
// Handle given Block Entities // Handle given Block Entities
if (pos.getY() < 0 || pos.getY() > 255) continue; // 1.17 if (pos.y() < 0 || pos.y() > 255) continue; // 1.17
ChunkSection section = chunk.getSections()[pos.getY() >> 4]; ChunkSection section = chunk.getSections()[pos.y() >> 4];
if (section == null) continue; if (section == null) continue;
int block = section.palette(PaletteType.BLOCKS).idAt(pos.getX(), pos.getY() & 0xF, pos.getZ()); int block = section.palette(PaletteType.BLOCKS).idAt(pos.x(), pos.y() & 0xF, pos.z());
MappedLegacyBlockItem settings = getMappedBlock(block); MappedLegacyBlockItem settings = getMappedBlock(block);
if (settings != null && settings.hasBlockEntityHandler()) { if (settings != null && settings.hasBlockEntityHandler()) {
@ -379,51 +379,10 @@ public abstract class LegacyBlockItemRewriter<C extends ClientboundPacketType, S
return BackwardsMappingDataLoader.INSTANCE.loadFromDataDir(name); return BackwardsMappingDataLoader.INSTANCE.loadFromDataDir(name);
} }
private static final class Pos { private record Pos(int x, short y, int z) {
private final int x; public Pos( int x, int y, int z){
private final short y; this(x, (short) y, z);
private final int z;
private Pos(int x, int y, int z) {
this.x = x;
this.y = (short) y;
this.z = z;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getZ() {
return z;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Pos pos = (Pos) o;
if (x != pos.x) return false;
if (y != pos.y) return false;
return z == pos.z;
}
@Override
public int hashCode() {
int result = x;
result = 31 * result + y;
result = 31 * result + z;
return result;
}
@Override
public String toString() {
return "Pos{" + "x=" + x + ", y=" + y + ", z=" + z + '}';
} }
} }
} }

Datei anzeigen

@ -155,8 +155,8 @@ public class LegacyEnchantmentRewriter {
} }
Tag hideFlags = tag.remove(nbtTagName + "|oldHideFlags"); Tag hideFlags = tag.remove(nbtTagName + "|oldHideFlags");
if (hideFlags instanceof IntTag) { if (hideFlags instanceof IntTag intTag) {
tag.putInt("HideFlags", ((IntTag) hideFlags).asByte()); tag.putInt("HideFlags", intTag.asByte());
} else { } else {
tag.remove("HideFlags"); tag.remove("HideFlags");
} }

Datei anzeigen

@ -170,13 +170,13 @@ public abstract class LegacyEntityRewriter<C extends ClientboundPacketType, T ex
} }
@Deprecated @Deprecated
protected void addTrackedEntity(PacketWrapper wrapper, int entityId, EntityType type) throws Exception { protected void addTrackedEntity(PacketWrapper wrapper, int entityId, EntityType type) {
tracker(wrapper.user()).addEntity(entityId, type); tracker(wrapper.user()).addEntity(entityId, type);
} }
@FunctionalInterface @FunctionalInterface
protected interface IdSetter { protected interface IdSetter {
void setId(PacketWrapper wrapper, int id) throws Exception; void setId(PacketWrapper wrapper, int id);
} }
} }

Datei anzeigen

@ -50,11 +50,11 @@ public abstract class LegacySoundRewriter<T extends BackwardsProtocol<?, ?, ?, ?
public int handleSounds(int soundId) { public int handleSounds(int soundId) {
int newSoundId = soundId; int newSoundId = soundId;
SoundData data = soundRewrites.get(soundId); SoundData data = soundRewrites.get(soundId);
if (data != null) return data.getReplacementSound(); if (data != null) return data.replacementSound();
for (Int2ObjectMap.Entry<SoundData> entry : soundRewrites.int2ObjectEntrySet()) { for (Int2ObjectMap.Entry<SoundData> entry : soundRewrites.int2ObjectEntrySet()) {
if (soundId > entry.getIntKey()) { if (soundId > entry.getIntKey()) {
if (entry.getValue().isAdded()) { if (entry.getValue().added()) {
newSoundId--; newSoundId--;
} else { } else {
newSoundId++; newSoundId++;
@ -66,41 +66,14 @@ public abstract class LegacySoundRewriter<T extends BackwardsProtocol<?, ?, ?, ?
public boolean hasPitch(int soundId) { public boolean hasPitch(int soundId) {
SoundData data = soundRewrites.get(soundId); SoundData data = soundRewrites.get(soundId);
return data != null && data.isChangePitch(); return data != null && data.changePitch();
} }
public float handlePitch(int soundId) { public float handlePitch(int soundId) {
SoundData data = soundRewrites.get(soundId); SoundData data = soundRewrites.get(soundId);
return data != null ? data.getNewPitch() : 1F; return data != null ? data.newPitch() : 1F;
} }
public static final class SoundData { public record SoundData(int replacementSound, boolean changePitch, float newPitch, boolean added) {
private final int replacementSound;
private final boolean changePitch;
private final float newPitch;
private final boolean added;
public SoundData(int replacementSound, boolean changePitch, float newPitch, boolean added) {
this.replacementSound = replacementSound;
this.changePitch = changePitch;
this.newPitch = newPitch;
this.added = added;
}
public int getReplacementSound() {
return replacementSound;
}
public boolean isChangePitch() {
return changePitch;
}
public float getNewPitch() {
return newPitch;
}
public boolean isAdded() {
return added;
}
} }
} }

Datei anzeigen

@ -70,8 +70,10 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter<ClientboundPac
handler(wrapper -> { handler(wrapper -> {
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.isEmpty()) {
return; return;
}
ChestedHorseStorage storage = horse.get(); ChestedHorseStorage storage = horse.get();
int currentSlot = wrapper.get(Type.SHORT, 0); int currentSlot = wrapper.get(Type.SHORT, 0);
wrapper.set(Type.SHORT, 0, ((Integer) (currentSlot = getNewSlotId(storage, currentSlot))).shortValue()); wrapper.set(Type.SHORT, 0, ((Integer) (currentSlot = getNewSlotId(storage, currentSlot))).shortValue());
@ -94,8 +96,9 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter<ClientboundPac
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.isEmpty()) {
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);
@ -156,8 +159,9 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter<ClientboundPac
handler(wrapper -> { handler(wrapper -> {
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.isEmpty()) {
return; return;
}
ChestedHorseStorage storage = horse.get(); ChestedHorseStorage storage = horse.get();
int clickSlot = wrapper.get(Type.SHORT, 0); int clickSlot = wrapper.get(Type.SHORT, 0);
int correctSlot = getOldSlotId(storage, clickSlot); int correctSlot = getOldSlotId(storage, clickSlot);

Datei anzeigen

@ -221,20 +221,14 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<ClientboundPackets1_
*/ */
filter().type(EntityTypes1_11.EntityType.ZOMBIE).handler((event, meta) -> { filter().type(EntityTypes1_11.EntityType.ZOMBIE).handler((event, meta) -> {
switch (meta.id()) { switch (meta.id()) {
case 13: case 13 -> event.cancel();
event.cancel(); case 14 -> event.setIndex(15);
return; case 15 -> event.setIndex(14);
case 14: case 16 -> {
event.setIndex(15);
break;
case 15:
event.setIndex(14);
break;
// Profession // Profession
case 16:
event.setIndex(13); event.setIndex(13);
meta.setValue(1 + (int) meta.getValue()); meta.setValue(1 + (int) meta.getValue());
break; }
} }
}); });
@ -297,18 +291,18 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<ClientboundPackets1_
int index = event.index(); int index = event.index();
// Store them for later (: // Store them for later (:
switch (index) { switch (index) {
case 16: case 16 -> {
storage.setLiamaStrength((int) meta.getValue()); storage.setLiamaStrength((int) meta.getValue());
event.cancel(); event.cancel();
break; }
case 17: case 17 -> {
storage.setLiamaCarpetColor((int) meta.getValue()); storage.setLiamaCarpetColor((int) meta.getValue());
event.cancel(); event.cancel();
break; }
case 18: case 18 -> {
storage.setLiamaVariant((int) meta.getValue()); storage.setLiamaVariant((int) meta.getValue());
event.cancel(); event.cancel();
break; }
} }
}); });

Datei anzeigen

@ -30,9 +30,9 @@ import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPac
import com.viaversion.viaversion.util.ComponentUtil; import com.viaversion.viaversion.util.ComponentUtil;
public class PlayerPackets1_11 { public class PlayerPackets1_11 {
private static final ValueTransformer<Short, Float> TO_NEW_FLOAT = new ValueTransformer<Short, Float>(Type.FLOAT) { private static final ValueTransformer<Short, Float> TO_NEW_FLOAT = new ValueTransformer<>(Type.FLOAT) {
@Override @Override
public Float transform(PacketWrapper wrapper, Short inputValue) throws Exception { public Float transform(PacketWrapper wrapper, Short inputValue) {
return inputValue / 16f; return inputValue / 16f;
} }
}; };

Datei anzeigen

@ -27,6 +27,7 @@ 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;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.Protocol1_9To1_8; import com.viaversion.viaversion.protocols.protocol1_9to1_8.Protocol1_9To1_8;
import com.viaversion.viaversion.util.Key; import com.viaversion.viaversion.util.Key;
import java.util.Locale;
public class ShoulderTracker extends StoredObject { public class ShoulderTracker extends StoredObject {
private int entityId; private int entityId;
@ -85,7 +86,7 @@ public class ShoulderTracker extends StoredObject {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
for (String s : array) { for (String s : array) {
builder.append(s.substring(0, 1).toUpperCase()) builder.append(s.substring(0, 1).toUpperCase(Locale.ROOT))
.append(s.substring(1)) .append(s.substring(1))
.append(" "); .append(" ");
} }

Datei anzeigen

@ -220,12 +220,12 @@ public class BlockItemPackets1_12 extends LegacyBlockItemRewriter<ClientboundPac
boolean hasLongArrayTag = false; boolean hasLongArrayTag = false;
while (iterator.hasNext()) { while (iterator.hasNext()) {
Map.Entry<String, Tag> entry = iterator.next(); Map.Entry<String, Tag> entry = iterator.next();
if (entry.getValue() instanceof CompoundTag) { if (entry.getValue() instanceof CompoundTag tag) {
CompoundTag nestedBackupTag = new CompoundTag(); CompoundTag nestedBackupTag = new CompoundTag();
backupTag.put(entry.getKey(), nestedBackupTag); backupTag.put(entry.getKey(), nestedBackupTag);
hasLongArrayTag |= handleNbtToClient((CompoundTag) entry.getValue(), nestedBackupTag); hasLongArrayTag |= handleNbtToClient(tag, nestedBackupTag);
} else if (entry.getValue() instanceof LongArrayTag) { } else if (entry.getValue() instanceof LongArrayTag tag) {
backupTag.put(entry.getKey(), fromLongArrayTag((LongArrayTag) entry.getValue())); backupTag.put(entry.getKey(), fromLongArrayTag(tag));
iterator.remove(); iterator.remove();
hasLongArrayTag = true; hasLongArrayTag = true;
} }
@ -239,9 +239,8 @@ public class BlockItemPackets1_12 extends LegacyBlockItemRewriter<ClientboundPac
super.handleItemToServer(connection, item); super.handleItemToServer(connection, item);
if (item.tag() != null) { if (item.tag() != null) {
Tag tag = item.tag().remove("Via|LongArrayTags"); if (item.tag().remove("Via|LongArrayTags") instanceof CompoundTag tag) {
if (tag instanceof CompoundTag) { handleNbtToServer(item.tag(), tag);
handleNbtToServer(item.tag(), (CompoundTag) tag);
} }
} }

Datei anzeigen

@ -30,7 +30,7 @@ import com.viaversion.viaversion.rewriter.ComponentRewriter;
public class ChatPackets1_12 extends RewriterBase<Protocol1_11_1To1_12> { public class ChatPackets1_12 extends RewriterBase<Protocol1_11_1To1_12> {
public static final ComponentRewriter<ClientboundPackets1_12> COMPONENT_REWRITER = new ComponentRewriter<ClientboundPackets1_12>(null, ComponentRewriter.ReadType.JSON) { public static final ComponentRewriter<ClientboundPackets1_12> COMPONENT_REWRITER = new ComponentRewriter<>(null, ComponentRewriter.ReadType.JSON) {
@Override @Override
public void processText(UserConnection connection, JsonElement element) { public void processText(UserConnection connection, JsonElement element) {
super.processText(connection, element); super.processText(connection, element);

Datei anzeigen

@ -54,7 +54,7 @@ public class Protocol1_12_2To1_13 extends BackwardsProtocol<ClientboundPackets1_
public static final BackwardsMappings MAPPINGS = new BackwardsMappings(); public static final BackwardsMappings MAPPINGS = new BackwardsMappings();
private final EntityPackets1_13 entityRewriter = new EntityPackets1_13(this); private final EntityPackets1_13 entityRewriter = new EntityPackets1_13(this);
private final BlockItemPackets1_13 blockItemPackets = new BlockItemPackets1_13(this); private final BlockItemPackets1_13 blockItemPackets = new BlockItemPackets1_13(this);
private final TranslatableRewriter<ClientboundPackets1_13> translatableRewriter = new TranslatableRewriter<ClientboundPackets1_13>(this, ComponentRewriter.ReadType.JSON) { private final TranslatableRewriter<ClientboundPackets1_13> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON) {
@Override @Override
protected void handleTranslate(JsonObject root, String translate) { protected void handleTranslate(JsonObject root, String translate) {
String mappedKey = mappedTranslationKey(translate); String mappedKey = mappedTranslationKey(translate);
@ -63,7 +63,7 @@ public class Protocol1_12_2To1_13 extends BackwardsProtocol<ClientboundPackets1_
} }
} }
}; };
private final TranslatableRewriter<ClientboundPackets1_13> translatableToLegacyRewriter = new TranslatableRewriter<ClientboundPackets1_13>(this, ComponentRewriter.ReadType.JSON) { private final TranslatableRewriter<ClientboundPackets1_13> translatableToLegacyRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON) {
@Override @Override
protected void handleTranslate(JsonObject root, String translate) { protected void handleTranslate(JsonObject root, String translate) {
String mappedKey = mappedTranslationKey(translate); String mappedKey = mappedTranslationKey(translate);

Datei anzeigen

@ -64,18 +64,11 @@ public class BackwardsMappings extends com.viaversion.viabackwards.api.data.Back
int mappedId = super.getNewBlockStateId(id); int mappedId = super.getNewBlockStateId(id);
// https://github.com/ViaVersion/ViaBackwards/issues/290 // https://github.com/ViaVersion/ViaBackwards/issues/290
switch (mappedId) { return switch (mappedId) {
case 1595: case 1595, 1596, 1597 -> 1584; // brown mushroom block
case 1596: case 1611, 1612, 1613 -> 1600; // red mushroom block
case 1597: default -> mappedId;
return 1584; // brown mushroom block };
case 1611:
case 1612:
case 1613:
return 1600; // red mushroom block
default:
return mappedId;
}
} }
@Override @Override

Datei anzeigen

@ -20,23 +20,15 @@ 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;
public class EntityTypeMapping { public class EntityTypeMapping {
private static final Int2IntMap TYPES = new Int2IntOpenHashMap(); private static final Int2IntMap TYPES = new Int2IntOpenHashMap();
static { static {
TYPES.defaultReturnValue(-1); TYPES.defaultReturnValue(-1);
try { for (Int2IntMap.Entry entry : EntityTypeRewriter.getEntityTypes().int2IntEntrySet()) {
Field field = EntityTypeRewriter.class.getDeclaredField("ENTITY_TYPES");
field.setAccessible(true);
Int2IntMap entityTypes = (Int2IntMap) field.get(null);
for (Int2IntMap.Entry entry : entityTypes.int2IntEntrySet()) {
EntityTypeMapping.TYPES.put(entry.getIntValue(), entry.getIntKey()); EntityTypeMapping.TYPES.put(entry.getIntValue(), entry.getIntKey());
} }
} catch (NoSuchFieldException | IllegalAccessException ex) {
ex.printStackTrace();
}
} }
public static int getOldId(int type1_13) { public static int getOldId(int type1_13) {

Datei anzeigen

@ -24,6 +24,7 @@ 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 java.util.List; import java.util.List;
import org.checkerframework.checker.nullness.qual.Nullable;
public class ParticleMapping { public class ParticleMapping {
private static final ParticleData[] particles; private static final ParticleData[] particles;
@ -31,7 +32,7 @@ public class ParticleMapping {
static { static {
ParticleHandler blockHandler = new ParticleHandler() { ParticleHandler blockHandler = new ParticleHandler() {
@Override @Override
public int[] rewrite(Protocol1_12_2To1_13 protocol, PacketWrapper wrapper) throws Exception { public int[] rewrite(Protocol1_12_2To1_13 protocol, PacketWrapper wrapper) {
return rewrite(wrapper.read(Type.VAR_INT)); return rewrite(wrapper.read(Type.VAR_INT));
} }
@ -63,13 +64,13 @@ public class ParticleMapping {
rewrite(4), // (4->4) minecraft:bubble -> bubble rewrite(4), // (4->4) minecraft:bubble -> bubble
rewrite(29), // (5->29) minecraft:cloud -> cloud rewrite(29), // (5->29) minecraft:cloud -> cloud
rewrite(9), // (6->9) minecraft:crit -> crit rewrite(9), // (6->9) minecraft:crit -> crit
rewrite(44), // (7->44) minecraft:damage_indicator -> damageIndicator rewrite(44), // (7->44) minecraft:damage_indicator -> damageIndicator
rewrite(42), // (8->42) minecraft:dragon_breath -> dragonbreath rewrite(42), // (8->42) minecraft:dragon_breath -> dragonbreath
rewrite(19), // (9->19) minecraft:dripping_lava -> dripLava rewrite(19), // (9->19) minecraft:dripping_lava -> dripLava
rewrite(18), // (10->18) minecraft:dripping_water -> dripWater rewrite(18), // (10->18) minecraft:dripping_water -> dripWater
rewrite(30, new ParticleHandler() { rewrite(30, new ParticleHandler() {
@Override @Override
public int[] rewrite(Protocol1_12_2To1_13 protocol, PacketWrapper wrapper) throws Exception { public int[] rewrite(Protocol1_12_2To1_13 protocol, PacketWrapper wrapper) {
float r = wrapper.read(Type.FLOAT); float r = wrapper.read(Type.FLOAT);
float g = wrapper.read(Type.FLOAT); float g = wrapper.read(Type.FLOAT);
float b = wrapper.read(Type.FLOAT); float b = wrapper.read(Type.FLOAT);
@ -107,7 +108,7 @@ public class ParticleMapping {
rewrite(14), // (26->14) minecraft:instant_effect -> instantSpell rewrite(14), // (26->14) minecraft:instant_effect -> instantSpell
rewrite(36, new ParticleHandler() { rewrite(36, new ParticleHandler() {
@Override @Override
public int[] rewrite(Protocol1_12_2To1_13 protocol, PacketWrapper wrapper) throws Exception { public int[] rewrite(Protocol1_12_2To1_13 protocol, PacketWrapper wrapper) {
return rewrite(protocol, wrapper.read(Type.ITEM1_13)); return rewrite(protocol, wrapper.read(Type.ITEM1_13));
} }
@ -160,7 +161,7 @@ public class ParticleMapping {
public interface ParticleHandler { public interface ParticleHandler {
int[] rewrite(Protocol1_12_2To1_13 protocol, PacketWrapper wrapper) throws Exception; int[] rewrite(Protocol1_12_2To1_13 protocol, PacketWrapper wrapper);
int[] rewrite(Protocol1_12_2To1_13 protocol, List<Particle.ParticleData<?>> data); int[] rewrite(Protocol1_12_2To1_13 protocol, List<Particle.ParticleData<?>> data);
@ -182,12 +183,12 @@ public class ParticleMapping {
this(historyId, null); this(historyId, null);
} }
public int[] rewriteData(Protocol1_12_2To1_13 protocol, PacketWrapper wrapper) throws Exception { public int @Nullable [] rewriteData(Protocol1_12_2To1_13 protocol, PacketWrapper wrapper) {
if (handler == null) return null; if (handler == null) return null;
return handler.rewrite(protocol, wrapper); return handler.rewrite(protocol, wrapper);
} }
public int[] rewriteMeta(Protocol1_12_2To1_13 protocol, List<Particle.ParticleData<?>> data) { public int @Nullable [] rewriteMeta(Protocol1_12_2To1_13 protocol, List<Particle.ParticleData<?>> data) {
if (handler == null) return null; if (handler == null) return null;
return handler.rewrite(protocol, data); return handler.rewrite(protocol, data);
} }

Datei anzeigen

@ -358,28 +358,13 @@ public class BlockItemPackets1_13 extends BackwardsItemRewriter<ClientboundPacke
if (chunk.isBiomeData()) { if (chunk.isBiomeData()) {
for (int i = 0; i < 256; i++) { for (int i = 0; i < 256; i++) {
int biome = chunk.getBiomeData()[i]; int biome = chunk.getBiomeData()[i];
int newId = -1; int newId = switch (biome) {
switch (biome) { case 40, 41, 42, 43 -> 9; // end biomes
case 40: // end biomes case 47, 48, 49 -> 24; // deep ocean biomes
case 41: case 50 -> 10; // deep frozen... let's just pick the frozen variant
case 42: case 44, 45, 46 -> 0; // the other new ocean biomes
case 43: default -> -1;
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) { if (newId != -1) {
chunk.getBiomeData()[i] = newId; chunk.getBiomeData()[i] = newId;
@ -978,7 +963,7 @@ public class BlockItemPackets1_13 extends BackwardsItemRewriter<ClientboundPacke
} }
// TODO find a less hacky way to do this (https://bugs.mojang.com/browse/MC-74231) // TODO find a less hacky way to do this (https://bugs.mojang.com/browse/MC-74231)
private static void flowerPotSpecialTreatment(UserConnection user, int blockState, Position position) throws Exception { private static void flowerPotSpecialTreatment(UserConnection user, int blockState, Position position) {
if (FlowerPotHandler.isFlowah(blockState)) { if (FlowerPotHandler.isFlowah(blockState)) {
BackwardsBlockEntityProvider beProvider = Via.getManager().getProviders().get(BackwardsBlockEntityProvider.class); BackwardsBlockEntityProvider beProvider = Via.getManager().getProviders().get(BackwardsBlockEntityProvider.class);

Datei anzeigen

@ -66,9 +66,9 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_
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.x(), wrapper.get(Type.DOUBLE, 0)));
playerStorage.setY(toSet(bitField, 1, playerStorage.getY(), wrapper.get(Type.DOUBLE, 1))); playerStorage.setY(toSet(bitField, 1, playerStorage.y(), wrapper.get(Type.DOUBLE, 1)));
playerStorage.setZ(toSet(bitField, 2, playerStorage.getZ(), wrapper.get(Type.DOUBLE, 2))); playerStorage.setZ(toSet(bitField, 2, playerStorage.z(), wrapper.get(Type.DOUBLE, 2)));
}); });
} }
}); });
@ -90,7 +90,7 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_
handler(wrapper -> { handler(wrapper -> {
Optional<EntityTypes1_13.ObjectType> optionalType = EntityTypes1_13.ObjectType.findById(wrapper.get(Type.BYTE, 0)); Optional<EntityTypes1_13.ObjectType> optionalType = EntityTypes1_13.ObjectType.findById(wrapper.get(Type.BYTE, 0));
if (!optionalType.isPresent()) return; if (optionalType.isEmpty()) return;
EntityTypes1_13.ObjectType type = optionalType.get(); EntityTypes1_13.ObjectType type = optionalType.get();
if (type == EntityTypes1_13.ObjectType.FALLING_BLOCK) { if (type == EntityTypes1_13.ObjectType.FALLING_BLOCK) {
@ -100,17 +100,12 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_
wrapper.set(Type.INT, 0, combined); wrapper.set(Type.INT, 0, combined);
} else if (type == EntityTypes1_13.ObjectType.ITEM_FRAME) { } else if (type == EntityTypes1_13.ObjectType.ITEM_FRAME) {
int data = wrapper.get(Type.INT, 0); int data = wrapper.get(Type.INT, 0);
switch (data) { data = switch (data) {
case 3: case 3 -> 0;
data = 0; case 4 -> 1;
break; case 5 -> 3;
case 4: default -> data;
data = 1; };
break;
case 5:
data = 3;
break;
}
wrapper.set(Type.INT, 0, data); wrapper.set(Type.INT, 0, data);
} else if (type == EntityTypes1_13.ObjectType.TRIDENT) { } else if (type == EntityTypes1_13.ObjectType.TRIDENT) {
wrapper.set(Type.BYTE, 0, (byte) EntityTypes1_13.ObjectType.TIPPED_ARROW.getId()); wrapper.set(Type.BYTE, 0, (byte) EntityTypes1_13.ObjectType.TIPPED_ARROW.getId());
@ -230,9 +225,9 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<ClientboundPackets1_
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.x(),
anchor == 1 ? positionStorage.getY() + 1.62 : positionStorage.getY(), anchor == 1 ? positionStorage.y() + 1.62 : positionStorage.y(),
positionStorage.getZ(), x, y, z); positionStorage.z(), 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);

Datei anzeigen

@ -377,18 +377,15 @@ public class PlayerPacket1_13 extends RewriterBase<Protocol1_12_2To1_13> {
protocol.registerServerbound(ServerboundPackets1_12_1.PLUGIN_MESSAGE, wrapper -> { protocol.registerServerbound(ServerboundPackets1_12_1.PLUGIN_MESSAGE, wrapper -> {
String channel = wrapper.read(Type.STRING); String channel = wrapper.read(Type.STRING);
switch (channel) { switch (channel) {
case "MC|BSign": case "MC|BSign", "MC|BEdit" -> {
case "MC|BEdit":
wrapper.setPacketType(ServerboundPackets1_13.EDIT_BOOK); wrapper.setPacketType(ServerboundPackets1_13.EDIT_BOOK);
Item book = wrapper.read(Type.ITEM1_8); Item book = wrapper.read(Type.ITEM1_8);
wrapper.write(Type.ITEM1_13, protocol.getItemRewriter().handleItemToServer(wrapper.user(), book)); wrapper.write(Type.ITEM1_13, protocol.getItemRewriter().handleItemToServer(wrapper.user(), book));
boolean signing = channel.equals("MC|BSign"); boolean signing = channel.equals("MC|BSign");
wrapper.write(Type.BOOLEAN, signing); wrapper.write(Type.BOOLEAN, signing);
break; }
case "MC|ItemName": case "MC|ItemName" -> wrapper.setPacketType(ServerboundPackets1_13.RENAME_ITEM);
wrapper.setPacketType(ServerboundPackets1_13.RENAME_ITEM); case "MC|AdvCmd" -> {
break;
case "MC|AdvCmd":
byte type = wrapper.read(Type.BYTE); byte type = wrapper.read(Type.BYTE);
if (type == 0) { if (type == 0) {
//Information from https://wiki.vg/index.php?title=Plugin_channels&oldid=14089 //Information from https://wiki.vg/index.php?title=Plugin_channels&oldid=14089
@ -406,8 +403,8 @@ public class PlayerPacket1_13 extends RewriterBase<Protocol1_12_2To1_13> {
} else { } else {
wrapper.cancel(); wrapper.cancel();
} }
break; }
case "MC|AutoCmd": { case "MC|AutoCmd" -> {
wrapper.setPacketType(ServerboundPackets1_13.UPDATE_COMMAND_BLOCK); wrapper.setPacketType(ServerboundPackets1_13.UPDATE_COMMAND_BLOCK);
int x = wrapper.read(Type.INT); int x = wrapper.read(Type.INT);
@ -430,9 +427,8 @@ public class PlayerPacket1_13 extends RewriterBase<Protocol1_12_2To1_13> {
if (wrapper.read(Type.BOOLEAN)) flags |= 0x04; //Automatic if (wrapper.read(Type.BOOLEAN)) flags |= 0x04; //Automatic
wrapper.write(Type.BYTE, flags); wrapper.write(Type.BYTE, flags);
break;
} }
case "MC|Struct": { case "MC|Struct" -> {
wrapper.setPacketType(ServerboundPackets1_13.UPDATE_STRUCTURE_BLOCK); wrapper.setPacketType(ServerboundPackets1_13.UPDATE_STRUCTURE_BLOCK);
int x = wrapper.read(Type.INT); int x = wrapper.read(Type.INT);
int y = wrapper.read(Type.INT); int y = wrapper.read(Type.INT);
@ -471,24 +467,18 @@ public class PlayerPacket1_13 extends RewriterBase<Protocol1_12_2To1_13> {
wrapper.passthrough(Type.VAR_LONG); //Seed wrapper.passthrough(Type.VAR_LONG); //Seed
wrapper.write(Type.BYTE, flags); wrapper.write(Type.BYTE, flags);
break;
} }
case "MC|Beacon": case "MC|Beacon" -> {
wrapper.setPacketType(ServerboundPackets1_13.SET_BEACON_EFFECT); wrapper.setPacketType(ServerboundPackets1_13.SET_BEACON_EFFECT);
wrapper.write(Type.VAR_INT, wrapper.read(Type.INT)); //Primary Effect wrapper.write(Type.VAR_INT, wrapper.read(Type.INT)); //Primary Effect
wrapper.write(Type.VAR_INT, wrapper.read(Type.INT)); //Secondary Effect wrapper.write(Type.VAR_INT, wrapper.read(Type.INT)); //Secondary Effect
}
break; case "MC|TrSel" -> {
case "MC|TrSel":
wrapper.setPacketType(ServerboundPackets1_13.SELECT_TRADE); wrapper.setPacketType(ServerboundPackets1_13.SELECT_TRADE);
wrapper.write(Type.VAR_INT, wrapper.read(Type.INT)); //Slot wrapper.write(Type.VAR_INT, wrapper.read(Type.INT)); //Slot
}
break; case "MC|PickItem" -> wrapper.setPacketType(ServerboundPackets1_13.PICK_ITEM);
case "MC|PickItem": default -> {
wrapper.setPacketType(ServerboundPackets1_13.PICK_ITEM);
break;
default:
String newChannel = InventoryPackets.getNewPluginChannelId(channel); String newChannel = InventoryPackets.getNewPluginChannelId(channel);
if (newChannel == null) { if (newChannel == null) {
if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) { if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) {
@ -514,10 +504,9 @@ public class PlayerPacket1_13 extends RewriterBase<Protocol1_12_2To1_13> {
wrapper.write(Type.REMAINING_BYTES, Joiner.on('\0').join(rewrittenChannels).getBytes(StandardCharsets.UTF_8)); wrapper.write(Type.REMAINING_BYTES, Joiner.on('\0').join(rewrittenChannels).getBytes(StandardCharsets.UTF_8));
} else { } else {
wrapper.cancel(); wrapper.cancel();
return;
} }
} }
break; }
} }
}); });
@ -535,25 +524,19 @@ public class PlayerPacket1_13 extends RewriterBase<Protocol1_12_2To1_13> {
String name = ""; String name = "";
// categories 0-7 (items, blocks, entities) - probably not feasible // categories 0-7 (items, blocks, entities) - probably not feasible
switch (categoryId) { switch (categoryId) {
case 0: case 0, 1, 2, 3, 4, 5, 6, 7 -> {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
wrapper.read(Type.VAR_INT); // remove value wrapper.read(Type.VAR_INT); // remove value
newSize--; newSize--;
continue; continue;
case 8: }
case 8 -> {
name = protocol.getMappingData().getStatisticMappings().get(statisticId); name = protocol.getMappingData().getStatisticMappings().get(statisticId);
if (name == null) { if (name == null) {
wrapper.read(Type.VAR_INT); wrapper.read(Type.VAR_INT);
newSize--; newSize--;
continue; continue;
} }
break; }
} }
wrapper.write(Type.STRING, name); // string id wrapper.write(Type.STRING, name); // string id

Datei anzeigen

@ -62,7 +62,7 @@ public class BackwardsBlockEntityProvider implements Provider {
* @param position The position of the block entity * @param position The position of the block entity
* @param tag The block entity tag * @param tag The block entity tag
*/ */
public CompoundTag transform(UserConnection user, Position position, CompoundTag tag) throws Exception { public CompoundTag transform(UserConnection user, Position position, CompoundTag tag) {
final StringTag idTag = tag.getStringTag("id"); final StringTag idTag = tag.getStringTag("id");
if (idTag == null) { if (idTag == null) {
return tag; return tag;
@ -90,7 +90,7 @@ public class BackwardsBlockEntityProvider implements Provider {
* @param position The position of the block entity * @param position The position of the block entity
* @param id The block entity id * @param id The block entity id
*/ */
public CompoundTag transform(UserConnection user, Position position, String id) throws Exception { public CompoundTag transform(UserConnection user, Position position, String id) {
CompoundTag tag = new CompoundTag(); CompoundTag tag = new CompoundTag();
tag.putString("id", id); tag.putString("id", id);
tag.putInt("x", Math.toIntExact(position.x())); tag.putInt("x", Math.toIntExact(position.x()));

Datei anzeigen

@ -28,9 +28,7 @@ public class CommandRewriter1_14 extends CommandRewriter<ClientboundPackets1_14>
public CommandRewriter1_14(Protocol1_13_2To1_14 protocol) { public CommandRewriter1_14(Protocol1_13_2To1_14 protocol) {
super(protocol); super(protocol);
this.parserHandlers.put("minecraft:nbt_tag", wrapper -> { this.parserHandlers.put("minecraft:nbt_tag", wrapper -> wrapper.write(Type.VAR_INT, 2)); // Greedy phrase
wrapper.write(Type.VAR_INT, 2); // Greedy phrase
});
this.parserHandlers.put("minecraft:time", wrapper -> { this.parserHandlers.put("minecraft:time", wrapper -> {
wrapper.write(Type.BYTE, (byte) (0x01)); // Flags wrapper.write(Type.BYTE, (byte) (0x01)); // Flags
wrapper.write(Type.INT, 0); // Min value wrapper.write(Type.INT, 0); // Min value
@ -39,15 +37,12 @@ public class CommandRewriter1_14 extends CommandRewriter<ClientboundPackets1_14>
@Override @Override
public @Nullable String handleArgumentType(String argumentType) { public @Nullable String handleArgumentType(String argumentType) {
switch (argumentType) { return switch (argumentType) {
case "minecraft:nbt_compound_tag": case "minecraft:nbt_compound_tag" -> "minecraft:nbt";
return "minecraft:nbt"; case "minecraft:nbt_tag" -> "brigadier:string";
case "minecraft:nbt_tag": case "minecraft:time" -> "brigadier:integer";
return "brigadier:string"; default -> super.handleArgumentType(argumentType);
case "minecraft:time": };
return "brigadier:integer";
}
return super.handleArgumentType(argumentType);
} }
} }

Datei anzeigen

@ -86,50 +86,40 @@ public class BlockItemPackets1_14 extends BackwardsItemRewriter<ClientboundPacke
slotSize = (type + 1) * 9; slotSize = (type + 1) * 9;
} else { } else {
switch (type) { switch (type) {
case 11: case 11 -> stringType = "minecraft:crafting_table";
stringType = "minecraft:crafting_table"; case 9, 20, 13, 14 -> {
break;
case 9: //blast furnace
case 20: //smoker
case 13: //furnace
case 14: //grindstone
if (type == 9) containerTitle = "Blast Furnace"; if (type == 9) containerTitle = "Blast Furnace";
else if (type == 20) containerTitle = "Smoker"; else if (type == 20) containerTitle = "Smoker";
else if (type == 14) containerTitle = "Grindstone"; else if (type == 14) containerTitle = "Grindstone";
stringType = "minecraft:furnace"; stringType = "minecraft:furnace";
slotSize = 3; slotSize = 3;
break; }
case 6: case 6 -> {
stringType = "minecraft:dropper"; stringType = "minecraft:dropper";
slotSize = 9; slotSize = 9;
break; }
case 12: case 12 -> stringType = "minecraft:enchanting_table";
stringType = "minecraft:enchanting_table"; case 10 -> {
break;
case 10:
stringType = "minecraft:brewing_stand"; stringType = "minecraft:brewing_stand";
slotSize = 5; slotSize = 5;
break; }
case 18: case 18 -> stringType = "minecraft:villager";
stringType = "minecraft:villager"; case 8 -> {
break;
case 8:
stringType = "minecraft:beacon"; stringType = "minecraft:beacon";
slotSize = 1; slotSize = 1;
break; }
case 21: //cartography_table case 21, 7 -> {
case 7:
if (type == 21) containerTitle = "Cartography Table"; if (type == 21) containerTitle = "Cartography Table";
stringType = "minecraft:anvil"; stringType = "minecraft:anvil";
break; }
case 15: case 15 -> {
stringType = "minecraft:hopper"; stringType = "minecraft:hopper";
slotSize = 5; slotSize = 5;
break; }
case 19: case 19 -> {
stringType = "minecraft:shulker_box"; stringType = "minecraft:shulker_box";
slotSize = 27; slotSize = 27;
break; }
} }
} }
@ -266,20 +256,18 @@ public class BlockItemPackets1_14 extends BackwardsItemRewriter<ClientboundPacke
type = Key.stripMinecraftNamespace(type); type = Key.stripMinecraftNamespace(type);
if (removedTypes.contains(type)) { if (removedTypes.contains(type)) {
switch (type) { switch (type) {
case "blasting": case "blasting", "smoking", "campfire_cooking" -> {
case "smoking":
case "campfire_cooking":
wrapper.read(Type.STRING); // Group wrapper.read(Type.STRING); // Group
wrapper.read(Type.ITEM1_13_2_ARRAY); // Ingredients wrapper.read(Type.ITEM1_13_2_ARRAY); // Ingredients
wrapper.read(Type.ITEM1_13_2); wrapper.read(Type.ITEM1_13_2);
wrapper.read(Type.FLOAT); // EXP wrapper.read(Type.FLOAT); // EXP
wrapper.read(Type.VAR_INT); // Cooking time wrapper.read(Type.VAR_INT); // Cooking time
break; }
case "stonecutting": case "stonecutting" -> {
wrapper.read(Type.STRING); // Group? wrapper.read(Type.STRING); // Group?
wrapper.read(Type.ITEM1_13_2_ARRAY); // Ingredients wrapper.read(Type.ITEM1_13_2_ARRAY); // Ingredients
wrapper.read(Type.ITEM1_13_2); // Result wrapper.read(Type.ITEM1_13_2); // Result
break; }
} }
deleted++; deleted++;
continue; continue;

Datei anzeigen

@ -53,7 +53,7 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<ClientboundPackets1_
//TODO work the method into this class alone //TODO work the method into this class alone
@Override @Override
protected void addTrackedEntity(PacketWrapper wrapper, int entityId, EntityType type) throws Exception { protected void addTrackedEntity(PacketWrapper wrapper, int entityId, EntityType type) {
super.addTrackedEntity(wrapper, entityId, type); super.addTrackedEntity(wrapper, entityId, type);
// Cache the position for every newly tracked entity // Cache the position for every newly tracked entity
@ -143,27 +143,15 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<ClientboundPackets1_
EntityTypes1_13.ObjectType objectType; EntityTypes1_13.ObjectType objectType;
if (entityType.isOrHasParent(EntityTypes1_13.EntityType.MINECART_ABSTRACT)) { if (entityType.isOrHasParent(EntityTypes1_13.EntityType.MINECART_ABSTRACT)) {
objectType = EntityTypes1_13.ObjectType.MINECART; objectType = EntityTypes1_13.ObjectType.MINECART;
int data = 0; int data = switch (entityType) {
switch (entityType) { case CHEST_MINECART -> 1;
case CHEST_MINECART: case FURNACE_MINECART -> 2;
data = 1; case TNT_MINECART -> 3;
break; case SPAWNER_MINECART -> 4;
case FURNACE_MINECART: case HOPPER_MINECART -> 5;
data = 2; case COMMAND_BLOCK_MINECART -> 6;
break; default -> 0;
case TNT_MINECART: };
data = 3;
break;
case SPAWNER_MINECART:
data = 4;
break;
case HOPPER_MINECART:
data = 5;
break;
case COMMAND_BLOCK_MINECART:
data = 6;
break;
}
if (data != 0) if (data != 0)
wrapper.set(Type.INT, 0, data); wrapper.set(Type.INT, 0, data);
} else { } else {

Datei anzeigen

@ -61,9 +61,9 @@ public class SoundPackets1_14 extends RewriterBase<Protocol1_13_2To1_14> {
float volume = wrapper.read(Type.FLOAT); float volume = wrapper.read(Type.FLOAT);
float pitch = wrapper.read(Type.FLOAT); float pitch = wrapper.read(Type.FLOAT);
int x = (int) (entityStorage.getX() * 8D); int x = (int) (entityStorage.x() * 8D);
int y = (int) (entityStorage.getY() * 8D); int y = (int) (entityStorage.y() * 8D);
int z = (int) (entityStorage.getZ() * 8D); int z = (int) (entityStorage.z() * 8D);
PacketWrapper soundPacket = wrapper.create(ClientboundPackets1_13.SOUND); PacketWrapper soundPacket = wrapper.create(ClientboundPackets1_13.SOUND);
soundPacket.write(Type.VAR_INT, newId); soundPacket.write(Type.VAR_INT, newId);

Datei anzeigen

@ -71,21 +71,22 @@ public class ChunkLightStorage implements StorableObject {
return new HashMap<>(); return new HashMap<>();
} }
public static class ChunkLight { public record ChunkLight(byte[][] skyLight, byte[][] blockLight) {
private final byte[][] skyLight;
private final byte[][] blockLight;
public ChunkLight(byte[][] skyLight, byte[][] blockLight) { @Override
this.skyLight = skyLight; public boolean equals(final Object o) {
this.blockLight = blockLight; if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
final ChunkLight that = (ChunkLight) o;
if (!Arrays.deepEquals(skyLight, that.skyLight)) return false;
return Arrays.deepEquals(blockLight, that.blockLight);
} }
public byte[][] skyLight() { @Override
return skyLight; public int hashCode() {
} int result = Arrays.deepHashCode(skyLight);
result = 31 * result + Arrays.deepHashCode(blockLight);
public byte[][] blockLight() { return result;
return blockLight;
} }
} }
} }

Datei anzeigen

@ -76,7 +76,7 @@ public class Protocol1_13To1_13_1 extends BackwardsProtocol<ClientboundPackets1_
@Override @Override
public void register() { 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<>(Type.STRING) {
@Override @Override
public String transform(PacketWrapper wrapper, String inputValue) { public String transform(PacketWrapper wrapper, String inputValue) {
// 1.13 starts sending slash at start, so we remove it for compatibility // 1.13 starts sending slash at start, so we remove it for compatibility

Datei anzeigen

@ -28,9 +28,7 @@ public class CommandRewriter1_13_1 extends CommandRewriter<ClientboundPackets1_1
public CommandRewriter1_13_1(Protocol1_13To1_13_1 protocol) { public CommandRewriter1_13_1(Protocol1_13To1_13_1 protocol) {
super(protocol); super(protocol);
this.parserHandlers.put("minecraft:dimension", wrapper -> { this.parserHandlers.put("minecraft:dimension", wrapper -> wrapper.write(Type.VAR_INT, 0)); // Single word
wrapper.write(Type.VAR_INT, 0); // Single word
});
} }
@Override @Override

Datei anzeigen

@ -70,26 +70,17 @@ public class WorldPackets1_13_1 {
} else if (id == 2001) { // Block break + block break sound } else if (id == 2001) { // Block break + block break sound
wrapper.set(Type.INT, 1, protocol.getMappingData().getNewBlockStateId(data)); wrapper.set(Type.INT, 1, protocol.getMappingData().getNewBlockStateId(data));
} else if (id == 2000) { // Smoke } else if (id == 2000) { // Smoke
switch (data) { switch (data) { // Down
case 0: // Down case 0, 1 -> { // Up
case 1: // Up
Position pos = wrapper.get(Type.POSITION1_8, 0); Position pos = wrapper.get(Type.POSITION1_8, 0);
BlockFace relative = data == 0 ? BlockFace.BOTTOM : BlockFace.TOP; BlockFace relative = data == 0 ? BlockFace.BOTTOM : BlockFace.TOP;
wrapper.set(Type.POSITION1_8, 0, pos.getRelative(relative)); // Y Offset wrapper.set(Type.POSITION1_8, 0, pos.getRelative(relative)); // Y Offset
wrapper.set(Type.INT, 1, 4); // Self wrapper.set(Type.INT, 1, 4); // Self
break; }
case 2: // North case 2 -> wrapper.set(Type.INT, 1, 1); // North
wrapper.set(Type.INT, 1, 1); // North case 3 -> wrapper.set(Type.INT, 1, 7); // South
break; case 4 -> wrapper.set(Type.INT, 1, 3); // West
case 3: // South case 5 -> wrapper.set(Type.INT, 1, 5); // East
wrapper.set(Type.INT, 1, 7); // South
break;
case 4: // West
wrapper.set(Type.INT, 1, 3); // West
break;
case 5: // East
wrapper.set(Type.INT, 1, 5); // East
break;
} }
} }
}); });

Datei anzeigen

@ -113,7 +113,9 @@ public class TranslatableRewriter1_16 extends TranslatableRewriter<ClientboundPa
private final String colorName; private final String colorName;
private final int rgb; private final int rgb;
private final int r, g, b; private final int r;
private final int g;
private final int b;
ChatColor(String colorName, int rgb) { ChatColor(String colorName, int rgb) {
this.colorName = colorName; this.colorName = colorName;

Datei anzeigen

@ -162,11 +162,10 @@ public class BlockItemPackets1_16 extends BackwardsItemRewriter<ClientboundPacke
CompoundTag heightMaps = chunk.getHeightMap(); CompoundTag heightMaps = chunk.getHeightMap();
for (Tag heightMapTag : heightMaps.values()) { for (Tag heightMapTag : heightMaps.values()) {
if (!(heightMapTag instanceof LongArrayTag)) { if (!(heightMapTag instanceof LongArrayTag heightMap)) {
continue; continue;
} }
LongArrayTag heightMap = (LongArrayTag) heightMapTag;
int[] heightMapData = new int[256]; int[] heightMapData = new int[256];
CompactArrayUtil.iterateCompactArrayWithPadding(9, heightMapData.length, heightMap.getValue(), (i, v) -> heightMapData[i] = v); CompactArrayUtil.iterateCompactArrayWithPadding(9, heightMapData.length, heightMap.getValue(), (i, v) -> heightMapData[i] = v);
heightMap.setValue(CompactArrayUtil.createCompactArray(9, heightMapData.length, i -> heightMapData[i])); heightMap.setValue(CompactArrayUtil.createCompactArray(9, heightMapData.length, i -> heightMapData[i]));
@ -188,12 +187,7 @@ public class BlockItemPackets1_16 extends BackwardsItemRewriter<ClientboundPacke
for (int i = 0; i < 1024; i++) { for (int i = 0; i < 1024; i++) {
int biome = chunk.getBiomeData()[i]; int biome = chunk.getBiomeData()[i];
switch (biome) { switch (biome) {
case 170: // new nether biomes case 170, 171, 172, 173 -> chunk.getBiomeData()[i] = 8;
case 171:
case 172:
case 173:
chunk.getBiomeData()[i] = 8;
break;
} }
} }
} }
@ -266,19 +260,16 @@ public class BlockItemPackets1_16 extends BackwardsItemRewriter<ClientboundPacke
UUID targetUuid = UUIDUtil.fromIntArray((int[]) targetUuidTag.getValue()); UUID targetUuid = UUIDUtil.fromIntArray((int[]) targetUuidTag.getValue());
tag.putString("target_uuid", targetUuid.toString()); tag.putString("target_uuid", targetUuid.toString());
} else if (id.equals("minecraft:skull")) { } else if (id.equals("minecraft:skull")) {
Tag skullOwnerTag = tag.remove("SkullOwner"); if (!(tag.remove("SkullOwner") instanceof CompoundTag skullOwnerTag)) return;
if (!(skullOwnerTag instanceof CompoundTag)) return;
CompoundTag skullOwnerCompoundTag = (CompoundTag) skullOwnerTag; if (skullOwnerTag.remove("Id") instanceof IntArrayTag ownerUuidTag) {
Tag ownerUuidTag = skullOwnerCompoundTag.remove("Id"); UUID ownerUuid = UUIDUtil.fromIntArray(ownerUuidTag.getValue());
if (ownerUuidTag instanceof IntArrayTag) { skullOwnerTag.putString("Id", ownerUuid.toString());
UUID ownerUuid = UUIDUtil.fromIntArray((int[]) ownerUuidTag.getValue());
skullOwnerCompoundTag.putString("Id", ownerUuid.toString());
} }
// SkullOwner -> Owner // SkullOwner -> Owner
CompoundTag ownerTag = new CompoundTag(); CompoundTag ownerTag = new CompoundTag();
for (Map.Entry<String, Tag> entry : skullOwnerCompoundTag) { for (Map.Entry<String, Tag> entry : skullOwnerTag) {
ownerTag.put(entry.getKey(), entry.getValue()); ownerTag.put(entry.getKey(), entry.getValue());
} }
tag.put("Owner", ownerTag); tag.put("Owner", ownerTag);
@ -349,13 +340,6 @@ public class BlockItemPackets1_16 extends BackwardsItemRewriter<ClientboundPacke
return item; return item;
} }
private static final class EquipmentData { private record EquipmentData(int slot, Item item) {
private final int slot;
private final Item item;
private EquipmentData(final int slot, final Item item) {
this.slot = slot;
this.item = item;
}
} }
} }

Datei anzeigen

@ -44,19 +44,15 @@ import com.viaversion.viaversion.util.Key;
public class EntityPackets1_16 extends EntityRewriter<ClientboundPackets1_16, Protocol1_15_2To1_16> { public class EntityPackets1_16 extends EntityRewriter<ClientboundPackets1_16, Protocol1_15_2To1_16> {
private final ValueTransformer<String, Integer> dimensionTransformer = new ValueTransformer<String, Integer>(Type.STRING, Type.INT) { private final ValueTransformer<String, Integer> dimensionTransformer = new ValueTransformer<>(Type.STRING, Type.INT) {
@Override @Override
public Integer transform(PacketWrapper wrapper, String input) { public Integer transform(PacketWrapper wrapper, String input) {
input = Key.namespaced(input); input = Key.namespaced(input);
switch (input) { return switch (input) {
case "minecraft:the_nether": case "minecraft:the_nether" -> -1;
return -1; case "minecraft:the_end" -> 1;
default: default -> 0; // Including overworld
case "minecraft:overworld": };
return 0;
case "minecraft:the_end":
return 1;
}
} }
}; };

Datei anzeigen

@ -107,7 +107,7 @@ 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 { private static void sendSeenRecipePacket(int recipeType, PacketWrapper wrapper) {
boolean open = wrapper.read(Type.BOOLEAN); boolean open = wrapper.read(Type.BOOLEAN);
boolean filter = wrapper.read(Type.BOOLEAN); boolean filter = wrapper.read(Type.BOOLEAN);

Datei anzeigen

@ -28,9 +28,7 @@ public class CommandRewriter1_16_2 extends CommandRewriter<ClientboundPackets1_1
public CommandRewriter1_16_2(Protocol1_16_1To1_16_2 protocol) { public CommandRewriter1_16_2(Protocol1_16_1To1_16_2 protocol) {
super(protocol); super(protocol);
this.parserHandlers.put("minecraft:angle", wrapper -> { this.parserHandlers.put("minecraft:angle", wrapper -> wrapper.write(Type.VAR_INT, 0)); // Single word
wrapper.write(Type.VAR_INT, 0); // Single word
});
} }
@Override @Override

Datei anzeigen

@ -244,7 +244,7 @@ public final class BlockItemPackets1_17 extends BackwardsItemRewriter<Clientboun
} }
private void writeLightArrays(PacketWrapper wrapper, BitSet bitMask, int cutBitMask, private void writeLightArrays(PacketWrapper wrapper, BitSet bitMask, int cutBitMask,
int startFromSection, int sectionHeight) throws Exception { int startFromSection, int sectionHeight) {
wrapper.read(Type.VAR_INT); // Length - throw it away wrapper.read(Type.VAR_INT); // Length - throw it away
List<byte[]> light = new ArrayList<>(); List<byte[]> light = new ArrayList<>();

Datei anzeigen

@ -120,10 +120,7 @@ public final class EntityPackets1_17 extends EntityRewriter<ClientboundPackets1_
map(Type.FLOAT); map(Type.FLOAT);
map(Type.BYTE); map(Type.BYTE);
map(Type.VAR_INT); map(Type.VAR_INT);
handler(wrapper -> { read(Type.BOOLEAN); // Dismount vehicle ¯\_()_/¯
// Dismount vehicle ¯\_()_/¯
wrapper.read(Type.BOOLEAN);
});
} }
}); });
@ -131,9 +128,7 @@ public final class EntityPackets1_17 extends EntityRewriter<ClientboundPackets1_
@Override @Override
public void register() { 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
});
} }
}); });

Datei anzeigen

@ -56,6 +56,7 @@ import com.viaversion.viaversion.rewriter.ComponentRewriter;
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.Pair; import com.viaversion.viaversion.util.Pair;
import java.security.SignatureException;
import java.time.Instant; import java.time.Instant;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -254,7 +255,12 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
final List<Pair<String, String>> arguments = argumentsProvider.getSignableArguments(command); final List<Pair<String, String>> arguments = argumentsProvider.getSignableArguments(command);
wrapper.write(Type.VAR_INT, arguments.size()); wrapper.write(Type.VAR_INT, arguments.size());
for (final Pair<String, String> argument : arguments) { for (final Pair<String, String> argument : arguments) {
final byte[] signature = chatSession.signChatMessage(metadata, new DecoratableMessage(argument.value())); final byte[] signature;
try {
signature = chatSession.signChatMessage(metadata, new DecoratableMessage(argument.value()));
} catch (final SignatureException e) {
throw new RuntimeException(e);
}
wrapper.write(Type.STRING, argument.key()); wrapper.write(Type.STRING, argument.key());
wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature); wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature);
@ -266,7 +272,12 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
if (chatSession != null) { if (chatSession != null) {
final MessageMetadata metadata = new MessageMetadata(sender, timestamp, salt); final MessageMetadata metadata = new MessageMetadata(sender, timestamp, salt);
final DecoratableMessage decoratableMessage = new DecoratableMessage(message); final DecoratableMessage decoratableMessage = new DecoratableMessage(message);
final byte[] signature = chatSession.signChatMessage(metadata, decoratableMessage); final byte[] signature;
try {
signature = chatSession.signChatMessage(metadata, decoratableMessage);
} catch (final SignatureException e) {
throw new RuntimeException(e);
}
wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature); // Signature wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature); // Signature
} else { } else {
@ -330,10 +341,15 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
wrapper.write(Type.BOOLEAN, chatSession == null); // Is nonce wrapper.write(Type.BOOLEAN, chatSession == null); // Is nonce
if (chatSession != null) { if (chatSession != null) {
final long salt = ThreadLocalRandom.current().nextLong(); final long salt = ThreadLocalRandom.current().nextLong();
final byte[] signature = chatSession.sign(signer -> { final byte[] signature;
try {
signature = chatSession.sign(signer -> {
signer.accept(wrapper.user().remove(NonceStorage.class).nonce()); signer.accept(wrapper.user().remove(NonceStorage.class).nonce());
signer.accept(Longs.toByteArray(salt)); signer.accept(Longs.toByteArray(salt));
}); });
} catch (final SignatureException e) {
throw new RuntimeException(e);
}
wrapper.write(Type.LONG, salt); // Salt wrapper.write(Type.LONG, salt); // Salt
wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature); // Signature wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature); // Signature
} else { } else {

Datei anzeigen

@ -20,15 +20,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 org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public final class NonceStorage implements StorableObject { public record NonceStorage(byte @Nullable [] nonce) implements StorableObject {
private final byte[] nonce;
public NonceStorage(final byte @Nullable [] nonce) {
this.nonce = nonce;
}
public byte @Nullable [] nonce() {
return nonce;
}
} }

Datei anzeigen

@ -52,19 +52,13 @@ public final class StoredPainting implements StorableObject {
} }
private byte to2dDirection(int direction) { private byte to2dDirection(int direction) {
switch (direction) { return switch (direction) {
case 0: case 0, 1 -> -1; // No worky
case 1: case 2 -> 2;
return -1; // No worky case 3 -> 0;
case 2: case 4 -> 1;
return 2; case 5 -> 3;
case 3: default -> throw new IllegalArgumentException("Invalid direction: " + direction);
return 0; };
case 4:
return 1;
case 5:
return 3;
}
throw new IllegalArgumentException("Invalid direction: " + direction);
} }
} }

Datei anzeigen

@ -60,6 +60,7 @@ import com.viaversion.viaversion.rewriter.TagRewriter;
import com.viaversion.viaversion.util.CipherUtil; import com.viaversion.viaversion.util.CipherUtil;
import com.viaversion.viaversion.util.ComponentUtil; import com.viaversion.viaversion.util.ComponentUtil;
import com.viaversion.viaversion.util.Pair; import com.viaversion.viaversion.util.Pair;
import java.security.SignatureException;
import java.util.BitSet; import java.util.BitSet;
import java.util.List; import java.util.List;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
@ -231,7 +232,12 @@ public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundP
final long salt = wrapper.get(Type.LONG, 1); final long salt = wrapper.get(Type.LONG, 1);
final MessageMetadata metadata = new MessageMetadata(null, timestamp, salt); final MessageMetadata metadata = new MessageMetadata(null, timestamp, salt);
final byte[] signature = chatSession.signChatMessage(metadata, message, new PlayerMessageSignature[0]); final byte[] signature;
try {
signature = chatSession.signChatMessage(metadata, message, new PlayerMessageSignature[0]);
} catch (final SignatureException e) {
throw new RuntimeException(e);
}
wrapper.write(Protocol1_19_1To1_19_3.OPTIONAL_SIGNATURE_BYTES_TYPE, signature); // Signature wrapper.write(Protocol1_19_1To1_19_3.OPTIONAL_SIGNATURE_BYTES_TYPE, signature); // Signature
} else { } else {
@ -271,7 +277,12 @@ public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundP
final List<Pair<String, String>> arguments = argumentsProvider.getSignableArguments(command); final List<Pair<String, String>> arguments = argumentsProvider.getSignableArguments(command);
wrapper.write(Type.VAR_INT, arguments.size()); wrapper.write(Type.VAR_INT, arguments.size());
for (final Pair<String, String> argument : arguments) { for (final Pair<String, String> argument : arguments) {
final byte[] signature = chatSession.signChatMessage(metadata, argument.value(), new PlayerMessageSignature[0]); final byte[] signature;
try {
signature = chatSession.signChatMessage(metadata, argument.value(), new PlayerMessageSignature[0]);
} catch (final SignatureException e) {
throw new RuntimeException(e);
}
wrapper.write(Type.STRING, argument.key()); wrapper.write(Type.STRING, argument.key());
wrapper.write(Protocol1_19_1To1_19_3.SIGNATURE_BYTES_TYPE, signature); wrapper.write(Protocol1_19_1To1_19_3.SIGNATURE_BYTES_TYPE, signature);
@ -350,7 +361,7 @@ public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundP
cancelServerbound(ServerboundPackets1_19_1.CHAT_ACK); cancelServerbound(ServerboundPackets1_19_1.CHAT_ACK);
} }
private @Nullable String rewriteSound(final PacketWrapper wrapper) throws Exception { private @Nullable String rewriteSound(final PacketWrapper wrapper) {
final Holder<SoundEvent> holder = wrapper.read(Type.SOUND_EVENT); final Holder<SoundEvent> holder = wrapper.read(Type.SOUND_EVENT);
if (holder.hasId()) { if (holder.hasId()) {
final int mappedId = MAPPINGS.getSoundMappings().getNewId(holder.id()); final int mappedId = MAPPINGS.getSoundMappings().getNewId(holder.id());

Datei anzeigen

@ -180,15 +180,9 @@ public final class EntityPackets1_19_3 extends EntityRewriter<ClientboundPackets
continue; continue;
} }
switch (action) { switch (action) {
case UPDATE_GAMEMODE: case UPDATE_GAMEMODE -> gamemode = wrapper.read(Type.VAR_INT);
gamemode = wrapper.read(Type.VAR_INT); case UPDATE_LATENCY -> latency = wrapper.read(Type.VAR_INT);
break; case UPDATE_DISPLAYNAME -> displayName = wrapper.read(Type.OPTIONAL_COMPONENT);
case UPDATE_LATENCY:
latency = wrapper.read(Type.VAR_INT);
break;
case UPDATE_DISPLAYNAME:
displayName = wrapper.read(Type.OPTIONAL_COMPONENT);
break;
} }
} }
@ -213,7 +207,7 @@ public final class EntityPackets1_19_3 extends EntityRewriter<ClientboundPackets
}); });
} }
private void sendPlayerProfileUpdate(final UserConnection connection, final int action, final PlayerProfileUpdate[] updates) throws Exception { private void sendPlayerProfileUpdate(final UserConnection connection, final int action, final PlayerProfileUpdate[] updates) {
final PacketWrapper playerInfoPacket = PacketWrapper.create(ClientboundPackets1_19_1.PLAYER_INFO, connection); final PacketWrapper playerInfoPacket = PacketWrapper.create(ClientboundPackets1_19_1.PLAYER_INFO, connection);
playerInfoPacket.write(Type.VAR_INT, action); playerInfoPacket.write(Type.VAR_INT, action);
playerInfoPacket.write(Type.VAR_INT, updates.length); playerInfoPacket.write(Type.VAR_INT, updates.length);
@ -274,33 +268,6 @@ public final class EntityPackets1_19_3 extends EntityRewriter<ClientboundPackets
return EntityTypes1_19_3.getTypeFromId(typeId); return EntityTypes1_19_3.getTypeFromId(typeId);
} }
private static final class PlayerProfileUpdate { private record PlayerProfileUpdate(UUID uuid, int gamemode, int latency, @Nullable JsonElement displayName) {
private final UUID uuid;
private final int gamemode;
private final int latency;
private final JsonElement displayName;
private PlayerProfileUpdate(final UUID uuid, final int gamemode, final int latency, @Nullable final JsonElement displayName) {
this.uuid = uuid;
this.gamemode = gamemode;
this.latency = latency;
this.displayName = displayName;
}
public UUID uuid() {
return uuid;
}
public int gamemode() {
return gamemode;
}
public int latency() {
return latency;
}
public @Nullable JsonElement displayName() {
return displayName;
}
} }
} }

Datei anzeigen

@ -20,15 +20,5 @@ 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 org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public final class NonceStorage implements StorableObject { public record NonceStorage(byte @Nullable [] nonce) implements StorableObject {
private final byte[] nonce;
public NonceStorage(final byte @Nullable [] nonce) {
this.nonce = nonce;
}
public byte @Nullable [] nonce() {
return nonce;
}
} }

Datei anzeigen

@ -74,9 +74,9 @@ public final class Protocol1_19_3To1_19_4 extends BackwardsProtocol<ClientboundP
translatableRewriter.registerComponentPacket(ClientboundPackets1_19_4.DISGUISED_CHAT); translatableRewriter.registerComponentPacket(ClientboundPackets1_19_4.DISGUISED_CHAT);
translatableRewriter.registerPing(); translatableRewriter.registerPing();
new CommandRewriter<ClientboundPackets1_19_4>(this) { new CommandRewriter<>(this) {
@Override @Override
public void handleArgument(final PacketWrapper wrapper, final String argumentType) throws Exception { public void handleArgument(final PacketWrapper wrapper, final String argumentType) {
switch (argumentType) { switch (argumentType) {
case "minecraft:heightmap": case "minecraft:heightmap":
wrapper.write(Type.VAR_INT, 0); wrapper.write(Type.VAR_INT, 0);

Datei anzeigen

@ -75,9 +75,9 @@ public final class BlockItemPackets1_19_4 extends BackwardsItemRewriter<Clientbo
registerWindowPropertyEnchantmentHandler(ClientboundPackets1_19_4.WINDOW_PROPERTY); registerWindowPropertyEnchantmentHandler(ClientboundPackets1_19_4.WINDOW_PROPERTY);
registerSpawnParticle1_19(ClientboundPackets1_19_4.SPAWN_PARTICLE); registerSpawnParticle1_19(ClientboundPackets1_19_4.SPAWN_PARTICLE);
final RecipeRewriter1_19_3<ClientboundPackets1_19_4> recipeRewriter = new RecipeRewriter1_19_3<ClientboundPackets1_19_4>(protocol) { final RecipeRewriter1_19_3<ClientboundPackets1_19_4> recipeRewriter = new RecipeRewriter1_19_3<>(protocol) {
@Override @Override
public void handleCraftingShaped(final PacketWrapper wrapper) throws Exception { public void handleCraftingShaped(final PacketWrapper wrapper) {
final int ingredients = wrapper.passthrough(Type.VAR_INT) * wrapper.passthrough(Type.VAR_INT); final int ingredients = wrapper.passthrough(Type.VAR_INT) * wrapper.passthrough(Type.VAR_INT);
wrapper.passthrough(Type.STRING); // Group wrapper.passthrough(Type.STRING); // Group
wrapper.passthrough(Type.VAR_INT); // Crafting book category wrapper.passthrough(Type.VAR_INT); // Crafting book category

Datei anzeigen

@ -198,8 +198,7 @@ public final class BlockItemPackets1_20 extends BackwardsItemRewriter<Clientboun
final Tag frontText = tag.remove("front_text"); final Tag frontText = tag.remove("front_text");
tag.remove("back_text"); tag.remove("back_text");
if (frontText instanceof CompoundTag) { if (frontText instanceof CompoundTag frontTextTag) {
final CompoundTag frontTextTag = (CompoundTag) frontText;
writeMessages(frontTextTag, tag, false); writeMessages(frontTextTag, tag, false);
writeMessages(frontTextTag, tag, true); writeMessages(frontTextTag, tag, true);

Datei anzeigen

@ -20,15 +20,5 @@ package com.viaversion.viabackwards.protocol.protocol1_19_4to1_20.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;
public final class BackSignEditStorage implements StorableObject { public record BackSignEditStorage(Position position) implements StorableObject {
private final Position position;
public BackSignEditStorage(final Position position) {
this.position = position;
}
public Position position() {
return position;
}
} }

Datei anzeigen

@ -56,6 +56,7 @@ import com.viaversion.viaversion.util.CipherUtil;
import com.viaversion.viaversion.util.ComponentUtil; import com.viaversion.viaversion.util.ComponentUtil;
import com.viaversion.viaversion.util.Pair; import com.viaversion.viaversion.util.Pair;
import com.viaversion.viaversion.util.TagUtil; import com.viaversion.viaversion.util.TagUtil;
import java.security.SignatureException;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
@ -205,7 +206,12 @@ public final class Protocol1_19To1_19_1 extends BackwardsProtocol<ClientboundPac
final MessageMetadata metadata = new MessageMetadata(sender, timestamp, salt); final MessageMetadata metadata = new MessageMetadata(sender, timestamp, salt);
final DecoratableMessage decoratableMessage = new DecoratableMessage(message); final DecoratableMessage decoratableMessage = new DecoratableMessage(message);
final byte[] signature = chatSession.signChatMessage(metadata, decoratableMessage, messagesStorage.lastSignatures()); final byte[] signature;
try {
signature = chatSession.signChatMessage(metadata, decoratableMessage, messagesStorage.lastSignatures());
} catch (final SignatureException e) {
throw new RuntimeException(e);
}
wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature); // Signature wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature); // Signature
wrapper.write(Type.BOOLEAN, decoratableMessage.isDecorated()); // Signed preview wrapper.write(Type.BOOLEAN, decoratableMessage.isDecorated()); // Signed preview
@ -249,7 +255,12 @@ public final class Protocol1_19To1_19_1 extends BackwardsProtocol<ClientboundPac
final List<Pair<String, String>> arguments = argumentsProvider.getSignableArguments(command); final List<Pair<String, String>> arguments = argumentsProvider.getSignableArguments(command);
wrapper.write(Type.VAR_INT, arguments.size()); wrapper.write(Type.VAR_INT, arguments.size());
for (final Pair<String, String> argument : arguments) { for (final Pair<String, String> argument : arguments) {
final byte[] signature = chatSession.signChatMessage(metadata, new DecoratableMessage(argument.value()), messagesStorage.lastSignatures()); final byte[] signature;
try {
signature = chatSession.signChatMessage(metadata, new DecoratableMessage(argument.value()), messagesStorage.lastSignatures());
} catch (final SignatureException e) {
throw new RuntimeException(e);
}
wrapper.write(Type.STRING, argument.key()); wrapper.write(Type.STRING, argument.key());
wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature); wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, signature);

Datei anzeigen

@ -18,17 +18,6 @@
package com.viaversion.viabackwards.protocol.protocol1_19to1_19_1.storage; 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 org.checkerframework.checker.nullness.qual.Nullable;
public final class NonceStorage implements StorableObject { public record NonceStorage(byte[] nonce) implements StorableObject {
private final byte[] nonce;
public NonceStorage(final byte @Nullable [] nonce) {
this.nonce = nonce;
}
public byte @Nullable [] nonce() {
return nonce;
}
} }

Datei anzeigen

@ -83,9 +83,9 @@ public final class Protocol1_20_2To1_20_3 extends BackwardsProtocol<ClientboundP
soundRewriter.registerStopSound(ClientboundPackets1_20_3.STOP_SOUND); soundRewriter.registerStopSound(ClientboundPackets1_20_3.STOP_SOUND);
new StatisticsRewriter<>(this).register(ClientboundPackets1_20_3.STATISTICS); new StatisticsRewriter<>(this).register(ClientboundPackets1_20_3.STATISTICS);
new CommandRewriter1_19_4<ClientboundPacket1_20_3>(this) { new CommandRewriter1_19_4<>(this) {
@Override @Override
public void handleArgument(final PacketWrapper wrapper, final String argumentType) throws Exception { public void handleArgument(final PacketWrapper wrapper, final String argumentType) {
if (argumentType.equals("minecraft:style")) { if (argumentType.equals("minecraft:style")) {
wrapper.write(Type.VAR_INT, 1); // Phrase wrapper.write(Type.VAR_INT, 1); // Phrase
} else { } else {
@ -364,13 +364,13 @@ public final class Protocol1_20_2To1_20_3 extends BackwardsProtocol<ClientboundP
}; };
} }
private void convertComponent(final PacketWrapper wrapper) throws Exception { private void convertComponent(final PacketWrapper wrapper) {
final Tag tag = wrapper.read(Type.TAG); final Tag tag = wrapper.read(Type.TAG);
translatableRewriter.processTag(wrapper.user(), tag); translatableRewriter.processTag(wrapper.user(), tag);
wrapper.write(Type.COMPONENT, ComponentUtil.tagToJson(tag)); wrapper.write(Type.COMPONENT, ComponentUtil.tagToJson(tag));
} }
private void convertOptionalComponent(final PacketWrapper wrapper) throws Exception { private void convertOptionalComponent(final PacketWrapper wrapper) {
final Tag tag = wrapper.read(Type.OPTIONAL_TAG); final Tag tag = wrapper.read(Type.OPTIONAL_TAG);
translatableRewriter.processTag(wrapper.user(), tag); translatableRewriter.processTag(wrapper.user(), tag);
wrapper.write(Type.OPTIONAL_COMPONENT, ComponentUtil.tagToJson(tag)); wrapper.write(Type.OPTIONAL_COMPONENT, ComponentUtil.tagToJson(tag));

Datei anzeigen

@ -90,9 +90,9 @@ public final class BlockItemPacketRewriter1_20_3 extends BackwardsItemRewriter<C
} }
}); });
new RecipeRewriter1_20_3<ClientboundPacket1_20_3>(protocol) { new RecipeRewriter1_20_3<>(protocol) {
@Override @Override
public void handleCraftingShaped(final PacketWrapper wrapper) throws Exception { public void handleCraftingShaped(final PacketWrapper wrapper) {
// Move width and height up // Move width and height up
final String group = wrapper.read(Type.STRING); final String group = wrapper.read(Type.STRING);
final int craftingBookCategory = wrapper.read(Type.VAR_INT); final int craftingBookCategory = wrapper.read(Type.VAR_INT);

Datei anzeigen

@ -20,16 +20,7 @@ package com.viaversion.viabackwards.protocol.protocol1_20_2to1_20_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 ResourcepackIDStorage implements StorableObject { public record ResourcepackIDStorage(UUID uuid) implements StorableObject {
private final UUID uuid;
public ResourcepackIDStorage(final UUID uuid) {
this.uuid = uuid;
}
public UUID uuid() {
return uuid;
}
@Override @Override
public boolean clearOnServerSwitch() { public boolean clearOnServerSwitch() {

Datei anzeigen

@ -151,9 +151,9 @@ public final class Protocol1_20_3To1_20_5 extends BackwardsProtocol<ClientboundP
response.sendToServer(Protocol1_20_3To1_20_5.class); response.sendToServer(Protocol1_20_3To1_20_5.class);
}); });
new CommandRewriter1_19_4<ClientboundPacket1_20_5>(this) { new CommandRewriter1_19_4<>(this) {
@Override @Override
public void handleArgument(final PacketWrapper wrapper, final String argumentType) throws Exception { public void handleArgument(final PacketWrapper wrapper, final String argumentType) {
if (argumentType.equals("minecraft:loot_table") if (argumentType.equals("minecraft:loot_table")
|| argumentType.equals("minecraft:loot_predicate") || argumentType.equals("minecraft:loot_predicate")
|| argumentType.equals("minecraft:loot_modifier")) { || argumentType.equals("minecraft:loot_modifier")) {
@ -182,7 +182,7 @@ public final class Protocol1_20_3To1_20_5 extends BackwardsProtocol<ClientboundP
cancelClientbound(ClientboundPackets1_20_5.DEBUG_SAMPLE); cancelClientbound(ClientboundPackets1_20_5.DEBUG_SAMPLE);
} }
private void handleStoreCookie(final PacketWrapper wrapper) throws Exception { private void handleStoreCookie(final PacketWrapper wrapper) {
wrapper.cancel(); wrapper.cancel();
final String resourceLocation = wrapper.read(Type.STRING); final String resourceLocation = wrapper.read(Type.STRING);
@ -194,7 +194,7 @@ public final class Protocol1_20_3To1_20_5 extends BackwardsProtocol<ClientboundP
wrapper.user().get(CookieStorage.class).cookies().put(resourceLocation, data); wrapper.user().get(CookieStorage.class).cookies().put(resourceLocation, data);
} }
private void handleCookieRequest(final PacketWrapper wrapper, final ServerboundPacketType responseType) throws Exception { private void handleCookieRequest(final PacketWrapper wrapper, final ServerboundPacketType responseType) {
wrapper.cancel(); wrapper.cancel();
final String resourceLocation = wrapper.read(Type.STRING); final String resourceLocation = wrapper.read(Type.STRING);
@ -205,7 +205,7 @@ public final class Protocol1_20_3To1_20_5 extends BackwardsProtocol<ClientboundP
responsePacket.sendToServer(Protocol1_20_3To1_20_5.class); responsePacket.sendToServer(Protocol1_20_3To1_20_5.class);
} }
private void handleTransfer(final PacketWrapper wrapper) throws Exception { private void handleTransfer(final PacketWrapper wrapper) {
wrapper.cancel(); wrapper.cancel();
final String host = wrapper.read(Type.STRING); final String host = wrapper.read(Type.STRING);

Datei anzeigen

@ -294,40 +294,24 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem
} }
private static int colorId(final String color) { private static int colorId(final String color) {
switch (color) { return switch (color) {
case "orange": case "orange" -> 1;
return 1; case "magenta" -> 2;
case "magenta": case "light_blue" -> 3;
return 2; case "yellow" -> 4;
case "light_blue": case "lime" -> 5;
return 3; case "pink" -> 6;
case "yellow": case "gray" -> 7;
return 4; case "light_gray" -> 8;
case "lime": case "cyan" -> 9;
return 5; case "purple" -> 10;
case "pink": case "blue" -> 11;
return 6; case "brown" -> 12;
case "gray": case "green" -> 13;
return 7; case "red" -> 14;
case "light_gray": case "black" -> 15;
return 8; default -> 0;
case "cyan": };
return 9;
case "purple":
return 10;
case "blue":
return 11;
case "brown":
return 12;
case "green":
return 13;
case "red":
return 14;
case "black":
return 15;
default:
return 0;
}
} }
@Override @Override

Datei anzeigen

@ -35,6 +35,7 @@ import com.viaversion.viaversion.api.rewriter.ItemRewriter;
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.exception.CancelException; import com.viaversion.viaversion.exception.CancelException;
import com.viaversion.viaversion.exception.InformativeException;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets; import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets;
import com.viaversion.viaversion.protocols.base.ServerboundLoginPackets; import com.viaversion.viaversion.protocols.base.ServerboundLoginPackets;
@ -170,7 +171,7 @@ public final class Protocol1_20To1_20_2 extends BackwardsProtocol<ClientboundPac
} }
@Override @Override
public void transform(final Direction direction, final State state, final PacketWrapper wrapper) throws Exception { public void transform(final Direction direction, final State state, final PacketWrapper wrapper) throws InformativeException, CancelException {
final ConfigurationPacketStorage configurationPacketStorage = wrapper.user().get(ConfigurationPacketStorage.class); final ConfigurationPacketStorage configurationPacketStorage = wrapper.user().get(ConfigurationPacketStorage.class);
if (configurationPacketStorage == null || configurationPacketStorage.isFinished()) { if (configurationPacketStorage == null || configurationPacketStorage.isFinished()) {
super.transform(direction, state, wrapper); super.transform(direction, state, wrapper);

Datei anzeigen

@ -286,9 +286,9 @@ public final class BlockItemPacketRewriter1_20_2 extends BackwardsItemRewriter<C
} }
}); });
new RecipeRewriter1_20_2<ClientboundPackets1_20_2>(protocol) { new RecipeRewriter1_20_2<>(protocol) {
@Override @Override
public void handleCraftingShapeless(final PacketWrapper wrapper) throws Exception { public void handleCraftingShapeless(final PacketWrapper wrapper) {
wrapper.passthrough(Type.STRING); // Group wrapper.passthrough(Type.STRING); // Group
wrapper.passthrough(Type.VAR_INT); // Crafting book category wrapper.passthrough(Type.VAR_INT); // Crafting book category
handleIngredients(wrapper); handleIngredients(wrapper);
@ -299,7 +299,7 @@ public final class BlockItemPacketRewriter1_20_2 extends BackwardsItemRewriter<C
} }
@Override @Override
public void handleSmelting(final PacketWrapper wrapper) throws Exception { public void handleSmelting(final PacketWrapper wrapper) {
wrapper.passthrough(Type.STRING); // Group wrapper.passthrough(Type.STRING); // Group
wrapper.passthrough(Type.VAR_INT); // Crafting book category wrapper.passthrough(Type.VAR_INT); // Crafting book category
handleIngredient(wrapper); handleIngredient(wrapper);
@ -313,7 +313,7 @@ public final class BlockItemPacketRewriter1_20_2 extends BackwardsItemRewriter<C
} }
@Override @Override
public void handleCraftingShaped(final PacketWrapper wrapper) throws Exception { public void handleCraftingShaped(final PacketWrapper wrapper) {
final int ingredients = wrapper.passthrough(Type.VAR_INT) * wrapper.passthrough(Type.VAR_INT); final int ingredients = wrapper.passthrough(Type.VAR_INT) * wrapper.passthrough(Type.VAR_INT);
wrapper.passthrough(Type.STRING); // Group wrapper.passthrough(Type.STRING); // Group
wrapper.passthrough(Type.VAR_INT); // Crafting book category wrapper.passthrough(Type.VAR_INT); // Crafting book category
@ -329,7 +329,7 @@ public final class BlockItemPacketRewriter1_20_2 extends BackwardsItemRewriter<C
} }
@Override @Override
public void handleStonecutting(final PacketWrapper wrapper) throws Exception { public void handleStonecutting(final PacketWrapper wrapper) {
wrapper.passthrough(Type.STRING); // Group wrapper.passthrough(Type.STRING); // Group
handleIngredient(wrapper); handleIngredient(wrapper);
@ -339,7 +339,7 @@ public final class BlockItemPacketRewriter1_20_2 extends BackwardsItemRewriter<C
} }
@Override @Override
public void handleSmithing(final PacketWrapper wrapper) throws Exception { public void handleSmithing(final PacketWrapper wrapper) {
handleIngredient(wrapper); // Base handleIngredient(wrapper); // Base
handleIngredient(wrapper); // Addition handleIngredient(wrapper); // Addition
@ -349,7 +349,7 @@ public final class BlockItemPacketRewriter1_20_2 extends BackwardsItemRewriter<C
} }
@Override @Override
public void handleSmithingTransform(final PacketWrapper wrapper) throws Exception { public void handleSmithingTransform(final PacketWrapper wrapper) {
handleIngredient(wrapper); // Template handleIngredient(wrapper); // Template
handleIngredient(wrapper); // Base handleIngredient(wrapper); // Base
handleIngredient(wrapper); // Additions handleIngredient(wrapper); // Additions
@ -360,7 +360,7 @@ public final class BlockItemPacketRewriter1_20_2 extends BackwardsItemRewriter<C
} }
@Override @Override
protected void handleIngredient(final PacketWrapper wrapper) throws Exception { protected void handleIngredient(final PacketWrapper wrapper) {
final Item[] items = wrapper.read(itemArrayType()); final Item[] items = wrapper.read(itemArrayType());
wrapper.write(Type.ITEM1_13_2_ARRAY, items); wrapper.write(Type.ITEM1_13_2_ARRAY, items);
for (final Item item : items) { for (final Item item : items) {

Datei anzeigen

@ -39,7 +39,7 @@ public final class ConfigurationPacketStorage implements StorableObject {
private boolean finished; private boolean finished;
private QueuedPacket resourcePack; private QueuedPacket resourcePack;
public void setResourcePack(final PacketWrapper wrapper) throws Exception { public void setResourcePack(final PacketWrapper wrapper) {
resourcePack = toQueuedPacket(wrapper, ClientboundPackets1_19_4.RESOURCE_PACK); resourcePack = toQueuedPacket(wrapper, ClientboundPackets1_19_4.RESOURCE_PACK);
} }
@ -60,11 +60,11 @@ public final class ConfigurationPacketStorage implements StorableObject {
this.enabledFeatures = enabledFeatures; this.enabledFeatures = enabledFeatures;
} }
public void addRawPacket(final PacketWrapper wrapper, final PacketType type) throws Exception { public void addRawPacket(final PacketWrapper wrapper, final PacketType type) {
rawPackets.add(toQueuedPacket(wrapper, type)); rawPackets.add(toQueuedPacket(wrapper, type));
} }
private QueuedPacket toQueuedPacket(final PacketWrapper wrapper, final PacketType type) throws Exception { private QueuedPacket toQueuedPacket(final PacketWrapper wrapper, final PacketType type) {
Preconditions.checkArgument(!wrapper.isCancelled(), "Wrapper should be cancelled AFTER calling toQueuedPacket"); Preconditions.checkArgument(!wrapper.isCancelled(), "Wrapper should be cancelled AFTER calling toQueuedPacket");
// It's easier to just copy it to a byte array buffer than to manually read the data // It's easier to just copy it to a byte array buffer than to manually read the data
@ -75,7 +75,7 @@ public final class ConfigurationPacketStorage implements StorableObject {
return new QueuedPacket(buf, type); return new QueuedPacket(buf, type);
} }
public void sendQueuedPackets(final UserConnection connection) throws Exception { public void sendQueuedPackets(final UserConnection connection) {
// Send resource pack at the end // Send resource pack at the end
if (resourcePack != null) { if (resourcePack != null) {
rawPackets.add(resourcePack); rawPackets.add(resourcePack);
@ -100,21 +100,6 @@ public final class ConfigurationPacketStorage implements StorableObject {
this.finished = finished; this.finished = finished;
} }
public static final class QueuedPacket { public record QueuedPacket(ByteBuf buf, PacketType packetType) {
private final ByteBuf buf;
private final PacketType packetType;
public QueuedPacket(final ByteBuf buf, final PacketType packetType) {
this.buf = buf;
this.packetType = packetType;
}
public ByteBuf buf() {
return buf;
}
public PacketType packetType() {
return packetType;
}
} }
} }

Datei anzeigen

@ -44,7 +44,7 @@ public class BlockEntity {
TYPES.put("Sign", 9); TYPES.put("Sign", 9);
} }
public static void handle(List<CompoundTag> tags, UserConnection connection) throws Exception { public static void handle(List<CompoundTag> tags, UserConnection connection) {
for (CompoundTag tag : tags) { for (CompoundTag tag : tags) {
StringTag idTag = tag.getStringTag("id"); StringTag idTag = tag.getStringTag("id");
if (idTag == null) { if (idTag == null) {
@ -71,7 +71,7 @@ public class BlockEntity {
} }
} }
private static void updateBlockEntity(Position pos, short id, CompoundTag tag, UserConnection connection) throws Exception { private static void updateBlockEntity(Position pos, short id, CompoundTag tag, UserConnection connection) {
PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_9_3.BLOCK_ENTITY_DATA, null, connection); PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_9_3.BLOCK_ENTITY_DATA, null, connection);
wrapper.write(Type.POSITION1_8, pos); wrapper.write(Type.POSITION1_8, pos);
wrapper.write(Type.UNSIGNED_BYTE, id); wrapper.write(Type.UNSIGNED_BYTE, id);

Datei anzeigen

@ -37,8 +37,8 @@ import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPac
public class Protocol1_9_4To1_10 extends BackwardsProtocol<ClientboundPackets1_9_3, ClientboundPackets1_9_3, ServerboundPackets1_9_3, ServerboundPackets1_9_3> { public class Protocol1_9_4To1_10 extends BackwardsProtocol<ClientboundPackets1_9_3, ClientboundPackets1_9_3, ServerboundPackets1_9_3, ServerboundPackets1_9_3> {
public static final BackwardsMappings MAPPINGS = new BackwardsMappings("1.10", "1.9.4"); public static final BackwardsMappings MAPPINGS = new BackwardsMappings("1.10", "1.9.4");
private static final ValueTransformer<Float, Short> TO_OLD_PITCH = new ValueTransformer<Float, Short>(Type.UNSIGNED_BYTE) { private static final ValueTransformer<Float, Short> TO_OLD_PITCH = new ValueTransformer<>(Type.UNSIGNED_BYTE) {
public Short transform(PacketWrapper packetWrapper, Float inputValue) throws Exception { public Short transform(PacketWrapper packetWrapper, Float inputValue) {
return (short) Math.round(inputValue * 63.5F); return (short) Math.round(inputValue * 63.5F);
} }
}; };

Datei anzeigen

@ -1,4 +1,4 @@
projectVersion=4.10.3-SNAPSHOT projectVersion=5.0.0-SNAPSHOT
# Smile emoji # Smile emoji
mcVersions=1.20.6,1.20.5,1.20.4, 1.20.3, 1.20.2, 1.20.1, 1.20, 1.19.4, 1.19.3, 1.19.2, 1.19.1, 1.19, 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5, 1.16.4, 1.16.3, 1.16.2, 1.16.1, 1.16, 1.15.2, 1.15.1, 1.15, 1.14.4, 1.14.3, 1.14.2, 1.14.1, 1.14, 1.13.2, 1.13.1, 1.13, 1.12.2, 1.12.1, 1.12, 1.11.2, 1.11.1, 1.11, 1.10.2, 1.10.1, 1.10 mcVersions=1.20.6,1.20.5,1.20.4, 1.20.3, 1.20.2, 1.20.1, 1.20, 1.19.4, 1.19.3, 1.19.2, 1.19.1, 1.19, 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5, 1.16.4, 1.16.3, 1.16.2, 1.16.1, 1.16, 1.15.2, 1.15.1, 1.15, 1.14.4, 1.14.3, 1.14.2, 1.14.1, 1.14, 1.13.2, 1.13.1, 1.13, 1.12.2, 1.12.1, 1.12, 1.11.2, 1.11.1, 1.11, 1.10.2, 1.10.1, 1.10

Datei anzeigen

@ -3,7 +3,7 @@ metadata.format.version = "1.1"
[versions] [versions]
# ViaVersion # ViaVersion
viaver = "4.10.2-SNAPSHOT" viaver = "5.0.0-SNAPSHOT"
# Common provided # Common provided
netty = "4.0.20.Final" netty = "4.0.20.Final"

Datei anzeigen

@ -4,6 +4,7 @@ rootProject.name = "viabackwards-parent"
dependencyResolutionManagement { dependencyResolutionManagement {
repositories { repositories {
mavenLocal()
maven("https://repo.viaversion.com") maven("https://repo.viaversion.com")
maven("https://repo.papermc.io/repository/maven-public/") maven("https://repo.papermc.io/repository/maven-public/")
maven("https://oss.sonatype.org/content/repositories/snapshots/") maven("https://oss.sonatype.org/content/repositories/snapshots/")