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 6e5c77ea3..f118b8236 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 @@ -19,6 +19,7 @@ import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflect import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MBlocks; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MBuiltInRegistries; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistries; +import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; import net.momirealms.craftengine.bukkit.util.BlockStateUtils; import net.momirealms.craftengine.bukkit.util.KeyUtils; import net.momirealms.craftengine.bukkit.util.RegistryUtils; @@ -161,8 +162,8 @@ public class BukkitBlockManager extends AbstractBlockManager { list.add(new TagUtils.TagEntry(entry.getKey(), entry.getValue())); } Object packet = TagUtils.createUpdateTagsPacket(Map.of(MRegistries.BLOCK, list)); - for (Player player : Bukkit.getOnlinePlayers()) { - this.plugin.networkManager().sendPacket(this.plugin.adapt(player), packet); + for (BukkitServerPlayer player : this.plugin.networkManager().onlineUsers()) { + player.sendPacket(packet, false); } // 如果空,那么新来的玩家就没必要收到更新包了 if (list.isEmpty()) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/BlockGenerator.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/BlockGenerator.java index 0b349fca0..e6b543954 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/BlockGenerator.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/BlockGenerator.java @@ -179,6 +179,10 @@ public final class BlockGenerator { if (CoreReflections.clazz$ServerLevel.isInstance(args[levelIndex])) { startNoteBlockChain(args); } + } else if (indicator.isTripwire()) { + if (CoreReflections.clazz$ServerLevel.isInstance(args[posIndex])) { + + } } try { return holder.value().updateShape(thisObj, args, superMethod); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index ce714fa41..f79e6800f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -1106,13 +1106,13 @@ public class PacketConsumers { Object blockPos = FastNMS.INSTANCE.field$ServerboundPlayerActionPacket$pos(packet); BlockPos pos = LocationUtils.fromBlockPos(blockPos); if (VersionHelper.isFolia()) { - BukkitCraftEngine.instance().scheduler().sync().run(() -> { + platformPlayer.getScheduler().run(BukkitCraftEngine.instance().javaPlugin(), (t) -> { try { handlePlayerActionPacketOnMainThread(player, world, pos, packet); } catch (Exception e) { CraftEngine.instance().logger().warn("Failed to handle ServerboundPlayerActionPacket", e); } - }, world, pos.x() >> 4, pos.z() >> 4); + }, () -> {}); } else { handlePlayerActionPacketOnMainThread(player, world, pos, packet); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java index 3e413ffc0..10364c0fb 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java @@ -27,6 +27,7 @@ import net.momirealms.craftengine.core.registry.WritableRegistry; import net.momirealms.craftengine.core.util.*; import org.incendo.cloud.suggestion.Suggestion; import org.incendo.cloud.type.Either; +import org.joml.Vector3f; import java.nio.file.Path; import java.util.*; @@ -459,6 +460,14 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl } return new DynamicLoreModifier<>(dynamicLore); }, "dynamic-lore"); + registerDataFunction((obj) -> { + if (obj instanceof Integer integer) { + return new DyedColorModifier<>(integer); + } else { + Vector3f vector3f = MiscUtils.getAsVector3f(obj, "dyed-color"); + return new DyedColorModifier<>(MCUtils.fastFloor(vector3f.x) << 16 + MCUtils.fastFloor(vector3f.y) << 8 + MCUtils.fastFloor(vector3f.z)); + } + }, "dyed-color"); registerDataFunction((obj) -> { Map data = MiscUtils.castToMap(obj, false); return new TagsModifier<>(data); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/modifier/DyedColorModifier.java b/core/src/main/java/net/momirealms/craftengine/core/item/modifier/DyedColorModifier.java new file mode 100644 index 000000000..0ef63fe0c --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/item/modifier/DyedColorModifier.java @@ -0,0 +1,48 @@ +package net.momirealms.craftengine.core.item.modifier; + +import net.momirealms.craftengine.core.item.ComponentKeys; +import net.momirealms.craftengine.core.item.Item; +import net.momirealms.craftengine.core.item.ItemBuildContext; +import net.momirealms.craftengine.core.item.NetworkItemHandler; +import net.momirealms.craftengine.core.util.AdventureHelper; +import net.momirealms.craftengine.core.util.Color; +import net.momirealms.craftengine.core.util.VersionHelper; +import net.momirealms.sparrow.nbt.CompoundTag; +import net.momirealms.sparrow.nbt.Tag; + +public class DyedColorModifier implements ItemDataModifier { + private final int color; + + public DyedColorModifier(int color) { + this.color = color; + } + + @Override + public String name() { + return "dyed-color"; + } + + @Override + public void apply(Item item, ItemBuildContext context) { + item.dyedColor(this.color); + } + + @Override + public void prepareNetworkItem(Item item, ItemBuildContext context, CompoundTag networkData) { + if (VersionHelper.isOrAbove1_20_5()) { + Tag previous = item.getNBTComponent(ComponentKeys.DYED_COLOR); + if (previous != null) { + networkData.put(ComponentKeys.DYED_COLOR.asString(), NetworkItemHandler.pack(NetworkItemHandler.Operation.ADD, previous)); + } else { + networkData.put(ComponentKeys.DYED_COLOR.asString(), NetworkItemHandler.pack(NetworkItemHandler.Operation.REMOVE)); + } + } else { + Tag previous = item.getNBTTag("display", "color"); + if (previous != null) { + networkData.put("display.color", NetworkItemHandler.pack(NetworkItemHandler.Operation.ADD, previous)); + } else { + networkData.put("display.color", NetworkItemHandler.pack(NetworkItemHandler.Operation.REMOVE)); + } + } + } +} diff --git a/gradle.properties b/gradle.properties index de7167077..f71f57228 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=0.0.56.2 +project_version=0.0.56.3 config_version=34 lang_version=15 project_group=net.momirealms