mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-28 19:39:11 +00:00
feat(client-mod): 修复一些兼容性问题
This commit is contained in:
@@ -26,6 +26,7 @@ import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerRegisterChannelEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -158,6 +159,15 @@ public class BukkitNetworkManager implements NetworkManager, Listener {
|
||||
this.onlineUsers.remove(player.getUniqueId());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerRegisterChannel(PlayerRegisterChannelEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
NetWorkUser user = getUser(player);
|
||||
if (user != null) {
|
||||
user.setUsingClientMod(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<BukkitServerPlayer> onlineUsers() {
|
||||
return onlineUsers.values();
|
||||
|
||||
@@ -55,7 +55,8 @@ public class PacketConsumers {
|
||||
BIOME_LIST = new IntIdentityList(RegistryUtils.currentBiomeRegistrySize());
|
||||
}
|
||||
|
||||
public static int remap(int stateId) {
|
||||
public static int remap(int stateId, NetWorkUser user) {
|
||||
if (user.usingClientMod() && !BlockStateUtils.isVanillaBlock(stateId)) return stateId;
|
||||
return mappings[stateId];
|
||||
}
|
||||
|
||||
@@ -74,11 +75,11 @@ public class PacketConsumers {
|
||||
PalettedContainer<Integer> container = mcSection.blockStateContainer();
|
||||
Palette<Integer> palette = container.data().palette();
|
||||
if (palette.canRemap()) {
|
||||
palette.remap(PacketConsumers::remap);
|
||||
palette.remap(stateId -> remap(stateId, user));
|
||||
} else {
|
||||
for (int j = 0; j < 4096; j ++) {
|
||||
int state = container.get(j);
|
||||
int newState = remap(state);
|
||||
int newState = remap(state, user);
|
||||
if (newState != state) {
|
||||
container.set(j, newState);
|
||||
}
|
||||
@@ -105,7 +106,7 @@ public class PacketConsumers {
|
||||
for (int i = 0; i < blocks; i++) {
|
||||
long k = buf.readVarLong();
|
||||
positions[i] = (short) ((int) (k & 4095L));
|
||||
states[i] = remap((int) (k >>> 12));
|
||||
states[i] = remap((int) (k >>> 12), user);
|
||||
}
|
||||
buf.clear();
|
||||
buf.writeVarInt(event.packetID());
|
||||
@@ -125,7 +126,7 @@ public class PacketConsumers {
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
BlockPos pos = buf.readBlockPos(buf);
|
||||
int before = buf.readVarInt();
|
||||
int state = remap(before);
|
||||
int state = remap(before, user);
|
||||
if (state == before) {
|
||||
return;
|
||||
}
|
||||
@@ -147,7 +148,7 @@ public class PacketConsumers {
|
||||
BlockPos blockPos = buf.readBlockPos(buf);
|
||||
int state = buf.readInt();
|
||||
boolean global = buf.readBoolean();
|
||||
int newState = remap(state);
|
||||
int newState = remap(state, user);
|
||||
if (newState == state) {
|
||||
return;
|
||||
}
|
||||
@@ -181,7 +182,7 @@ public class PacketConsumers {
|
||||
if (!Reflections.clazz$BlockParticleOption.isInstance(option)) return;
|
||||
Object blockState = Reflections.field$BlockParticleOption$blockState.get(option);
|
||||
int id = BlockStateUtils.blockStateToId(blockState);
|
||||
int remapped = remap(id);
|
||||
int remapped = remap(id, user);
|
||||
if (remapped == id) return;
|
||||
Reflections.field$BlockParticleOption$blockState.set(option, BlockStateUtils.idToBlockState(remapped));
|
||||
event.setChanged(true);
|
||||
@@ -523,7 +524,7 @@ public class PacketConsumers {
|
||||
// Falling blocks
|
||||
if (entityType == Reflections.instance$EntityType$FALLING_BLOCK) {
|
||||
int data = Reflections.field$ClientboundAddEntityPacket$data.getInt(packet);
|
||||
int remapped = remap(data);
|
||||
int remapped = remap(data, user);
|
||||
if (remapped != data) {
|
||||
Reflections.field$ClientboundAddEntityPacket$data.set(packet, remapped);
|
||||
}
|
||||
|
||||
@@ -63,6 +63,8 @@ public class BukkitServerPlayer extends Player {
|
||||
|
||||
private Key lastUsedRecipe = null;
|
||||
|
||||
private boolean usingClientMod = false;
|
||||
|
||||
private Map<Integer, List<Integer>> furnitureView = new ConcurrentHashMap<>();
|
||||
|
||||
public BukkitServerPlayer(BukkitCraftEngine plugin, Channel channel) {
|
||||
@@ -616,4 +618,12 @@ public class BukkitServerPlayer extends Player {
|
||||
public void setLastUsedRecipe(Key lastUsedRecipe) {
|
||||
this.lastUsedRecipe = lastUsedRecipe;
|
||||
}
|
||||
|
||||
public boolean usingClientMod() {
|
||||
return this.usingClientMod;
|
||||
}
|
||||
|
||||
public void setUsingClientMod(boolean usingClientMod) {
|
||||
this.usingClientMod = usingClientMod;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user