diff --git a/bukkit/loader/src/main/resources/todo.yml b/bukkit/loader/src/main/resources/todo.yml deleted file mode 100644 index e487968bc..000000000 --- a/bukkit/loader/src/main/resources/todo.yml +++ /dev/null @@ -1,72 +0,0 @@ -# Stores something that has not been implemented yet - -######################################################################################################################################################################################################################## -# If you want to create more doors, you can use doors of other materials, such as birch. You can only create one custom door from each vanilla door. -# Oak Door -minecraft:oak_door[facing=north,half=lower,hinge=right,open=false,powered=true]: minecraft:oak_door[facing=north,half=lower,hinge=right,open=false,powered=false] -minecraft:oak_door[facing=south,half=lower,hinge=right,open=false,powered=true]: minecraft:oak_door[facing=south,half=lower,hinge=right,open=false,powered=false] -minecraft:oak_door[facing=east,half=lower,hinge=right,open=false,powered=true]: minecraft:oak_door[facing=east,half=lower,hinge=right,open=false,powered=false] -minecraft:oak_door[facing=west,half=lower,hinge=right,open=false,powered=true]: minecraft:oak_door[facing=west,half=lower,hinge=right,open=false,powered=false] -minecraft:oak_door[facing=north,half=lower,hinge=right,open=true,powered=true]: minecraft:oak_door[facing=north,half=lower,hinge=right,open=true,powered=false] -minecraft:oak_door[facing=south,half=lower,hinge=right,open=true,powered=true]: minecraft:oak_door[facing=south,half=lower,hinge=right,open=true,powered=false] -minecraft:oak_door[facing=east,half=lower,hinge=right,open=true,powered=true]: minecraft:oak_door[facing=east,half=lower,hinge=right,open=true,powered=false] -minecraft:oak_door[facing=west,half=lower,hinge=right,open=true,powered=true]: minecraft:oak_door[facing=west,half=lower,hinge=right,open=true,powered=false] -minecraft:oak_door[facing=north,half=lower,hinge=left,open=false,powered=true]: minecraft:oak_door[facing=north,half=lower,hinge=left,open=false,powered=false] -minecraft:oak_door[facing=south,half=lower,hinge=left,open=false,powered=true]: minecraft:oak_door[facing=south,half=lower,hinge=left,open=false,powered=false] -minecraft:oak_door[facing=east,half=lower,hinge=left,open=false,powered=true]: minecraft:oak_door[facing=east,half=lower,hinge=left,open=false,powered=false] -minecraft:oak_door[facing=west,half=lower,hinge=left,open=false,powered=true]: minecraft:oak_door[facing=west,half=lower,hinge=left,open=false,powered=false] -minecraft:oak_door[facing=north,half=lower,hinge=left,open=true,powered=true]: minecraft:oak_door[facing=north,half=lower,hinge=left,open=true,powered=false] -minecraft:oak_door[facing=south,half=lower,hinge=left,open=true,powered=true]: minecraft:oak_door[facing=south,half=lower,hinge=left,open=true,powered=false] -minecraft:oak_door[facing=east,half=lower,hinge=left,open=true,powered=true]: minecraft:oak_door[facing=east,half=lower,hinge=left,open=true,powered=false] -minecraft:oak_door[facing=west,half=lower,hinge=left,open=true,powered=true]: minecraft:oak_door[facing=west,half=lower,hinge=left,open=true,powered=false] -minecraft:oak_door[facing=north,half=upper,hinge=right,open=false,powered=true]: minecraft:oak_door[facing=north,half=upper,hinge=right,open=false,powered=false] -minecraft:oak_door[facing=south,half=upper,hinge=right,open=false,powered=true]: minecraft:oak_door[facing=south,half=upper,hinge=right,open=false,powered=false] -minecraft:oak_door[facing=east,half=upper,hinge=right,open=false,powered=true]: minecraft:oak_door[facing=east,half=upper,hinge=right,open=false,powered=false] -minecraft:oak_door[facing=west,half=upper,hinge=right,open=false,powered=true]: minecraft:oak_door[facing=west,half=upper,hinge=right,open=false,powered=false] -minecraft:oak_door[facing=north,half=upper,hinge=right,open=true,powered=true]: minecraft:oak_door[facing=north,half=upper,hinge=right,open=true,powered=false] -minecraft:oak_door[facing=south,half=upper,hinge=right,open=true,powered=true]: minecraft:oak_door[facing=south,half=upper,hinge=right,open=true,powered=false] -minecraft:oak_door[facing=east,half=upper,hinge=right,open=true,powered=true]: minecraft:oak_door[facing=east,half=upper,hinge=right,open=true,powered=false] -minecraft:oak_door[facing=west,half=upper,hinge=right,open=true,powered=true]: minecraft:oak_door[facing=west,half=upper,hinge=right,open=true,powered=false] -minecraft:oak_door[facing=north,half=upper,hinge=left,open=false,powered=true]: minecraft:oak_door[facing=north,half=upper,hinge=left,open=false,powered=false] -minecraft:oak_door[facing=south,half=upper,hinge=left,open=false,powered=true]: minecraft:oak_door[facing=south,half=upper,hinge=left,open=false,powered=false] -minecraft:oak_door[facing=east,half=upper,hinge=left,open=false,powered=true]: minecraft:oak_door[facing=east,half=upper,hinge=left,open=false,powered=false] -minecraft:oak_door[facing=west,half=upper,hinge=left,open=false,powered=true]: minecraft:oak_door[facing=west,half=upper,hinge=left,open=false,powered=false] -minecraft:oak_door[facing=north,half=upper,hinge=left,open=true,powered=true]: minecraft:oak_door[facing=north,half=upper,hinge=left,open=true,powered=false] -minecraft:oak_door[facing=south,half=upper,hinge=left,open=true,powered=true]: minecraft:oak_door[facing=south,half=upper,hinge=left,open=true,powered=false] -minecraft:oak_door[facing=east,half=upper,hinge=left,open=true,powered=true]: minecraft:oak_door[facing=east,half=upper,hinge=left,open=true,powered=false] -minecraft:oak_door[facing=west,half=upper,hinge=left,open=true,powered=true]: minecraft:oak_door[facing=west,half=upper,hinge=left,open=true,powered=false] -# You can create more trapdoor if you don't care the facing. -# Oak Trapdoor -minecraft:oak_trapdoor[facing=north,open=false,powered=true,waterlogged=false]: minecraft:oak_trapdoor[facing=north,open=false,powered=false,waterlogged=false] -minecraft:oak_trapdoor[facing=north,open=false,powered=true,waterlogged=true]: minecraft:oak_trapdoor[facing=north,open=false,powered=false,waterlogged=true] -minecraft:oak_trapdoor[facing=north,open=true,powered=true,waterlogged=false]: minecraft:oak_trapdoor[facing=north,open=true,powered=false,waterlogged=false] -minecraft:oak_trapdoor[facing=north,open=true,powered=true,waterlogged=true]: minecraft:oak_trapdoor[facing=north,open=true,powered=false,waterlogged=true] -minecraft:oak_trapdoor[facing=south,open=false,powered=true,waterlogged=false]: minecraft:oak_trapdoor[facing=south,open=false,powered=false,waterlogged=false] -minecraft:oak_trapdoor[facing=south,open=false,powered=true,waterlogged=true]: minecraft:oak_trapdoor[facing=south,open=false,powered=false,waterlogged=true] -minecraft:oak_trapdoor[facing=south,open=true,powered=true,waterlogged=false]: minecraft:oak_trapdoor[facing=south,open=true,powered=false,waterlogged=false] -minecraft:oak_trapdoor[facing=south,open=true,powered=true,waterlogged=true]: minecraft:oak_trapdoor[facing=south,open=true,powered=false,waterlogged=true] -minecraft:oak_trapdoor[facing=east,open=false,powered=true,waterlogged=false]: minecraft:oak_trapdoor[facing=east,open=false,powered=false,waterlogged=false] -minecraft:oak_trapdoor[facing=east,open=false,powered=true,waterlogged=true]: minecraft:oak_trapdoor[facing=east,open=false,powered=false,waterlogged=true] -minecraft:oak_trapdoor[facing=east,open=true,powered=true,waterlogged=false]: minecraft:oak_trapdoor[facing=east,open=true,powered=false,waterlogged=false] -minecraft:oak_trapdoor[facing=east,open=true,powered=true,waterlogged=true]: minecraft:oak_trapdoor[facing=east,open=true,powered=false,waterlogged=true] -minecraft:oak_trapdoor[facing=west,open=false,powered=true,waterlogged=false]: minecraft:oak_trapdoor[facing=west,open=false,powered=false,waterlogged=false] -minecraft:oak_trapdoor[facing=west,open=false,powered=true,waterlogged=true]: minecraft:oak_trapdoor[facing=west,open=false,powered=false,waterlogged=true] -minecraft:oak_trapdoor[facing=west,open=true,powered=true,waterlogged=false]: minecraft:oak_trapdoor[facing=west,open=true,powered=false,waterlogged=false] -minecraft:oak_trapdoor[facing=west,open=true,powered=true,waterlogged=true]: minecraft:oak_trapdoor[facing=west,open=true,powered=false,waterlogged=true] -# fence_gate -minecraft:oak_fence_gate[facing=north,open=false,powered=true,in_wall=false]: minecraft:oak_fence_gate[facing=north,open=false,powered=false,in_wall=false] -minecraft:oak_fence_gate[facing=north,open=false,powered=true,in_wall=true]: minecraft:oak_fence_gate[facing=north,open=false,powered=false,in_wall=true] -minecraft:oak_fence_gate[facing=north,open=true,powered=true,in_wall=false]: minecraft:oak_fence_gate[facing=north,open=true,powered=false,in_wall=false] -minecraft:oak_fence_gate[facing=north,open=true,powered=true,in_wall=true]: minecraft:oak_fence_gate[facing=north,open=true,powered=false,in_wall=true] -minecraft:oak_fence_gate[facing=south,open=false,powered=true,in_wall=false]: minecraft:oak_fence_gate[facing=south,open=false,powered=false,in_wall=false] -minecraft:oak_fence_gate[facing=south,open=false,powered=true,in_wall=true]: minecraft:oak_fence_gate[facing=south,open=false,powered=false,in_wall=true] -minecraft:oak_fence_gate[facing=south,open=true,powered=true,in_wall=false]: minecraft:oak_fence_gate[facing=south,open=true,powered=false,in_wall=false] -minecraft:oak_fence_gate[facing=south,open=true,powered=true,in_wall=true]: minecraft:oak_fence_gate[facing=south,open=true,powered=false,in_wall=true] -minecraft:oak_fence_gate[facing=east,open=false,powered=true,in_wall=false]: minecraft:oak_fence_gate[facing=east,open=false,powered=false,in_wall=false] -minecraft:oak_fence_gate[facing=east,open=false,powered=true,in_wall=true]: minecraft:oak_fence_gate[facing=east,open=false,powered=false,in_wall=true] -minecraft:oak_fence_gate[facing=east,open=true,powered=true,in_wall=false]: minecraft:oak_fence_gate[facing=east,open=true,powered=false,in_wall=false] -minecraft:oak_fence_gate[facing=east,open=true,powered=true,in_wall=true]: minecraft:oak_fence_gate[facing=east,open=true,powered=false,in_wall=true] -minecraft:oak_fence_gate[facing=west,open=false,powered=true,in_wall=false]: minecraft:oak_fence_gate[facing=west,open=false,powered=false,in_wall=false] -minecraft:oak_fence_gate[facing=west,open=false,powered=true,in_wall=true]: minecraft:oak_fence_gate[facing=west,open=false,powered=false,in_wall=true] -minecraft:oak_fence_gate[facing=west,open=true,powered=true,in_wall=false]: minecraft:oak_fence_gate[facing=west,open=true,powered=false,in_wall=false] -minecraft:oak_fence_gate[facing=west,open=true,powered=true,in_wall=true]: minecraft:oak_fence_gate[facing=west,open=true,powered=false,in_wall=true] diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/BukkitAdaptors.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/BukkitAdaptors.java index ee1f0524f..f11ae4be3 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/BukkitAdaptors.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/BukkitAdaptors.java @@ -3,8 +3,8 @@ package net.momirealms.craftengine.bukkit.api; import net.momirealms.craftengine.bukkit.entity.BukkitEntity; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; -import net.momirealms.craftengine.bukkit.world.BukkitWorld; import net.momirealms.craftengine.bukkit.world.BukkitBlockInWorld; +import net.momirealms.craftengine.bukkit.world.BukkitWorld; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.entity.Entity; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/BukkitEntity.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/BukkitEntity.java index d61bfce98..0c719082d 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/BukkitEntity.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/BukkitEntity.java @@ -49,7 +49,7 @@ public class BukkitEntity extends Entity { } @Override - public World level() { + public World world() { return new BukkitWorld(literalObject().getWorld()); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java index a23cf371a..bc5e9772f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java @@ -100,7 +100,7 @@ public class ItemEventListener implements Listener { if (optionalItemBehaviors.isPresent()) { for (ItemBehavior itemBehavior : optionalItemBehaviors.get()) { - InteractionResult result = itemBehavior.use(player.level(), player, hand); + InteractionResult result = itemBehavior.use(player.world(), player, hand); if (result == InteractionResult.SUCCESS_AND_CANCEL) { event.setCancelled(true); return; @@ -167,7 +167,7 @@ public class ItemEventListener implements Listener { event.setCancelled(true); return; } - int maxY = player.level().worldHeight().getMaxBuildHeight() - 1; + int maxY = player.world().worldHeight().getMaxBuildHeight() - 1; if (direction == Direction.UP && result != InteractionResult.SUCCESS && pos.y() >= maxY diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java index 5e1ae7447..c318bac10 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java @@ -1,13 +1,16 @@ package net.momirealms.craftengine.bukkit.plugin.command.feature; -import net.momirealms.craftengine.bukkit.item.BukkitItemManager; +import com.saicone.rtag.util.ChatComponent; +import net.kyori.adventure.text.Component; import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; +import net.momirealms.craftengine.bukkit.util.ComponentUtils; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; -import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.AdventureHelper; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.incendo.cloud.Command; +import org.incendo.cloud.parser.standard.StringParser; public class TestCommand extends BukkitCommandFeature { @@ -19,9 +22,12 @@ public class TestCommand extends BukkitCommandFeature { public Command.Builder assembleCommand(org.incendo.cloud.CommandManager manager, Command.Builder builder) { return builder .senderType(Player.class) + .required("text", StringParser.greedyStringParser()) .handler(context -> { - Player player = context.sender(); - player.getInventory().addItem(BukkitItemManager.instance().createWrappedItem(Key.from("default:topaz"), null).getItem()); + plugin().senderFactory().wrap(context.sender()).sendMessage(Component.text( + ChatComponent.toTag(ComponentUtils.adventureToMinecraft(AdventureHelper.miniMessage().deserialize(context.get("text")))).toString() + )); + plugin().senderFactory().wrap(context.sender()).sendMessage(AdventureHelper.miniMessage().deserialize(context.get("text"))); }); } 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 0b9b202fa..c8a427258 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 @@ -1349,7 +1349,7 @@ public class PacketConsumers { } catch (Exception e) { CraftEngine.instance().logger().warn("Failed to handle ServerboundSetCreativeModeSlotPacket", e); } - }, (World) player.level().platformWorld(), (MCUtils.fastFloor(player.x())) >> 4, (MCUtils.fastFloor(player.z())) >> 4); + }, (World) player.world().platformWorld(), (MCUtils.fastFloor(player.x())) >> 4, (MCUtils.fastFloor(player.z())) >> 4); } else { handleSetCreativeSlotPacketOnMainThread(player, packet); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java index 13341b5b2..a7c20f9c7 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java @@ -677,7 +677,7 @@ public class BukkitServerPlayer extends Player { } @Override - public World level() { + public World world() { return new BukkitWorld(platformPlayer().getWorld()); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ParticleUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ParticleUtils.java index 3b44594e6..6e847f6f9 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ParticleUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ParticleUtils.java @@ -11,7 +11,7 @@ public class ParticleUtils { } catch (IllegalArgumentException e) { return switch (particle) { case "REDSTONE" -> Particle.valueOf("DUST"); - case "VILLAGER_HAPPY" -> Particle.valueOf(VersionHelper.isOrAbove1_20_5() ? "HAPPY_VILLAGER" : "VILLAGER_HAPPY"); + case "VILLAGER_HAPPY", "HAPPY_VILLAGER" -> Particle.valueOf(VersionHelper.isOrAbove1_20_5() ? "HAPPY_VILLAGER" : "VILLAGER_HAPPY"); default -> Particle.valueOf(particle); }; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitBlockInWorld.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitBlockInWorld.java index e765f16c2..a7dc16a3d 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitBlockInWorld.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitBlockInWorld.java @@ -14,9 +14,9 @@ import net.momirealms.craftengine.core.item.CustomItem; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; import net.momirealms.craftengine.core.plugin.CraftEngine; -import net.momirealms.craftengine.core.plugin.text.minimessage.NamedArgumentTag; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.world.BlockInWorld; +import net.momirealms.craftengine.core.world.World; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.inventory.ItemStack; @@ -80,6 +80,11 @@ public class BukkitBlockInWorld implements BlockInWorld { return this.block.getZ(); } + @Override + public World world() { + return new BukkitWorld(this.block.getWorld()); + } + @Override public String getAsString() { ImmutableBlockState state = CraftEngineBlocks.getCustomBlockState(this.block); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorld.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorld.java index d39fdf887..5223b9bd4 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorld.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorld.java @@ -6,9 +6,9 @@ import net.momirealms.craftengine.bukkit.util.ItemUtils; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.VersionHelper; +import net.momirealms.craftengine.core.world.BlockInWorld; import net.momirealms.craftengine.core.world.Vec3d; import net.momirealms.craftengine.core.world.World; -import net.momirealms.craftengine.core.world.BlockInWorld; import net.momirealms.craftengine.core.world.WorldHeight; import org.bukkit.Location; import org.bukkit.SoundCategory; diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/PlayerBlockActionContext.java b/core/src/main/java/net/momirealms/craftengine/core/block/PlayerBlockActionContext.java deleted file mode 100644 index 81b41ad08..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/block/PlayerBlockActionContext.java +++ /dev/null @@ -1,15 +0,0 @@ -package net.momirealms.craftengine.core.block; - -import net.momirealms.craftengine.core.entity.player.Player; -import net.momirealms.craftengine.core.util.context.ContextHolder; -import net.momirealms.craftengine.core.util.context.PlayerOptionalContext; -import net.momirealms.craftengine.core.world.BlockInWorld; -import org.jetbrains.annotations.NotNull; - -public class PlayerBlockActionContext extends PlayerOptionalContext { - private BlockInWorld block; - - public PlayerBlockActionContext(@NotNull Player player, @NotNull ContextHolder contexts) { - super(player, contexts); - } -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/Entity.java b/core/src/main/java/net/momirealms/craftengine/core/entity/Entity.java index fd45a8f1c..4df160563 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/Entity.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/Entity.java @@ -19,7 +19,7 @@ public abstract class Entity { public abstract float getYRot(); - public abstract World level(); + public abstract World world(); public abstract Direction getDirection(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java b/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java index 325c63b9b..76283a5b7 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java @@ -170,7 +170,8 @@ public abstract class AbstractFontManager implements FontManager { PlayerOptionalContext.of(player, ContextHolder.builder() .withOptionalParameter(EmojiParameters.EMOJI, emoji.emojiImage()) .withParameter(EmojiParameters.KEYWORD, emoji.keywords().get(0)) - .build()).tagResolvers()) + .build()) + .tagResolvers()) ); if (emojis.size() >= maxTimes) break; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/font/EmojiParameters.java b/core/src/main/java/net/momirealms/craftengine/core/font/EmojiParameters.java index 83c91536d..f3344e548 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/font/EmojiParameters.java +++ b/core/src/main/java/net/momirealms/craftengine/core/font/EmojiParameters.java @@ -1,9 +1,10 @@ package net.momirealms.craftengine.core.font; -import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.context.ContextKey; -public class EmojiParameters { - public static final ContextKey KEYWORD = new ContextKey<>(Key.of("keyword")); - public static final ContextKey EMOJI = new ContextKey<>(Key.of("emoji")); +public final class EmojiParameters { + private EmojiParameters() {} + + public static final ContextKey KEYWORD = ContextKey.of("keyword"); + public static final ContextKey EMOJI = ContextKey.of("emoji"); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/context/UseOnContext.java b/core/src/main/java/net/momirealms/craftengine/core/item/context/UseOnContext.java index ff6a6514e..5e6280e02 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/context/UseOnContext.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/context/UseOnContext.java @@ -17,7 +17,7 @@ public class UseOnContext { private final Item itemStack; public UseOnContext(Player player, InteractionHand hand, BlockHitResult hit) { - this(player.level(), player, hand, player.getItemInHand(hand), hit); + this(player.world(), player, hand, player.getItemInHand(hand), hit); } public UseOnContext(World world, Player player, InteractionHand hand, Item stack, BlockHitResult hit) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/parameter/LootParameters.java b/core/src/main/java/net/momirealms/craftengine/core/loot/parameter/LootParameters.java index ca09453ea..abe27d435 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/parameter/LootParameters.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/parameter/LootParameters.java @@ -4,18 +4,19 @@ import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.entity.Entity; import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.item.Item; -import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.context.ContextKey; import net.momirealms.craftengine.core.world.Vec3d; import net.momirealms.craftengine.core.world.World; -public class LootParameters { - public static final ContextKey LOCATION = new ContextKey<>(Key.of("craftengine:location")); - public static final ContextKey WORLD = new ContextKey<>(Key.of("craftengine:world")); - public static final ContextKey ENTITY = new ContextKey<>(Key.of("craftengine:entity")); - public static final ContextKey FALLING_BLOCK = new ContextKey<>(Key.of("craftengine:falling_block")); - public static final ContextKey EXPLOSION_RADIUS = new ContextKey<>(Key.of("craftengine:explosion_radius")); - public static final ContextKey PLAYER = new ContextKey<>(Key.of("craftengine:player")); - public static final ContextKey> TOOL = new ContextKey<>(Key.of("craftengine:tool")); - public static final ContextKey BLOCK_STATE = new ContextKey<>(Key.of("craftengine:block_state")); +public final class LootParameters { + private LootParameters() {} + + public static final ContextKey LOCATION = ContextKey.of("location"); + public static final ContextKey WORLD = ContextKey.of("world"); + public static final ContextKey ENTITY = ContextKey.of("entity"); + public static final ContextKey FALLING_BLOCK = ContextKey.of("falling_block"); + public static final ContextKey EXPLOSION_RADIUS = ContextKey.of("explosion_radius"); + public static final ContextKey PLAYER = ContextKey.of("player"); + public static final ContextKey> TOOL = ContextKey.of("tool"); + public static final ContextKey BLOCK_STATE = ContextKey.of("block_state"); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/PathMatcherAllOf.java b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/PathMatcherAllOf.java index 70daf8447..e98057453 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/PathMatcherAllOf.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/PathMatcherAllOf.java @@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.pack.conflict.matcher; import net.momirealms.craftengine.core.pack.conflict.PathContext; import net.momirealms.craftengine.core.plugin.locale.LocalizedException; -import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.condition.AllOfCondition; import net.momirealms.craftengine.core.util.context.Condition; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/PathMatcherInverted.java b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/PathMatcherInverted.java index c1d6060fb..1d5b88493 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/PathMatcherInverted.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/PathMatcherInverted.java @@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.pack.conflict.matcher; import net.momirealms.craftengine.core.pack.conflict.PathContext; import net.momirealms.craftengine.core.plugin.locale.LocalizedException; -import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import net.momirealms.craftengine.core.util.condition.InvertedCondition; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/PathMatchers.java b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/PathMatchers.java index 7316e0d58..7afc670bc 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/PathMatchers.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/PathMatchers.java @@ -8,7 +8,6 @@ import net.momirealms.craftengine.core.registry.WritableRegistry; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import net.momirealms.craftengine.core.util.ResourceKey; -import net.momirealms.craftengine.core.util.condition.AllOfCondition; import java.util.ArrayList; import java.util.List; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergeAltas.java b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergeAltas.java index b5c75a1b6..65e0daf81 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergeAltas.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergeAltas.java @@ -8,7 +8,6 @@ import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.util.GsonHelper; import net.momirealms.craftengine.core.util.Key; -import java.io.IOException; import java.util.HashSet; import java.util.Map; diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/AdventureHelper.java b/core/src/main/java/net/momirealms/craftengine/core/util/AdventureHelper.java index 1cfa6f2d4..0062e5bd6 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/AdventureHelper.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/AdventureHelper.java @@ -13,6 +13,7 @@ import net.kyori.adventure.text.serializer.json.JSONOptions; import net.kyori.adventure.text.serializer.json.legacyimpl.NBTLegacyHoverEventSerializer; import net.momirealms.sparrow.nbt.Tag; import net.momirealms.sparrow.nbt.serializer.NBTComponentSerializer; +import net.momirealms.sparrow.nbt.serializer.NBTSerializerOptions; /** * Helper class for handling Adventure components and related functionalities. @@ -34,8 +35,22 @@ public class AdventureHelper { builder.legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get()); builder.editOptions((b) -> b.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, false)); } + if (!VersionHelper.isOrAbove1_21_5()) { + builder.editOptions((b) -> { + b.value(JSONOptions.EMIT_CLICK_EVENT_TYPE, JSONOptions.ClickEventValueMode.CAMEL_CASE); + b.value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.CAMEL_CASE); + b.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_KEY_AS_TYPE_AND_UUID_AS_ID, true); + }); + } this.gsonComponentSerializer = builder.build(); - this.nbtComponentSerializer = NBTComponentSerializer.builder().build(); + this.nbtComponentSerializer = NBTComponentSerializer.builder() + .editOptions((b) -> { + if (!VersionHelper.isOrAbove1_21_5()) { + b.value(NBTSerializerOptions.EMIT_CLICK_EVENT_TYPE, false); + b.value(NBTSerializerOptions.EMIT_HOVER_EVENT_TYPE, false); + } + }) + .build(); } private static class SingletonHolder { diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerBlockActionContext.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerBlockActionContext.java new file mode 100644 index 000000000..5adea9974 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerBlockActionContext.java @@ -0,0 +1,21 @@ +package net.momirealms.craftengine.core.util.context; + +import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.util.context.parameter.BlockParameterProvider; +import net.momirealms.craftengine.core.util.context.parameter.CommonParameterProvider; +import net.momirealms.craftengine.core.util.context.parameter.PlayerParameterProvider; +import net.momirealms.craftengine.core.world.BlockInWorld; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class PlayerBlockActionContext extends PlayerOptionalContext { + + public PlayerBlockActionContext(@NotNull Player player, @NotNull BlockInWorld block, @NotNull ContextHolder contexts) { + super(player, contexts, List.of(new CommonParameterProvider(), new PlayerParameterProvider(player), new BlockParameterProvider(block))); + } + + public static PlayerBlockActionContext of(@NotNull Player player, @NotNull BlockInWorld block, @NotNull ContextHolder contexts) { + return new PlayerBlockActionContext(player, block, contexts); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerOptionalContext.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerOptionalContext.java index 87b33d632..fec8f3c0c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerOptionalContext.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerOptionalContext.java @@ -8,7 +8,7 @@ import net.momirealms.craftengine.core.util.context.parameter.PlayerParameterPro import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.List; public class PlayerOptionalContext extends AbstractAdditionalCommonContext implements MiniMessageTagContext { public static final PlayerOptionalContext EMPTY = new PlayerOptionalContext(null, ContextHolder.EMPTY); diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/BlockParameterProvider.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/BlockParameterProvider.java index 7f9f91872..8d28fd0fa 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/BlockParameterProvider.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/BlockParameterProvider.java @@ -22,6 +22,7 @@ public class BlockParameterProvider implements LazyContextParameterProvider { CONTEXT_FUNCTIONS.put(BlockParameters.BLOCK_Z, BlockInWorld::z); CONTEXT_FUNCTIONS.put(BlockParameters.BLOCK_OWNER, BlockInWorld::owner); CONTEXT_FUNCTIONS.put(BlockParameters.BLOCK_STATE, BlockInWorld::getAsString); + CONTEXT_FUNCTIONS.put(BlockParameters.WORLD_NAME, b -> b.world().name()); } private final BlockInWorld block; diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/BlockParameters.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/BlockParameters.java index b724ef86d..2e0edaeb0 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/BlockParameters.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/BlockParameters.java @@ -4,17 +4,16 @@ import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.context.ContextKey; -import java.util.UUID; - public final class BlockParameters { private BlockParameters() {} - public static final ContextKey X = new ContextKey<>(Key.of("craftengine:block.x")); - public static final ContextKey Y = new ContextKey<>(Key.of("craftengine:block.y")); - public static final ContextKey Z = new ContextKey<>(Key.of("craftengine:block.z")); - public static final ContextKey BLOCK_X = new ContextKey<>(Key.of("craftengine:block.block_x")); - public static final ContextKey BLOCK_Y = new ContextKey<>(Key.of("craftengine:block.block_y")); - public static final ContextKey BLOCK_Z = new ContextKey<>(Key.of("craftengine:block.block_z")); - public static final ContextKey BLOCK_STATE = new ContextKey<>(Key.of("craftengine:block.state")); - public static final ContextKey BLOCK_OWNER = new ContextKey<>(Key.of("craftengine:block.owner")); + public static final ContextKey X = ContextKey.of("block.x"); + public static final ContextKey Y = ContextKey.of("block.y"); + public static final ContextKey Z = ContextKey.of("block.z"); + public static final ContextKey BLOCK_X = ContextKey.of("block.block_x"); + public static final ContextKey BLOCK_Y = ContextKey.of("block.block_y"); + public static final ContextKey BLOCK_Z = ContextKey.of("block.block_z"); + public static final ContextKey BLOCK_STATE = ContextKey.of("block.state"); + public static final ContextKey BLOCK_OWNER = ContextKey.of("block.owner.id"); + public static final ContextKey WORLD_NAME = ContextKey.of("block.world.name"); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/CommonParameterProvider.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/CommonParameterProvider.java index 64515a5d4..396bbdfdd 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/CommonParameterProvider.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/CommonParameterProvider.java @@ -14,7 +14,10 @@ public class CommonParameterProvider implements LazyContextParameterProvider { private static final Map, Function> CONTEXT_FUNCTIONS = new HashMap<>(); static { - CONTEXT_FUNCTIONS.put(CommonParameters.RANDOM, (f) -> RandomUtils.generateRandomDouble(0,1)); + CONTEXT_FUNCTIONS.put(CommonParameters.RANDOM, (f) -> { + f.lastRandom = RandomUtils.generateRandomDouble(0,1); + return f.lastRandom; + }); CONTEXT_FUNCTIONS.put(CommonParameters.LAST_RANDOM, (f) -> { if (f.lastRandom == -1) { f.lastRandom = RandomUtils.generateRandomDouble(0, 1); diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/PlayerParameterProvider.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/PlayerParameterProvider.java index 18e7cb668..ca2040f86 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/PlayerParameterProvider.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/PlayerParameterProvider.java @@ -24,6 +24,7 @@ public class PlayerParameterProvider implements LazyContextParameterProvider { CONTEXT_FUNCTIONS.put(PlayerParameters.BLOCK_Z, p -> MCUtils.fastFloor(p.z())); CONTEXT_FUNCTIONS.put(PlayerParameters.NAME, Player::name); CONTEXT_FUNCTIONS.put(PlayerParameters.UUID, Player::uuid); + CONTEXT_FUNCTIONS.put(PlayerParameters.WORLD_NAME, p -> p.world().name()); } private final Player player; diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/PlayerParameters.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/PlayerParameters.java index 9ead3e94a..0604f864d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/PlayerParameters.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/parameter/PlayerParameters.java @@ -1,6 +1,5 @@ package net.momirealms.craftengine.core.util.context.parameter; -import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.context.ContextKey; import java.util.UUID; @@ -8,12 +7,13 @@ import java.util.UUID; public final class PlayerParameters { private PlayerParameters() {} - public static final ContextKey X = new ContextKey<>(Key.of("craftengine:player.x")); - public static final ContextKey Y = new ContextKey<>(Key.of("craftengine:player.y")); - public static final ContextKey Z = new ContextKey<>(Key.of("craftengine:player.z")); - public static final ContextKey BLOCK_X = new ContextKey<>(Key.of("craftengine:player.block_x")); - public static final ContextKey BLOCK_Y = new ContextKey<>(Key.of("craftengine:player.block_y")); - public static final ContextKey BLOCK_Z = new ContextKey<>(Key.of("craftengine:player.block_z")); - public static final ContextKey NAME = new ContextKey<>(Key.of("craftengine:player.name")); - public static final ContextKey UUID = new ContextKey<>(Key.of("craftengine:player.uuid")); + public static final ContextKey X = ContextKey.of("player.x"); + public static final ContextKey Y = ContextKey.of("player.y"); + public static final ContextKey Z = ContextKey.of("player.z"); + public static final ContextKey BLOCK_X = ContextKey.of("player.block_x"); + public static final ContextKey BLOCK_Y = ContextKey.of("player.block_y"); + public static final ContextKey BLOCK_Z = ContextKey.of("player.block_z"); + public static final ContextKey NAME = ContextKey.of("player.name"); + public static final ContextKey WORLD_NAME = ContextKey.of("player.world.name"); + public static final ContextKey UUID = ContextKey.of("player.uuid"); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/world/BlockInWorld.java b/core/src/main/java/net/momirealms/craftengine/core/world/BlockInWorld.java index 2b38da29f..461ef2699 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/world/BlockInWorld.java +++ b/core/src/main/java/net/momirealms/craftengine/core/world/BlockInWorld.java @@ -17,6 +17,8 @@ public interface BlockInWorld { String getAsString(); + World world(); + int x(); int y(); diff --git a/gradle.properties b/gradle.properties index d511d872d..d7e66055a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -39,7 +39,7 @@ lz4_version=1.8.0 geantyref_version=1.3.16 zstd_version=1.5.7-2 commons_io_version=2.18.0 -sparrow_nbt_version=0.6.2 +sparrow_nbt_version=0.7.1 sparrow_util_version=0.39 fastutil_version=8.5.15 netty_version=4.1.119.Final