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 d49ca44c8..ee1f0524f 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 @@ -4,7 +4,7 @@ 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.BukkitWorldBlock; +import net.momirealms.craftengine.bukkit.world.BukkitBlockInWorld; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.entity.Entity; @@ -26,7 +26,7 @@ public final class BukkitAdaptors { return new BukkitEntity(entity); } - public static BukkitWorldBlock adapt(final Block block) { - return new BukkitWorldBlock(block); + public static BukkitBlockInWorld adapt(final Block block) { + return new BukkitBlockInWorld(block); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/AxeItemBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/AxeItemBehavior.java index 47b466610..732978b30 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/AxeItemBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/AxeItemBehavior.java @@ -4,7 +4,7 @@ import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.block.behavior.StrippableBlockBehavior; import net.momirealms.craftengine.bukkit.util.*; -import net.momirealms.craftengine.bukkit.world.BukkitWorldBlock; +import net.momirealms.craftengine.bukkit.world.BukkitBlockInWorld; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.UpdateOption; @@ -43,7 +43,7 @@ public class AxeItemBehavior extends ItemBehavior { @SuppressWarnings("unchecked") @Override public InteractionResult useOnBlock(UseOnContext context) { - BukkitWorldBlock clicked = (BukkitWorldBlock) context.getLevel().getBlockAt(context.getClickedPos()); + BukkitBlockInWorld clicked = (BukkitBlockInWorld) context.getLevel().getBlockAt(context.getClickedPos()); Block block = clicked.block(); ImmutableBlockState state = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockDataToId(block.getBlockData())); if (state == null || state.isEmpty()) return InteractionResult.PASS; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BoneMealItemBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BoneMealItemBehavior.java index 6d60e9e44..2996694ed 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BoneMealItemBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BoneMealItemBehavior.java @@ -8,7 +8,7 @@ import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.util.BlockStateUtils; import net.momirealms.craftengine.bukkit.util.LocationUtils; import net.momirealms.craftengine.bukkit.util.Reflections; -import net.momirealms.craftengine.bukkit.world.BukkitWorldBlock; +import net.momirealms.craftengine.bukkit.world.BukkitBlockInWorld; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.entity.player.InteractionResult; import net.momirealms.craftengine.core.item.behavior.ItemBehavior; @@ -32,7 +32,7 @@ public class BoneMealItemBehavior extends ItemBehavior { return InteractionResult.PASS; } - BukkitWorldBlock clicked = (BukkitWorldBlock) context.getLevel().getBlockAt(context.getClickedPos()); + BukkitBlockInWorld clicked = (BukkitBlockInWorld) context.getLevel().getBlockAt(context.getClickedPos()); Block block = clicked.block(); ImmutableBlockState state = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockDataToId(block.getBlockData())); if (state == null || state.isEmpty()) return InteractionResult.PASS; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BucketItemBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BucketItemBehavior.java index e8f90596f..570786360 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BucketItemBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BucketItemBehavior.java @@ -4,7 +4,7 @@ import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; import net.momirealms.craftengine.bukkit.util.BlockStateUtils; -import net.momirealms.craftengine.bukkit.world.BukkitWorldBlock; +import net.momirealms.craftengine.bukkit.world.BukkitBlockInWorld; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.UpdateOption; @@ -35,7 +35,7 @@ public class BucketItemBehavior extends ItemBehavior { @Override public InteractionResult useOnBlock(UseOnContext context) { if (context.getPlayer().isAdventureMode()) return InteractionResult.PASS; - BukkitWorldBlock clicked = (BukkitWorldBlock) context.getLevel().getBlockAt(context.getClickedPos()); + BukkitBlockInWorld clicked = (BukkitBlockInWorld) context.getLevel().getBlockAt(context.getClickedPos()); Block block = clicked.block(); ImmutableBlockState state = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockDataToId(block.getBlockData())); if (state == null || state.isEmpty()) return InteractionResult.PASS; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/WaterBucketItemBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/WaterBucketItemBehavior.java index 1ec481214..af31edd9d 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/WaterBucketItemBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/WaterBucketItemBehavior.java @@ -4,7 +4,7 @@ import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; import net.momirealms.craftengine.bukkit.util.BlockStateUtils; -import net.momirealms.craftengine.bukkit.world.BukkitWorldBlock; +import net.momirealms.craftengine.bukkit.world.BukkitBlockInWorld; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.UpdateOption; @@ -33,7 +33,7 @@ public class WaterBucketItemBehavior extends ItemBehavior { public InteractionResult useOnBlock(UseOnContext context) { if (context.getPlayer().isAdventureMode()) return InteractionResult.PASS; BlockPos pos = context.getClickedPos(); - BukkitWorldBlock clicked = (BukkitWorldBlock) context.getLevel().getBlockAt(pos); + BukkitBlockInWorld clicked = (BukkitBlockInWorld) context.getLevel().getBlockAt(pos); Block block = clicked.block(); ImmutableBlockState state = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockDataToId(block.getBlockData())); if (state == null || state.isEmpty()) return InteractionResult.PASS; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldBlock.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitBlockInWorld.java similarity index 79% rename from bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldBlock.java rename to bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitBlockInWorld.java index 105ac4443..7411024be 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldBlock.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitBlockInWorld.java @@ -12,25 +12,26 @@ 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.WorldBlock; +import net.momirealms.craftengine.core.world.BlockInWorld; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.inventory.ItemStack; import java.util.Optional; -public class BukkitWorldBlock implements WorldBlock { +public class BukkitBlockInWorld implements BlockInWorld { private final Block block; - public BukkitWorldBlock(Block block) { + public BukkitBlockInWorld(Block block) { this.block = block; } @SuppressWarnings("unchecked") @Override public boolean canBeReplaced(BlockPlaceContext context) { - ImmutableBlockState customState = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockDataToId(block.getBlockData())); + ImmutableBlockState customState = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockDataToId(this.block.getBlockData())); if (customState != null && !customState.isEmpty()) { Key clickedBlockId = customState.owner().value().id(); Item item = (Item) context.getPlayer().getItemInHand(context.getHand()); @@ -45,14 +46,14 @@ public class BukkitWorldBlock implements WorldBlock { } } } - return block.isReplaceable(); + return this.block.isReplaceable(); } @Override public boolean isWaterSource(BlockPlaceContext blockPlaceContext) { try { - Location location = block.getLocation(); - Object serverLevel = FastNMS.INSTANCE.field$CraftWorld$ServerLevel(block.getWorld()); + Location location = this.block.getLocation(); + Object serverLevel = FastNMS.INSTANCE.field$CraftWorld$ServerLevel(this.block.getWorld()); Object fluidData = Reflections.method$Level$getFluidState.invoke(serverLevel, LocationUtils.toBlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); if (fluidData == null) return false; return Reflections.method$FluidState$getType.invoke(fluidData) == Reflections.instance$Fluids$WATER; @@ -62,6 +63,21 @@ public class BukkitWorldBlock implements WorldBlock { } } + @Override + public int x() { + return this.block.getX(); + } + + @Override + public int y() { + return this.block.getY(); + } + + @Override + public int z() { + return this.block.getZ(); + } + public Block block() { return 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 b63a851ac..d39fdf887 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 @@ -8,7 +8,7 @@ import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.VersionHelper; import net.momirealms.craftengine.core.world.Vec3d; import net.momirealms.craftengine.core.world.World; -import net.momirealms.craftengine.core.world.WorldBlock; +import net.momirealms.craftengine.core.world.BlockInWorld; import net.momirealms.craftengine.core.world.WorldHeight; import org.bukkit.Location; import org.bukkit.SoundCategory; @@ -51,8 +51,8 @@ public class BukkitWorld implements World { } @Override - public WorldBlock getBlockAt(int x, int y, int z) { - return new BukkitWorldBlock(platformWorld().getBlockAt(x, y, z)); + public BlockInWorld getBlockAt(int x, int y, int z) { + return new BukkitBlockInWorld(platformWorld().getBlockAt(x, y, z)); } @Override 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 new file mode 100644 index 000000000..81b41ad08 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/block/PlayerBlockActionContext.java @@ -0,0 +1,15 @@ +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/font/AbstractFontManager.java b/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java index 3277303cf..771388222 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 @@ -11,7 +11,7 @@ import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigExce import net.momirealms.craftengine.core.plugin.locale.TranslationManager; import net.momirealms.craftengine.core.util.*; import net.momirealms.craftengine.core.util.context.ContextHolder; -import net.momirealms.craftengine.core.util.context.PlayerContext; +import net.momirealms.craftengine.core.util.context.PlayerOptionalContext; import org.ahocorasick.trie.Token; import org.ahocorasick.trie.Trie; import org.jetbrains.annotations.NotNull; @@ -121,7 +121,7 @@ public abstract class AbstractFontManager implements FontManager { continue; Component content = AdventureHelper.miniMessage().deserialize( emoji.content(), - PlayerContext.of(player, ContextHolder.builder() + PlayerOptionalContext.of(player, ContextHolder.builder() .withOptionalParameter(EmojiParameters.EMOJI, emoji.emojiImage()) .withParameter(EmojiParameters.KEYWORD, emoji.keywords().get(0)) .build()).tagResolvers() @@ -167,7 +167,7 @@ public abstract class AbstractFontManager implements FontManager { continue; emojis.put(fragment, AdventureHelper.miniMessage().deserialize( emoji.content(), - PlayerContext.of(player, ContextHolder.builder() + PlayerOptionalContext.of(player, ContextHolder.builder() .withOptionalParameter(EmojiParameters.EMOJI, emoji.emojiImage()) .withParameter(EmojiParameters.KEYWORD, emoji.keywords().get(0)) .build()).tagResolvers()) @@ -199,7 +199,7 @@ public abstract class AbstractFontManager implements FontManager { continue; emojis.put(fragment, AdventureHelper.miniMessage().deserialize( emoji.content(), - PlayerContext.of(player, + PlayerOptionalContext.of(player, ContextHolder.builder() .withOptionalParameter(EmojiParameters.EMOJI, emoji.emojiImage()) .withParameter(EmojiParameters.KEYWORD, emoji.keywords().get(0)) diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemBuildContext.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemBuildContext.java index 5f7ccfd0a..fdc53f6e4 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemBuildContext.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemBuildContext.java @@ -2,11 +2,11 @@ package net.momirealms.craftengine.core.item; import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.util.context.ContextHolder; -import net.momirealms.craftengine.core.util.context.PlayerContext; +import net.momirealms.craftengine.core.util.context.PlayerOptionalContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class ItemBuildContext extends PlayerContext { +public class ItemBuildContext extends PlayerOptionalContext { public static final ItemBuildContext EMPTY = new ItemBuildContext(null, ContextHolder.EMPTY); public ItemBuildContext(@Nullable Player player, @NotNull ContextHolder contexts) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/LootContext.java b/core/src/main/java/net/momirealms/craftengine/core/loot/LootContext.java index ae73df88a..b996d1157 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/LootContext.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/LootContext.java @@ -24,10 +24,6 @@ public class LootContext extends CommonContext { return this.randomSource; } - public Optional getOptionalParameter(ContextKey parameter) { - return super.contexts.getOptional(parameter); - } - public float luck() { return luck; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/AllOfCondition.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionAllOf.java similarity index 83% rename from core/src/main/java/net/momirealms/craftengine/core/loot/condition/AllOfCondition.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionAllOf.java index 7a693dde4..6496fa4aa 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/AllOfCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionAllOf.java @@ -6,11 +6,11 @@ import net.momirealms.craftengine.core.util.Key; import java.util.List; import java.util.Map; -public class AllOfCondition implements LootCondition { +public class LootConditionAllOf implements LootCondition { public static final Factory FACTORY = new Factory(); private final List conditions; - public AllOfCondition(List conditions) { + public LootConditionAllOf(List conditions) { this.conditions = conditions; } @@ -35,7 +35,7 @@ public class AllOfCondition implements LootCondition { @Override public LootCondition create(Map arguments) { List> terms = (List>) arguments.get("terms"); - return new AllOfCondition(LootConditions.fromMapList(terms)); + return new LootConditionAllOf(LootConditions.fromMapList(terms)); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/AnyOfCondition.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionAnyOf.java similarity index 83% rename from core/src/main/java/net/momirealms/craftengine/core/loot/condition/AnyOfCondition.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionAnyOf.java index 8ed439c3e..c7267bce6 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/AnyOfCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionAnyOf.java @@ -6,11 +6,11 @@ import net.momirealms.craftengine.core.util.Key; import java.util.List; import java.util.Map; -public class AnyOfCondition implements LootCondition { +public class LootConditionAnyOf implements LootCondition { public static final Factory FACTORY = new Factory(); private final List conditions; - public AnyOfCondition(List conditions) { + public LootConditionAnyOf(List conditions) { this.conditions = conditions; } @@ -34,7 +34,7 @@ public class AnyOfCondition implements LootCondition { @Override public LootCondition create(Map arguments) { List> terms = (List>) arguments.get("terms"); - return new AnyOfCondition(LootConditions.fromMapList(terms)); + return new LootConditionAnyOf(LootConditions.fromMapList(terms)); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/EnchantmentCondition.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionEnchantment.java similarity index 90% rename from core/src/main/java/net/momirealms/craftengine/core/loot/condition/EnchantmentCondition.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionEnchantment.java index 067a8a3e1..16e861b4c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/EnchantmentCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionEnchantment.java @@ -10,12 +10,12 @@ import java.util.Map; import java.util.Optional; import java.util.function.Function; -public class EnchantmentCondition implements LootCondition { +public class LootConditionEnchantment implements LootCondition { public static final Factory FACTORY = new Factory(); private final Key id; private final Function expression; - public EnchantmentCondition(Key id, Function expression) { + public LootConditionEnchantment(Key id, Function expression) { this.id = id; this.expression = expression; } @@ -50,7 +50,7 @@ public class EnchantmentCondition implements LootCondition { case ">=" -> expression = (i -> i >= level); default -> throw new IllegalArgumentException("Unknown operator: " + operator); } - return new EnchantmentCondition(Key.of(split[0]), expression); + return new LootConditionEnchantment(Key.of(split[0]), expression); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/FallingCondition.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionFalling.java similarity index 84% rename from core/src/main/java/net/momirealms/craftengine/core/loot/condition/FallingCondition.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionFalling.java index 0e4b6324b..b47cb29c0 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/FallingCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionFalling.java @@ -6,9 +6,9 @@ import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class FallingCondition implements LootCondition { +public class LootConditionFalling implements LootCondition { public static final Factory FACTORY = new Factory(); - public static final FallingCondition INSTANCE = new FallingCondition(); + public static final LootConditionFalling INSTANCE = new LootConditionFalling(); @Override public Key type() { diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/InvertedCondition.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionInverted.java similarity index 80% rename from core/src/main/java/net/momirealms/craftengine/core/loot/condition/InvertedCondition.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionInverted.java index 7dc3a9cd7..01d89fa09 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/InvertedCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionInverted.java @@ -5,11 +5,11 @@ import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class InvertedCondition implements LootCondition { +public class LootConditionInverted implements LootCondition { public static final Factory FACTORY = new Factory(); private final LootCondition condition; - public InvertedCondition(LootCondition condition) { + public LootConditionInverted(LootCondition condition) { this.condition = condition; } @@ -28,7 +28,7 @@ public class InvertedCondition implements LootCondition { @Override public LootCondition create(Map arguments) { Map term = (Map) arguments.get("term"); - return new InvertedCondition(LootConditions.fromMap(term)); + return new LootConditionInverted(LootConditions.fromMap(term)); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/MatchBlockPropertyCondition.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionMatchBlockProperty.java similarity index 90% rename from core/src/main/java/net/momirealms/craftengine/core/loot/condition/MatchBlockPropertyCondition.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionMatchBlockProperty.java index 24c91cd6e..c3a30b8f4 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/MatchBlockPropertyCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionMatchBlockProperty.java @@ -12,11 +12,11 @@ import java.util.List; import java.util.Locale; import java.util.Map; -public class MatchBlockPropertyCondition implements LootCondition { +public class LootConditionMatchBlockProperty implements LootCondition { public static final Factory FACTORY = new Factory(); private final List> properties; - public MatchBlockPropertyCondition(List> properties) { + public LootConditionMatchBlockProperty(List> properties) { this.properties = properties; } @@ -55,7 +55,7 @@ public class MatchBlockPropertyCondition implements LootCondition { for (Map.Entry entry : properties.entrySet()) { propertyList.add(new Pair<>(entry.getKey(), entry.getValue().toString())); } - return new MatchBlockPropertyCondition(propertyList); + return new LootConditionMatchBlockProperty(propertyList); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/MatchItemCondition.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionMatchItem.java similarity index 88% rename from core/src/main/java/net/momirealms/craftengine/core/loot/condition/MatchItemCondition.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionMatchItem.java index 367ac6ec3..c2b4c4c2b 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/MatchItemCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionMatchItem.java @@ -8,12 +8,12 @@ import net.momirealms.craftengine.core.util.MiscUtils; import java.util.*; -public class MatchItemCondition implements LootCondition { +public class LootConditionMatchItem implements LootCondition { public static final Factory FACTORY = new Factory(); private final Set ids; private final boolean regexMatch; - public MatchItemCondition(Collection ids, boolean regexMatch) { + public LootConditionMatchItem(Collection ids, boolean regexMatch) { this.ids = new HashSet<>(ids); this.regexMatch = regexMatch; } @@ -46,7 +46,7 @@ public class MatchItemCondition implements LootCondition { public LootCondition create(Map arguments) { List ids = MiscUtils.getAsStringList(arguments.get("id")); boolean regex = (boolean) arguments.getOrDefault("regex", false); - return new MatchItemCondition(ids, regex); + return new LootConditionMatchItem(ids, regex); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/RandomCondition.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionRandom.java similarity index 85% rename from core/src/main/java/net/momirealms/craftengine/core/loot/condition/RandomCondition.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionRandom.java index 50cb43f1e..77a99c196 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/RandomCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionRandom.java @@ -7,11 +7,11 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class RandomCondition implements LootCondition { +public class LootConditionRandom implements LootCondition { public static final Factory FACTORY = new Factory(); private final float chance; - public RandomCondition(float chance) { + public LootConditionRandom(float chance) { this.chance = chance; } @@ -29,7 +29,7 @@ public class RandomCondition implements LootCondition { @Override public LootCondition create(Map arguments) { float chance = ResourceConfigUtils.getAsFloat(arguments.getOrDefault("value", 0.5f), "value"); - return new RandomCondition(chance); + return new LootConditionRandom(chance); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/SurvivesExplosionCondition.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionSurvivesExplosion.java similarity index 84% rename from core/src/main/java/net/momirealms/craftengine/core/loot/condition/SurvivesExplosionCondition.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionSurvivesExplosion.java index 3fd8f8cf6..68ae812da 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/SurvivesExplosionCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionSurvivesExplosion.java @@ -7,9 +7,9 @@ import net.momirealms.craftengine.core.util.Key; import java.util.Map; import java.util.Optional; -public class SurvivesExplosionCondition implements LootCondition { +public class LootConditionSurvivesExplosion implements LootCondition { public static final Factory FACTORY = new Factory(); - private static final SurvivesExplosionCondition INSTANCE = new SurvivesExplosionCondition(); + private static final LootConditionSurvivesExplosion INSTANCE = new LootConditionSurvivesExplosion(); @Override public Key type() { diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/TableBonusCondition.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionTableBonus.java similarity index 88% rename from core/src/main/java/net/momirealms/craftengine/core/loot/condition/TableBonusCondition.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionTableBonus.java index 125d5859d..e17179ebc 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/TableBonusCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditionTableBonus.java @@ -13,12 +13,12 @@ import java.util.List; import java.util.Map; import java.util.Optional; -public class TableBonusCondition implements LootCondition { +public class LootConditionTableBonus implements LootCondition { public static final Factory FACTORY = new Factory(); private final Key enchantmentType; private final List values; - public TableBonusCondition(Key enchantmentType, List values) { + public LootConditionTableBonus(Key enchantmentType, List values) { this.enchantmentType = enchantmentType; this.values = values; } @@ -47,13 +47,13 @@ public class TableBonusCondition implements LootCondition { Object chances = arguments.get("chances"); if (chances != null) { if (chances instanceof Number number) { - return new TableBonusCondition(enchantmentType, List.of(number.floatValue())); + return new LootConditionTableBonus(enchantmentType, List.of(number.floatValue())); } else if (chances instanceof List list) { List values = new ArrayList<>(list.size()); for (Object o : list) { values.add(ResourceConfigUtils.getAsFloat(o, "chances")); } - return new TableBonusCondition(enchantmentType, values); + return new LootConditionTableBonus(enchantmentType, values); } } throw new LocalizedResourceConfigException("warning.config.loot_table.condition.table_bonus.missing_chances"); diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditions.java b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditions.java index fd8f55e2b..d9ba14a51 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditions.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/condition/LootConditions.java @@ -26,16 +26,16 @@ public class LootConditions { public static final Key FALLING_BLOCK = Key.from("craftengine:falling_block"); static { - register(MATCH_ITEM, MatchItemCondition.FACTORY); - register(MATCH_BLOCK_PROPERTY, MatchBlockPropertyCondition.FACTORY); - register(TABLE_BONUS, TableBonusCondition.FACTORY); - register(SURVIVES_EXPLOSION, SurvivesExplosionCondition.FACTORY); - register(ANY_OF, AnyOfCondition.FACTORY); - register(ALL_OF, AllOfCondition.FACTORY); - register(ENCHANTMENT, EnchantmentCondition.FACTORY); - register(INVERTED, InvertedCondition.FACTORY); - register(FALLING_BLOCK, FallingCondition.FACTORY); - register(RANDOM, RandomCondition.FACTORY); + register(MATCH_ITEM, LootConditionMatchItem.FACTORY); + register(MATCH_BLOCK_PROPERTY, LootConditionMatchBlockProperty.FACTORY); + register(TABLE_BONUS, LootConditionTableBonus.FACTORY); + register(SURVIVES_EXPLOSION, LootConditionSurvivesExplosion.FACTORY); + register(ANY_OF, LootConditionAnyOf.FACTORY); + register(ALL_OF, LootConditionAllOf.FACTORY); + register(ENCHANTMENT, LootConditionEnchantment.FACTORY); + register(INVERTED, LootConditionInverted.FACTORY); + register(FALLING_BLOCK, LootConditionFalling.FACTORY); + register(RANDOM, LootConditionRandom.FACTORY); } public static void register(Key key, LootConditionFactory factory) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/function/ApplyBonusCountFunction.java b/core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctionApplyBonusCount.java similarity index 95% rename from core/src/main/java/net/momirealms/craftengine/core/loot/function/ApplyBonusCountFunction.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctionApplyBonusCount.java index 3e55a198f..230b66eac 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/function/ApplyBonusCountFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctionApplyBonusCount.java @@ -19,12 +19,12 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; -public class ApplyBonusCountFunction extends AbstractLootConditionalFunction { +public class LootFunctionApplyBonusCount extends AbstractLootConditionalFunction { public static final Factory FACTORY = new Factory<>(); private final Key enchantment; private final Formula formula; - public ApplyBonusCountFunction(List predicates, Key enchantment, Formula formula) { + public LootFunctionApplyBonusCount(List predicates, Key enchantment, Formula formula) { super(predicates); this.enchantment = enchantment; this.formula = formula; @@ -57,7 +57,7 @@ public class ApplyBonusCountFunction extends AbstractLootConditionalFunction< List conditions = Optional.ofNullable(arguments.get("conditions")) .map(it -> LootConditions.fromMapList((List>) it)) .orElse(Collections.emptyList()); - return new ApplyBonusCountFunction<>(conditions, Key.from(enchantment), Formulas.fromMap(formulaMap)); + return new LootFunctionApplyBonusCount<>(conditions, Key.from(enchantment), Formulas.fromMap(formulaMap)); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/function/DropExpFunction.java b/core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctionDropExp.java similarity index 88% rename from core/src/main/java/net/momirealms/craftengine/core/loot/function/DropExpFunction.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctionDropExp.java index cecd00e2e..24c353736 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/function/DropExpFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctionDropExp.java @@ -15,11 +15,11 @@ import java.util.List; import java.util.Map; import java.util.Optional; -public class DropExpFunction extends AbstractLootConditionalFunction { +public class LootFunctionDropExp extends AbstractLootConditionalFunction { public static final Factory FACTORY = new Factory<>(); private final NumberProvider value; - public DropExpFunction(NumberProvider value, List predicates) { + public LootFunctionDropExp(NumberProvider value, List predicates) { super(predicates); this.value = value; } @@ -44,7 +44,7 @@ public class DropExpFunction extends AbstractLootConditionalFunction { List conditions = Optional.ofNullable(arguments.get("conditions")) .map(it -> LootConditions.fromMapList((List>) it)) .orElse(Collections.emptyList()); - return new DropExpFunction<>(NumberProviders.fromObject(value), conditions); + return new LootFunctionDropExp<>(NumberProviders.fromObject(value), conditions); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/function/ExplosionDecayFunction.java b/core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctionExplosionDecay.java similarity index 88% rename from core/src/main/java/net/momirealms/craftengine/core/loot/function/ExplosionDecayFunction.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctionExplosionDecay.java index 9a3fc8689..7a8c8ff61 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/function/ExplosionDecayFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctionExplosionDecay.java @@ -9,10 +9,10 @@ import net.momirealms.craftengine.core.util.Key; import java.util.*; -public class ExplosionDecayFunction extends AbstractLootConditionalFunction { +public class LootFunctionExplosionDecay extends AbstractLootConditionalFunction { public static final Factory FACTORY = new Factory<>(); - public ExplosionDecayFunction(List predicates) { + public LootFunctionExplosionDecay(List predicates) { super(predicates); } @@ -46,7 +46,7 @@ public class ExplosionDecayFunction extends AbstractLootConditionalFunction conditions = Optional.ofNullable(arguments.get("conditions")) .map(it -> LootConditions.fromMapList((List>) it)) .orElse(Collections.emptyList()); - return new ExplosionDecayFunction<>(conditions); + return new LootFunctionExplosionDecay<>(conditions); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/function/SetCountFunction.java b/core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctionSetCount.java similarity index 86% rename from core/src/main/java/net/momirealms/craftengine/core/loot/function/SetCountFunction.java rename to core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctionSetCount.java index 969c778f9..85aafdcc7 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/function/SetCountFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctionSetCount.java @@ -14,13 +14,13 @@ import java.util.List; import java.util.Map; import java.util.Optional; -public class SetCountFunction extends AbstractLootConditionalFunction { +public class LootFunctionSetCount extends AbstractLootConditionalFunction { public static final Factory FACTORY = new Factory<>(); private final NumberProvider value; private final boolean add; - public SetCountFunction(List conditions, NumberProvider value, boolean add) { + public LootFunctionSetCount(List conditions, NumberProvider value, boolean add) { super(conditions); this.value = value; this.add = add; @@ -47,7 +47,7 @@ public class SetCountFunction extends AbstractLootConditionalFunction { List conditions = Optional.ofNullable(arguments.get("conditions")) .map(it -> LootConditions.fromMapList((List>) it)) .orElse(Collections.emptyList()); - return new SetCountFunction<>(conditions, NumberProviders.fromObject(value), add); + return new LootFunctionSetCount<>(conditions, NumberProviders.fromObject(value), add); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctions.java b/core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctions.java index 17a88c0c7..24cdb87c7 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctions.java +++ b/core/src/main/java/net/momirealms/craftengine/core/loot/function/LootFunctions.java @@ -23,10 +23,10 @@ public class LootFunctions { public static final Key DROP_EXP = Key.from("craftengine:drop_exp"); static { - register(SET_COUNT, SetCountFunction.FACTORY); - register(EXPLOSION_DECAY, ExplosionDecayFunction.FACTORY); - register(APPLY_BONUS, ApplyBonusCountFunction.FACTORY); - register(DROP_EXP, DropExpFunction.FACTORY); + register(SET_COUNT, LootFunctionSetCount.FACTORY); + register(EXPLOSION_DECAY, LootFunctionExplosionDecay.FACTORY); + register(APPLY_BONUS, LootFunctionApplyBonusCount.FACTORY); + register(DROP_EXP, LootFunctionDropExp.FACTORY); } public static void register(Key key, LootFunctionFactory factory) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java index 6bed70f13..60dd2120f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java @@ -17,7 +17,7 @@ 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.context.ContextHolder; -import net.momirealms.craftengine.core.util.context.PlayerContext; +import net.momirealms.craftengine.core.util.context.PlayerOptionalContext; import java.nio.file.Path; import java.util.*; @@ -177,7 +177,7 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { } }) .build() - .title(AdventureHelper.miniMessage().deserialize(Constants.BROWSER_TITLE, PlayerContext.of(player, ContextHolder.EMPTY).tagResolvers())) + .title(AdventureHelper.miniMessage().deserialize(Constants.BROWSER_TITLE, PlayerOptionalContext.of(player, ContextHolder.EMPTY).tagResolvers())) .refresh() .open(player); } @@ -292,7 +292,7 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { } }) .build() - .title(AdventureHelper.miniMessage().deserialize(Constants.CATEGORY_TITLE, PlayerContext.of(player, ContextHolder.EMPTY).tagResolvers())) + .title(AdventureHelper.miniMessage().deserialize(Constants.CATEGORY_TITLE, PlayerOptionalContext.of(player, ContextHolder.EMPTY).tagResolvers())) .refresh() .open(player); } @@ -353,7 +353,7 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { } }) .build() - .title(AdventureHelper.miniMessage().deserialize(Constants.RECIPE_NONE_TITLE, PlayerContext.of(player, ContextHolder.EMPTY).tagResolvers())) + .title(AdventureHelper.miniMessage().deserialize(Constants.RECIPE_NONE_TITLE, PlayerOptionalContext.of(player, ContextHolder.EMPTY).tagResolvers())) .refresh() .open(player); } @@ -578,7 +578,7 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { } }) .build() - .title(AdventureHelper.miniMessage().deserialize(Constants.RECIPE_SMITHING_TRANSFORM_TITLE, PlayerContext.of(player, ContextHolder.EMPTY).tagResolvers())) + .title(AdventureHelper.miniMessage().deserialize(Constants.RECIPE_SMITHING_TRANSFORM_TITLE, PlayerOptionalContext.of(player, ContextHolder.EMPTY).tagResolvers())) .refresh() .open(player); } @@ -711,7 +711,7 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { } }) .build() - .title(AdventureHelper.miniMessage().deserialize(Constants.RECIPE_STONECUTTING_TITLE, PlayerContext.of(player, ContextHolder.EMPTY).tagResolvers())) + .title(AdventureHelper.miniMessage().deserialize(Constants.RECIPE_STONECUTTING_TITLE, PlayerOptionalContext.of(player, ContextHolder.EMPTY).tagResolvers())) .refresh() .open(player); } @@ -861,7 +861,7 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { } }) .build() - .title(AdventureHelper.miniMessage().deserialize(title, PlayerContext.of(player, ContextHolder.EMPTY).tagResolvers())) + .title(AdventureHelper.miniMessage().deserialize(title, PlayerOptionalContext.of(player, ContextHolder.EMPTY).tagResolvers())) .refresh() .open(player); } @@ -1056,7 +1056,7 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { } }) .build() - .title(AdventureHelper.miniMessage().deserialize(Constants.RECIPE_CRAFTING_TITLE, PlayerContext.of(player, ContextHolder.EMPTY).tagResolvers())) + .title(AdventureHelper.miniMessage().deserialize(Constants.RECIPE_CRAFTING_TITLE, PlayerOptionalContext.of(player, ContextHolder.EMPTY).tagResolvers())) .refresh() .open(player); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/text/minimessage/NamedArgumentTag.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/text/minimessage/NamedArgumentTag.java index 67f2b335f..b48a8c43c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/text/minimessage/NamedArgumentTag.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/text/minimessage/NamedArgumentTag.java @@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Objects; +import java.util.Optional; public class NamedArgumentTag implements TagResolver { private static final String NAME_0 = "argument"; @@ -29,11 +30,12 @@ public class NamedArgumentTag implements TagResolver { return null; } String argumentKey = arguments.popOr("No argument key provided").toString(); - ContextKey key = ContextKey.of(Key.of(argumentKey)); - if (!this.context.contexts().has(key)) { + ContextKey key = ContextKey.of(Key.withDefaultNamespace(argumentKey, "craftengine")); + Optional optional = this.context.getOptionalParameter(key); + if (optional.isEmpty()) { throw ctx.newException("Invalid argument key", arguments); } - return Tag.selfClosingInserting(AdventureHelper.miniMessage().deserialize(this.context.contexts().getOrThrow(key), this.context.tagResolvers())); + return Tag.selfClosingInserting(AdventureHelper.miniMessage().deserialize(String.valueOf(optional.get()), this.context.tagResolvers())); } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java b/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java index 59d7b9711..e3333d608 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java +++ b/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java @@ -9,7 +9,7 @@ import net.momirealms.craftengine.core.item.recipe.CustomSmithingTransformRecipe import net.momirealms.craftengine.core.item.recipe.RecipeFactory; import net.momirealms.craftengine.core.loot.condition.LootConditionFactory; import net.momirealms.craftengine.core.loot.entry.LootEntryContainerFactory; -import net.momirealms.craftengine.core.loot.function.ApplyBonusCountFunction; +import net.momirealms.craftengine.core.loot.function.LootFunctionApplyBonusCount; import net.momirealms.craftengine.core.loot.function.LootFunctionFactory; import net.momirealms.craftengine.core.loot.number.NumberProviderFactory; import net.momirealms.craftengine.core.pack.conflict.matcher.PathMatcherFactory; @@ -43,7 +43,7 @@ public class BuiltInRegistries { public static final Registry CONDITION_PROPERTY_FACTORY = createRegistry(Registries.CONDITION_PROPERTY_FACTORY); public static final Registry SELECT_PROPERTY_FACTORY = createRegistry(Registries.SELECT_PROPERTY_FACTORY); public static final Registry> RECIPE_FACTORY = createRegistry(Registries.RECIPE_FACTORY); - public static final Registry FORMULA_FACTORY = createRegistry(Registries.FORMULA_FACTORY); + public static final Registry FORMULA_FACTORY = createRegistry(Registries.FORMULA_FACTORY); public static final Registry PATH_MATCHER_FACTORY = createRegistry(Registries.PATH_MATCHER_FACTORY); public static final Registry RESOLUTION_FACTORY = createRegistry(Registries.RESOLUTION_FACTORY); public static final Registry SMITHING_RESULT_PROCESSOR_FACTORY = createRegistry(Registries.SMITHING_RESULT_PROCESSOR_FACTORY); diff --git a/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java b/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java index 07e1e4ef8..0071569c5 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java +++ b/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java @@ -9,7 +9,7 @@ import net.momirealms.craftengine.core.item.recipe.CustomSmithingTransformRecipe import net.momirealms.craftengine.core.item.recipe.RecipeFactory; import net.momirealms.craftengine.core.loot.condition.LootConditionFactory; import net.momirealms.craftengine.core.loot.entry.LootEntryContainerFactory; -import net.momirealms.craftengine.core.loot.function.ApplyBonusCountFunction; +import net.momirealms.craftengine.core.loot.function.LootFunctionApplyBonusCount; import net.momirealms.craftengine.core.loot.function.LootFunctionFactory; import net.momirealms.craftengine.core.loot.number.NumberProviderFactory; import net.momirealms.craftengine.core.pack.conflict.matcher.PathMatcherFactory; @@ -44,7 +44,7 @@ public class Registries { public static final ResourceKey> CONDITION_PROPERTY_FACTORY = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("condition_property_factory")); public static final ResourceKey> SELECT_PROPERTY_FACTORY = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("select_property_factory")); public static final ResourceKey>> RECIPE_FACTORY = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_factory")); - public static final ResourceKey> FORMULA_FACTORY = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("formula_factory")); + public static final ResourceKey> FORMULA_FACTORY = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("formula_factory")); public static final ResourceKey> PATH_MATCHER_FACTORY = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("path_matcher_factory")); public static final ResourceKey> RESOLUTION_FACTORY = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("resolution_factory")); public static final ResourceKey> SMITHING_RESULT_PROCESSOR_FACTORY = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("smithing_result_processor_factory")); diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/CommonContext.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/CommonContext.java index be8a598f7..ef6754308 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/context/CommonContext.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/CommonContext.java @@ -1,5 +1,7 @@ package net.momirealms.craftengine.core.util.context; +import java.util.Optional; + public abstract class CommonContext implements Context { protected final ContextHolder contexts; @@ -11,4 +13,20 @@ public abstract class CommonContext implements Context { public ContextHolder contexts() { return contexts; } + + @Override + public Optional getOptionalParameter(ContextKey parameter) { + return this.contexts.getOptional(parameter); + } + + @Override + public T getParameterOrThrow(ContextKey parameter) { + return this.contexts.getOrThrow(parameter); + } + + @Override + public CommonContext withParameter(ContextKey parameter, T value) { + this.contexts.withParameter(parameter, value); + return this; + } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/Context.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/Context.java index 5901daaa4..56ff668c4 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/context/Context.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/Context.java @@ -1,6 +1,14 @@ package net.momirealms.craftengine.core.util.context; +import java.util.Optional; + public interface Context { ContextHolder contexts(); + + Optional getOptionalParameter(ContextKey parameter); + + T getParameterOrThrow(ContextKey parameter); + + Context withParameter(ContextKey parameter, T value); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/ContextKey.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/ContextKey.java index 4ea446ffb..4c690da88 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/context/ContextKey.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/ContextKey.java @@ -22,7 +22,7 @@ public class ContextKey { @NotNull public static ContextKey of(@NotNull String id) { - return new ContextKey<>(Key.of(id)); + return new ContextKey<>(Key.withDefaultNamespace(id, "craftengine")); } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/LazyContextParameterProvider.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/LazyContextParameterProvider.java new file mode 100644 index 000000000..796df1230 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/LazyContextParameterProvider.java @@ -0,0 +1,21 @@ +package net.momirealms.craftengine.core.util.context; + +import java.util.Optional; + +public interface LazyContextParameterProvider { + + Optional getOptionalParameter(ContextKey parameter); + + static LazyContextParameterProvider dummy() { + return DummyContextParameterProvider.INSTANCE; + } + + class DummyContextParameterProvider implements LazyContextParameterProvider { + static final DummyContextParameterProvider INSTANCE = new DummyContextParameterProvider(); + + @Override + public Optional getOptionalParameter(ContextKey parameter) { + return Optional.empty(); + } + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerContext.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerContext.java deleted file mode 100644 index ff44eb60a..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerContext.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.momirealms.craftengine.core.util.context; - -import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; -import net.momirealms.craftengine.core.entity.player.Player; -import net.momirealms.craftengine.core.plugin.text.minimessage.*; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class PlayerContext extends CommonContext implements MiniMessageTextContext { - public static final PlayerContext EMPTY = new PlayerContext(null, ContextHolder.EMPTY); - private final Player player; - private TagResolver[] tagResolvers; - - public PlayerContext(@Nullable Player player, @NotNull ContextHolder contexts) { - super(contexts); - this.player = player; - } - - @NotNull - public static PlayerContext of(@Nullable Player player, @NotNull ContextHolder contexts) { - return new PlayerContext(player, contexts); - } - - @Nullable - public Player player() { - return this.player; - } - - @Override - @NotNull - public TagResolver[] tagResolvers() { - if (this.tagResolvers == null) { - this.tagResolvers = new TagResolver[]{ShiftTag.INSTANCE, ImageTag.INSTANCE, new PlaceholderTag(this.player), new I18NTag(this), new NamedArgumentTag(this)}; - } - return this.tagResolvers; - } -} 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 new file mode 100644 index 000000000..e3f711135 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerOptionalContext.java @@ -0,0 +1,87 @@ +package net.momirealms.craftengine.core.util.context; + +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import net.momirealms.craftengine.core.entity.Entity; +import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.plugin.text.minimessage.*; +import net.momirealms.craftengine.core.util.MCUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Function; + +public class PlayerOptionalContext extends CommonContext implements MiniMessageTextContext { + public static final PlayerOptionalContext EMPTY = new PlayerOptionalContext(null, ContextHolder.EMPTY); + private final Player player; + private final LazyContextParameterProvider playerParameterProvider; + private TagResolver[] tagResolvers; + + public PlayerOptionalContext(@Nullable Player player, @NotNull ContextHolder contexts) { + super(contexts); + this.player = player; + this.playerParameterProvider = player == null ? LazyContextParameterProvider.dummy() : new PlayerParameterGetter(player); + } + + @NotNull + public static PlayerOptionalContext of(@Nullable Player player, @NotNull ContextHolder contexts) { + return new PlayerOptionalContext(player, contexts); + } + + @Nullable + public Player player() { + return this.player; + } + + @Override + @NotNull + public TagResolver[] tagResolvers() { + if (this.tagResolvers == null) { + this.tagResolvers = new TagResolver[]{ShiftTag.INSTANCE, ImageTag.INSTANCE, new PlaceholderTag(this.player), new I18NTag(this), new NamedArgumentTag(this)}; + } + return this.tagResolvers; + } + + @Override + public Optional getOptionalParameter(ContextKey parameter) { + Optional optional = this.playerParameterProvider.getOptionalParameter(parameter); + if (optional.isPresent()) { + return optional; + } + return super.getOptionalParameter(parameter); + } + + @Override + public T getParameterOrThrow(ContextKey parameter) { + return this.playerParameterProvider.getOptionalParameter(parameter).orElseGet(() -> super.getParameterOrThrow(parameter)); + } + + public static class PlayerParameterGetter implements LazyContextParameterProvider { + private static final Map, Function> CONTEXT_FUNCTIONS = new HashMap<>(); + static { + CONTEXT_FUNCTIONS.put(PlayerParameters.X, Entity::x); + CONTEXT_FUNCTIONS.put(PlayerParameters.Y, Entity::y); + CONTEXT_FUNCTIONS.put(PlayerParameters.Z, Entity::z); + CONTEXT_FUNCTIONS.put(PlayerParameters.BLOCK_X, p -> MCUtils.fastFloor(p.x())); + CONTEXT_FUNCTIONS.put(PlayerParameters.BLOCK_Y, p -> MCUtils.fastFloor(p.y())); + 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); + } + + private final Player player; + + public PlayerParameterGetter(@NotNull Player player) { + this.player = Objects.requireNonNull(player); + } + + @SuppressWarnings("unchecked") + @Override + public Optional getOptionalParameter(ContextKey parameter) { + return (Optional) Optional.ofNullable(CONTEXT_FUNCTIONS.get(parameter)).map(f -> f.apply(this.player)); + } + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerParameters.java b/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerParameters.java new file mode 100644 index 000000000..469e5a6c6 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/util/context/PlayerParameters.java @@ -0,0 +1,18 @@ +package net.momirealms.craftengine.core.util.context; + +import net.momirealms.craftengine.core.util.Key; + +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")); +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/world/WorldBlock.java b/core/src/main/java/net/momirealms/craftengine/core/world/BlockInWorld.java similarity index 81% rename from core/src/main/java/net/momirealms/craftengine/core/world/WorldBlock.java rename to core/src/main/java/net/momirealms/craftengine/core/world/BlockInWorld.java index 4da8df826..192d2c984 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/world/WorldBlock.java +++ b/core/src/main/java/net/momirealms/craftengine/core/world/BlockInWorld.java @@ -2,7 +2,7 @@ package net.momirealms.craftengine.core.world; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; -public interface WorldBlock { +public interface BlockInWorld { default boolean canBeReplaced(BlockPlaceContext blockPlaceContext) { return false; @@ -11,4 +11,10 @@ public interface WorldBlock { default boolean isWaterSource(BlockPlaceContext blockPlaceContext) { return false; } + + int x(); + + int y(); + + int z(); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/world/World.java b/core/src/main/java/net/momirealms/craftengine/core/world/World.java index 36979368c..5817a5e1f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/world/World.java +++ b/core/src/main/java/net/momirealms/craftengine/core/world/World.java @@ -15,9 +15,9 @@ public interface World { WorldHeight worldHeight(); - WorldBlock getBlockAt(int x, int y, int z); + BlockInWorld getBlockAt(int x, int y, int z); - default WorldBlock getBlockAt(final BlockPos pos) { + default BlockInWorld getBlockAt(final BlockPos pos) { return getBlockAt(pos.x(), pos.y(), pos.z()); }