From 69255a938bd8f6042ee12ce432f704f41ee73381 Mon Sep 17 00:00:00 2001 From: DanLT Date: Fri, 3 Sep 2021 17:39:50 -0800 Subject: [PATCH 01/17] f --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 55d15e97b..481d1622c 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ plugins { } group 'com.volmit.iris' -version '1.8.2' +version '1.8.3' def apiVersion = '1.17' def name = getRootProject().getName() // Defined in settings.gradle def main = 'com.volmit.iris.Iris' From d06445e04bcab744aee7b082964c7dd7c1a98ef3 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 13:54:09 -0400 Subject: [PATCH 02/17] Default worms --- src/main/java/com/volmit/iris/engine/object/IrisCave.java | 2 +- src/main/java/com/volmit/iris/engine/object/IrisRavine.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/object/IrisCave.java b/src/main/java/com/volmit/iris/engine/object/IrisCave.java index a8f1b8ae4..dbed15fbd 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisCave.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisCave.java @@ -43,7 +43,7 @@ import lombok.experimental.Accessors; @Data public class IrisCave extends IrisRegistrant { @Desc("Define the shape of this cave") - private IrisWorm worm; + private IrisWorm worm = new IrisWorm(); @Desc("Define potential forking features") private IrisCarving fork = new IrisCarving(); diff --git a/src/main/java/com/volmit/iris/engine/object/IrisRavine.java b/src/main/java/com/volmit/iris/engine/object/IrisRavine.java index a0d5ccde2..ba34945b1 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisRavine.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisRavine.java @@ -46,7 +46,7 @@ import lombok.experimental.Accessors; @Data public class IrisRavine extends IrisRegistrant { @Desc("Define the shape of this ravine (2d, ignores Y)") - private IrisWorm worm; + private IrisWorm worm = new IrisWorm(); @RegistryListResource(IrisBiome.class) @Desc("Force this cave to only generate the specified custom biome") From 9533b62ebfa14147c9604766430bc3dc224a19da Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 13:54:19 -0400 Subject: [PATCH 03/17] Check carving sizes --- src/main/java/com/volmit/iris/engine/object/IrisCarving.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/volmit/iris/engine/object/IrisCarving.java b/src/main/java/com/volmit/iris/engine/object/IrisCarving.java index 221ac1e40..901a681aa 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisCarving.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisCarving.java @@ -111,6 +111,10 @@ public class IrisCarving { max = Math.max(max, i.getSize(data)); } + for (IrisRavinePlacer i : ravines) { + max = Math.max(max, i.getSize(data)); + } + if (elipsoids.isNotEmpty()) { max = (int) Math.max(elipsoids.stream().mapToDouble(IrisElipsoid::maxSize).max().getAsDouble(), max); } From 238243a7d45098b8a4adca338a6b8a61e849e4c3 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 13:54:40 -0400 Subject: [PATCH 04/17] Fluid body components for mantle --- .../volmit/iris/engine/IrisEngineMantle.java | 6 +- .../components/MantleFluidBodyComponent.java | 60 +++++++++++++++++++ .../iris/util/matter/MatterFluidBody.java | 30 ++++++++++ .../util/matter/slices/FluidBodyMatter.java | 57 ++++++++++++++++++ 4 files changed, 149 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/volmit/iris/engine/mantle/components/MantleFluidBodyComponent.java create mode 100644 src/main/java/com/volmit/iris/util/matter/MatterFluidBody.java create mode 100644 src/main/java/com/volmit/iris/util/matter/slices/FluidBodyMatter.java diff --git a/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java b/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java index 808775b69..dd7c89886 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java @@ -23,10 +23,7 @@ import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.mantle.EngineMantle; import com.volmit.iris.engine.mantle.MantleComponent; -import com.volmit.iris.engine.mantle.components.MantleCarvingComponent; -import com.volmit.iris.engine.mantle.components.MantleFeatureComponent; -import com.volmit.iris.engine.mantle.components.MantleJigsawComponent; -import com.volmit.iris.engine.mantle.components.MantleObjectComponent; +import com.volmit.iris.engine.mantle.components.*; import com.volmit.iris.engine.object.IrisBiome; import com.volmit.iris.engine.object.IrisDepositGenerator; import com.volmit.iris.engine.object.IrisFeaturePotential; @@ -63,6 +60,7 @@ public class IrisEngineMantle implements EngineMantle { radius = radCache.aquire(this::computeParallaxSize); components = new KList<>(); registerComponent(new MantleCarvingComponent(this)); + registerComponent(new MantleFluidBodyComponent(this)); registerComponent(new MantleFeatureComponent(this)); registerComponent(new MantleJigsawComponent(this)); registerComponent(new MantleObjectComponent(this)); diff --git a/src/main/java/com/volmit/iris/engine/mantle/components/MantleFluidBodyComponent.java b/src/main/java/com/volmit/iris/engine/mantle/components/MantleFluidBodyComponent.java new file mode 100644 index 000000000..d8120d736 --- /dev/null +++ b/src/main/java/com/volmit/iris/engine/mantle/components/MantleFluidBodyComponent.java @@ -0,0 +1,60 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.engine.mantle.components; + +import com.volmit.iris.engine.data.cache.Cache; +import com.volmit.iris.engine.mantle.EngineMantle; +import com.volmit.iris.engine.mantle.IrisMantleComponent; +import com.volmit.iris.engine.mantle.MantleWriter; +import com.volmit.iris.engine.object.IrisBiome; +import com.volmit.iris.engine.object.IrisCarving; +import com.volmit.iris.engine.object.IrisRegion; +import com.volmit.iris.util.documentation.ChunkCoordinates; +import com.volmit.iris.util.mantle.MantleFlag; +import com.volmit.iris.util.math.RNG; + +import java.util.function.Consumer; + +public class MantleFluidBodyComponent extends IrisMantleComponent { + public MantleFluidBodyComponent(EngineMantle engineMantle) { + super(engineMantle, MantleFlag.CARVED); + } + + @Override + public void generateLayer(MantleWriter writer, int x, int z, Consumer post) { + RNG rng = new RNG(Cache.key(x, z) + seed()); + int xxx = 8 + (x << 4); + int zzz = 8 + (z << 4); + IrisRegion region = getComplex().getRegionStream().get(xxx, zzz); + IrisBiome biome = getComplex().getTrueBiomeStreamNoFeatures().get(xxx, zzz); + carve(writer, rng, x, z, region, biome); + } + + @ChunkCoordinates + private void carve(MantleWriter writer, RNG rng, int cx, int cz, IrisRegion region, IrisBiome biome) { + carve(getDimension().getCarving(), writer, new RNG((rng.nextLong() * cx) + 490495 + cz), cx, cz); + carve(biome.getCarving(), writer, new RNG((rng.nextLong() * cx) + 490495 + cz), cx, cz); + carve(region.getCarving(), writer, new RNG((rng.nextLong() * cx) + 490495 + cz), cx, cz); + } + + @ChunkCoordinates + private void carve(IrisCarving carving, MantleWriter writer, RNG rng, int cx, int cz) { + carving.doCarving(writer, rng, getEngineMantle().getEngine(), cx << 4, -1, cz << 4); + } +} diff --git a/src/main/java/com/volmit/iris/util/matter/MatterFluidBody.java b/src/main/java/com/volmit/iris/util/matter/MatterFluidBody.java new file mode 100644 index 000000000..1846cf8e7 --- /dev/null +++ b/src/main/java/com/volmit/iris/util/matter/MatterFluidBody.java @@ -0,0 +1,30 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.matter; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class MatterFluidBody { + private final boolean body; + private final String customBiome; + private final boolean lava; +} diff --git a/src/main/java/com/volmit/iris/util/matter/slices/FluidBodyMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/FluidBodyMatter.java new file mode 100644 index 000000000..9354bbcbf --- /dev/null +++ b/src/main/java/com/volmit/iris/util/matter/slices/FluidBodyMatter.java @@ -0,0 +1,57 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.matter.slices; + +import com.volmit.iris.util.matter.MatterFluidBody; +import com.volmit.iris.util.matter.Sliced; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +@Sliced +public class FluidBodyMatter extends RawMatter { + public static MatterFluidBody get(String customBiome, boolean lava) { + return new MatterFluidBody(true, customBiome, lava); + } + + public FluidBodyMatter() { + this(1, 1, 1); + } + + public FluidBodyMatter(int width, int height, int depth) { + super(width, height, depth, MatterFluidBody.class); + } + + @Override + public void writeNode(MatterFluidBody b, DataOutputStream dos) throws IOException { + dos.writeBoolean(b.isBody()); + dos.writeBoolean(b.isLava()); + dos.writeUTF(b.getCustomBiome()); + } + + @Override + public MatterFluidBody readNode(DataInputStream din) throws IOException { + boolean b = din.readBoolean(); + boolean l = din.readBoolean(); + String v = din.readUTF(); + + return new MatterFluidBody(b, v, l); + } +} From 3aa0fac8520be6c684efe5e511517fb9e4824a4e Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 13:55:59 -0400 Subject: [PATCH 05/17] Fluid body configuration --- .../volmit/iris/engine/object/IrisBiome.java | 3 + .../iris/engine/object/IrisDimension.java | 3 + .../iris/engine/object/IrisFluidBodies.java | 84 +++++++++++++++++++ .../volmit/iris/engine/object/IrisRegion.java | 3 + 4 files changed, 93 insertions(+) create mode 100644 src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java diff --git a/src/main/java/com/volmit/iris/engine/object/IrisBiome.java b/src/main/java/com/volmit/iris/engine/object/IrisBiome.java index a64167d35..12592b8ed 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisBiome.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisBiome.java @@ -103,6 +103,9 @@ public class IrisBiome extends IrisRegistrant implements IRare { @Desc("Carving configuration for the dimension") private IrisCarving carving = new IrisCarving(); + @Desc("Configuration of fluid bodies such as rivers & lakes") + private IrisFluidBodies fluidBodies = new IrisFluidBodies(); + @MinNumber(1) @MaxNumber(512) @Desc("The rarity of this biome (integer)") diff --git a/src/main/java/com/volmit/iris/engine/object/IrisDimension.java b/src/main/java/com/volmit/iris/engine/object/IrisDimension.java index e916609eb..75b5faa2a 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisDimension.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisDimension.java @@ -165,6 +165,9 @@ public class IrisDimension extends IrisRegistrant { @Desc("Carving configuration for the dimension") private IrisCarving carving = new IrisCarving(); + @Desc("Configuration of fluid bodies such as rivers & lakes") + private IrisFluidBodies fluidBodies = new IrisFluidBodies(); + @Desc("The world environment") private Environment environment = Environment.NORMAL; diff --git a/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java b/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java new file mode 100644 index 000000000..8d996a9c5 --- /dev/null +++ b/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java @@ -0,0 +1,84 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.engine.object; + +import com.volmit.iris.core.loader.IrisData; +import com.volmit.iris.engine.framework.Engine; +import com.volmit.iris.engine.mantle.MantleWriter; +import com.volmit.iris.engine.object.annotations.ArrayType; +import com.volmit.iris.engine.object.annotations.Desc; +import com.volmit.iris.engine.object.annotations.Snippet; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.documentation.BlockCoordinates; +import com.volmit.iris.util.math.RNG; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +@Snippet("carving") +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@Desc("Represents a carving configuration") +@Data +public class IrisFluidBodies { + @ArrayType(type = IrisCavePlacer.class, min = 1) + @Desc("Define cave placers") + private KList rivers = new KList<>(); + + @ArrayType(type = IrisRavinePlacer.class, min = 1) + @Desc("Define ravine placers") + private KList lakes = new KList<>(); + + @BlockCoordinates + public void doCarving(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { + doCarving(writer, rng, engine, x, y, z, -1); + } + + @BlockCoordinates + public void doCarving(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int waterHint) { + if (rivers.isNotEmpty()) { + for (IrisCavePlacer i : rivers) { + i.generateCave(writer, rng, engine, x, y, z, waterHint); + } + } + + if (lakes.isNotEmpty()) { + for (IrisRavinePlacer i : lakes) { + i.generateRavine(writer, rng, engine, x, y, z, waterHint); + } + } + } + + public int getMaxRange(IrisData data) { + int max = 0; + + for (IrisCavePlacer i : rivers) { + max = Math.max(max, i.getSize(data)); + } + + for (IrisCavePlacer i : rivers) { + max = Math.max(max, i.getSize(data)); + } + + + return max; + } +} diff --git a/src/main/java/com/volmit/iris/engine/object/IrisRegion.java b/src/main/java/com/volmit/iris/engine/object/IrisRegion.java index 1d4c163fe..338ee67fb 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisRegion.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisRegion.java @@ -131,6 +131,9 @@ public class IrisRegion extends IrisRegistrant implements IRare { @Desc("Carving configuration for the dimension") private IrisCarving carving = new IrisCarving(); + @Desc("Configuration of fluid bodies such as rivers & lakes") + private IrisFluidBodies fluidBodies = new IrisFluidBodies(); + @RegistryListResource(IrisBiome.class) @Required @ArrayType(min = 1, type = String.class) From e2d07f7e787542e234fa5c4c02705d07874a7108 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 14:00:45 -0400 Subject: [PATCH 06/17] Fluid body configuration for lakes & rivers --- .../iris/engine/object/IrisFluidBodies.java | 33 +++++----- .../volmit/iris/engine/object/IrisLake.java | 59 +++++++++++++++++ .../volmit/iris/engine/object/IrisRiver.java | 63 +++++++++++++++++++ 3 files changed, 136 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/volmit/iris/engine/object/IrisLake.java create mode 100644 src/main/java/com/volmit/iris/engine/object/IrisRiver.java diff --git a/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java b/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java index 8d996a9c5..d8edc5dac 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java @@ -32,37 +32,32 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -@Snippet("carving") +@Snippet("fluid-bodies") @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor -@Desc("Represents a carving configuration") +@Desc("Represents a fluid body configuration") @Data public class IrisFluidBodies { - @ArrayType(type = IrisCavePlacer.class, min = 1) - @Desc("Define cave placers") - private KList rivers = new KList<>(); + @ArrayType(type = IrisRiver.class, min = 1) + @Desc("Define rivers") + private KList rivers = new KList<>(); - @ArrayType(type = IrisRavinePlacer.class, min = 1) - @Desc("Define ravine placers") - private KList lakes = new KList<>(); + @ArrayType(type = IrisLake.class, min = 1) + @Desc("Define lakes") + private KList lakes = new KList<>(); @BlockCoordinates public void doCarving(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { - doCarving(writer, rng, engine, x, y, z, -1); - } - - @BlockCoordinates - public void doCarving(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int waterHint) { if (rivers.isNotEmpty()) { - for (IrisCavePlacer i : rivers) { - i.generateCave(writer, rng, engine, x, y, z, waterHint); + for (IrisRiver i : rivers) { + i.generate(writer, rng, engine, x, y, z); } } if (lakes.isNotEmpty()) { - for (IrisRavinePlacer i : lakes) { - i.generateRavine(writer, rng, engine, x, y, z, waterHint); + for (IrisLake i : lakes) { + i.generate(writer, rng, engine, x, y, z); } } } @@ -70,11 +65,11 @@ public class IrisFluidBodies { public int getMaxRange(IrisData data) { int max = 0; - for (IrisCavePlacer i : rivers) { + for (IrisRiver i : rivers) { max = Math.max(max, i.getSize(data)); } - for (IrisCavePlacer i : rivers) { + for (IrisLake i : lakes) { max = Math.max(max, i.getSize(data)); } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisLake.java b/src/main/java/com/volmit/iris/engine/object/IrisLake.java new file mode 100644 index 000000000..781b6ed7f --- /dev/null +++ b/src/main/java/com/volmit/iris/engine/object/IrisLake.java @@ -0,0 +1,59 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.engine.object; + +import com.volmit.iris.core.loader.IrisData; +import com.volmit.iris.engine.framework.Engine; +import com.volmit.iris.engine.mantle.MantleWriter; +import com.volmit.iris.engine.object.annotations.*; +import com.volmit.iris.util.math.RNG; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +@Snippet("lake") +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@Desc("Represents an Iris Lake") +@Data +public class IrisLake implements IRare { + @Required + @Desc("Typically a 1 in RARITY on a per chunk/fork basis") + @MinNumber(1) + private int rarity = 15; + + @Desc("The width style of this lake") + private IrisStyledRange width = new IrisStyledRange(6, 9, NoiseStyle.PERLIN.style()); + + @Desc("Define the shape of this lake") + private IrisWorm worm = new IrisWorm(); + + @RegistryListResource(IrisBiome.class) + @Desc("Force this lake to only generate the specified custom biome") + private String customBiome = ""; + + public int getSize(IrisData data) { + return worm.getMaxDistance(); + } + + public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { + } +} diff --git a/src/main/java/com/volmit/iris/engine/object/IrisRiver.java b/src/main/java/com/volmit/iris/engine/object/IrisRiver.java new file mode 100644 index 000000000..cad2e61b1 --- /dev/null +++ b/src/main/java/com/volmit/iris/engine/object/IrisRiver.java @@ -0,0 +1,63 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.engine.object; + +import com.volmit.iris.Iris; +import com.volmit.iris.core.loader.IrisData; +import com.volmit.iris.engine.data.cache.AtomicCache; +import com.volmit.iris.engine.framework.Engine; +import com.volmit.iris.engine.mantle.MantleWriter; +import com.volmit.iris.engine.object.annotations.*; +import com.volmit.iris.util.math.RNG; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.concurrent.atomic.AtomicBoolean; + +@Snippet("river") +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@Desc("Represents an Iris river") +@Data +public class IrisRiver implements IRare { + @Required + @Desc("Typically a 1 in RARITY on a per chunk/fork basis") + @MinNumber(1) + private int rarity = 15; + + @Desc("The width style of this river") + private IrisStyledRange width = new IrisStyledRange(3, 6, NoiseStyle.PERLIN.style()); + + @Desc("Define the shape of this river") + private IrisWorm worm = new IrisWorm(); + + @RegistryListResource(IrisBiome.class) + @Desc("Force this river to only generate the specified custom biome") + private String customBiome = ""; + + public int getSize(IrisData data) { + return worm.getMaxDistance(); + } + + public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { + } +} From a3aedd5fadc741403a10d14e0220c324f0b4f8d4 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 14:05:16 -0400 Subject: [PATCH 07/17] Connect configuration with the mantle for fluid bodies --- .../volmit/iris/engine/IrisEngineMantle.java | 18 ++++++++++++++++- .../components/MantleFluidBodyComponent.java | 20 +++++++++---------- .../iris/engine/object/IrisFluidBodies.java | 2 +- .../volmit/iris/engine/object/IrisLake.java | 1 + .../volmit/iris/util/mantle/MantleFlag.java | 3 ++- 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java b/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java index dd7c89886..9d69d2510 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java @@ -293,7 +293,7 @@ public class IrisEngineMantle implements EngineMantle { x = Math.max(z, x); int u = x; int v = computeFeatureRange(); - int c = computeCarvingRange(); + int c = Math.max(computeCarvingRange(), computeBodyRange()); x = Math.max(jig, x); x = Math.max(x, v); x = Math.max(x, c); @@ -308,6 +308,22 @@ public class IrisEngineMantle implements EngineMantle { return x; } + private int computeBodyRange() { + int m = 0; + + m = Math.max(m, getDimension().getFluidBodies().getMaxRange(getData())); + + for (IrisRegion i : getDimension().getAllRegions(getEngine())) { + m = Math.max(m, i.getFluidBodies().getMaxRange(getData())); + } + + for (IrisBiome i : getDimension().getAllBiomes(getEngine())) { + m = Math.max(m, i.getFluidBodies().getMaxRange(getData())); + } + + return m; + } + private int computeCarvingRange() { int m = 0; diff --git a/src/main/java/com/volmit/iris/engine/mantle/components/MantleFluidBodyComponent.java b/src/main/java/com/volmit/iris/engine/mantle/components/MantleFluidBodyComponent.java index d8120d736..9f3606522 100644 --- a/src/main/java/com/volmit/iris/engine/mantle/components/MantleFluidBodyComponent.java +++ b/src/main/java/com/volmit/iris/engine/mantle/components/MantleFluidBodyComponent.java @@ -23,7 +23,7 @@ import com.volmit.iris.engine.mantle.EngineMantle; import com.volmit.iris.engine.mantle.IrisMantleComponent; import com.volmit.iris.engine.mantle.MantleWriter; import com.volmit.iris.engine.object.IrisBiome; -import com.volmit.iris.engine.object.IrisCarving; +import com.volmit.iris.engine.object.IrisFluidBodies; import com.volmit.iris.engine.object.IrisRegion; import com.volmit.iris.util.documentation.ChunkCoordinates; import com.volmit.iris.util.mantle.MantleFlag; @@ -33,28 +33,28 @@ import java.util.function.Consumer; public class MantleFluidBodyComponent extends IrisMantleComponent { public MantleFluidBodyComponent(EngineMantle engineMantle) { - super(engineMantle, MantleFlag.CARVED); + super(engineMantle, MantleFlag.FLUID_BODIES); } @Override public void generateLayer(MantleWriter writer, int x, int z, Consumer post) { - RNG rng = new RNG(Cache.key(x, z) + seed()); + RNG rng = new RNG(Cache.key(x, z) + seed() + 405666); int xxx = 8 + (x << 4); int zzz = 8 + (z << 4); IrisRegion region = getComplex().getRegionStream().get(xxx, zzz); IrisBiome biome = getComplex().getTrueBiomeStreamNoFeatures().get(xxx, zzz); - carve(writer, rng, x, z, region, biome); + generate(writer, rng, x, z, region, biome); } @ChunkCoordinates - private void carve(MantleWriter writer, RNG rng, int cx, int cz, IrisRegion region, IrisBiome biome) { - carve(getDimension().getCarving(), writer, new RNG((rng.nextLong() * cx) + 490495 + cz), cx, cz); - carve(biome.getCarving(), writer, new RNG((rng.nextLong() * cx) + 490495 + cz), cx, cz); - carve(region.getCarving(), writer, new RNG((rng.nextLong() * cx) + 490495 + cz), cx, cz); + private void generate(MantleWriter writer, RNG rng, int cx, int cz, IrisRegion region, IrisBiome biome) { + generate(getDimension().getFluidBodies(), writer, new RNG((rng.nextLong() * cx) + 490495 + cz), cx, cz); + generate(biome.getFluidBodies(), writer, new RNG((rng.nextLong() * cx) + 490495 + cz), cx, cz); + generate(region.getFluidBodies(), writer, new RNG((rng.nextLong() * cx) + 490495 + cz), cx, cz); } @ChunkCoordinates - private void carve(IrisCarving carving, MantleWriter writer, RNG rng, int cx, int cz) { - carving.doCarving(writer, rng, getEngineMantle().getEngine(), cx << 4, -1, cz << 4); + private void generate(IrisFluidBodies bodies, MantleWriter writer, RNG rng, int cx, int cz) { + bodies.generate(writer, rng, getEngineMantle().getEngine(), cx << 4, -1, cz << 4); } } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java b/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java index d8edc5dac..806c0e671 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java @@ -48,7 +48,7 @@ public class IrisFluidBodies { private KList lakes = new KList<>(); @BlockCoordinates - public void doCarving(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { + public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { if (rivers.isNotEmpty()) { for (IrisRiver i : rivers) { i.generate(writer, rng, engine, x, y, z); diff --git a/src/main/java/com/volmit/iris/engine/object/IrisLake.java b/src/main/java/com/volmit/iris/engine/object/IrisLake.java index 781b6ed7f..7a24dff27 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisLake.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisLake.java @@ -55,5 +55,6 @@ public class IrisLake implements IRare { } public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { + } } diff --git a/src/main/java/com/volmit/iris/util/mantle/MantleFlag.java b/src/main/java/com/volmit/iris/util/mantle/MantleFlag.java index d4b812a0b..65c812713 100644 --- a/src/main/java/com/volmit/iris/util/mantle/MantleFlag.java +++ b/src/main/java/com/volmit/iris/util/mantle/MantleFlag.java @@ -27,7 +27,8 @@ public enum MantleFlag { FEATURE, INITIAL_SPAWNED, REAL, - CARVED; + CARVED, + FLUID_BODIES; static StateList getStateList() { return new StateList(MantleFlag.values()); From 20f953b9cbc7af559267e80eae9378aacecb66a3 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 14:06:27 -0400 Subject: [PATCH 08/17] Fix imports post merge --- src/main/java/com/volmit/iris/engine/IrisEngineMantle.java | 5 +---- src/main/java/com/volmit/iris/engine/object/IrisLake.java | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java b/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java index 71c15bae8..695f1b437 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java @@ -23,10 +23,7 @@ import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.mantle.EngineMantle; import com.volmit.iris.engine.mantle.MantleComponent; -import com.volmit.iris.engine.mantle.components.MantleCarvingComponent; -import com.volmit.iris.engine.mantle.components.MantleFeatureComponent; -import com.volmit.iris.engine.mantle.components.MantleJigsawComponent; -import com.volmit.iris.engine.mantle.components.MantleObjectComponent; +import com.volmit.iris.engine.mantle.components.*; import com.volmit.iris.engine.object.*; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; diff --git a/src/main/java/com/volmit/iris/engine/object/IrisLake.java b/src/main/java/com/volmit/iris/engine/object/IrisLake.java index 7a24dff27..a29374fd5 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisLake.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisLake.java @@ -55,6 +55,6 @@ public class IrisLake implements IRare { } public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { - + } } From 422ecb758fe86dd9e0a7a7c3365192e0bb236519 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 14:25:09 -0400 Subject: [PATCH 09/17] Elipsoid functions --- .../iris/engine/mantle/MantleWriter.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java b/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java index e9e297270..7744badc0 100644 --- a/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java +++ b/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java @@ -40,6 +40,7 @@ import org.bukkit.util.Vector; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.Supplier; @Data public class MantleWriter implements IObjectPlacer { @@ -66,6 +67,11 @@ public class MantleWriter implements IObjectPlacer { } public void setData(int x, int y, int z, T t) { + if(t == null) + { + return; + } + int cx = x >> 4; int cz = z >> 4; @@ -161,6 +167,10 @@ public class MantleWriter implements IObjectPlacer { setElipsoid(cx, cy, cz, radius, radius, radius, fill, data); } + public void setElipsoid(int cx, int cy, int cz, double rx, double ry, double rz, boolean fill, T data) { + setElipsoidFunction(cx, cy, cz, rx, ry, rz, fill, (a,b,c)->data); + } + /** * Set an elipsoid into the mantle * @@ -174,7 +184,7 @@ public class MantleWriter implements IObjectPlacer { * @param data the data to set * @param the type of data to apply to the mantle */ - public void setElipsoid(int cx, int cy, int cz, double rx, double ry, double rz, boolean fill, T data) { + public void setElipsoidFunction(int cx, int cy, int cz, double rx, double ry, double rz, boolean fill, Function3 data) { rx += 0.5; ry += 0.5; rz += 0.5; @@ -217,15 +227,15 @@ public class MantleWriter implements IObjectPlacer { } } - setData(x + cx, y + cy, z + cz, data); - setData(-x + cx, y + cy, z + cz, data); - setData(x + cx, -y + cy, z + cz, data); - setData(x + cx, y + cy, -z + cz, data); - setData(-x + cx, y + cy, -z + cz, data); - setData(-x + cx, -y + cy, z + cz, data); - setData(x + cx, -y + cy, -z + cz, data); - setData(-x + cx, y + cy, -z + cz, data); - setData(-x + cx, -y + cy, -z + cz, data); + setData(x + cx, y + cy, z + cz, data.apply(x + cx, y + cy, z + cz)); + setData(-x + cx, y + cy, z + cz, data.apply(-x + cx, y + cy, z + cz)); + setData(x + cx, -y + cy, z + cz, data.apply(x + cx, -y + cy, z + cz)); + setData(x + cx, y + cy, -z + cz, data.apply(x + cx, y + cy, -z + cz)); + setData(-x + cx, y + cy, -z + cz, data.apply(-x + cx, y + cy, -z + cz)); + setData(-x + cx, -y + cy, z + cz, data.apply(-x + cx, -y + cy, z + cz)); + setData(x + cx, -y + cy, -z + cz, data.apply(x + cx, -y + cy, -z + cz)); + setData(-x + cx, y + cy, -z + cz, data.apply(-x + cx, y + cy, -z + cz)); + setData(-x + cx, -y + cy, -z + cz, data.apply(-x + cx, -y + cy, -z + cz)); } } } From 0a4b57ea0199cae480165791dc2d54be43378f04 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 14:25:15 -0400 Subject: [PATCH 10/17] Lake gen --- .../volmit/iris/engine/object/IrisLake.java | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/engine/object/IrisLake.java b/src/main/java/com/volmit/iris/engine/object/IrisLake.java index a29374fd5..4dc25ed50 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisLake.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisLake.java @@ -22,7 +22,11 @@ import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.mantle.MantleWriter; import com.volmit.iris.engine.object.annotations.*; +import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.RNG; +import com.volmit.iris.util.matter.MatterFluidBody; +import com.volmit.iris.util.matter.slices.FluidBodyMatter; +import com.volmit.iris.util.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -41,7 +45,10 @@ public class IrisLake implements IRare { private int rarity = 15; @Desc("The width style of this lake") - private IrisStyledRange width = new IrisStyledRange(6, 9, NoiseStyle.PERLIN.style()); + private IrisShapedGeneratorStyle widthStyle = new IrisShapedGeneratorStyle(NoiseStyle.PERLIN.style(), 5, 9); + + @Desc("The depth style of this lake") + private IrisShapedGeneratorStyle depthStyle = new IrisShapedGeneratorStyle(NoiseStyle.PERLIN.style(), 4, 7); @Desc("Define the shape of this lake") private IrisWorm worm = new IrisWorm(); @@ -55,6 +62,49 @@ public class IrisLake implements IRare { } public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { + KList pos = getWorm().generate(rng, engine.getData(), writer, null, x, y, z, (at) -> { + }); + CNG dg = depthStyle.getGenerator().createNoCache(rng, engine.getData()); + CNG bw = widthStyle.getGenerator().createNoCache(rng, engine.getData()); + IrisPosition avg; + double ax = 0; + double ay = 0; + double az = 0; + double[] surfaces = new double[pos.size()]; + int i = 0; + for(IrisPosition p : pos) + { + surfaces[i] = engine.getComplex().getHeightStream().get(x, z); + ax += p.getX(); + ay += surfaces[i]; + az += p.getZ(); + i++; + } + + avg = new IrisPosition(ax / pos.size(), ay / pos.size(), az / pos.size()); + MatterFluidBody body = FluidBodyMatter.get(customBiome, false); + i = 0; + + for (IrisPosition p : pos) { + + double surface = surfaces[i]; + double depth = dg.fitDouble(depthStyle.getMin(), depthStyle.getMax(), p.getX(), p.getZ()) + (surface - avg.getY()); + double width = bw.fitDouble(widthStyle.getMin(), widthStyle.getMax(), p.getX(), p.getZ()); + + if(depth > 1) + { + writer.setElipsoidFunction(p.getX(), avg.getY(), p.getZ(), width, depth, width, true, (xx,yy,zz) -> { + if(yy > avg.getY()) + { + return null; + } + + return body; + }); + } + + i++; + } } } From abba2e969b304b866df1d6cd1069c2602694559d Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 14:25:23 -0400 Subject: [PATCH 11/17] Fluid bodies disable for now --- .../iris/engine/object/IrisFluidBodies.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java b/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java index 806c0e671..8efe74893 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisFluidBodies.java @@ -49,17 +49,18 @@ public class IrisFluidBodies { @BlockCoordinates public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { - if (rivers.isNotEmpty()) { - for (IrisRiver i : rivers) { - i.generate(writer, rng, engine, x, y, z); - } - } - - if (lakes.isNotEmpty()) { - for (IrisLake i : lakes) { - i.generate(writer, rng, engine, x, y, z); - } - } + //TODO: Impl +// if (rivers.isNotEmpty()) { +// for (IrisRiver i : rivers) { +// i.generate(writer, rng, engine, x, y, z); +// } +// } +// +// if (lakes.isNotEmpty()) { +// for (IrisLake i : lakes) { +// i.generate(writer, rng, engine, x, y, z); +// } +// } } public int getMaxRange(IrisData data) { From 07b8c5087be4a0c741ccb57ee7c97743c3a5d3d2 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 14:39:17 -0400 Subject: [PATCH 12/17] Re-implement regen closes #611 --- .../iris/core/commands/CommandIris.java | 99 +++++++++++++++++++ .../decree/virtual/VirtualDecreeCommand.java | 1 + .../volmit/iris/util/scheduling/jobs/Job.java | 3 +- 3 files changed, 102 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/src/main/java/com/volmit/iris/core/commands/CommandIris.java index 112b451d5..67dc9e387 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -22,14 +22,27 @@ import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.core.tools.IrisToolbelt; +import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.IrisDimension; +import com.volmit.iris.engine.platform.PlatformChunkGenerator; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.decree.DecreeContext; import com.volmit.iris.util.decree.DecreeExecutor; import com.volmit.iris.util.decree.DecreeOrigin; import com.volmit.iris.util.decree.annotations.Decree; import com.volmit.iris.util.decree.annotations.Param; import com.volmit.iris.util.format.C; +import com.volmit.iris.util.format.Form; +import com.volmit.iris.util.parallel.BurstExecutor; +import com.volmit.iris.util.parallel.MultiBurst; +import com.volmit.iris.util.plugin.VolmitSender; +import com.volmit.iris.util.scheduling.J; +import com.volmit.iris.util.scheduling.jobs.QueueJob; +import org.bukkit.Chunk; import java.io.File; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; @Decree(name = "iris", aliases = {"ir", "irs"}, description = "Basic Command") public class CommandIris implements DecreeExecutor { @@ -164,4 +177,90 @@ public class CommandIris implements DecreeExecutor { IrisSettings.get(); sender().sendMessage(C.GREEN + "Hotloaded settings"); } + + @Decree(name = "regen", description = "Regenerate nearby chunks.", aliases = "rg", sync = true, origin = DecreeOrigin.PLAYER) + public void regen( + @Param(name = "radius", description = "The radius of nearby cunks", defaultValue = "5") + int radius + ) { + if(IrisToolbelt.isIrisWorld(player().getWorld())) + { + VolmitSender sender = sender(); + J.a(() -> { + DecreeContext.touch(sender); + PlatformChunkGenerator plat = IrisToolbelt.access(player().getWorld()); + Engine engine = plat.getEngine(); + try + { + int vd = radius; + int rg = 0; + Chunk cx = player().getLocation().getChunk(); + KList js = new KList<>(); + BurstExecutor b = MultiBurst.burst.burst(); + b.setMulticore(false); + int rad = engine.getMantle().getRealRadius(); + for(int i = -(vd+rad); i <= vd+rad; i++) { + for (int j = -(vd+rad); j <= vd+rad; j++) { + engine.getMantle().getMantle().deleteChunk(i + cx.getX(), j + cx.getZ()); + } + } + + for(int i = -vd; i <= vd; i++) + { + for(int j = -vd; j <= vd; j++) + { + int finalJ = j; + int finalI = i; + b.queue(() -> plat.injectChunkReplacement(player().getWorld(), finalI + cx.getX(), finalJ + cx.getZ(), (f) -> { + synchronized (js) + { + js.add(f); + } + })); + } + } + + b.complete(); + sender().sendMessage(C.GREEN + "Regenerating " + Form.f(js.size()) + " Sections"); + QueueJob r = new QueueJob<>() { + final KList> futures = new KList<>(); + + @Override + public void execute(Runnable runnable) { + futures.add(J.sfut(runnable)); + + if(futures.size() > 64) + { + while(futures.isNotEmpty()) + { + try { + futures.remove(0).get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + } + } + + @Override + public String getName() { + return "Regenerating"; + } + }; + r.queue(js); + r.execute(sender()); + } + + catch(Throwable e) + { + sender().sendMessage("Unable to parse view-distance"); + } + }); + } + + else + { + sender().sendMessage(C.RED + "You must be in an Iris World to use regen!"); + } + } } diff --git a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java index b44777f26..942d3b6ef 100644 --- a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java +++ b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java @@ -483,6 +483,7 @@ public class VirtualDecreeCommand { vm++; } + DecreeContext.touch(sender); Runnable rx = () -> { try { DecreeContext.touch(sender); diff --git a/src/main/java/com/volmit/iris/util/scheduling/jobs/Job.java b/src/main/java/com/volmit/iris/util/scheduling/jobs/Job.java index 32c56034b..9ea3b02eb 100644 --- a/src/main/java/com/volmit/iris/util/scheduling/jobs/Job.java +++ b/src/main/java/com/volmit/iris/util/scheduling/jobs/Job.java @@ -18,6 +18,7 @@ package com.volmit.iris.util.scheduling.jobs; +import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.scheduling.J; @@ -66,7 +67,7 @@ public interface Job { }, sender.isPlayer() ? 0 : 20); f.whenComplete((fs, ff) -> { J.car(c); - sender.sendMessage("Completed " + getName() + " in " + Form.duration(p.getMilliseconds(), 1)); + sender.sendMessage(C.AQUA + "Completed " + getName() + " in " + Form.duration(p.getMilliseconds(), 1)); whenComplete.run(); }); } From 164242ae4b74976f13ab1514b6bdc4a706a5af2a Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 14:50:35 -0400 Subject: [PATCH 13/17] Reimplement jigsaw closes #610 --- .../iris/core/commands/CommandIris.java | 1 + .../iris/core/commands/CommandJigsaw.java | 111 ++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 src/main/java/com/volmit/iris/core/commands/CommandJigsaw.java diff --git a/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/src/main/java/com/volmit/iris/core/commands/CommandIris.java index 67dc9e387..9c889ec65 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -50,6 +50,7 @@ public class CommandIris implements DecreeExecutor { private CommandPregen pregen; private CommandSettings settings; private CommandObject object; + private CommandJigsaw jigsaw; private CommandWhat what; @Decree(description = "Create a new world", aliases = "+") diff --git a/src/main/java/com/volmit/iris/core/commands/CommandJigsaw.java b/src/main/java/com/volmit/iris/core/commands/CommandJigsaw.java new file mode 100644 index 000000000..b5f0737f6 --- /dev/null +++ b/src/main/java/com/volmit/iris/core/commands/CommandJigsaw.java @@ -0,0 +1,111 @@ +package com.volmit.iris.core.commands; + +import com.volmit.iris.Iris; +import com.volmit.iris.core.IrisSettings; +import com.volmit.iris.core.edit.JigsawEditor; +import com.volmit.iris.core.loader.IrisData; +import com.volmit.iris.core.service.ObjectSVC; +import com.volmit.iris.core.service.StudioSVC; +import com.volmit.iris.core.service.WandSVC; +import com.volmit.iris.engine.jigsaw.PlannedStructure; +import com.volmit.iris.engine.object.*; +import com.volmit.iris.util.data.Cuboid; +import com.volmit.iris.util.decree.DecreeExecutor; +import com.volmit.iris.util.decree.DecreeOrigin; +import com.volmit.iris.util.decree.annotations.Decree; +import com.volmit.iris.util.decree.annotations.Param; +import com.volmit.iris.util.decree.specialhandlers.ObjectHandler; +import com.volmit.iris.util.format.C; +import com.volmit.iris.util.format.Form; +import com.volmit.iris.util.math.Direction; +import com.volmit.iris.util.math.RNG; +import com.volmit.iris.util.scheduling.PrecisionStopwatch; +import com.volmit.iris.util.scheduling.Queue; +import org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.TileState; +import org.bukkit.block.data.BlockData; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +import java.io.File; +import java.io.IOException; +import java.text.NumberFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Decree(name = "jigsaw", origin = DecreeOrigin.PLAYER, studio = true, description = "Iris jigsaw commands") +public class CommandJigsaw implements DecreeExecutor { + @Decree(description = "Edit a jigsaw piece") + public void edit( + @Param(description = "The jigsaw piece to edit") + IrisJigsawPiece piece + ) { + File dest = piece.getLoadFile(); + new JigsawEditor(player(), piece, IrisData.loadAnyObject(piece.getObject()), dest); + } + + @Decree(description = "Place a jigsaw structure") + public void place( + @Param(description = "The jigsaw structure to place") + IrisJigsawStructure structure + ) { + PrecisionStopwatch p = PrecisionStopwatch.start(); + PlannedStructure ps = new PlannedStructure(structure, new IrisPosition(player().getLocation()), new RNG()); + sender().sendMessage(C.GREEN + "Generated " + ps.getPieces().size() + " pieces in " + Form.duration(p.getMilliseconds(), 2)); + ps.place(world()); + } + + @Decree(description = "Create a jigsaw piece") + public void create( + @Param(description = "The name of the jigsaw piece") + String piece, + @Param(description = "The project to add the jigsaw piece to") + String project, + @Param(description = "The object to use for this piece", customHandler = ObjectHandler.class) + String object + ) { + IrisObject o = IrisData.loadAnyObject(object); + + if (object == null) { + sender().sendMessage(C.RED + "Failed to find existing object"); + return; + } + + File dest = Iris.instance.getDataFile("packs", project, "jigsaw-pieces", piece + ".json"); + new JigsawEditor(player(), null, o, dest); + sender().sendMessage(C.GRAY + "* Right Click blocks to make them connectors"); + sender().sendMessage(C.GRAY + "* Right Click connectors to orient them"); + sender().sendMessage(C.GRAY + "* Shift + Right Click connectors to remove them"); + sender().sendMessage(C.GREEN + "Remember to use /iris jigsaw save"); + } + + @Decree(description = "Exit the current jigsaw editor") + public void exit() + { + JigsawEditor editor = JigsawEditor.editors.get(player()); + + if (editor == null) { + sender().sendMessage(C.GOLD +"You don't have any pieces open to exit!"); + return; + } + + editor.exit(); + sender().sendMessage(C.GREEN +"Exited Jigsaw Editor"); + } + + @Decree(description = "Save & Exit the current jigsaw editor") + public void save() + { + JigsawEditor editor = JigsawEditor.editors.get(player()); + + if (editor == null) { + sender().sendMessage(C.GOLD +"You don't have any pieces open to save!"); + return; + } + + editor.close(); + sender().sendMessage(C.GREEN +"Saved & Exited Jigsaw Editor"); + } +} From 892d3be1444bb7c23d2a4d55651923a35476b85b Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 14:55:28 -0400 Subject: [PATCH 14/17] Stop alias spamming --- .../iris/core/commands/CommandIris.java | 10 -------- .../iris/core/commands/CommandObject.java | 6 ++--- .../iris/core/commands/CommandPregen.java | 2 +- .../iris/core/commands/CommandStudio.java | 24 +++++++++---------- 4 files changed, 16 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/src/main/java/com/volmit/iris/core/commands/CommandIris.java index 9c889ec65..9c3bb0113 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -162,16 +162,6 @@ public class CommandIris implements DecreeExecutor { Iris.service(StudioSVC.class).downloadSearch(sender(), "IrisDimensions/" + pack + "/" + branch, trim, overwrite); } - @Decree(description = "Get metrics for your world", aliases = "measure", origin = DecreeOrigin.PLAYER) - public void metrics() { - if (!IrisToolbelt.isIrisWorld(world())) { - sender().sendMessage(C.RED + "You must be in an Iris world"); - return; - } - sender().sendMessage(C.GREEN + "Sending metrics..."); - engine().printMetrics(sender()); - } - @Decree(description = "Reload configuration file (this is also done automatically)") public void reload() { IrisSettings.invalidate(); diff --git a/src/main/java/com/volmit/iris/core/commands/CommandObject.java b/src/main/java/com/volmit/iris/core/commands/CommandObject.java index 06384b16f..a9e4c8842 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandObject.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandObject.java @@ -107,7 +107,7 @@ public class CommandObject implements DecreeExecutor { sender().playSound(Sound.AMBIENT_SOUL_SAND_VALLEY_ADDITIONS, 1f, 1.5f); } - @Decree(description = "Contract a selection based on your looking direction", aliases = "-") + @Decree(description = "Contract a selection based on your looking direction") public void contract( @Param(description = "The amount to inset by", defaultValue = "1") int amount @@ -345,7 +345,7 @@ public class CommandObject implements DecreeExecutor { sender().sendMessage(C.GREEN + "Successfully object to saved: " + dimension.getLoadKey() + "/objects/" + name); } - @Decree(description = "Shift a selection in your looking direction", aliases = "-") + @Decree(description = "Shift a selection in your looking direction") public void shift( @Param(description = "The amount to shift by", defaultValue = "1") int amount @@ -369,7 +369,7 @@ public class CommandObject implements DecreeExecutor { sender().playSound(Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f); } - @Decree(description = "Undo a number of pastes", aliases = "-") + @Decree(description = "Undo a number of pastes") public void undo( @Param(description = "The amount of pastes to undo", defaultValue = "1") int amount diff --git a/src/main/java/com/volmit/iris/core/commands/CommandPregen.java b/src/main/java/com/volmit/iris/core/commands/CommandPregen.java index a8e9424c1..26d4e275f 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandPregen.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandPregen.java @@ -65,7 +65,7 @@ public class CommandPregen implements DecreeExecutor { } } - @Decree(description = "Pause / continue the active pregeneration task", aliases = {"t", "resume", "unpause"}) + @Decree(description = "Pause / continue the active pregeneration task", aliases = {"resume", "unpause"}) public void pause() { if (PregeneratorJob.pauseResume()) { sender().sendMessage(C.GREEN + "Paused/unpaused pregeneration task, now: " + (PregeneratorJob.isPaused() ? "Paused" : "Running") + "."); diff --git a/src/main/java/com/volmit/iris/core/commands/CommandStudio.java b/src/main/java/com/volmit/iris/core/commands/CommandStudio.java index aa4ae0645..57513de2c 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandStudio.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandStudio.java @@ -79,9 +79,9 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.function.Supplier; -@Decree(name = "studio", aliases = {"std", "s"}, description = "Studio Commands", studio = true) +@Decree(name = "studio", aliases = {"std"}, description = "Studio Commands", studio = true) public class CommandStudio implements DecreeExecutor { - @Decree(description = "Open a new studio world", aliases = "o", sync = true) + @Decree(description = "Open a new studio world", sync = true) public void open( @Param(defaultValue = "overworld", description = "The dimension to open a studio for", aliases = "dim") IrisDimension dimension, @@ -91,7 +91,7 @@ public class CommandStudio implements DecreeExecutor { Iris.service(StudioSVC.class).open(sender(), seed, dimension.getLoadKey()); } - @Decree(description = "Open VSCode for a dimension", aliases = {"vsc", "edit"}) + @Decree(description = "Open VSCode for a dimension", aliases = {"edit"}) public void vscode( @Param(defaultValue = "overworld", description = "The dimension to open VSCode for", aliases = "dim") IrisDimension dimension @@ -100,7 +100,7 @@ public class CommandStudio implements DecreeExecutor { Iris.service(StudioSVC.class).openVSCode(sender(), dimension.getLoadKey()); } - @Decree(description = "Close an open studio project", aliases = {"x", "c"}, sync = true) + @Decree(description = "Close an open studio project", aliases = {"x"}, sync = true) public void close() { if (!Iris.service(StudioSVC.class).isProjectOpen()) { sender().sendMessage(C.RED + "No open studio projects."); @@ -111,7 +111,7 @@ public class CommandStudio implements DecreeExecutor { sender().sendMessage(C.GREEN + "Project Closed."); } - @Decree(description = "Create a new studio project", aliases = "+", sync = true) + @Decree(description = "Create a new studio project", sync = true) public void create( @Param(description = "The name of this new Iris Project.") String name, @@ -262,7 +262,7 @@ public class CommandStudio implements DecreeExecutor { } - @Decree(description = "Edit the biome you are currently in", aliases = {"ebiome", "eb"}, origin = DecreeOrigin.PLAYER) + @Decree(description = "Edit the biome you are currently in", aliases = {"eb"}, origin = DecreeOrigin.PLAYER) public void editbiome( @Param(contextual = true, description = "The biome to edit") IrisBiome biome @@ -309,7 +309,7 @@ public class CommandStudio implements DecreeExecutor { engine().getWorldManager().chargeEnergy(); } - @Decree(description = "Preview noise gens (External GUI)", aliases = {"generator", "gen"}) + @Decree(description = "Preview noise gens (External GUI)", aliases = {"generator"}) public void explore( @Param(description = "The generator to explore", contextual = true) IrisGenerator generator, @@ -330,7 +330,7 @@ public class CommandStudio implements DecreeExecutor { NoiseExplorerGUI.launch(l, "Custom Generator"); } - @Decree(description = "Find any biome or region", aliases = {"goto", "g"}, origin = DecreeOrigin.PLAYER) + @Decree(description = "Find any biome or region", aliases = {"goto"}, origin = DecreeOrigin.PLAYER) public void find( @Param(description = "The biome or region to find", defaultValue = "null") IrisBiome biome, @@ -446,7 +446,7 @@ public class CommandStudio implements DecreeExecutor { sender().sendMessage(C.GREEN + "Opening map!"); } - @Decree(description = "Package a dimension into a compressed format", aliases = "package") + @Decree(name = "package", description = "Package a dimension into a compressed format") public void pkg( @Param(name = "dimension", description = "The dimension pack to compress", contextual = true, defaultValue = "overworld") IrisDimension dimension, @@ -662,7 +662,7 @@ public class CommandStudio implements DecreeExecutor { entity.spawn(engine(), new Location(world(), location.getX(), location.getY(), location.getZ())); } - @Decree(description = "Teleport to the active studio world", aliases = "stp", origin = DecreeOrigin.PLAYER, sync = true) + @Decree(description = "Teleport to the active studio world", aliases = {"tp"}, origin = DecreeOrigin.PLAYER, sync = true) public void tpstudio() { if (!Iris.service(StudioSVC.class).isProjectOpen()) { sender().sendMessage(C.RED + "No studio world is open!"); @@ -691,7 +691,7 @@ public class CommandStudio implements DecreeExecutor { } } - @Decree(aliases = {"find-features", "nf"}, description = "Get the noise feature data in your chunk") + @Decree(aliases = "nf", description = "Get the noise feature data in your chunk") public void features() { if (!IrisToolbelt.isIrisWorld(player().getWorld())) { @@ -706,7 +706,7 @@ public class CommandStudio implements DecreeExecutor { } } - @Decree(aliases = "find-objects", description = "Get information about nearby structures") + @Decree(description = "Get information about nearby structures") public void objects() { if (!IrisToolbelt.isIrisWorld(player().getWorld())) { sender().sendMessage(C.RED + "You must be in an Iris world"); From 90f0a5eac68eba1796f5176ac5ca1bf7ef77bd60 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 14:58:11 -0400 Subject: [PATCH 15/17] Structure & Piece handlers for jigsaw decree --- .../decree/handlers/JigsawPieceHandler.java | 92 +++++++++++++++++++ .../handlers/JigsawStructureHandler.java | 92 +++++++++++++++++++ 2 files changed, 184 insertions(+) create mode 100644 src/main/java/com/volmit/iris/util/decree/handlers/JigsawPieceHandler.java create mode 100644 src/main/java/com/volmit/iris/util/decree/handlers/JigsawStructureHandler.java diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/JigsawPieceHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/JigsawPieceHandler.java new file mode 100644 index 000000000..d30c4670a --- /dev/null +++ b/src/main/java/com/volmit/iris/util/decree/handlers/JigsawPieceHandler.java @@ -0,0 +1,92 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.decree.handlers; + +import com.volmit.iris.Iris; +import com.volmit.iris.core.loader.IrisData; +import com.volmit.iris.engine.object.IrisJigsawPiece; +import com.volmit.iris.engine.object.IrisJigsawStructure; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.collection.KMap; +import com.volmit.iris.util.decree.DecreeParameterHandler; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import com.volmit.iris.util.decree.exceptions.DecreeWhichException; + +import java.io.File; +import java.util.stream.Collectors; + +public class JigsawPieceHandler implements DecreeParameterHandler { + @Override + public KList getPossibilities() { + KMap p = new KMap<>(); + + //noinspection ConstantConditions + for (File i : Iris.instance.getDataFolder("packs").listFiles()) { + if (i.isDirectory()) { + IrisData data = IrisData.get(i); + for (IrisJigsawPiece j : data.getJigsawPieceLoader().loadAll(data.getJigsawPieceLoader().getPossibleKeys())) { + p.putIfAbsent(j.getLoadKey(), j); + } + + data.close(); + } + } + + return p.v(); + } + + @Override + public String toString(IrisJigsawPiece dim) { + return dim.getLoadKey(); + } + + @Override + public IrisJigsawPiece parse(String in, boolean force) throws DecreeParsingException, DecreeWhichException { + if (in.equals("null")) { + return null; + } + KList options = getPossibilities(in); + + if (options.isEmpty()) { + throw new DecreeParsingException("Unable to find Jigsaw Piece \"" + in + "\""); + } else if (options.size() > 1) { + if (force) { + try { + return options.stream().filter((i) -> toString(i).equalsIgnoreCase(in)).collect(Collectors.toList()).get(0); + } catch (Throwable e) { + throw new DecreeParsingException("Unable to filter which Jigsaw Piece \"" + in + "\""); + } + } else { + throw new DecreeWhichException(); + } + } + + return options.get(0); + } + + @Override + public boolean supports(Class type) { + return type.equals(IrisJigsawPiece.class); + } + + @Override + public String getRandomDefault() { + return "jigsaw-piece"; + } +} diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/JigsawStructureHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/JigsawStructureHandler.java new file mode 100644 index 000000000..4a630ead4 --- /dev/null +++ b/src/main/java/com/volmit/iris/util/decree/handlers/JigsawStructureHandler.java @@ -0,0 +1,92 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.decree.handlers; + +import com.volmit.iris.Iris; +import com.volmit.iris.core.loader.IrisData; +import com.volmit.iris.engine.object.IrisJigsawStructure; +import com.volmit.iris.engine.object.IrisRegion; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.collection.KMap; +import com.volmit.iris.util.decree.DecreeParameterHandler; +import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import com.volmit.iris.util.decree.exceptions.DecreeWhichException; + +import java.io.File; +import java.util.stream.Collectors; + +public class JigsawStructureHandler implements DecreeParameterHandler { + @Override + public KList getPossibilities() { + KMap p = new KMap<>(); + + //noinspection ConstantConditions + for (File i : Iris.instance.getDataFolder("packs").listFiles()) { + if (i.isDirectory()) { + IrisData data = IrisData.get(i); + for (IrisJigsawStructure j : data.getJigsawStructureLoader().loadAll(data.getJigsawStructureLoader().getPossibleKeys())) { + p.putIfAbsent(j.getLoadKey(), j); + } + + data.close(); + } + } + + return p.v(); + } + + @Override + public String toString(IrisJigsawStructure dim) { + return dim.getLoadKey(); + } + + @Override + public IrisJigsawStructure parse(String in, boolean force) throws DecreeParsingException, DecreeWhichException { + if (in.equals("null")) { + return null; + } + KList options = getPossibilities(in); + + if (options.isEmpty()) { + throw new DecreeParsingException("Unable to find Jigsaw Structure \"" + in + "\""); + } else if (options.size() > 1) { + if (force) { + try { + return options.stream().filter((i) -> toString(i).equalsIgnoreCase(in)).collect(Collectors.toList()).get(0); + } catch (Throwable e) { + throw new DecreeParsingException("Unable to filter which Jigsaw Structure \"" + in + "\""); + } + } else { + throw new DecreeWhichException(); + } + } + + return options.get(0); + } + + @Override + public boolean supports(Class type) { + return type.equals(IrisJigsawStructure.class); + } + + @Override + public String getRandomDefault() { + return "jigsaw-structure"; + } +} From 8e16b8e4a8cc839c32e4a3839af002fca37f65f7 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 14:59:56 -0400 Subject: [PATCH 16/17] Cleanup --- .../iris/core/commands/CommandIris.java | 37 ++++++------------- .../iris/core/commands/CommandJigsaw.java | 37 +++++-------------- .../com/volmit/iris/core/loader/IrisData.java | 6 +-- .../iris/core/loader/ResourceLoader.java | 6 +-- .../volmit/iris/core/service/CommandSVC.java | 2 +- .../iris/engine/mantle/MantleWriter.java | 6 +-- .../engine/modifier/IrisCarveModifier.java | 13 +++---- .../engine/modifier/IrisDepositModifier.java | 3 +- .../volmit/iris/engine/object/IrisCave.java | 4 +- .../iris/engine/object/IrisDimension.java | 2 +- .../volmit/iris/engine/object/IrisLake.java | 11 ++---- .../volmit/iris/engine/object/IrisRavine.java | 17 ++------- .../volmit/iris/engine/object/IrisRiver.java | 4 -- .../engine/platform/BukkitChunkGenerator.java | 9 ++--- .../java/com/volmit/iris/util/data/B.java | 15 ++------ .../decree/handlers/JigsawPieceHandler.java | 1 - .../handlers/JigsawStructureHandler.java | 1 - .../volmit/iris/util/matter/MatterCavern.java | 9 ++--- 18 files changed, 55 insertions(+), 128 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/src/main/java/com/volmit/iris/core/commands/CommandIris.java index 9c3bb0113..2d2447c29 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -172,17 +172,15 @@ public class CommandIris implements DecreeExecutor { @Decree(name = "regen", description = "Regenerate nearby chunks.", aliases = "rg", sync = true, origin = DecreeOrigin.PLAYER) public void regen( @Param(name = "radius", description = "The radius of nearby cunks", defaultValue = "5") - int radius + int radius ) { - if(IrisToolbelt.isIrisWorld(player().getWorld())) - { + if (IrisToolbelt.isIrisWorld(player().getWorld())) { VolmitSender sender = sender(); J.a(() -> { DecreeContext.touch(sender); PlatformChunkGenerator plat = IrisToolbelt.access(player().getWorld()); Engine engine = plat.getEngine(); - try - { + try { int vd = radius; int rg = 0; Chunk cx = player().getLocation().getChunk(); @@ -190,21 +188,18 @@ public class CommandIris implements DecreeExecutor { BurstExecutor b = MultiBurst.burst.burst(); b.setMulticore(false); int rad = engine.getMantle().getRealRadius(); - for(int i = -(vd+rad); i <= vd+rad; i++) { - for (int j = -(vd+rad); j <= vd+rad; j++) { + for (int i = -(vd + rad); i <= vd + rad; i++) { + for (int j = -(vd + rad); j <= vd + rad; j++) { engine.getMantle().getMantle().deleteChunk(i + cx.getX(), j + cx.getZ()); } } - for(int i = -vd; i <= vd; i++) - { - for(int j = -vd; j <= vd; j++) - { + for (int i = -vd; i <= vd; i++) { + for (int j = -vd; j <= vd; j++) { int finalJ = j; int finalI = i; b.queue(() -> plat.injectChunkReplacement(player().getWorld(), finalI + cx.getX(), finalJ + cx.getZ(), (f) -> { - synchronized (js) - { + synchronized (js) { js.add(f); } })); @@ -220,10 +215,8 @@ public class CommandIris implements DecreeExecutor { public void execute(Runnable runnable) { futures.add(J.sfut(runnable)); - if(futures.size() > 64) - { - while(futures.isNotEmpty()) - { + if (futures.size() > 64) { + while (futures.isNotEmpty()) { try { futures.remove(0).get(); } catch (InterruptedException | ExecutionException e) { @@ -240,17 +233,11 @@ public class CommandIris implements DecreeExecutor { }; r.queue(js); r.execute(sender()); - } - - catch(Throwable e) - { + } catch (Throwable e) { sender().sendMessage("Unable to parse view-distance"); } }); - } - - else - { + } else { sender().sendMessage(C.RED + "You must be in an Iris World to use regen!"); } } diff --git a/src/main/java/com/volmit/iris/core/commands/CommandJigsaw.java b/src/main/java/com/volmit/iris/core/commands/CommandJigsaw.java index b5f0737f6..874b947b3 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandJigsaw.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandJigsaw.java @@ -1,15 +1,13 @@ package com.volmit.iris.core.commands; import com.volmit.iris.Iris; -import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.edit.JigsawEditor; import com.volmit.iris.core.loader.IrisData; -import com.volmit.iris.core.service.ObjectSVC; -import com.volmit.iris.core.service.StudioSVC; -import com.volmit.iris.core.service.WandSVC; import com.volmit.iris.engine.jigsaw.PlannedStructure; -import com.volmit.iris.engine.object.*; -import com.volmit.iris.util.data.Cuboid; +import com.volmit.iris.engine.object.IrisJigsawPiece; +import com.volmit.iris.engine.object.IrisJigsawStructure; +import com.volmit.iris.engine.object.IrisObject; +import com.volmit.iris.engine.object.IrisPosition; import com.volmit.iris.util.decree.DecreeExecutor; import com.volmit.iris.util.decree.DecreeOrigin; import com.volmit.iris.util.decree.annotations.Decree; @@ -17,23 +15,10 @@ import com.volmit.iris.util.decree.annotations.Param; import com.volmit.iris.util.decree.specialhandlers.ObjectHandler; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; -import com.volmit.iris.util.math.Direction; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.scheduling.PrecisionStopwatch; -import com.volmit.iris.util.scheduling.Queue; -import org.bukkit.*; -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.block.TileState; -import org.bukkit.block.data.BlockData; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.Vector; import java.io.File; -import java.io.IOException; -import java.text.NumberFormat; -import java.util.*; -import java.util.stream.Collectors; @Decree(name = "jigsaw", origin = DecreeOrigin.PLAYER, studio = true, description = "Iris jigsaw commands") public class CommandJigsaw implements DecreeExecutor { @@ -82,30 +67,28 @@ public class CommandJigsaw implements DecreeExecutor { } @Decree(description = "Exit the current jigsaw editor") - public void exit() - { + public void exit() { JigsawEditor editor = JigsawEditor.editors.get(player()); if (editor == null) { - sender().sendMessage(C.GOLD +"You don't have any pieces open to exit!"); + sender().sendMessage(C.GOLD + "You don't have any pieces open to exit!"); return; } editor.exit(); - sender().sendMessage(C.GREEN +"Exited Jigsaw Editor"); + sender().sendMessage(C.GREEN + "Exited Jigsaw Editor"); } @Decree(description = "Save & Exit the current jigsaw editor") - public void save() - { + public void save() { JigsawEditor editor = JigsawEditor.editors.get(player()); if (editor == null) { - sender().sendMessage(C.GOLD +"You don't have any pieces open to save!"); + sender().sendMessage(C.GOLD + "You don't have any pieces open to save!"); return; } editor.close(); - sender().sendMessage(C.GREEN +"Saved & Exited Jigsaw Editor"); + sender().sendMessage(C.GREEN + "Saved & Exited Jigsaw Editor"); } } diff --git a/src/main/java/com/volmit/iris/core/loader/IrisData.java b/src/main/java/com/volmit/iris/core/loader/IrisData.java index a6e51aa2e..b3fe3f6be 100644 --- a/src/main/java/com/volmit/iris/core/loader/IrisData.java +++ b/src/main/java/com/volmit/iris/core/loader/IrisData.java @@ -357,11 +357,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { public boolean shouldSkipClass(Class c) { if (c.equals(AtomicCache.class)) { return true; - } else if (c.equals(ChronoLatch.class)) { - return true; - } - - return false; + } else return c.equals(ChronoLatch.class); } @Override diff --git a/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java b/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java index 31c0e29af..535a0a607 100644 --- a/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java +++ b/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java @@ -291,10 +291,8 @@ public class ResourceLoader { lock.unlock(); - if(folderCache == null) - { - synchronized (this) - { + if (folderCache == null) { + synchronized (this) { return getFolderCache(); } } diff --git a/src/main/java/com/volmit/iris/core/service/CommandSVC.java b/src/main/java/com/volmit/iris/core/service/CommandSVC.java index 898093798..63fe2f0de 100644 --- a/src/main/java/com/volmit/iris/core/service/CommandSVC.java +++ b/src/main/java/com/volmit/iris/core/service/CommandSVC.java @@ -64,7 +64,7 @@ public class CommandSVC implements IrisService, DecreeSystem { } } - if ((msg.startsWith("locate ") || msg.startsWith("locatebiome ")) && IrisToolbelt.isIrisWorld(e.getPlayer().getWorld())){ + if ((msg.startsWith("locate ") || msg.startsWith("locatebiome ")) && IrisToolbelt.isIrisWorld(e.getPlayer().getWorld())) { new VolmitSender(e.getPlayer()).sendMessage(C.RED + "Locating biomes & objects is disabled in Iris Worlds. Use /iris studio goto "); e.setCancelled(true); } diff --git a/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java b/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java index 7744badc0..e8b8c9030 100644 --- a/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java +++ b/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java @@ -40,7 +40,6 @@ import org.bukkit.util.Vector; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.function.Supplier; @Data public class MantleWriter implements IObjectPlacer { @@ -67,8 +66,7 @@ public class MantleWriter implements IObjectPlacer { } public void setData(int x, int y, int z, T t) { - if(t == null) - { + if (t == null) { return; } @@ -168,7 +166,7 @@ public class MantleWriter implements IObjectPlacer { } public void setElipsoid(int cx, int cy, int cz, double rx, double ry, double rz, boolean fill, T data) { - setElipsoidFunction(cx, cy, cz, rx, ry, rz, fill, (a,b,c)->data); + setElipsoidFunction(cx, cy, cz, rx, ry, rz, fill, (a, b, c) -> data); } /** diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java index d622e1df0..79efaa79a 100644 --- a/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java +++ b/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java @@ -103,10 +103,9 @@ public class IrisCarveModifier extends EngineAssignedModifier { if (c.isWater()) { output.set(rx, yy, rz, WATER); - } else if(c.isLava()) { + } else if (c.isLava()) { output.set(rx, yy, rz, LAVA); - } - else { + } else { output.set(rx, yy, rz, AIR); } }; @@ -171,13 +170,11 @@ public class IrisCarveModifier extends EngineAssignedModifier { int thickness = zone.airThickness(); String customBiome = ""; - if(B.isDecorant(output.get(rx, zone.ceiling+1, rz))) - { - output.set(rx, zone.ceiling+1, rz, AIR); + if (B.isDecorant(output.get(rx, zone.ceiling + 1, rz))) { + output.set(rx, zone.ceiling + 1, rz, AIR); } - if(B.isDecorant(output.get(rx, zone.ceiling, rz))) - { + if (B.isDecorant(output.get(rx, zone.ceiling, rz))) { output.set(rx, zone.ceiling, rz, AIR); } diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisDepositModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisDepositModifier.java index 980ed1a34..bc4106e77 100644 --- a/src/main/java/com/volmit/iris/engine/modifier/IrisDepositModifier.java +++ b/src/main/java/com/volmit/iris/engine/modifier/IrisDepositModifier.java @@ -121,8 +121,7 @@ public class IrisDepositModifier extends EngineAssignedModifier { continue; } - if(!getEngine().getMantle().isCarved((cx << 4) + nx, ny, (cz << 4) + nz)) - { + if (!getEngine().getMantle().isCarved((cx << 4) + nx, ny, (cz << 4) + nz)) { data.set(nx, ny, nz, B.toDeepSlateOre(data.get(nx, ny, nz), clump.getBlocks().get(j))); } } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisCave.java b/src/main/java/com/volmit/iris/engine/object/IrisCave.java index 251d63c3b..d72bdc78a 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisCave.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisCave.java @@ -18,7 +18,6 @@ package com.volmit.iris.engine.object; -import com.volmit.iris.Iris; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.loader.IrisRegistrant; import com.volmit.iris.engine.framework.Engine; @@ -73,7 +72,8 @@ public class IrisCave extends IrisRegistrant { public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int waterHint) { double girth = getWorm().getGirth().get(rng, x, z, engine.getData()); - KList points = getWorm().generate(rng, engine.getData(), writer, verticalRange, x, y, z, (at) -> {}); + KList points = getWorm().generate(rng, engine.getData(), writer, verticalRange, x, y, z, (at) -> { + }); int highestWater = Math.max(waterHint, -1); if (highestWater == -1) { diff --git a/src/main/java/com/volmit/iris/engine/object/IrisDimension.java b/src/main/java/com/volmit/iris/engine/object/IrisDimension.java index cacb266e0..5206c4534 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisDimension.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisDimension.java @@ -287,7 +287,7 @@ public class IrisDimension extends IrisRegistrant { int jump = strongholdJumpDistance; RNG rng = new RNG((seed * 223) + 12945); - for (int i = 0; i < maxStrongholds+1; i++) { + for (int i = 0; i < maxStrongholds + 1; i++) { int m = i + 1; pos.add(new Position2( (int) ((rng.i(jump * i) + (jump * i)) * (rng.b() ? -1D : 1D)), diff --git a/src/main/java/com/volmit/iris/engine/object/IrisLake.java b/src/main/java/com/volmit/iris/engine/object/IrisLake.java index 4dc25ed50..a8a47728f 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisLake.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisLake.java @@ -73,8 +73,7 @@ public class IrisLake implements IRare { double[] surfaces = new double[pos.size()]; int i = 0; - for(IrisPosition p : pos) - { + for (IrisPosition p : pos) { surfaces[i] = engine.getComplex().getHeightStream().get(x, z); ax += p.getX(); ay += surfaces[i]; @@ -92,11 +91,9 @@ public class IrisLake implements IRare { double depth = dg.fitDouble(depthStyle.getMin(), depthStyle.getMax(), p.getX(), p.getZ()) + (surface - avg.getY()); double width = bw.fitDouble(widthStyle.getMin(), widthStyle.getMax(), p.getX(), p.getZ()); - if(depth > 1) - { - writer.setElipsoidFunction(p.getX(), avg.getY(), p.getZ(), width, depth, width, true, (xx,yy,zz) -> { - if(yy > avg.getY()) - { + if (depth > 1) { + writer.setElipsoidFunction(p.getX(), avg.getY(), p.getZ(), width, depth, width, true, (xx, yy, zz) -> { + if (yy > avg.getY()) { return null; } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisRavine.java b/src/main/java/com/volmit/iris/engine/object/IrisRavine.java index d0ca1c432..8a0a1a13e 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisRavine.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisRavine.java @@ -18,7 +18,6 @@ package com.volmit.iris.engine.object; -import com.volmit.iris.Iris; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.loader.IrisRegistrant; import com.volmit.iris.engine.framework.Engine; @@ -150,13 +149,9 @@ public class IrisRavine extends IrisRegistrant { break; } - if(lavaLevel >= 0 && i <= lavaLevel + (surface - depthStyle.getMid())) - { + if (lavaLevel >= 0 && i <= lavaLevel + (surface - depthStyle.getMid())) { writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, l); - } - - else - { + } else { writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, c); } } @@ -174,13 +169,9 @@ public class IrisRavine extends IrisRegistrant { break; } - if(lavaLevel >= 0 && i <= lavaLevel + (surface - depthStyle.getMid())) - { + if (lavaLevel >= 0 && i <= lavaLevel + (surface - depthStyle.getMid())) { writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, l); - } - - else - { + } else { writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, c); } } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisRiver.java b/src/main/java/com/volmit/iris/engine/object/IrisRiver.java index cad2e61b1..d2a81833f 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisRiver.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisRiver.java @@ -18,9 +18,7 @@ package com.volmit.iris.engine.object; -import com.volmit.iris.Iris; import com.volmit.iris.core.loader.IrisData; -import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.mantle.MantleWriter; import com.volmit.iris.engine.object.annotations.*; @@ -30,8 +28,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -import java.util.concurrent.atomic.AtomicBoolean; - @Snippet("river") @Accessors(chain = true) @NoArgsConstructor diff --git a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java index 54c69c081..d478118b2 100644 --- a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java +++ b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java @@ -104,8 +104,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun } } : null; - if(studio) - { + if (studio) { hotloader.setPriority(Thread.MIN_PRIORITY); hotloader.start(); hotloader.setName(getTarget().getWorld().name() + " Hotloader"); @@ -236,8 +235,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun @Override public void close() { withExclusiveControl(() -> { - if(isStudio()) - { + if (isStudio()) { hotloader.interrupt(); } @@ -252,8 +250,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun @Override public void hotload() { - if(!isStudio()) - { + if (!isStudio()) { return; } diff --git a/src/main/java/com/volmit/iris/util/data/B.java b/src/main/java/com/volmit/iris/util/data/B.java index d5d99a6a1..1664c689b 100644 --- a/src/main/java/com/volmit/iris/util/data/B.java +++ b/src/main/java/com/volmit/iris/util/data/B.java @@ -23,7 +23,6 @@ import com.volmit.iris.core.IrisSettings; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.scheduling.ChronoLatch; import it.unimi.dsi.fastutil.ints.*; -import net.minecraft.world.level.levelgen.OreVeinifier; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; @@ -269,18 +268,12 @@ public class B { public static BlockData toDeepSlateOre(BlockData block, BlockData ore) { int key = ore.getMaterial().ordinal(); - if(isDeepSlate(block)) - { - if(normal2DeepslateCache.containsKey(key)) - { + if (isDeepSlate(block)) { + if (normal2DeepslateCache.containsKey(key)) { return Material.values()[normal2DeepslateCache.get(key)].createBlockData(); } - } - - else - { - if(deepslate2NormalCache.containsKey(key)) - { + } else { + if (deepslate2NormalCache.containsKey(key)) { return Material.values()[deepslate2NormalCache.get(key)].createBlockData(); } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/JigsawPieceHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/JigsawPieceHandler.java index d30c4670a..759f32933 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/JigsawPieceHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/JigsawPieceHandler.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.Iris; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.engine.object.IrisJigsawPiece; -import com.volmit.iris.engine.object.IrisJigsawStructure; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.decree.DecreeParameterHandler; diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/JigsawStructureHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/JigsawStructureHandler.java index 4a630ead4..f58cb7cca 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/JigsawStructureHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/JigsawStructureHandler.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.Iris; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.engine.object.IrisJigsawStructure; -import com.volmit.iris.engine.object.IrisRegion; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.decree.DecreeParameterHandler; diff --git a/src/main/java/com/volmit/iris/util/matter/MatterCavern.java b/src/main/java/com/volmit/iris/util/matter/MatterCavern.java index 601339913..111b51008 100644 --- a/src/main/java/com/volmit/iris/util/matter/MatterCavern.java +++ b/src/main/java/com/volmit/iris/util/matter/MatterCavern.java @@ -28,18 +28,15 @@ public class MatterCavern { private final String customBiome; private final byte liquid; // 0 none 1 water 2 lava - public boolean isAir() - { + public boolean isAir() { return liquid == 0; } - public boolean isWater() - { + public boolean isWater() { return liquid == 1; } - public boolean isLava() - { + public boolean isLava() { return liquid == 2; } } From 5aa6c98dc1087f467e55a855d2caa6e0d9f7a9a4 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 4 Sep 2021 15:00:17 -0400 Subject: [PATCH 17/17] V+ --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 481d1622c..88d3ca5eb 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ plugins { } group 'com.volmit.iris' -version '1.8.3' +version '1.8.4' def apiVersion = '1.17' def name = getRootProject().getName() // Defined in settings.gradle def main = 'com.volmit.iris.Iris'