From f56c9457bc1401872cb4a5d94dc3e9a589319296 Mon Sep 17 00:00:00 2001 From: TylerS1066 Date: Sun, 15 Sep 2024 18:31:27 -0500 Subject: [PATCH] First attempt at lectern repair --- .../movecraft/repair/tasks/LecternRepair.java | 31 +++++++++++++++++++ .../movecraft/repair/types/RepairState.java | 12 +++++++ 2 files changed, 43 insertions(+) create mode 100644 src/main/java/net/countercraft/movecraft/repair/tasks/LecternRepair.java diff --git a/src/main/java/net/countercraft/movecraft/repair/tasks/LecternRepair.java b/src/main/java/net/countercraft/movecraft/repair/tasks/LecternRepair.java new file mode 100644 index 0000000..f0d03eb --- /dev/null +++ b/src/main/java/net/countercraft/movecraft/repair/tasks/LecternRepair.java @@ -0,0 +1,31 @@ +package net.countercraft.movecraft.repair.tasks; + +import com.sk89q.worldedit.WorldEditException; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.util.SideEffectSet; +import com.sk89q.worldedit.world.block.BaseBlock; +import org.bukkit.Location; + +public class LecternRepair extends RepairTask { + private final BaseBlock block; + + public LecternRepair(Location location, BaseBlock block) { + super(location); + this.block = block; + } + + @Override + public void execute() { + try { + BukkitAdapter.adapt(location.getWorld()).setBlock(BukkitAdapter.asBlockVector(location), block, SideEffectSet.none()); + } catch (WorldEditException e) { + throw new RuntimeException("Unable to set block", e); + } + done = true; + } + + @Override + public int getPriority() { + return -10000; + } +} diff --git a/src/main/java/net/countercraft/movecraft/repair/types/RepairState.java b/src/main/java/net/countercraft/movecraft/repair/types/RepairState.java index 42fd17e..5da24bc 100644 --- a/src/main/java/net/countercraft/movecraft/repair/types/RepairState.java +++ b/src/main/java/net/countercraft/movecraft/repair/types/RepairState.java @@ -8,6 +8,7 @@ import java.util.UUID; import net.countercraft.movecraft.repair.config.Config; +import net.countercraft.movecraft.repair.tasks.LecternRepair; import net.countercraft.movecraft.util.hitboxes.BitmapHitBox; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -152,6 +153,17 @@ public ProtoRepair execute(@NotNull Sign sign) throws WorldEditException, ProtoR queue.add(signRepair); } + // Handle lectern repair + if (schematicMaterial == Material.LECTERN && blockRepair != null) { + LecternRepair lecternRepair = new LecternRepair( + worldPosition, + schematicBlock + ); + lecternRepair.setDependency(blockRepair); + queue.add(lecternRepair); + continue; + } + // Handle inventory repair Counter schematicContents = WEUtils.getBlockContents(schematicBlock); Pair> inventoryRepair = RepairUtils.checkInventoryRepair(worldMaterial, worldState, schematicContents);