diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventFunctions.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventFunctions.java index 0feab6450..5cbe2e8db 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventFunctions.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventFunctions.java @@ -43,6 +43,7 @@ public class EventFunctions { register(CommonFunctions.SPAWN_FURNITURE, new SpawnFurnitureFunction.FactoryImpl<>(EventConditions::fromMap)); register(CommonFunctions.REMOVE_FURNITURE, new RemoveFurnitureFunction.FactoryImpl<>(EventConditions::fromMap)); register(CommonFunctions.REPLACE_FURNITURE, new ReplaceFurnitureFunction.FactoryImpl<>(EventConditions::fromMap)); + register(CommonFunctions.ROTATE_FURNITURE, new RotateFurnitureFunction.FactoryImpl<>(EventConditions::fromMap)); register(CommonFunctions.MYTHIC_MOBS_SKILL, new MythicMobsSkillFunction.FactoryImpl<>(EventConditions::fromMap)); register(CommonFunctions.TELEPORT, new TeleportFunction.FactoryImpl<>(EventConditions::fromMap)); register(CommonFunctions.SET_VARIABLE, new SetVariableFunction.FactoryImpl<>(EventConditions::fromMap)); diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/BreakBlockFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/BreakBlockFunction.java index d0b63f852..ad9543d18 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/BreakBlockFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/BreakBlockFunction.java @@ -18,7 +18,7 @@ public class BreakBlockFunction extends AbstractConditional private final NumberProvider y; private final NumberProvider z; - public BreakBlockFunction(NumberProvider x, NumberProvider y, NumberProvider z, List> predicates) { + public BreakBlockFunction(List> predicates, NumberProvider y, NumberProvider z, NumberProvider x) { super(predicates); this.x = x; this.y = y; @@ -47,7 +47,7 @@ public class BreakBlockFunction extends AbstractConditional NumberProvider x = NumberProviders.fromObject(arguments.getOrDefault("x", "")); NumberProvider y = NumberProviders.fromObject(arguments.getOrDefault("y", "")); NumberProvider z = NumberProviders.fromObject(arguments.getOrDefault("z", "")); - return new BreakBlockFunction<>(x, y, z, getPredicates(arguments)); + return new BreakBlockFunction<>(getPredicates(arguments), y, z, x); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/CommonFunctions.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/CommonFunctions.java index b77e6fc06..3083f3cf6 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/CommonFunctions.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/CommonFunctions.java @@ -32,6 +32,7 @@ public final class CommonFunctions { public static final Key SPAWN_FURNITURE = Key.of("craftengine:spawn_furniture"); public static final Key REMOVE_FURNITURE = Key.of("craftengine:remove_furniture"); public static final Key REPLACE_FURNITURE = Key.of("craftengine:replace_furniture"); + public static final Key ROTATE_FURNITURE = Key.of("craftengine:rotate_furniture"); public static final Key MYTHIC_MOBS_SKILL = Key.of("craftengine:mythic_mobs_skill"); public static final Key TELEPORT = Key.of("craftengine:teleport"); public static final Key TOAST = Key.of("craftengine:toast"); diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/DamageFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/DamageFunction.java index 97e197b55..6fd52692b 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/DamageFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/DamageFunction.java @@ -17,7 +17,7 @@ public class DamageFunction extends AbstractConditionalFunc private final Key damageType; private final NumberProvider amount; - public DamageFunction(PlayerSelector selector, Key damageType, NumberProvider amount, List> predicates) { + public DamageFunction(List> predicates, Key damageType, NumberProvider amount, PlayerSelector selector) { super(predicates); this.selector = selector; this.damageType = damageType; @@ -45,7 +45,7 @@ public class DamageFunction extends AbstractConditionalFunc PlayerSelector selector = PlayerSelectors.fromObject(arguments.getOrDefault("target", "self"), conditionFactory()); Key damageType = Key.of(ResourceConfigUtils.getAsStringOrNull(arguments.getOrDefault("damage-type", "generic"))); NumberProvider amount = NumberProviders.fromObject(arguments.getOrDefault("amount", 1f)); - return new DamageFunction<>(selector, damageType, amount, getPredicates(arguments)); + return new DamageFunction<>(getPredicates(arguments), damageType, amount, selector); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/DamageItemFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/DamageItemFunction.java index e5cbedec6..d1580f33b 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/DamageItemFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/DamageItemFunction.java @@ -17,7 +17,7 @@ import java.util.Map; public class DamageItemFunction extends AbstractConditionalFunction { private final NumberProvider amount; - public DamageItemFunction(NumberProvider amount, List> predicates) { + public DamageItemFunction(List> predicates, NumberProvider amount) { super(predicates); this.amount = amount; } @@ -51,7 +51,7 @@ public class DamageItemFunction extends AbstractConditional @Override public Function create(Map arguments) { NumberProvider amount = NumberProviders.fromObject(arguments.getOrDefault("amount", 1)); - return new DamageItemFunction<>(amount, getPredicates(arguments)); + return new DamageItemFunction<>(getPredicates(arguments), amount); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/LevelerExpFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/LevelerExpFunction.java index 51316f239..a6ddff9b4 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/LevelerExpFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/LevelerExpFunction.java @@ -20,7 +20,7 @@ public class LevelerExpFunction extends AbstractConditional private final String leveler; private final String plugin; - public LevelerExpFunction(NumberProvider count, String leveler, String plugin, PlayerSelector selector, List> predicates) { + public LevelerExpFunction(List> predicates, String leveler, String plugin, PlayerSelector selector, NumberProvider count) { super(predicates); this.count = count; this.leveler = leveler; @@ -58,7 +58,7 @@ public class LevelerExpFunction extends AbstractConditional Object count = ResourceConfigUtils.requireNonNullOrThrow(arguments.get("count"), "warning.config.function.leveler_exp.missing_count"); String leveler = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("leveler"), "warning.config.function.leveler_exp.missing_leveler"); String plugin = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("plugin"), "warning.config.function.leveler_exp.missing_plugin"); - return new LevelerExpFunction<>(NumberProviders.fromObject(count), leveler, plugin, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); + return new LevelerExpFunction<>(getPredicates(arguments), leveler, plugin, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), NumberProviders.fromObject(count)); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/MythicMobsSkillFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/MythicMobsSkillFunction.java index 031ed08da..9d97eb14c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/MythicMobsSkillFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/MythicMobsSkillFunction.java @@ -14,7 +14,7 @@ public class MythicMobsSkillFunction extends AbstractCondit private final String skill; private final float power; - public MythicMobsSkillFunction(String skill, float power, List> predicates) { + public MythicMobsSkillFunction(List> predicates, float power, String skill) { super(predicates); this.skill = skill; this.power = power; @@ -42,7 +42,7 @@ public class MythicMobsSkillFunction extends AbstractCondit public Function create(Map args) { String skill = ResourceConfigUtils.requireNonEmptyStringOrThrow(args.get("skill"), "warning.config.function.mythic_mobs_skill.missing_skill"); float power = ResourceConfigUtils.getAsFloat(args.getOrDefault("power", 1.0), "power"); - return new MythicMobsSkillFunction<>(skill, power, getPredicates(args)); + return new MythicMobsSkillFunction<>(getPredicates(args), power, skill); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/ParticleFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/ParticleFunction.java index 4893d19f8..dd4f29458 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/ParticleFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/ParticleFunction.java @@ -17,7 +17,7 @@ import java.util.Optional; public class ParticleFunction extends AbstractConditionalFunction { private final ParticleConfig config; - public ParticleFunction(ParticleConfig config, List> predicates) { + public ParticleFunction(List> predicates, ParticleConfig config) { super(predicates); this.config = config; } @@ -45,7 +45,7 @@ public class ParticleFunction extends AbstractConditionalFu @Override public Function create(Map arguments) { - return new ParticleFunction<>(ParticleConfig.fromMap$function(arguments), getPredicates(arguments)); + return new ParticleFunction<>(getPredicates(arguments), ParticleConfig.fromMap$function(arguments)); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PlaceBlockFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PlaceBlockFunction.java index fedd7639a..f71b2ae08 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PlaceBlockFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PlaceBlockFunction.java @@ -26,7 +26,7 @@ public class PlaceBlockFunction extends AbstractConditional private final NumberProvider z; private final NumberProvider updateFlags; - public PlaceBlockFunction(LazyReference lazyBlockState, NumberProvider x, NumberProvider y, NumberProvider z, NumberProvider updateFlags, List> predicates) { + public PlaceBlockFunction(List> predicates, NumberProvider x, NumberProvider y, NumberProvider z, NumberProvider updateFlags, LazyReference lazyBlockState) { super(predicates); this.lazyBlockState = lazyBlockState; this.x = x; @@ -58,12 +58,7 @@ public class PlaceBlockFunction extends AbstractConditional @Override public Function create(Map arguments) { String state = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("block-state"), "warning.config.function.place_block.missing_block_state"); - return new PlaceBlockFunction<>(LazyReference.lazyReference(() -> CraftEngine.instance().blockManager().createBlockState(state)), - NumberProviders.fromObject(arguments.getOrDefault("x", "")), - NumberProviders.fromObject(arguments.getOrDefault("y", "")), - NumberProviders.fromObject(arguments.getOrDefault("z", "")), - Optional.ofNullable(arguments.get("update-flags")).map(NumberProviders::fromObject).orElse(NumberProviders.direct(UpdateOption.UPDATE_ALL.flags())), - getPredicates(arguments)); + return new PlaceBlockFunction<>(getPredicates(arguments), NumberProviders.fromObject(arguments.getOrDefault("x", "")), NumberProviders.fromObject(arguments.getOrDefault("y", "")), NumberProviders.fromObject(arguments.getOrDefault("z", "")), Optional.ofNullable(arguments.get("update-flags")).map(NumberProviders::fromObject).orElse(NumberProviders.direct(UpdateOption.UPDATE_ALL.flags())), LazyReference.lazyReference(() -> CraftEngine.instance().blockManager().createBlockState(state))); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PlaySoundFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PlaySoundFunction.java index 00004bbb8..cc71ff1ba 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PlaySoundFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PlaySoundFunction.java @@ -31,15 +31,7 @@ public class PlaySoundFunction extends AbstractConditionalF private final PlayerSelector selector; public PlaySoundFunction( - Key soundEvent, - NumberProvider x, - NumberProvider y, - NumberProvider z, - NumberProvider volume, - NumberProvider pitch, - SoundSource source, - PlayerSelector selector, - List> predicates + List> predicates, NumberProvider x, NumberProvider y, NumberProvider z, NumberProvider volume, NumberProvider pitch, SoundSource source, PlayerSelector selector, Key soundEvent ) { super(predicates); this.soundEvent = soundEvent; @@ -89,7 +81,7 @@ public class PlaySoundFunction extends AbstractConditionalF NumberProvider pitch = NumberProviders.fromObject(arguments.getOrDefault("pitch", 1)); SoundSource source = Optional.ofNullable(arguments.get("source")).map(String::valueOf).map(it -> SoundSource.valueOf(it.toUpperCase(Locale.ENGLISH))).orElse(SoundSource.MASTER); PlayerSelector selector = PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()); - return new PlaySoundFunction<>(soundEvent, x, y, z, volume, pitch, source, selector, getPredicates(arguments)); + return new PlaySoundFunction<>(getPredicates(arguments), x, y, z, volume, pitch, source, selector, soundEvent); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PotionEffectFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PotionEffectFunction.java index fa25af75f..cf87e324c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PotionEffectFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/PotionEffectFunction.java @@ -21,7 +21,7 @@ public class PotionEffectFunction extends AbstractCondition private final boolean ambient; private final boolean particles; - public PotionEffectFunction(Key potionEffectType, NumberProvider duration, NumberProvider amplifier, boolean ambient, boolean particles, PlayerSelector selector, List> predicates) { + public PotionEffectFunction(List> predicates, NumberProvider duration, NumberProvider amplifier, boolean ambient, boolean particles, PlayerSelector selector, Key potionEffectType) { super(predicates); this.potionEffectType = potionEffectType; this.duration = duration; @@ -63,7 +63,7 @@ public class PotionEffectFunction extends AbstractCondition NumberProvider amplifier = NumberProviders.fromObject(arguments.getOrDefault("amplifier", 0)); boolean ambient = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("ambient", false), "ambient"); boolean particles = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("particles", true), "particles"); - return new PotionEffectFunction<>(effectType, duration, amplifier, ambient, particles, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); + return new PotionEffectFunction<>(getPredicates(arguments), duration, amplifier, ambient, particles, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), effectType); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemoveCooldownFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemoveCooldownFunction.java index 84982ec78..5beae2853 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemoveCooldownFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemoveCooldownFunction.java @@ -19,7 +19,7 @@ public class RemoveCooldownFunction extends AbstractConditi private final String id; private final boolean all; - public RemoveCooldownFunction(String id, boolean all, PlayerSelector selector, List> predicates) { + public RemoveCooldownFunction(List> predicates, boolean all, PlayerSelector selector, String id) { super(predicates); this.selector = selector; this.id = id; @@ -59,10 +59,10 @@ public class RemoveCooldownFunction extends AbstractConditi public Function create(Map arguments) { boolean all = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("all", false), "all"); if (all) { - return new RemoveCooldownFunction<>(null, true, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); + return new RemoveCooldownFunction<>(getPredicates(arguments), true, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), null); } else { String id = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("id"), "warning.config.function.remove_cooldown.missing_id"); - return new RemoveCooldownFunction<>(id, false, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); + return new RemoveCooldownFunction<>(getPredicates(arguments), false, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), id); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemoveFurnitureFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemoveFurnitureFunction.java index 518b061cd..3fb802c80 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemoveFurnitureFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemoveFurnitureFunction.java @@ -24,7 +24,7 @@ public class RemoveFurnitureFunction extends AbstractCondit private final boolean dropLoot; private final boolean playSound; - public RemoveFurnitureFunction(boolean dropLoot, boolean playSound, List> predicates) { + public RemoveFurnitureFunction(List> predicates, boolean playSound, boolean dropLoot) { super(predicates); this.dropLoot = dropLoot; this.playSound = playSound; @@ -80,7 +80,7 @@ public class RemoveFurnitureFunction extends AbstractCondit public Function create(Map arguments) { boolean dropLoot = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("drop-loot", true), "drop-loot"); boolean playSound = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("play-sound", true), "play-sound"); - return new RemoveFurnitureFunction<>(dropLoot, playSound, getPredicates(arguments)); + return new RemoveFurnitureFunction<>(getPredicates(arguments), playSound, dropLoot); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemovePotionEffectFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemovePotionEffectFunction.java index 55322a946..70af392c1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemovePotionEffectFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RemovePotionEffectFunction.java @@ -17,7 +17,7 @@ public class RemovePotionEffectFunction extends AbstractCon private final Key potionEffectType; private final boolean all; - public RemovePotionEffectFunction(Key potionEffectType, boolean all, PlayerSelector selector, List> predicates) { + public RemovePotionEffectFunction(List> predicates, boolean all, PlayerSelector selector, Key potionEffectType) { super(predicates); this.potionEffectType = potionEffectType; this.selector = selector; @@ -54,10 +54,10 @@ public class RemovePotionEffectFunction extends AbstractCon public Function create(Map arguments) { boolean all = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("all", false), "all"); if (all) { - return new RemovePotionEffectFunction<>(null, true, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); + return new RemovePotionEffectFunction<>(getPredicates(arguments), true, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), null); } else { Key effectType = Key.of(ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("potion-effect"), "warning.config.function.remove_potion_effect.missing_potion_effect")); - return new RemovePotionEffectFunction<>(effectType, false, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); + return new RemovePotionEffectFunction<>(getPredicates(arguments), false, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), effectType); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/ReplaceFurnitureFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/ReplaceFurnitureFunction.java index 2c4577909..c2bfed095 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/ReplaceFurnitureFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/ReplaceFurnitureFunction.java @@ -26,16 +26,7 @@ public class ReplaceFurnitureFunction extends AbstractCondi private final boolean playSound; public ReplaceFurnitureFunction( - Key newFurnitureId, - NumberProvider x, - NumberProvider y, - NumberProvider z, - NumberProvider pitch, - NumberProvider yaw, - String variant, - boolean dropLoot, - boolean playSound, - List> predicates + List> predicates, NumberProvider x, NumberProvider y, NumberProvider z, NumberProvider pitch, NumberProvider yaw, String variant, boolean dropLoot, boolean playSound, Key newFurnitureId ) { super(predicates); this.newFurnitureId = newFurnitureId; @@ -96,7 +87,7 @@ public class ReplaceFurnitureFunction extends AbstractCondi String variant = ResourceConfigUtils.getAsStringOrNull(ResourceConfigUtils.get(arguments, "variant", "anchor-type")); boolean dropLoot = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("drop-loot", true), "drop-loot"); boolean playSound = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("play-sound", true), "play-sound"); - return new ReplaceFurnitureFunction<>(furnitureId, x, y, z, pitch, yaw, variant, dropLoot, playSound, getPredicates(arguments)); + return new ReplaceFurnitureFunction<>(getPredicates(arguments), x, y, z, pitch, yaw, variant, dropLoot, playSound, furnitureId); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RotateFurnitureFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RotateFurnitureFunction.java new file mode 100644 index 000000000..1256826a8 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RotateFurnitureFunction.java @@ -0,0 +1,84 @@ +package net.momirealms.craftengine.core.plugin.context.function; + +import net.momirealms.craftengine.core.entity.furniture.Furniture; +import net.momirealms.craftengine.core.entity.player.InteractionHand; +import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.item.Item; +import net.momirealms.craftengine.core.loot.LootTable; +import net.momirealms.craftengine.core.plugin.context.Condition; +import net.momirealms.craftengine.core.plugin.context.Context; +import net.momirealms.craftengine.core.plugin.context.ContextHolder; +import net.momirealms.craftengine.core.plugin.context.event.EventFunctions; +import net.momirealms.craftengine.core.plugin.context.number.NumberProvider; +import net.momirealms.craftengine.core.plugin.context.number.NumberProviders; +import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters; +import net.momirealms.craftengine.core.sound.SoundData; +import net.momirealms.craftengine.core.sound.SoundSource; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.world.World; +import net.momirealms.craftengine.core.world.WorldPosition; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +public class RotateFurnitureFunction extends AbstractConditionalFunction { + private final NumberProvider degree; + private final List> successFunctions; + private final List> failureFunctions; + + public RotateFurnitureFunction(List> predicates, NumberProvider degree, List> successFunctions, List> failureFunctions) { + super(predicates); + this.degree = degree; + this.successFunctions = successFunctions; + this.failureFunctions = failureFunctions; + } + + @Override + public void runInternal(CTX ctx) { + ctx.getOptionalParameter(DirectContextParameters.FURNITURE).ifPresent(furniture -> rotateFurniture(ctx, furniture)); + } + + public void rotateFurniture(CTX ctx, Furniture furniture) { + if (!furniture.isValid()) return; + WorldPosition position = furniture.position(); + WorldPosition newPos = new WorldPosition(position.world, position.x, position.y, position.z, position.xRot, position.yRot + this.degree.getFloat(ctx)); + furniture.moveTo(newPos).thenAccept(success -> { + if (success) { + for (Function successFunction : this.successFunctions) { + successFunction.run(ctx); + } + } else { + for (Function failureFunction : this.failureFunctions) { + failureFunction.run(ctx); + } + } + }); + } + + @Override + public Key type() { + return CommonFunctions.ROTATE_FURNITURE; + } + + public NumberProvider degree() { + return degree; + } + + public static class FactoryImpl extends AbstractFactory { + + public FactoryImpl(java.util.function.Function, Condition> factory) { + super(factory); + } + + @Override + public Function create(Map arguments) { + NumberProvider degree = NumberProviders.fromObject(arguments.getOrDefault("degree", 90)); + List> onSuccess = ResourceConfigUtils.parseConfigAsList(arguments.get("on-success"), EventFunctions::fromMap); + List> onFailure = ResourceConfigUtils.parseConfigAsList(arguments.get("on-failure"), EventFunctions::fromMap); + return new RotateFurnitureFunction<>(getPredicates(arguments), degree, onSuccess, onFailure); + } + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RunFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RunFunction.java index 15f5b0586..154bbc919 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RunFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RunFunction.java @@ -21,7 +21,7 @@ public class RunFunction extends AbstractConditionalFunctio private final List> functions; private final NumberProvider delay; - public RunFunction(List> functions, NumberProvider delay, List> predicates) { + public RunFunction(List> predicates, NumberProvider delay, List> functions) { super(predicates); this.functions = functions; this.delay = delay; @@ -75,7 +75,7 @@ public class RunFunction extends AbstractConditionalFunctio for (Map function : functions) { fun.add(this.functionFactory.apply(function)); } - return new RunFunction<>(fun, delay, getPredicates(arguments)); + return new RunFunction<>(getPredicates(arguments), delay, fun); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCooldownFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCooldownFunction.java index 5634d5f19..a773bdcb1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCooldownFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCooldownFunction.java @@ -21,7 +21,7 @@ public class SetCooldownFunction extends AbstractConditiona private final String id; private final boolean add; - public SetCooldownFunction(TextProvider time, String id, boolean add, PlayerSelector selector, List> predicates) { + public SetCooldownFunction(List> predicates, String id, boolean add, PlayerSelector selector, TextProvider time) { super(predicates); this.time = time; this.add = add; @@ -66,7 +66,7 @@ public class SetCooldownFunction extends AbstractConditiona String id = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("id"), "warning.config.function.set_cooldown.missing_id"); String time = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("time"), "warning.config.function.set_cooldown.missing_time"); boolean add = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("add", false), "add"); - return new SetCooldownFunction<>(TextProviders.fromString(time), id, add, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); + return new SetCooldownFunction<>(getPredicates(arguments), id, add, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), TextProviders.fromString(time)); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCountFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCountFunction.java index aa005230c..b6cd3f22d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCountFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetCountFunction.java @@ -17,7 +17,7 @@ public class SetCountFunction extends AbstractConditionalFu private final NumberProvider count; private final boolean add; - public SetCountFunction(NumberProvider count, boolean add, List> predicates) { + public SetCountFunction(List> predicates, boolean add, NumberProvider count) { super(predicates); this.count = count; this.add = add; @@ -51,7 +51,7 @@ public class SetCountFunction extends AbstractConditionalFu public Function create(Map arguments) { Object value = ResourceConfigUtils.requireNonNullOrThrow(arguments.get("count"), "warning.config.function.set_count.missing_count"); boolean add = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("add", false), "add"); - return new SetCountFunction<>(NumberProviders.fromObject(value), add, getPredicates(arguments)); + return new SetCountFunction<>(getPredicates(arguments), add, NumberProviders.fromObject(value)); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetFoodFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetFoodFunction.java index 544a2a147..1c77bab4e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetFoodFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetFoodFunction.java @@ -19,7 +19,7 @@ public class SetFoodFunction extends AbstractConditionalFun private final NumberProvider count; private final boolean add; - public SetFoodFunction(NumberProvider count, boolean add, PlayerSelector selector, List> predicates) { + public SetFoodFunction(List> predicates, boolean add, PlayerSelector selector, NumberProvider count) { super(predicates); this.count = count; this.add = add; @@ -54,7 +54,7 @@ public class SetFoodFunction extends AbstractConditionalFun public Function create(Map arguments) { Object value = ResourceConfigUtils.requireNonNullOrThrow(arguments.get("food"), "warning.config.function.set_food.missing_food"); boolean add = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("add", false), "add"); - return new SetFoodFunction<>(NumberProviders.fromObject(value), add, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); + return new SetFoodFunction<>(getPredicates(arguments), add, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), NumberProviders.fromObject(value)); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetSaturationFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetSaturationFunction.java index 9c6d24e98..56fbef9d2 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetSaturationFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SetSaturationFunction.java @@ -19,7 +19,7 @@ public class SetSaturationFunction extends AbstractConditio private final NumberProvider count; private final boolean add; - public SetSaturationFunction(NumberProvider count, boolean add, PlayerSelector selector, List> predicates) { + public SetSaturationFunction(List> predicates, boolean add, PlayerSelector selector, NumberProvider count) { super(predicates); this.count = count; this.add = add; @@ -54,7 +54,7 @@ public class SetSaturationFunction extends AbstractConditio public Function create(Map arguments) { Object value = ResourceConfigUtils.requireNonNullOrThrow(arguments.get("saturation"), "warning.config.function.set_saturation.missing_saturation"); boolean add = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("add", false), "add"); - return new SetSaturationFunction<>(NumberProviders.fromObject(value), add, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), getPredicates(arguments)); + return new SetSaturationFunction<>(getPredicates(arguments), add, PlayerSelectors.fromObject(arguments.get("target"), conditionFactory()), NumberProviders.fromObject(value)); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SpawnFurnitureFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SpawnFurnitureFunction.java index e297cf2f8..e7e91d5e2 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SpawnFurnitureFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SpawnFurnitureFunction.java @@ -26,15 +26,7 @@ public class SpawnFurnitureFunction extends AbstractConditi private final boolean playSound; public SpawnFurnitureFunction( - Key furnitureId, - NumberProvider x, - NumberProvider y, - NumberProvider z, - NumberProvider pitch, - NumberProvider yaw, - String variant, - boolean playSound, - List> predicates + List> predicates, NumberProvider x, NumberProvider y, NumberProvider z, NumberProvider pitch, NumberProvider yaw, String variant, boolean playSound, Key furnitureId ) { super(predicates); this.furnitureId = furnitureId; @@ -86,7 +78,7 @@ public class SpawnFurnitureFunction extends AbstractConditi NumberProvider yaw = NumberProviders.fromObject(arguments.getOrDefault("yaw", "")); String variant = ResourceConfigUtils.getAsStringOrNull(ResourceConfigUtils.get(arguments, "variant", "anchor-type")); boolean playSound = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("play-sound", true), "play-sound"); - return new SpawnFurnitureFunction<>(furnitureId, x, y, z, pitch, yaw, variant, playSound, getPredicates(arguments)); + return new SpawnFurnitureFunction<>(getPredicates(arguments), x, y, z, pitch, yaw, variant, playSound, furnitureId); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SwingHandFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SwingHandFunction.java index 935fa210e..3f79089c6 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SwingHandFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/SwingHandFunction.java @@ -15,7 +15,7 @@ import java.util.Optional; public class SwingHandFunction extends AbstractConditionalFunction { private final Optional hand; - public SwingHandFunction(Optional hand, List> predicates) { + public SwingHandFunction(List> predicates, Optional hand) { super(predicates); this.hand = hand; } @@ -46,7 +46,7 @@ public class SwingHandFunction extends AbstractConditionalF @Override public Function create(Map arguments) { Optional optionalHand = Optional.ofNullable(arguments.get("hand")).map(it -> InteractionHand.valueOf(it.toString().toUpperCase(Locale.ENGLISH))); - return new SwingHandFunction<>(optionalHand, getPredicates(arguments)); + return new SwingHandFunction<>(getPredicates(arguments), optionalHand); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/TransformBlockFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/TransformBlockFunction.java index b27f438c4..2cd56d21e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/TransformBlockFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/TransformBlockFunction.java @@ -30,7 +30,7 @@ public class TransformBlockFunction extends AbstractConditi private final NumberProvider z; private final NumberProvider updateFlags; - public TransformBlockFunction(LazyReference lazyBlockState, CompoundTag properties, NumberProvider x, NumberProvider y, NumberProvider z, NumberProvider updateFlags, List> predicates) { + public TransformBlockFunction(List> predicates, CompoundTag properties, NumberProvider x, NumberProvider y, NumberProvider z, NumberProvider updateFlags, LazyReference lazyBlockState) { super(predicates); this.properties = properties; this.x = x; @@ -84,13 +84,8 @@ public class TransformBlockFunction extends AbstractConditi } } return new TransformBlockFunction<>( - LazyReference.lazyReference(() -> CraftEngine.instance().blockManager().createBlockState(block)), - properties, - NumberProviders.fromObject(arguments.getOrDefault("x", "")), - NumberProviders.fromObject(arguments.getOrDefault("y", "")), - NumberProviders.fromObject(arguments.getOrDefault("z", "")), - Optional.ofNullable(arguments.get("update-flags")).map(NumberProviders::fromObject).orElse(NumberProviders.direct(UpdateOption.UPDATE_ALL.flags())), - getPredicates(arguments)); + getPredicates(arguments), properties, NumberProviders.fromObject(arguments.getOrDefault("x", "")), NumberProviders.fromObject(arguments.getOrDefault("y", "")), NumberProviders.fromObject(arguments.getOrDefault("z", "")), Optional.ofNullable(arguments.get("update-flags")).map(NumberProviders::fromObject).orElse(NumberProviders.direct(UpdateOption.UPDATE_ALL.flags())), LazyReference.lazyReference(() -> CraftEngine.instance().blockManager().createBlockState(block)) + ); } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/UpdateBlockPropertyFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/UpdateBlockPropertyFunction.java index b59202282..dd079a78c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/UpdateBlockPropertyFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/UpdateBlockPropertyFunction.java @@ -26,7 +26,7 @@ public class UpdateBlockPropertyFunction extends AbstractCo private final NumberProvider z; private final NumberProvider updateFlags; - public UpdateBlockPropertyFunction(CompoundTag properties, NumberProvider x, NumberProvider y, NumberProvider z, NumberProvider updateFlags, List> predicates) { + public UpdateBlockPropertyFunction(List> predicates, NumberProvider x, NumberProvider y, NumberProvider z, NumberProvider updateFlags, CompoundTag properties) { super(predicates); this.properties = properties; this.x = x; @@ -67,12 +67,8 @@ public class UpdateBlockPropertyFunction extends AbstractCo for (Map.Entry entry : state.entrySet()) { properties.putString(entry.getKey(), String.valueOf(entry.getValue())); } - return new UpdateBlockPropertyFunction<>(properties, - NumberProviders.fromObject(arguments.getOrDefault("x", "")), - NumberProviders.fromObject(arguments.getOrDefault("y", "")), - NumberProviders.fromObject(arguments.getOrDefault("z", "")), - Optional.ofNullable(arguments.get("update-flags")).map(NumberProviders::fromObject).orElse(NumberProviders.direct(UpdateOption.UPDATE_ALL.flags())), - getPredicates(arguments)); + return new UpdateBlockPropertyFunction<>(getPredicates(arguments), NumberProviders.fromObject(arguments.getOrDefault("x", "")), NumberProviders.fromObject(arguments.getOrDefault("y", "")), NumberProviders.fromObject(arguments.getOrDefault("z", "")), Optional.ofNullable(arguments.get("update-flags")).map(NumberProviders::fromObject).orElse(NumberProviders.direct(UpdateOption.UPDATE_ALL.flags())), properties + ); } } } diff --git a/gradle.properties b/gradle.properties index 255046cbe..48efe6d60 100644 --- a/gradle.properties +++ b/gradle.properties @@ -59,9 +59,9 @@ concurrent_util_version=0.0.3 bucket4j_version=8.15.0 # Proxy settings -#systemProp.socks.proxyHost=127.0.0.1 -#systemProp.socks.proxyPort=7890 -#systemProp.http.proxyHost=127.0.0.1 -#systemProp.http.proxyPort=7890 -#systemProp.https.proxyHost=127.0.0.1 -#systemProp.https.proxyPort=7890 \ No newline at end of file +systemProp.socks.proxyHost=127.0.0.1 +systemProp.socks.proxyPort=7890 +systemProp.http.proxyHost=127.0.0.1 +systemProp.http.proxyPort=7890 +systemProp.https.proxyHost=127.0.0.1 +systemProp.https.proxyPort=7890 \ No newline at end of file