Added support for configuration state to ProtocolHack#createFakerUserConnection and implemented proper logging to Translator utils

This commit is contained in:
FlorianMichael 2023-09-22 20:01:26 +02:00
parent e887116078
commit 9a26ac9782
No known key found for this signature in database
GPG Key ID: C2FB87E71C425126
4 changed files with 50 additions and 14 deletions

View File

@ -39,6 +39,26 @@ import org.apache.logging.log4j.Logger;
import java.io.File;
/*
PORTING TO 1.20.2
- ClientPacketListener#handleAddObjective, new if added that could break behavior?
- Same for handleSetScore
- ClientHandshakePacketListenerImpl#handleGameProfile now sends brand payload and clientInformation packet.
- NBT: "ActiveEffects" is now called "active_effects" and also does not use IDs anymore but names
- Riding / Entity hitboxes have changed completely again
- Player#getMyRidingOffset default value: -0.35 -> -0.6
- AbstractMinecart#getPassengerAttachmentPoint() now no longer always returns 0 (I think we can just inject there?)
- Boat attachnment points are completely different
- Equipable#swapWithEquipmentSlot now has a swapWithEquipmentSlot check, looks important
- NBT: "CustomPotionEffects" is now called "custom_potion_effects
- ChorusFlowerBlock: has now a block-support-shape
- DaylightDetector#use constant from 4 -> 2 ???? No idea what MS is doing there
- PinkPetalsBlock: has no constant shape anymore, but is based on property (ka if this is important, you have to see, depending on how Via remapped this state)
- PitcherCrop Shape calculation has changed
- RepeaterBlock#updateShape now handles conditions that are also present clientside (do some blocks, not sure if this whole updateShape system is so important for us / that is detectable)
*/
/*
* TODO | General
* - Check if relevant for protocol translation: TakeItemEntityPacket isEmpty case (1.20 -> 1.20.1 change)

View File

@ -25,6 +25,7 @@ import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.connection.UserConnectionImpl;
import com.viaversion.viaversion.protocol.ProtocolPipelineImpl;
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.storage.InventoryTracker1_16;
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.storage.ConfigurationState;
import de.florianmichael.viafabricplus.ViaFabricPlus;
import de.florianmichael.viafabricplus.base.event.ChangeProtocolVersionCallback;
import de.florianmichael.viafabricplus.base.event.FinishViaVersionStartupCallback;
@ -186,13 +187,24 @@ public class ProtocolHack {
* @return Creates a Fake UserConnection class with a valid protocol pipeline to emulate packets
*/
public static UserConnection createFakerUserConnection() {
final var current = getMainUserConnection();
return createFakerUserConnection(getMainUserConnection().getChannel());
}
final var userConnection = new UserConnectionImpl(current.getChannel(), true);
userConnection.getProtocolInfo().setPipeline(new ProtocolPipelineImpl(userConnection));
userConnection.put(new InventoryTracker1_16());
/**
* @param channel the current channel
* @return Creates a Fake UserConnection class with a valid protocol pipeline to emulate packets
*/
public static UserConnection createFakerUserConnection(final Channel channel) {
final var fake = new UserConnectionImpl(channel, true);
fake.getProtocolInfo().setPipeline(new ProtocolPipelineImpl(fake));
return userConnection;
fake.put(new InventoryTracker1_16());
fake.put(new ConfigurationState());
//noinspection DataFlowIssue
fake.get(ConfigurationState.class).setBridgePhase(ConfigurationState.BridgePhase.NONE);
return fake;
}
/**

View File

@ -27,6 +27,8 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.connection.UserConnectionImpl;
import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18;
import de.florianmichael.viafabricplus.ViaFabricPlus;
import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
import io.netty.buffer.Unpooled;
import net.minecraft.SharedConstants;
import net.minecraft.network.PacketByteBuf;
@ -36,7 +38,7 @@ import java.util.List;
import java.util.stream.Collectors;
public class BlockStateTranslator {
private final static UserConnection DUMMY_USER_CONNECTION = new UserConnectionImpl(null, false);
private final static UserConnection DUMMY_USER_CONNECTION = ProtocolHack.createFakerUserConnection(null);
public static int translateBlockState1_18(int oldId) {
final List<ProtocolPathEntry> protocolPath = Via.getManager().getProtocolManager().getProtocolPath(SharedConstants.getProtocolVersion(), ProtocolVersion.v1_18_2.getVersion());
@ -53,7 +55,7 @@ public class BlockStateTranslator {
wrapper.read(Type.POSITION1_14);
return wrapper.read(Type.VAR_INT);
} catch (Exception e) {
e.printStackTrace();
ViaFabricPlus.LOGGER.error("Failed to translate block state " + oldId + " to 1.18.2", e);
}
return oldId;

View File

@ -24,11 +24,11 @@ import com.viaversion.viaversion.api.protocol.ProtocolPathEntry;
import com.viaversion.viaversion.api.protocol.packet.Direction;
import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.connection.UserConnectionImpl;
import com.viaversion.viaversion.protocol.packet.PacketWrapperImpl;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.storage.InventoryTracker;
import de.florianmichael.viafabricplus.ViaFabricPlus;
import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
import io.netty.buffer.Unpooled;
import net.minecraft.SharedConstants;
import net.minecraft.item.ItemStack;
import net.minecraft.network.NetworkSide;
import net.minecraft.network.NetworkState;
@ -45,10 +45,10 @@ import java.util.List;
import java.util.stream.Collectors;
public class ItemTranslator {
private final static UserConnection DUMMY_USER_CONNECTION = new UserConnectionImpl(null, false);
private final static UserConnection DUMMY_USER_CONNECTION = ProtocolHack.createFakerUserConnection(null);
public static Item MC_TO_VIA_LATEST_TO_TARGET(final ItemStack stack, final VersionEnum targetVersion) {
final List<ProtocolPathEntry> protocolPath = Via.getManager().getProtocolManager().getProtocolPath(SharedConstants.getProtocolVersion(), targetVersion.getVersion());
final List<ProtocolPathEntry> protocolPath = Via.getManager().getProtocolManager().getProtocolPath(ViaFabricPlus.NATIVE_VERSION.getVersion(), targetVersion.getVersion());
if (protocolPath == null) return null;
final var dummyPacket = new CreativeInventoryActionC2SPacket(36, stack);
@ -68,15 +68,16 @@ public class ItemTranslator {
return wrapper.read(Type.ITEM);
}
} catch (Exception e) {
e.printStackTrace();
ViaFabricPlus.LOGGER.error("Failed to translate item", e);
}
return null;
}
public static ItemStack VIA_TO_MC_B1_8_TO_LATEST(final Item item) {
final List<ProtocolPathEntry> protocolPath = Via.getManager().getProtocolManager().getProtocolPath(SharedConstants.getProtocolVersion(), VersionEnum.b1_8tob1_8_1.getVersion());
final List<ProtocolPathEntry> protocolPath = Via.getManager().getProtocolManager().getProtocolPath(ViaFabricPlus.NATIVE_VERSION.getVersion(), VersionEnum.b1_8tob1_8_1.getVersion());
if (protocolPath == null) return null;
// Make sure that ViaVersion doesn't track stuff and change its behaviour
DUMMY_USER_CONNECTION.put(new WindowTracker(DUMMY_USER_CONNECTION));
DUMMY_USER_CONNECTION.put(new InventoryTracker());
@ -97,7 +98,8 @@ public class ItemTranslator {
final var viaItem = wrapper.read(Type.FLAT_VAR_INT_ITEM);
return new ItemStack(() -> Registries.ITEM.get(viaItem.identifier()), viaItem.amount());
} catch (Exception e) {
throw new RuntimeException(e);
ViaFabricPlus.LOGGER.error("Failed to translate item", e);
return null;
}
}
}