feat(wrapper): handle previous versions
This commit is contained in:
parent
04fbcd99ba
commit
584b34fd51
3 changed files with 35 additions and 24 deletions
|
@ -150,24 +150,32 @@ public class AppearanceManager {
|
|||
respawn.setGameMode(player.getGameMode());
|
||||
respawn.setPreviousGameMode(player.getGameMode());
|
||||
respawn.setDifficulty(world.getDifficulty());
|
||||
respawn.setCopyMetadata(false);
|
||||
respawn.getHandle().getBooleans().write(0, false); // is debug
|
||||
respawn.getHandle().getBooleans().write(0, false); // is flat
|
||||
respawn.setCopyMetadata(true);
|
||||
respawn.sendPacket(player);
|
||||
}
|
||||
|
||||
private void updateTabList(WrappedGameProfile gameProfile, String displayName) {
|
||||
final WrapperPlayerServerPlayerInfoRemove remove = new WrapperPlayerServerPlayerInfoRemove();
|
||||
final WrapperPlayerServerPlayerInfo update = new WrapperPlayerServerPlayerInfo();
|
||||
final EnumSet<EnumWrappers.PlayerInfoAction> actions = EnumSet.of(
|
||||
EnumWrappers.PlayerInfoAction.REMOVE_PLAYER, // Necessary for 1.19.2 and below
|
||||
EnumWrappers.PlayerInfoAction.ADD_PLAYER,
|
||||
EnumWrappers.PlayerInfoAction.INITIALIZE_CHAT,
|
||||
EnumWrappers.PlayerInfoAction.UPDATE_LISTED,
|
||||
EnumWrappers.PlayerInfoAction.UPDATE_DISPLAY_NAME,
|
||||
EnumWrappers.PlayerInfoAction.UPDATE_GAME_MODE,
|
||||
EnumWrappers.PlayerInfoAction.UPDATE_LATENCY);
|
||||
update.setData(ImmutableList.of(new PlayerInfoData(
|
||||
final WrapperPlayerServerPlayerInfo add = new WrapperPlayerServerPlayerInfo();
|
||||
if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) {
|
||||
final WrapperPlayerServerPlayerInfoRemove remove = new WrapperPlayerServerPlayerInfoRemove();
|
||||
final EnumSet<EnumWrappers.PlayerInfoAction> actions = EnumSet.of(
|
||||
EnumWrappers.PlayerInfoAction.ADD_PLAYER,
|
||||
EnumWrappers.PlayerInfoAction.INITIALIZE_CHAT,
|
||||
EnumWrappers.PlayerInfoAction.UPDATE_LISTED,
|
||||
EnumWrappers.PlayerInfoAction.UPDATE_DISPLAY_NAME,
|
||||
EnumWrappers.PlayerInfoAction.UPDATE_GAME_MODE,
|
||||
EnumWrappers.PlayerInfoAction.UPDATE_LATENCY);
|
||||
remove.setUUIDs(ImmutableList.of(player.getUniqueId()));
|
||||
remove.sendPacket(player);
|
||||
add.setActions(actions);
|
||||
} else {
|
||||
final WrapperPlayerServerPlayerInfo remove = new WrapperPlayerServerPlayerInfo();
|
||||
remove.setActions(EnumSet.of(EnumWrappers.PlayerInfoAction.REMOVE_PLAYER));
|
||||
add.setActions(EnumSet.of(EnumWrappers.PlayerInfoAction.ADD_PLAYER));
|
||||
remove.sendPacket(player);
|
||||
}
|
||||
|
||||
add.setData(ImmutableList.of(new PlayerInfoData(
|
||||
player.getUniqueId(),
|
||||
player.getPing(),
|
||||
true,
|
||||
|
@ -180,12 +188,6 @@ public class AppearanceManager {
|
|||
// No, I'll not waste another day fixing their mess. Go cry about it to Mojang.
|
||||
// (Long live NoEncryption!)
|
||||
)));
|
||||
if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) {
|
||||
actions.remove(EnumWrappers.PlayerInfoAction.REMOVE_PLAYER);
|
||||
remove.setUUIDs(ImmutableList.of(player.getUniqueId()));
|
||||
remove.sendPacket(player);
|
||||
}
|
||||
update.setActions(actions);
|
||||
update.sendPacket(player);
|
||||
add.sendPacket(player);
|
||||
}
|
||||
}
|
|
@ -100,7 +100,11 @@ public class WrapperPlayServerRespawn extends AbstractPacket {
|
|||
}
|
||||
|
||||
public void setCopyMetadata(boolean value) {
|
||||
handle.getBytes().write(0, ((byte) (value ? 0x01 : 0x00)));
|
||||
if(MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) {
|
||||
handle.getBytes().write(0, ((byte) (value ? 0x01 : 0x00)));
|
||||
} else {
|
||||
handle.getBooleans().write(0, value);
|
||||
}
|
||||
}
|
||||
|
||||
//.............
|
||||
|
|
|
@ -2,6 +2,7 @@ package xyz.atnrch.nicko.wrapper;
|
|||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.comphenix.protocol.utility.MinecraftVersion;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers;
|
||||
import com.comphenix.protocol.wrappers.PlayerInfoData;
|
||||
|
||||
|
@ -32,7 +33,11 @@ public class WrapperPlayerServerPlayerInfo extends AbstractPacket {
|
|||
}
|
||||
|
||||
public void setActions(Set<EnumWrappers.PlayerInfoAction> value) {
|
||||
handle.getPlayerInfoActions().write(0, value);
|
||||
if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) {
|
||||
handle.getPlayerInfoActions().write(0, value);
|
||||
} else {
|
||||
handle.getPlayerInfoAction().write(0, value.stream().iterator().next()); // Get the first Value.
|
||||
}
|
||||
}
|
||||
|
||||
public List<PlayerInfoData> getData() {
|
||||
|
@ -40,6 +45,6 @@ public class WrapperPlayerServerPlayerInfo extends AbstractPacket {
|
|||
}
|
||||
|
||||
public void setData(List<PlayerInfoData> value) {
|
||||
handle.getPlayerInfoDataLists().write(1, value);
|
||||
handle.getPlayerInfoDataLists().write(0, value);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue