From 400ef77a948cc9755c59f1c70edee87cfce77c4c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 23:11:56 +0000 Subject: [PATCH 1/2] Initial plan From ec58c0827808d1235bb1a04904847cb04478298c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 23:33:22 +0000 Subject: [PATCH 2/2] Add trial chambers support: fix trial spawner copying and advancement tracking Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com> --- .../chunks/BoxedBlockPopulator.java | 19 +++++++++++++++++++ .../chunks/BoxedChunkGenerator.java | 8 ++++++++ .../boxed/listeners/NewAreaListener.java | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/world/bentobox/boxed/generators/chunks/BoxedBlockPopulator.java b/src/main/java/world/bentobox/boxed/generators/chunks/BoxedBlockPopulator.java index df27d4c..2795869 100644 --- a/src/main/java/world/bentobox/boxed/generators/chunks/BoxedBlockPopulator.java +++ b/src/main/java/world/bentobox/boxed/generators/chunks/BoxedBlockPopulator.java @@ -10,6 +10,8 @@ import org.bukkit.block.Banner; import org.bukkit.block.BlockState; import org.bukkit.block.CreatureSpawner; +import org.bukkit.block.TrialSpawner; +import org.bukkit.spawner.TrialSpawnerConfiguration; import org.bukkit.entity.Entity; import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.LimitedRegion; @@ -20,6 +22,7 @@ import world.bentobox.bentobox.blueprints.dataobjects.BlueprintBlock; import world.bentobox.bentobox.blueprints.dataobjects.BlueprintCreatureSpawner; +import world.bentobox.bentobox.blueprints.dataobjects.BlueprintTrialSpawner; import world.bentobox.bentobox.util.Pair; import world.bentobox.boxed.Boxed; import world.bentobox.boxed.generators.chunks.AbstractBoxedChunkGenerator.ChestData; @@ -98,6 +101,10 @@ public void setBlockState(BlockState bs, BlueprintBlock bpBlock) { else if (bs instanceof CreatureSpawner spawner) { setSpawner(spawner, bpBlock.getCreatureSpawner()); } + // Trial spawners + else if (bs instanceof TrialSpawner trialSpawner && bpBlock.getTrialSpawner() != null) { + setTrialSpawner(trialSpawner, bpBlock.getTrialSpawner()); + } // Banners else if (bs instanceof Banner banner && bpBlock.getBannerPatterns() != null) { bpBlock.getBannerPatterns().removeIf(Objects::isNull); @@ -129,4 +136,16 @@ public void setSpawner(CreatureSpawner spawner, BlueprintCreatureSpawner s) { spawner.update(true, false); } + /** + * Set the trial spawner configuration from the blueprint + * + * @param trialSpawner - trial spawner + * @param bts - blueprint trial spawner + */ + public void setTrialSpawner(TrialSpawner trialSpawner, BlueprintTrialSpawner bts) { + TrialSpawnerConfiguration config = trialSpawner.getNormalConfiguration(); + trialSpawner.setOminous(bts.configTrialSpawner(config)); + trialSpawner.update(true, false); + } + } diff --git a/src/main/java/world/bentobox/boxed/generators/chunks/BoxedChunkGenerator.java b/src/main/java/world/bentobox/boxed/generators/chunks/BoxedChunkGenerator.java index e47099b..fd6dd38 100644 --- a/src/main/java/world/bentobox/boxed/generators/chunks/BoxedChunkGenerator.java +++ b/src/main/java/world/bentobox/boxed/generators/chunks/BoxedChunkGenerator.java @@ -17,6 +17,7 @@ import org.bukkit.block.BlockState; import org.bukkit.block.CreatureSpawner; import org.bukkit.block.Sign; +import org.bukkit.block.TrialSpawner; import org.bukkit.entity.AbstractHorse; import org.bukkit.entity.Ageable; import org.bukkit.entity.ChestedHorse; @@ -36,6 +37,7 @@ import world.bentobox.bentobox.blueprints.dataobjects.BlueprintBlock; import world.bentobox.bentobox.blueprints.dataobjects.BlueprintCreatureSpawner; import world.bentobox.bentobox.blueprints.dataobjects.BlueprintEntity; +import world.bentobox.bentobox.blueprints.dataobjects.BlueprintTrialSpawner; import world.bentobox.boxed.Boxed; /** @@ -175,6 +177,12 @@ private BlueprintBlock getBluePrintBlock(Block block) { b.setCreatureSpawner(getSpawner(spawner)); } + // Trial spawner + if (blockState instanceof TrialSpawner trialSpawner) { + b.setTrialSpawner(new BlueprintTrialSpawner(trialSpawner.isOminous(), + trialSpawner.isOminous() ? trialSpawner.getOminousConfiguration() : trialSpawner.getNormalConfiguration())); + } + // Banners if (blockState instanceof Banner banner) { b.setBannerPatterns(banner.getPatterns()); diff --git a/src/main/java/world/bentobox/boxed/listeners/NewAreaListener.java b/src/main/java/world/bentobox/boxed/listeners/NewAreaListener.java index 0dd552c..57cfee5 100644 --- a/src/main/java/world/bentobox/boxed/listeners/NewAreaListener.java +++ b/src/main/java/world/bentobox/boxed/listeners/NewAreaListener.java @@ -79,7 +79,7 @@ public class NewAreaListener implements Listener { "mineshaft", "mineshaft_mesa", "monument", "nether_fossil", "ocean_ruin_cold", "ocean_ruin_warm", "pillager_outpost", "ruined_portal_desert", "ruined_portal_jungle", "ruined_portal_mountain", "ruined_portal_nether", "ruined_portal_ocean", "ruined_portal_swamp", "ruined_portal", "shipwreck_beached", - "shipwreck", "stronghold", "swamp_hut", "village_desert", "village_plains", "village_savanna", + "shipwreck", "stronghold", "swamp_hut", "trial_chambers", "village_desert", "village_plains", "village_savanna", "village_snowy", "village_taiga"); private final Boxed addon; private final File structureFile;