diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java index 5086fdaa2..014a5a5d5 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java @@ -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 magicMap = (Map) 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()))); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ConcretePowderBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ConcretePowderBlockBehavior.java index fa7a3068a..801e8605a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ConcretePowderBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ConcretePowderBlockBehavior.java @@ -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 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(); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/WaterLoggedBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/WaterLoggedBlockBehavior.java index 2cdc56660..401c56bc0 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/WaterLoggedBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/WaterLoggedBlockBehavior.java @@ -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 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; // } // } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java index 10a25804a..f7fa9cddd 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java @@ -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 users = new ConcurrentHashMap<>(); private final Map onlineUsers = new ConcurrentHashMap<>(); private final HashSet 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 onlineUsers() { - return new ArrayList<>(this.onlineUsers.values()); + public BukkitServerPlayer[] onlineUsers() { + return this.onlineUserArray; } @Override diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index 3c84df190..672dc1922 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -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") ) ); diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetworkManager.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetworkManager.java index 4b0a0dc77..f2aa345f1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetworkManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetworkManager.java @@ -16,7 +16,7 @@ public interface NetworkManager { Channel getChannel(Player player); - Collection onlineUsers(); + NetWorkUser[] onlineUsers(); void init();