9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-19 15:09:15 +00:00

Merge branch 'Xiao-MoMi:dev' into dev

This commit is contained in:
jhqwqmc
2025-03-27 04:48:01 +08:00
committed by GitHub
6 changed files with 27 additions and 11 deletions

View File

@@ -778,7 +778,7 @@ public class BukkitBlockManager extends AbstractBlockManager {
builder2.put(stateId, blockHolder);
stateIds.add(stateId);
deceiveBukkit(newRealBlock, clientSideBlockType);
deceiveBukkit(newRealBlock, clientSideBlockType, isNoteBlock);
order.add(realBlockKey);
counter++;
}
@@ -818,9 +818,9 @@ public class BukkitBlockManager extends AbstractBlockManager {
return states.get(0);
}
private void deceiveBukkit(Object newBlock, Key replacedBlock) throws IllegalAccessException {
private void deceiveBukkit(Object newBlock, Key replacedBlock, boolean isNoteBlock) throws IllegalAccessException {
@SuppressWarnings("unchecked")
Map<Object, Material> magicMap = (Map<Object, Material>) Reflections.field$CraftMagicNumbers$BLOCK_MATERIAL.get(null);
magicMap.put(newBlock, org.bukkit.Registry.MATERIAL.get(Objects.requireNonNull(NamespacedKey.fromString(replacedBlock.toString()))));
magicMap.put(newBlock, isNoteBlock ? Material.STONE : org.bukkit.Registry.MATERIAL.get(new NamespacedKey(replacedBlock.namespace(), replacedBlock.value())));
}
}

View File

@@ -15,6 +15,7 @@ import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.util.Direction;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.VersionHelper;
import net.momirealms.craftengine.shared.block.BlockBehavior;
import org.bukkit.block.BlockState;
import org.bukkit.event.block.BlockFormEvent;
@@ -95,8 +96,15 @@ public class ConcretePowderBlockBehavior extends FallingBlockBehavior {
@Override
public Object updateShape(Object thisBlock, Object[] args, Callable<Object> superMethod) throws Exception {
Object level = args[1];
Object pos = args[3];
Object level;
Object pos;
if (VersionHelper.isVersionNewerThan1_21_2()) {
level = args[1];
pos = args[3];
} else {
level = args[3];
pos = args[4];
}
if (touchesLiquid(level, pos)) {
if (!Reflections.clazz$Level.isInstance(level)) {
return getDefaultBlockState();

View File

@@ -18,7 +18,7 @@ public class WaterLoggedBlockBehavior extends AbstractBlockBehavior {
this.waterloggedProperty = waterloggedProperty;
}
// TODO create real waterlogged blocks
// TODO create real waterlogged blocks, needs to have real waterlogged property
// @Override
// public Object pickupBlock(Object thisBlock, Object[] args, Callable<Object> superMethod) throws Exception {
// if (this.waterloggedProperty == null) return Reflections.instance$ItemStack$EMPTY;
@@ -40,7 +40,6 @@ public class WaterLoggedBlockBehavior extends AbstractBlockBehavior {
// Reflections.method$LevelWriter$setBlock.invoke(world, pos, immutableBlockState.with(this.waterloggedProperty, false).customBlockState().handle(), 3);
// // TODO check can survive
// Object itemStack = Reflections.constructor$ItemStack.newInstance(Reflections.instance$Items$WATER_BUCKET);
// System.out.println(itemStack);
// return itemStack;
// }
// }

View File

@@ -6,6 +6,7 @@ import io.netty.handler.codec.MessageToMessageDecoder;
import io.netty.handler.codec.MessageToMessageEncoder;
import io.netty.util.internal.logging.InternalLogger;
import io.netty.util.internal.logging.InternalLoggerFactory;
import net.momirealms.craftengine.bukkit.block.BukkitBlockManager;
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
import net.momirealms.craftengine.bukkit.plugin.network.impl.*;
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
@@ -56,6 +57,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
private final Map<ChannelPipeline, BukkitServerPlayer> users = new ConcurrentHashMap<>();
private final Map<UUID, BukkitServerPlayer> onlineUsers = new ConcurrentHashMap<>();
private final HashSet<Channel> injectedChannels = new HashSet<>();
private BukkitServerPlayer[] onlineUserArray = new BukkitServerPlayer[0];
private final PacketIds packetIds;
@@ -147,6 +149,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
if (user != null) {
user.setPlayer(player);
this.onlineUsers.put(player.getUniqueId(), user);
this.resetUserArray();
}
}
@@ -158,11 +161,16 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
if (user == null) return;
handleDisconnection(channel);
this.onlineUsers.remove(player.getUniqueId());
this.resetUserArray();
}
private void resetUserArray() {
this.onlineUserArray = this.onlineUsers.values().toArray(new BukkitServerPlayer[0]);
}
@Override
public Collection<BukkitServerPlayer> onlineUsers() {
return new ArrayList<>(this.onlineUsers.values());
public BukkitServerPlayer[] onlineUsers() {
return this.onlineUserArray;
}
@Override

View File

@@ -5545,7 +5545,8 @@ public class Reflections {
public static final Class<?> clazz$SupportType = requireNonNull(
ReflectionUtils.getClazz(
BukkitReflectionUtils.assembleMCClass("world.level.block.SupportType")
BukkitReflectionUtils.assembleMCClass("world.level.block.SupportType"),
BukkitReflectionUtils.assembleMCClass("world.level.block.EnumBlockSupport")
)
);

View File

@@ -16,7 +16,7 @@ public interface NetworkManager {
Channel getChannel(Player player);
Collection<? extends NetWorkUser> onlineUsers();
NetWorkUser[] onlineUsers();
void init();