From 8c8c70d749fd1f07bbb75c23fcb18ed21912b11c Mon Sep 17 00:00:00 2001 From: tastybento Date: Sun, 20 Mar 2022 19:43:12 +0000 Subject: [PATCH] Added ability to set the default water block Can be set to anything, but LAVA is the most likely for the nether Also reworked the nether and end islands to not assume water. https://github.com/BentoBoxWorld/AcidIsland/issues/63 --- .../world/bentobox/acidisland/AISettings.java | 33 +++++- .../acidisland/world/ChunkGeneratorWorld.java | 15 +-- src/main/resources/blueprints/end-island.blu | Bin 6119 -> 1401 bytes .../resources/blueprints/nether-island.blu | Bin 8347 -> 2789 bytes src/main/resources/config.yml | 12 +++ .../world/ChunkGeneratorWorldTest.java | 96 +++++++++++------- 6 files changed, 114 insertions(+), 42 deletions(-) diff --git a/src/main/java/world/bentobox/acidisland/AISettings.java b/src/main/java/world/bentobox/acidisland/AISettings.java index 2ec0599..872a099 100644 --- a/src/main/java/world/bentobox/acidisland/AISettings.java +++ b/src/main/java/world/bentobox/acidisland/AISettings.java @@ -9,6 +9,7 @@ import java.util.Set; import org.bukkit.Difficulty; import org.bukkit.GameMode; +import org.bukkit.Material; import org.bukkit.block.Biome; import org.bukkit.entity.EntityType; import org.bukkit.potion.PotionEffectType; @@ -206,7 +207,7 @@ public class AISettings implements WorldSettings { @ConfigComment("It is the y coordinate of the bedrock block in the schem.") @ConfigEntry(path = "world.island-height") private int islandHeight = 50; - + @ConfigComment("Use your own world generator for this world.") @ConfigComment("In this case, the plugin will not generate anything.") @ConfigEntry(path = "world.use-own-generator", experimental = true) @@ -216,6 +217,10 @@ public class AISettings implements WorldSettings { @ConfigComment("Minimum is 0, which means you are playing Skyblock!") @ConfigEntry(path = "world.sea-height") private int seaHeight = 54; + + @ConfigComment("Water block. This should usually stay as WATER, but may be LAVA for fun") + @ConfigEntry(path = "world.water-block", needsReset = true) + private Material waterBlock = Material.WATER; @ConfigComment("Maximum number of islands in the world. Set to -1 or 0 for unlimited. ") @ConfigComment("If the number of islands is greater than this number, no new island will be created.") @@ -260,6 +265,10 @@ public class AISettings implements WorldSettings { @ConfigComment("Changing mid-game will cause problems!") @ConfigEntry(path = "world.nether.sea-height", needsReset = true) private int netherSeaHeight = 54; + + @ConfigComment("Water block. This should usually stay as WATER, but may be LAVA for fun") + @ConfigEntry(path = "world.nether.water-block", needsReset = true) + private Material netherWaterBlock = Material.WATER; @ConfigComment("Make the nether roof, if false, there is nothing up there") @ConfigComment("Change to false if lag is a problem from the generation") @@ -294,6 +303,10 @@ public class AISettings implements WorldSettings { @ConfigComment("Changing mid-game will cause problems!") @ConfigEntry(path = "world.end.sea-height", needsReset = true) private int endSeaHeight = 54; + + @ConfigComment("Water block. This should usually stay as WATER, but may be LAVA for fun") + @ConfigEntry(path = "world.end.water-block", needsReset = true) + private Material endWaterBlock = Material.WATER; @ConfigComment("This option indicates if obsidian platform in the end should be generated") @ConfigComment("when player enters the end world.") @@ -1960,4 +1973,22 @@ public class AISettings implements WorldSettings { public void setMakeEndPortals(boolean makeEndPortals) { this.makeEndPortals = makeEndPortals; } + public Material getWaterBlock() { + return waterBlock; + } + public void setWaterBlock(Material waterBlock) { + this.waterBlock = waterBlock; + } + public Material getNetherWaterBlock() { + return netherWaterBlock; + } + public void setNetherWaterBlock(Material netherWaterBlock) { + this.netherWaterBlock = netherWaterBlock; + } + public Material getEndWaterBlock() { + return endWaterBlock; + } + public void setEndWaterBlock(Material endWaterBlock) { + this.endWaterBlock = endWaterBlock; + } } diff --git a/src/main/java/world/bentobox/acidisland/world/ChunkGeneratorWorld.java b/src/main/java/world/bentobox/acidisland/world/ChunkGeneratorWorld.java index 9230bc1..620b991 100644 --- a/src/main/java/world/bentobox/acidisland/world/ChunkGeneratorWorld.java +++ b/src/main/java/world/bentobox/acidisland/world/ChunkGeneratorWorld.java @@ -27,8 +27,10 @@ public class ChunkGeneratorWorld extends ChunkGenerator { private final AcidIsland addon; private final Random rand = new Random(); - private final Map seaHeight = new EnumMap<>(Environment.class); + private final Map seaHeight = new EnumMap<>(Environment.class); private final Map roofChunk = new HashMap<>(); + + private record WorldConfig(int seaHeight, Material waterBlock) {} /** * @param addon - addon @@ -36,17 +38,18 @@ public class ChunkGeneratorWorld extends ChunkGenerator { public ChunkGeneratorWorld(AcidIsland addon) { super(); this.addon = addon; - seaHeight.put(Environment.NORMAL, addon.getSettings().getSeaHeight()); - seaHeight.put(Environment.NETHER, addon.getSettings().getNetherSeaHeight()); - seaHeight.put(Environment.THE_END, addon.getSettings().getEndSeaHeight()); + seaHeight.put(Environment.NORMAL, new WorldConfig(addon.getSettings().getSeaHeight(), addon.getSettings().getWaterBlock())); + seaHeight.put(Environment.NETHER, new WorldConfig(addon.getSettings().getNetherSeaHeight(), addon.getSettings().getNetherWaterBlock())); + seaHeight.put(Environment.THE_END, new WorldConfig(addon.getSettings().getEndSeaHeight(), addon.getSettings().getEndWaterBlock())); makeNetherRoof(); } public ChunkData generateChunks(World world) { ChunkData result = createChunkData(world); - int sh = seaHeight.getOrDefault(world.getEnvironment(), world.getMinHeight()); + WorldConfig wc = seaHeight.get(world.getEnvironment()); + int sh = wc.seaHeight(); if (sh > world.getMinHeight()) { - result.setRegion(0, world.getMinHeight(), 0, 16, sh + 1, 16, Material.WATER); + result.setRegion(0, world.getMinHeight(), 0, 16, sh + 1, 16, wc.waterBlock()); } if (world.getEnvironment().equals(Environment.NETHER) && addon.getSettings().isNetherRoof()) { roofChunk.forEach((k,v) -> result.setBlock(k.getBlockX(), world.getMaxHeight() + k.getBlockY(), k.getBlockZ(), v)); diff --git a/src/main/resources/blueprints/end-island.blu b/src/main/resources/blueprints/end-island.blu index 454b5c44365bc13d060c5915d13551b165976226..33fda34354e168e1762a5f95a15d99ed1742178c 100644 GIT binary patch delta 1354 zcmV-Q1-1I;FZl`%P)h>@6aWYa2mp(lbX1WJ8h_1PVQ->J6#XlP&(zFdt=5DOzSMM^ z?AoR_d3j+C8Fkc&6by{D-KPKj4WPJb8yIG|NYXY`@yzv}bMHNa#CO9d&(s(g)L&e% z$Rqy3Fby^jeDT=B@L}{Q{w17~`I;__f#WzARvVdE{9atP(bRl5W?nGg+z?L0E1sE8 z=YJtt@8y0DkTi|ACK$7lT%uZsk{;Y3@q_uVxO zljjaUQ`4BSAc^zo$H*OxZ^WZ3FW57G^+aE}F-Xuprs72EbH-VW_Wog}!9{7{NzmQ+ zPbV+(8C`_paYJ@Z^N^D`9|h1N$!^30pMRDD#~FBT#&yASBTtxfJo-XC8%-5guqqE9 zLFT=4zy$%fGH?J=t$HG_p3hV)okO9*fkPD%RL*fdIma*s3Y2mLm~jM{@Uk*=XCaG+ zn9>qZebJJyQHA*bS_7a|PvCOd(R%}O0@7Qf`ohg(hh*83V|l(N%y-Bui|n`WJ%6Oi zlDXV(cj4BfZnWNc8ydQ^;MG}@xd60x+jv3dzX+olgm1!T8c4j9MT6gdt7Y4RRuHb* zv)yLHcso0-eaGqZMA+y}eAdgLWnK5W@gaZP(n0I~pUK_L-EjQd7udM3jW>C?AK#7= zG|SRP6B%_M?{5;gN@K&gir7Yvzkh~fck(d&ckGUCZ&T#1KJw51o*st+?L$ppaCL7% z);-R^uX6WyvxqGi@fES*dJ2~8DddH^goTROxy?fp8%{X5q;Ry>Kvl~J!K(+si3h=H z2gyk%o@u*K&AtyTNfPIc1ws=*%||>64#(g45><7PL-;r z7*;+APCW=tJV;JEdeFI&Ie(j_hiQW~G%CqHr5S#%)L0n!?u-b+VozZ6a7Rr)2>Cia zOz2AwzYt~asdz`-czXI#`CGFlPS)_cI(nb7SDOr>?i)z?# zSHU`|>cBp}LWQKMdt3yg=My&29S`6+0s8D60or~jE-@gN7?4X0$A2Y)OE-ecHj+xV zs)a31wF+`cVJo^spo9ae8&KSUa{+QJ#G_K?3R)2EB6sT%pF4|S@26hoi`hw!Q@4{I z@3sfqqh@|j_tNIJ|F7|-tA94>fbr$#FD>7^maF+53rWzinpu2c-NY)lLTQD|+(C0r zg%{sVaJKle@PMc(zJJZ{ywr4>O%2qYz%lM+gZpk4pR#m{!qd8FlSn6tuUC0bPXez( z+A92ho4>!Vaa1yJPSKTQx6DL5rLTN^Sid?T11SF-PXDL`oGkQKGNsx3PyuYe1DY}&@p`##g~7*NS5F4 z5~y9^(lS3o{<8RTEBt)wrl+94ItNTof!{jw*Vp0~erM5dIKL|StJAyp z8?L`=+4-htL#`{6QT1aUALDCio6X{Dpp2%b@j79D#EI9Y@s=Lpo@x9!93la9_zs7` z=Wl)Z_#aS92Pg;t;)W*k1ONc>LI40zO928D02BZS2nYa+n{-qF;)W*k1ONc>LI9Jr M7cB-W1poj501~jFmjD0& literal 6119 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 literal 8347 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