From 7e1218b68b2814d826882c64b3859bea71f9e319 Mon Sep 17 00:00:00 2001 From: starrysky <2152773194@qq.com> Date: Tue, 17 Feb 2026 15:42:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E6=9B=B4=E6=96=B0=EF=BC=8C=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E4=BA=86=E5=8A=A8=E4=BD=9C=E4=BC=A0=E5=8F=82=EF=BC=8C?= =?UTF-8?q?=E7=8E=B0=E5=9C=A8=E5=88=9B=E5=BB=BA=E4=B8=80=E4=B8=AA=E9=98=B5?= =?UTF-8?q?=E5=9E=8B=E8=B5=B7=E7=A0=8150=E8=A1=8Cjson=20TvT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO.md | 5 +- .../sunsetlab/actions/ActionLightning.java | 21 ---- .../top/sunsetlab/actions/ActionParam.java | 79 +++++++++++++ .../java/top/sunsetlab/actions/CastDelay.java | 7 +- .../top/sunsetlab/actions/CheckGlowDust.java | 9 +- .../top/sunsetlab/actions/IActionBase.java | 5 +- .../top/sunsetlab/actions/PlaceBlock.java | 53 +++++++++ .../java/top/sunsetlab/actions/PlaceFire.java | 36 ------ .../top/sunsetlab/actions/PlayAnvilSound.java | 22 ---- .../java/top/sunsetlab/actions/PlaySound.java | 43 ++++++++ .../top/sunsetlab/actions/SummonEntity.java | 51 +++++++++ .../top/sunsetlab/actions/Transformation.java | 35 ------ .../top/sunsetlab/event/EventListener.java | 15 ++- .../top/sunsetlab/utils/ActionManager.java | 5 +- .../java/top/sunsetlab/utils/JsonAction.java | 10 +- .../top/sunsetlab/utils/JsonStructure.java | 9 +- .../top/sunsetlab/utils/StructureAction.java | 8 ++ src/main/resources/actions.json | 7 +- src/main/resources/actions/lightning.json | 5 - src/main/resources/actions/placeblock.json | 5 + src/main/resources/actions/placefire.json | 5 - .../resources/actions/playanvilsound.json | 5 - src/main/resources/actions/playsound.json | 5 + src/main/resources/actions/summon.json | 5 + .../resources/actions/transformation.json | 5 - src/main/resources/structures/01.json | 29 ++++- .../resources/structures/transformation.json | 104 ++++++++++++++++-- 27 files changed, 414 insertions(+), 174 deletions(-) delete mode 100644 src/main/java/top/sunsetlab/actions/ActionLightning.java create mode 100644 src/main/java/top/sunsetlab/actions/ActionParam.java create mode 100644 src/main/java/top/sunsetlab/actions/PlaceBlock.java delete mode 100644 src/main/java/top/sunsetlab/actions/PlaceFire.java delete mode 100644 src/main/java/top/sunsetlab/actions/PlayAnvilSound.java create mode 100644 src/main/java/top/sunsetlab/actions/PlaySound.java create mode 100644 src/main/java/top/sunsetlab/actions/SummonEntity.java delete mode 100644 src/main/java/top/sunsetlab/actions/Transformation.java create mode 100644 src/main/java/top/sunsetlab/utils/StructureAction.java delete mode 100644 src/main/resources/actions/lightning.json create mode 100644 src/main/resources/actions/placeblock.json delete mode 100644 src/main/resources/actions/placefire.json delete mode 100644 src/main/resources/actions/playanvilsound.json create mode 100644 src/main/resources/actions/playsound.json create mode 100644 src/main/resources/actions/summon.json delete mode 100644 src/main/resources/actions/transformation.json diff --git a/TODO.md b/TODO.md index 15d369c..28f72bd 100644 --- a/TODO.md +++ b/TODO.md @@ -1,6 +1,7 @@ TODO List: - [x] 修复已知bug(noclear不生效,萤石不足的提示会出现两次) - [ ] 优化(匹配结构的方式) - - [ ] 为action的执行添加参数(ActionParam) + - [x] 为action的执行添加参数(ActionParam) - [ ] 增加更多好看的东西(好不好玩另说awa) - - [ ] 法术吟唱! \ No newline at end of file + - [ ] 法术吟唱! + - [ ] 尽可能不要动不动抛个错误出来 \ No newline at end of file diff --git a/src/main/java/top/sunsetlab/actions/ActionLightning.java b/src/main/java/top/sunsetlab/actions/ActionLightning.java deleted file mode 100644 index 37af0d0..0000000 --- a/src/main/java/top/sunsetlab/actions/ActionLightning.java +++ /dev/null @@ -1,21 +0,0 @@ -package top.sunsetlab.actions; - -import org.bukkit.Location; -import org.bukkit.entity.Player; - -/** - * 打雷动作 - */ -public class ActionLightning implements IActionBase{ - /** - * 调用动作 - * @param location 动作执行位置 - * @param caller 动作执行者 - * @return 是否成功 - */ - @Override - public boolean call(Location location, Player caller) { - location.getWorld().strikeLightning(location); - return true; - } -} diff --git a/src/main/java/top/sunsetlab/actions/ActionParam.java b/src/main/java/top/sunsetlab/actions/ActionParam.java new file mode 100644 index 0000000..c9d3425 --- /dev/null +++ b/src/main/java/top/sunsetlab/actions/ActionParam.java @@ -0,0 +1,79 @@ +package top.sunsetlab.actions; + +import top.sunsetlab.PluginMain; + +import java.util.ArrayList; +import java.util.HashMap; + +public class ActionParam { + private HashMap data; + + public ActionParam(HashMap data) { + this.data = data; + } + + public Object get(String key) { + if (!hasKey(key)) { + return null; + } + return data.get(key); + } + + public int getInt(String key) { + return getNumber(key).intValue(); + } + + public Number getNumber(String key) { + if (!(get(key) instanceof Number)) { + return -1; + } + return (Number) get(key); + } + + public String getString(String key) { + if (!(get(key) instanceof String)) { + return ""; + } + return (String) data.get(key); + } + + public boolean getBoolean(String key) { + if (!(get(key) instanceof Boolean)) { + return false; + } + return (boolean) data.get(key); + } + + public ArrayList getList(String key) { + if (!(get(key) instanceof ArrayList)) { + return new ArrayList<>(); + } + return (ArrayList) data.get(key); + } + + /** + * 获取一个整数列表 + * 类型安全 + * @param key 键 + * @return 列表 + */ + public ArrayList getIntList(String key) { + ArrayList list = getList(key); + ArrayList result = new ArrayList<>(); + // PluginMain.LOGGER.info("Parsing list " + list); + if (list.isEmpty()) { + return new ArrayList<>(); + } + for (Object o : list) { + if (!(o instanceof Number)) { + return new ArrayList<>(); + } + result.add(((Number) o).intValue()); + } + return result; + } + + public boolean hasKey(String key) { + return data.containsKey(key); + } +} diff --git a/src/main/java/top/sunsetlab/actions/CastDelay.java b/src/main/java/top/sunsetlab/actions/CastDelay.java index 74259d3..7a2a531 100644 --- a/src/main/java/top/sunsetlab/actions/CastDelay.java +++ b/src/main/java/top/sunsetlab/actions/CastDelay.java @@ -16,11 +16,12 @@ public class CastDelay implements IActionBase{ * @return 是否成功 */ @Override - public boolean call(Location location, Player caller) { + public boolean call(Location location, Player caller, ActionParam data) { + int ticks = data.hasKey("ticks") ? data.getInt("ticks") : 20; int count = 0; - while (count < 50) { + while (count < ticks) { try { - Thread.sleep(100); + Thread.sleep(50); }catch (InterruptedException ignored){} location.getWorld().spawnParticle( Particle.DUST, diff --git a/src/main/java/top/sunsetlab/actions/CheckGlowDust.java b/src/main/java/top/sunsetlab/actions/CheckGlowDust.java index 48f86f0..948ee26 100644 --- a/src/main/java/top/sunsetlab/actions/CheckGlowDust.java +++ b/src/main/java/top/sunsetlab/actions/CheckGlowDust.java @@ -1,7 +1,5 @@ package top.sunsetlab.actions; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.TextComponent; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -18,14 +16,15 @@ public class CheckGlowDust implements IActionBase { * @return 是否成功 */ @Override - public boolean call(Location location, Player caller) { + public boolean call(Location location, Player caller, ActionParam data) { if (PluginMain.DEBUG) { PluginMain.LOGGER.info("Checking amount of glow dust"); } + int req_amount = data.hasKey("amount") ? data.getInt("amount") : 20; if (caller.getInventory().getItemInMainHand().getType() == Material.GLOWSTONE_DUST - && caller.getInventory().getItemInMainHand().getAmount() >= 20) { + && caller.getInventory().getItemInMainHand().getAmount() >= req_amount) { int amount = caller.getInventory().getItemInMainHand().getAmount(); - caller.getInventory().getItemInMainHand().setAmount(amount - 20); + caller.getInventory().getItemInMainHand().setAmount(amount - req_amount); return true; } caller.sendMessage(PluginMain.langUtils.translateC("starlight.message.glowdust_lack")); diff --git a/src/main/java/top/sunsetlab/actions/IActionBase.java b/src/main/java/top/sunsetlab/actions/IActionBase.java index 8f26543..7872193 100644 --- a/src/main/java/top/sunsetlab/actions/IActionBase.java +++ b/src/main/java/top/sunsetlab/actions/IActionBase.java @@ -2,6 +2,9 @@ package top.sunsetlab.actions; import org.bukkit.Location; import org.bukkit.entity.Player; +import top.sunsetlab.PluginMain; + +import java.util.logging.Level; /** * 动作基类 @@ -13,5 +16,5 @@ public interface IActionBase { * @param caller 动作执行者 * @return 是否成功 */ - boolean call(Location location, Player caller); + boolean call(Location location, Player caller, ActionParam data); } diff --git a/src/main/java/top/sunsetlab/actions/PlaceBlock.java b/src/main/java/top/sunsetlab/actions/PlaceBlock.java new file mode 100644 index 0000000..266d353 --- /dev/null +++ b/src/main/java/top/sunsetlab/actions/PlaceBlock.java @@ -0,0 +1,53 @@ +package top.sunsetlab.actions; + +import org.bukkit.*; +import org.bukkit.block.BlockType; +import org.bukkit.entity.Player; +import top.sunsetlab.PluginMain; + +import java.util.ArrayList; + +/** + * 放置方块(sync执行) + */ +public class PlaceBlock implements IActionBase { + /** + * 调用动作 + * @param location 动作执行位置 + * @param caller 动作执行者 + * @return 是否成功 + */ + @Override + public boolean call(Location location, Player caller, ActionParam data) { + if (!(data.hasKey("pos") && data.hasKey("id"))) { + PluginMain.LOGGER.warning("Failed to place block: unprovided blockpos and blockid"); + return false; + } + + ArrayList pos = data.getIntList("pos"); + // PluginMain.LOGGER.info(String.format("Placing block at %s", pos)); + if (pos == null || pos.size() != 3) { + PluginMain.LOGGER.warning("Failed to place block: invalid blockpos"); + return false; + } + Location loc = location.clone().add( + pos.get(0), pos.get(1), pos.get(2) + ); + String id = data.getString("id"); + if (id.isEmpty()) { + PluginMain.LOGGER.warning("Failed to place block: invalid blockid"); + } + NamespacedKey key = NamespacedKey.fromString(id); + if (key == null) { + PluginMain.LOGGER.warning("Failed to place block: invalid blockid: " + id); + return false; + } + BlockType type = Registry.BLOCK.get(key); + if (type == null) { + PluginMain.LOGGER.warning("Failed to place block: unknown block: " + key); + return false; + } + location.getWorld().setBlockData(loc, type.createBlockData()); + return true; + } +} diff --git a/src/main/java/top/sunsetlab/actions/PlaceFire.java b/src/main/java/top/sunsetlab/actions/PlaceFire.java deleted file mode 100644 index c3101c8..0000000 --- a/src/main/java/top/sunsetlab/actions/PlaceFire.java +++ /dev/null @@ -1,36 +0,0 @@ -package top.sunsetlab.actions; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.entity.Player; - -/** - * 放置火焰 - */ -public class PlaceFire implements IActionBase { - /** - * 调用动作 - * @param location 动作执行位置 - * @param caller 动作执行者 - * @return 是否成功 - */ - @Override - public boolean call(Location location, Player caller) { - placeFire(location.clone().add(1,0,0)); - placeFire(location.clone().add(-1,0,0)); - placeFire(location.clone().add(0,0,1)); - placeFire(location.clone().add(0,0,-1)); - placeFire(location.clone().add(0,0,0)); - return true; - } - - /** - * 在指定位置放置火焰 - * @param location 位置 - */ - private void placeFire(Location location) { - World world = location.getWorld(); - world.setBlockData(location, Material.FIRE.createBlockData()); - } -} diff --git a/src/main/java/top/sunsetlab/actions/PlayAnvilSound.java b/src/main/java/top/sunsetlab/actions/PlayAnvilSound.java deleted file mode 100644 index a1abc84..0000000 --- a/src/main/java/top/sunsetlab/actions/PlayAnvilSound.java +++ /dev/null @@ -1,22 +0,0 @@ -package top.sunsetlab.actions; - -import org.bukkit.Location; -import org.bukkit.Sound; -import org.bukkit.entity.Player; - -/** - * 向调用者播放铁砧的声音 - */ -public class PlayAnvilSound implements IActionBase { - /** - * 调用动作 - * @param location 动作执行位置 - * @param caller 动作执行者 - * @return 是否成功 - */ - @Override - public boolean call(Location location, Player caller) { - caller.playSound(location, Sound.BLOCK_ANVIL_LAND, 1, 1); - return true; - } -} diff --git a/src/main/java/top/sunsetlab/actions/PlaySound.java b/src/main/java/top/sunsetlab/actions/PlaySound.java new file mode 100644 index 0000000..92aa6c8 --- /dev/null +++ b/src/main/java/top/sunsetlab/actions/PlaySound.java @@ -0,0 +1,43 @@ +package top.sunsetlab.actions; + +import org.bukkit.Location; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import top.sunsetlab.PluginMain; + +/** + * 向调用者播放声音 + */ +public class PlaySound implements IActionBase { + /** + * 调用动作 + * @param location 动作执行位置 + * @param caller 动作执行者 + * @return 是否成功 + */ + @Override + public boolean call(Location location, Player caller, ActionParam data) { + // caller.playSound(location, Sound.BLOCK_ANVIL_LAND, 1, 1); + if (!data.hasKey("id")) { + PluginMain.LOGGER.warning("Failed to play sound: unprovided id"); + return false; + } + String id = data.getString("id"); + float volume = data.hasKey("volume")?data.getNumber("volume").floatValue():1; + float pitch = data.hasKey("pitch")?data.getNumber("pitch").floatValue():1; + NamespacedKey key = NamespacedKey.fromString(id); + if (key == null) { + PluginMain.LOGGER.warning("Failed to play sound: invalid id"); + return false; + } + Sound sound = Registry.SOUNDS.get(key); + if (sound == null) { + PluginMain.LOGGER.warning("Failed to play sound: unknown sound:" + id); + return false; + } + caller.playSound(location, sound, volume, pitch); + return true; + } +} diff --git a/src/main/java/top/sunsetlab/actions/SummonEntity.java b/src/main/java/top/sunsetlab/actions/SummonEntity.java new file mode 100644 index 0000000..22eca4c --- /dev/null +++ b/src/main/java/top/sunsetlab/actions/SummonEntity.java @@ -0,0 +1,51 @@ +package top.sunsetlab.actions; + +import org.bukkit.Location; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import top.sunsetlab.PluginMain; + +import java.util.ArrayList; + +/** + * 生成生物 + * sync动作 + */ +public class SummonEntity implements IActionBase{ + /** + * 调用动作 + * @param location 动作执行位置 + * @param caller 动作执行者 + * @return 是否成功 + */ + @Override + public boolean call(Location location, Player caller, ActionParam data) { + if (!(data.hasKey("pos") && data.hasKey("id"))) { + PluginMain.LOGGER.warning("Failed to spawn entity: pos or id undefined"); + return false; + } + ArrayList pos = data.getIntList("pos"); + if (!(pos.size() ==3)) { + PluginMain.LOGGER.warning("Failed to spawn entity: invalid pos"); + return false; + } + Location loc = location.clone().add( + pos.get(0),pos.get(1),pos.get(2) + ); + String id = data.getString("id"); + NamespacedKey key = NamespacedKey.fromString(id); + if (key == null) { + PluginMain.LOGGER.warning("Failed to spawn entity: invalid id"); + return false; + } + EntityType type = Registry.ENTITY_TYPE.get(key); + if (type == null) { + PluginMain.LOGGER.warning("Failed to spawn entity: invalid entity type"); + return false; + } + location.getWorld().spawnEntity(loc, type); + return true; + } +} diff --git a/src/main/java/top/sunsetlab/actions/Transformation.java b/src/main/java/top/sunsetlab/actions/Transformation.java deleted file mode 100644 index 0e9aefc..0000000 --- a/src/main/java/top/sunsetlab/actions/Transformation.java +++ /dev/null @@ -1,35 +0,0 @@ -package top.sunsetlab.actions; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Player; - -/** - * 嬗变!(神奇炼金术) - */ -public class Transformation implements IActionBase { - /** - * 调用动作 - * @param location 动作执行位置 - * @param caller 动作执行者 - * @return 是否成功 - */ - @Override - public boolean call(Location location, Player caller) { - location.getWorld().setBlockData( - location.getBlockX(), - location.getBlockY(), - location.getBlockZ(), - Material.NETHERITE_BLOCK.createBlockData() - ); - location.getWorld().setBlockData( - location.clone().subtract(1,0,0), - Material.AIR.createBlockData() - ); - location.getWorld().setBlockData( - location.clone().add(1,0,0), - Material.AIR.createBlockData() - ); - return true; - } -} diff --git a/src/main/java/top/sunsetlab/event/EventListener.java b/src/main/java/top/sunsetlab/event/EventListener.java index 0302405..9a1ec7a 100644 --- a/src/main/java/top/sunsetlab/event/EventListener.java +++ b/src/main/java/top/sunsetlab/event/EventListener.java @@ -10,6 +10,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import top.sunsetlab.PluginMain; import top.sunsetlab.utils.JsonStructure; +import top.sunsetlab.utils.StructureAction; import java.util.ArrayList; @@ -53,18 +54,20 @@ public class EventListener implements Listener { return; } - if (structure.getPreConditionTask() != null - && !PluginMain.actionManager.call(structure.getPreConditionTask(), location, player)) { - return; + if (structure.getPreConditionTask() != null) { + StructureAction structureAction = structure.getPreConditionTask(); + if (!PluginMain.actionManager.call(structureAction.id, location, player, structureAction.param)) { + return; + } } structure.breakStructure(location); // 异步执行动作 Bukkit.getScheduler().runTaskAsynchronously(PluginMain.plugin, () -> { - ArrayList actions = structure.getActions(); - for (String action : actions) { - PluginMain.actionManager.call(action, location, player); + ArrayList actions = structure.getActions(); + for (StructureAction action : actions) { + PluginMain.actionManager.call(action.id, location, player, action.param); } }); event.setCancelled(true); diff --git a/src/main/java/top/sunsetlab/utils/ActionManager.java b/src/main/java/top/sunsetlab/utils/ActionManager.java index b871d2b..3152e4f 100644 --- a/src/main/java/top/sunsetlab/utils/ActionManager.java +++ b/src/main/java/top/sunsetlab/utils/ActionManager.java @@ -4,6 +4,7 @@ import com.google.gson.Gson; import org.bukkit.Location; import org.bukkit.entity.Player; import top.sunsetlab.PluginMain; +import top.sunsetlab.actions.ActionParam; import top.sunsetlab.actions.IActionBase; import java.io.BufferedReader; @@ -57,12 +58,12 @@ public class ActionManager { * @param caller 执行者 * @return 动作是否执行成功,sync动作始终返回true */ - public boolean call(String actionId, Location location, Player caller) { + public boolean call(String actionId, Location location, Player caller, ActionParam data) { // 获取动作 JsonAction action = actions.get(actionId); if (action == null) { throw new RuntimeException("Invalid action id " + actionId); } - return action.run(location, caller); + return action.run(location, caller, data); } } diff --git a/src/main/java/top/sunsetlab/utils/JsonAction.java b/src/main/java/top/sunsetlab/utils/JsonAction.java index 4201454..6ec5b55 100644 --- a/src/main/java/top/sunsetlab/utils/JsonAction.java +++ b/src/main/java/top/sunsetlab/utils/JsonAction.java @@ -5,6 +5,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import top.sunsetlab.PluginMain; +import top.sunsetlab.actions.ActionParam; import top.sunsetlab.actions.IActionBase; import java.io.BufferedReader; @@ -12,6 +13,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; class ActionData { String id; @@ -45,7 +47,7 @@ public class JsonAction { * @param caller 执行者 * @return 动作是否成功运行,sync动作始终为true */ - public boolean run(Location location, Player caller) { + public boolean run(Location location, Player caller, ActionParam param) { try { // 通过反射加载动作类 Class clazz = Class.forName(data.classname); @@ -55,15 +57,17 @@ public class JsonAction { // 获取构造器 Constructor constructor = clazz.getConstructor(); IActionBase action = (IActionBase) constructor.newInstance(); + + ActionParam p = param == null ? new ActionParam(new HashMap<>()): param; if (data.sync) { // 在Minecraft线程内执行,一般用于世界交互 Bukkit.getScheduler().runTask(PluginMain.plugin, () -> { - action.call(location, caller); + action.call(location, caller, p); }); return true; }else { // 异步执行 - return action.call(location, caller); + return action.call(location, caller, p); } }catch (ClassNotFoundException | NoSuchMethodException diff --git a/src/main/java/top/sunsetlab/utils/JsonStructure.java b/src/main/java/top/sunsetlab/utils/JsonStructure.java index 02c2528..e16cb95 100644 --- a/src/main/java/top/sunsetlab/utils/JsonStructure.java +++ b/src/main/java/top/sunsetlab/utils/JsonStructure.java @@ -5,6 +5,7 @@ import org.bukkit.*; import org.bukkit.block.BlockType; import org.jspecify.annotations.NonNull; import top.sunsetlab.PluginMain; +import top.sunsetlab.actions.ActionParam; import java.io.BufferedReader; import java.io.InputStream; @@ -19,8 +20,8 @@ class JsonStructureData { HashMap marks; int[] center; String id; - ArrayList actions; - String precondition_task; + ArrayList actions; + StructureAction precondition_task; ArrayList noclear; } @@ -175,7 +176,7 @@ public class JsonStructure { * 获取要执行的动作列表 * @return 动作列表 */ - public ArrayList getActions() { + public ArrayList getActions() { return data.actions; } @@ -235,7 +236,7 @@ public class JsonStructure { * 获取门控任务(仅当该任务成功时执行任务列表) * @return 门控任务id */ - public String getPreConditionTask() { + public StructureAction getPreConditionTask() { return data.precondition_task; } } diff --git a/src/main/java/top/sunsetlab/utils/StructureAction.java b/src/main/java/top/sunsetlab/utils/StructureAction.java new file mode 100644 index 0000000..1127a5f --- /dev/null +++ b/src/main/java/top/sunsetlab/utils/StructureAction.java @@ -0,0 +1,8 @@ +package top.sunsetlab.utils; + +import top.sunsetlab.actions.ActionParam; + +public class StructureAction { + public String id; + public ActionParam param; +} diff --git a/src/main/resources/actions.json b/src/main/resources/actions.json index 4997f52..c911994 100644 --- a/src/main/resources/actions.json +++ b/src/main/resources/actions.json @@ -1,10 +1,9 @@ { "locations": [ - "actions/lightning.json", + "actions/summon.json", "actions/castdelay.json", "actions/checkglowdust.json", - "actions/transformation.json", - "actions/placefire.json", - "actions/playanvilsound.json" + "actions/placeblock.json", + "actions/playsound.json" ] } \ No newline at end of file diff --git a/src/main/resources/actions/lightning.json b/src/main/resources/actions/lightning.json deleted file mode 100644 index c0acb90..0000000 --- a/src/main/resources/actions/lightning.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "id": "lightning", - "classname": "top.sunsetlab.actions.ActionLightning", - "sync": true -} \ No newline at end of file diff --git a/src/main/resources/actions/placeblock.json b/src/main/resources/actions/placeblock.json new file mode 100644 index 0000000..7b3c50b --- /dev/null +++ b/src/main/resources/actions/placeblock.json @@ -0,0 +1,5 @@ +{ + "id": "placeblock", + "classname": "top.sunsetlab.actions.PlaceBlock", + "sync": true +} \ No newline at end of file diff --git a/src/main/resources/actions/placefire.json b/src/main/resources/actions/placefire.json deleted file mode 100644 index 3b2845d..0000000 --- a/src/main/resources/actions/placefire.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "id": "placefire", - "classname": "top.sunsetlab.actions.PlaceFire", - "sync": true -} \ No newline at end of file diff --git a/src/main/resources/actions/playanvilsound.json b/src/main/resources/actions/playanvilsound.json deleted file mode 100644 index 8de09ad..0000000 --- a/src/main/resources/actions/playanvilsound.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "id": "playanvilsound", - "classname": "top.sunsetlab.actions.PlayAnvilSound", - "sync": false -} \ No newline at end of file diff --git a/src/main/resources/actions/playsound.json b/src/main/resources/actions/playsound.json new file mode 100644 index 0000000..f4728f7 --- /dev/null +++ b/src/main/resources/actions/playsound.json @@ -0,0 +1,5 @@ +{ + "id": "playsound", + "classname": "top.sunsetlab.actions.PlaySound", + "sync": false +} \ No newline at end of file diff --git a/src/main/resources/actions/summon.json b/src/main/resources/actions/summon.json new file mode 100644 index 0000000..582605b --- /dev/null +++ b/src/main/resources/actions/summon.json @@ -0,0 +1,5 @@ +{ + "id": "summon", + "classname": "top.sunsetlab.actions.SummonEntity", + "sync": true +} \ No newline at end of file diff --git a/src/main/resources/actions/transformation.json b/src/main/resources/actions/transformation.json deleted file mode 100644 index b0f6be8..0000000 --- a/src/main/resources/actions/transformation.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "id": "transformation", - "classname": "top.sunsetlab.actions.Transformation", - "sync": true -} \ No newline at end of file diff --git a/src/main/resources/structures/01.json b/src/main/resources/structures/01.json index 0e16828..b8fbfb3 100644 --- a/src/main/resources/structures/01.json +++ b/src/main/resources/structures/01.json @@ -21,7 +21,30 @@ }, "center": [6,6], "actions": [ - "castdelay", - "lightning" - ] + { + "id": "castdelay", + "param": { + "data": { + "ticks": 60 + } + } + }, + { + "id": "summon", + "param": { + "data": { + "pos": [0,0,0], + "id": "minecraft:lightning_bolt" + } + } + } + ], + "precondition_task": { + "id": "checkglowdust", + "param": { + "data": { + "amount": 3 + } + } + } } \ No newline at end of file diff --git a/src/main/resources/structures/transformation.json b/src/main/resources/structures/transformation.json index 48dbd3e..1bfb310 100644 --- a/src/main/resources/structures/transformation.json +++ b/src/main/resources/structures/transformation.json @@ -17,14 +17,104 @@ }, "center": [3,3], "actions": [ - "placefire", - "playanvilsound", - "castdelay", - "playanvilsound", - "transformation", - "lightning" + { + "id": "placeblock", + "param": { + "data": { + "id": "minecraft:fire", + "pos": [0,0,0] + } + } + }, + { + "id": "placeblock", + "param": { + "data": { + "id": "minecraft:fire", + "pos": [1,0,0] + } + } + }, + { + "id": "placeblock", + "param": { + "data": { + "id": "minecraft:fire", + "pos": [-1,0,0] + } + } + }, + { + "id": "placeblock", + "param": { + "data": { + "id": "minecraft:fire", + "pos": [0,0,1] + } + } + }, + { + "id": "placeblock", + "param": { + "data": { + "id": "minecraft:fire", + "pos": [0,0,-1] + } + } + }, + { + "id": "playsound", + "param": { + "data": { + "id": "minecraft:block.anvil.land" + } + } + }, + { + "id": "castdelay", + "param": { + "data": { + "ticks": 250 + } + } + }, + { + "id": "playsound", + "param": { + "data": { + "id": "minecraft:block.anvil.land", + "volume": 1.0, + "pitch": 1.0 + } + } + }, + { + "id": "placeblock", + "param": { + "data": { + "pos": [0,0,0], + "id": "minecraft:netherite_block" + } + } + }, + { + "id": "summon", + "param": { + "data": { + "pos": [0,0,0], + "id": "minecraft:lightning_bolt" + } + } + } ], - "precondition_task": "checkglowdust", + "precondition_task": { + "id": "checkglowdust", + "param": { + "data": { + "amount": 20 + } + } + }, "noclear": [ "minecraft:diamond_block" ]