From 352bce0d261cfefed0abe72d000c5823ec2fddbf Mon Sep 17 00:00:00 2001 From: Outspending <Dxrippy15@gmail.com> Date: Wed, 3 Jan 2024 08:31:43 -0700 Subject: [PATCH] Removed `Lombok` & Improved Performance --- build.gradle.kts | 4 - .../benchmarks/TestingBenchmark.java | 2 - .../biomesapi/BiomeTempModifier.java | 11 ++- .../biomesapi/BiomeUpdaterImpl.java | 7 +- .../biomesapi/biome/BiomeHandler.java | 19 ++++- .../outspending/biomesapi/nms/NMSHandler.java | 6 +- .../biomesapi/registry/BiomeResourceKey.java | 13 +-- .../biomesapi/renderer/AmbientParticle.java | 14 +++- .../biomesapi/{ => setter}/BiomeSetter.java | 6 +- .../biomesapi/setter/ClientBiomeSetter.java | 84 +++++++++++++++++++ .../GlobalBiomeSetter.java} | 28 ++++--- 11 files changed, 157 insertions(+), 37 deletions(-) rename src/main/java/me/outspending/biomesapi/{ => setter}/BiomeSetter.java (98%) create mode 100644 src/main/java/me/outspending/biomesapi/setter/ClientBiomeSetter.java rename src/main/java/me/outspending/biomesapi/{BiomeSetterImpl.java => setter/GlobalBiomeSetter.java} (84%) diff --git a/build.gradle.kts b/build.gradle.kts index 0c0cc2b..a65e509 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -87,10 +87,6 @@ allprojects { } } - dependencies { - compileOnly("org.projectlombok:lombok:1.18.30") - annotationProcessor("org.projectlombok:lombok:1.18.30") - } } val nmsVersions = listOf("1.19_R2", "1.19_R3", "1.20_R1", "1.20_R2", "1.20_R3") diff --git a/src/jmh/java/me/outspending/biomesapi/benchmarks/TestingBenchmark.java b/src/jmh/java/me/outspending/biomesapi/benchmarks/TestingBenchmark.java index 5d74500..6168ca6 100644 --- a/src/jmh/java/me/outspending/biomesapi/benchmarks/TestingBenchmark.java +++ b/src/jmh/java/me/outspending/biomesapi/benchmarks/TestingBenchmark.java @@ -1,7 +1,5 @@ package me.outspending.biomesapi.benchmarks; -import me.outspending.biomesapi.biome.CustomBiome; -import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.State; diff --git a/src/main/java/me/outspending/biomesapi/BiomeTempModifier.java b/src/main/java/me/outspending/biomesapi/BiomeTempModifier.java index 5d98233..3e049a6 100644 --- a/src/main/java/me/outspending/biomesapi/BiomeTempModifier.java +++ b/src/main/java/me/outspending/biomesapi/BiomeTempModifier.java @@ -1,6 +1,5 @@ package me.outspending.biomesapi; -import lombok.Getter; import me.outspending.biomesapi.annotations.AsOf; import net.minecraft.world.level.biome.Biome; @@ -11,7 +10,6 @@ * * @version 0.0.1 */ -@Getter @AsOf("0.0.1") public enum BiomeTempModifier { @@ -45,4 +43,13 @@ public enum BiomeTempModifier { this.modifier = modifier; } + /** + * This method returns the TemperatureModifier that corresponds to the enum value. + * + * @return The TemperatureModifier that corresponds to the enum value. + */ + public Biome.TemperatureModifier getModifier() { + return modifier; + } + } diff --git a/src/main/java/me/outspending/biomesapi/BiomeUpdaterImpl.java b/src/main/java/me/outspending/biomesapi/BiomeUpdaterImpl.java index 0e4cda8..d6bdb3b 100644 --- a/src/main/java/me/outspending/biomesapi/BiomeUpdaterImpl.java +++ b/src/main/java/me/outspending/biomesapi/BiomeUpdaterImpl.java @@ -16,10 +16,13 @@ public void updateChunk(Chunk chunk) { @Override public void updateChunks(Location from, Location to) { - if (from == null || to == null) + if (from == null || to == null) { throw new IllegalArgumentException("Locations cannot be null."); + } else { + List<Chunk> updateChunks = getChunksBetweenLocations(from, to); - updateChunks(getChunksBetweenLocations(from, to)); + updateChunks(updateChunks); + } } @Override diff --git a/src/main/java/me/outspending/biomesapi/biome/BiomeHandler.java b/src/main/java/me/outspending/biomesapi/biome/BiomeHandler.java index acb0f9f..b84f56e 100644 --- a/src/main/java/me/outspending/biomesapi/biome/BiomeHandler.java +++ b/src/main/java/me/outspending/biomesapi/biome/BiomeHandler.java @@ -1,7 +1,5 @@ package me.outspending.biomesapi.biome; -import lombok.Getter; -import lombok.experimental.UtilityClass; import me.outspending.biomesapi.annotations.AsOf; import me.outspending.biomesapi.exceptions.UnknownBiomeException; import me.outspending.biomesapi.registry.BiomeResourceKey; @@ -20,12 +18,25 @@ * @version 0.0.1 */ @AsOf("0.0.1") -@UtilityClass public class BiomeHandler { - @Getter private static final List<CustomBiome> registeredBiomes = new ArrayList<>(); + public BiomeHandler() { + throw new UnsupportedOperationException("This is a utility class and cannot be instantiated."); + } + + /** + * This method gets the registered biomes list + * + * @version 0.0.1 + * @return + */ + @AsOf("0.0.1") + public static List<CustomBiome> getRegisteredBiomes() { + return registeredBiomes; + } + /** * This method retrieves a Biome object from the Minecraft server's biome registry. * It uses the Bukkit API to get the server instance and then accesses the server's biome registry. diff --git a/src/main/java/me/outspending/biomesapi/nms/NMSHandler.java b/src/main/java/me/outspending/biomesapi/nms/NMSHandler.java index 8724e81..4a77339 100644 --- a/src/main/java/me/outspending/biomesapi/nms/NMSHandler.java +++ b/src/main/java/me/outspending/biomesapi/nms/NMSHandler.java @@ -1,6 +1,5 @@ package me.outspending.biomesapi.nms; -import lombok.experimental.UtilityClass; import me.outspending.biomesapi.annotations.AsOf; import me.outspending.biomesapi.exceptions.UnknownNMSVersionException; import org.bukkit.Bukkit; @@ -16,7 +15,6 @@ * * @version 0.0.1 */ -@UtilityClass @AsOf("0.0.1") public class NMSHandler { @@ -25,6 +23,10 @@ public class NMSHandler { */ private static NMS NMS_VERSION; + public NMSHandler() { + throw new UnsupportedOperationException("This is a utility class and cannot be instantiated."); + } + /** * Static initializer for the NMSHandler class. * This method is invoked when the class is loaded by the JVM. diff --git a/src/main/java/me/outspending/biomesapi/registry/BiomeResourceKey.java b/src/main/java/me/outspending/biomesapi/registry/BiomeResourceKey.java index c36ccc8..58d74d3 100644 --- a/src/main/java/me/outspending/biomesapi/registry/BiomeResourceKey.java +++ b/src/main/java/me/outspending/biomesapi/registry/BiomeResourceKey.java @@ -80,14 +80,15 @@ public String toString() { @Override @AsOf("0.0.1") public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null || getClass() != obj.getClass()) return false; + if (obj instanceof BiomeResourceKey key) { + ResourceLocation location = key.resourceLocation(); + String namespace = location.getNamespace(); + String path = location.getPath(); - BiomeResourceKey key = (BiomeResourceKey) obj; - String namespace = key.resourceLocation().getNamespace(); - String path = key.resourceLocation().getPath(); + return namespace.equals(this.resourceLocation.getNamespace()) && path.equals(this.resourceLocation.getPath()); + } - return namespace.equals(this.resourceLocation.getNamespace()) && path.equals(this.resourceLocation.getPath()); + return false; } } \ No newline at end of file diff --git a/src/main/java/me/outspending/biomesapi/renderer/AmbientParticle.java b/src/main/java/me/outspending/biomesapi/renderer/AmbientParticle.java index 8537e7b..406097e 100644 --- a/src/main/java/me/outspending/biomesapi/renderer/AmbientParticle.java +++ b/src/main/java/me/outspending/biomesapi/renderer/AmbientParticle.java @@ -1,6 +1,5 @@ package me.outspending.biomesapi.renderer; -import lombok.Getter; import me.outspending.biomesapi.annotations.AsOf; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.SimpleParticleType; @@ -12,7 +11,6 @@ * * @version 0.0.1 */ -@Getter @AsOf("0.0.1") public enum AmbientParticle { ASH(ParticleTypes.ASH), @@ -105,4 +103,16 @@ public enum AmbientParticle { this.particle = particle; } + /** + * This method returns the SimpleParticleType associated with the ambient particle. + * The @AsOf annotation indicates the version when this method was introduced. + * + * @return the SimpleParticleType associated with the ambient particle + * @version 0.0.1 + */ + @AsOf("0.0.1") + public SimpleParticleType getParticle() { + return particle; + } + } diff --git a/src/main/java/me/outspending/biomesapi/BiomeSetter.java b/src/main/java/me/outspending/biomesapi/setter/BiomeSetter.java similarity index 98% rename from src/main/java/me/outspending/biomesapi/BiomeSetter.java rename to src/main/java/me/outspending/biomesapi/setter/BiomeSetter.java index 201c0ed..f9ff85f 100644 --- a/src/main/java/me/outspending/biomesapi/BiomeSetter.java +++ b/src/main/java/me/outspending/biomesapi/setter/BiomeSetter.java @@ -1,6 +1,5 @@ -package me.outspending.biomesapi; +package me.outspending.biomesapi.setter; -import lombok.experimental.UtilityClass; import me.outspending.biomesapi.annotations.AsOf; import me.outspending.biomesapi.biome.CustomBiome; import org.bukkit.Chunk; @@ -22,6 +21,9 @@ @AsOf("0.0.1") public interface BiomeSetter { + int MIN_HEIGHT = -64; + int MAX_HEIGHT = 320; + /** * Returns the RegionAccessor for the given location. * diff --git a/src/main/java/me/outspending/biomesapi/setter/ClientBiomeSetter.java b/src/main/java/me/outspending/biomesapi/setter/ClientBiomeSetter.java new file mode 100644 index 0000000..a172fd6 --- /dev/null +++ b/src/main/java/me/outspending/biomesapi/setter/ClientBiomeSetter.java @@ -0,0 +1,84 @@ +package me.outspending.biomesapi.setter; + +import me.outspending.biomesapi.biome.CustomBiome; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.util.BoundingBox; +import org.bukkit.util.Vector; +import org.jetbrains.annotations.NotNull; + +public class ClientBiomeSetter implements BiomeSetter { + + private final Player client; + + public ClientBiomeSetter(@NotNull Player client) { + this.client = client; + } + + public Player getClient() { + return client; + } + + @Override + public void setBlockBiome(@NotNull Block block, @NotNull CustomBiome customBiome) { + setBlockBiome(block, customBiome, false); + } + + @Override + public void setBlockBiome(@NotNull Block block, @NotNull CustomBiome customBiome, boolean updateBiome) { + // TODO: Method + } + + @Override + public void setChunkBiome(@NotNull Chunk chunk, @NotNull CustomBiome customBiome) { + setChunkBiome(chunk, customBiome, false); + } + + @Override + public void setChunkBiome(@NotNull Chunk chunk, @NotNull CustomBiome customBiome, boolean updateBiome) { + setChunkBiome(chunk, MIN_HEIGHT, MAX_HEIGHT, customBiome, false); + } + + @Override + public void setChunkBiome(@NotNull Chunk chunk, int minHeight, int maxHeight, @NotNull CustomBiome customBiome) { + setChunkBiome(chunk, minHeight, maxHeight, customBiome, false); + } + + @Override + public void setChunkBiome(@NotNull Chunk chunk, int minHeight, int maxHeight, @NotNull CustomBiome customBiome, boolean updateBiome) { + // TODO: Method + } + + @Override + public void setBoundingBoxBiome(@NotNull World world, @NotNull BoundingBox boundingBox, @NotNull CustomBiome customBiome) { + // TODO: Method + } + + @Override + public void setRegionBiome(@NotNull Location from, @NotNull Location to, @NotNull CustomBiome customBiome) { + setRegionBiome(from, to , customBiome, false); + } + + @Override + public void setRegionBiome(@NotNull Location from, @NotNull Location to, @NotNull CustomBiome customBiome, boolean updateBiome) { + // TODO: Method + } + + @Override + public void setRegionBiome(@NotNull World world, @NotNull Vector from, @NotNull Vector to, @NotNull CustomBiome customBiome) { + setRegionBiome(world, from, to, customBiome, false); + } + + @Override + public void setRegionBiome(@NotNull World world, @NotNull Vector from, @NotNull Vector to, @NotNull CustomBiome customBiome, boolean updateBiome) { + setRegionBiome(world, from.toLocation(world), to.toLocation(world), customBiome, updateBiome); + } + + @Override + public void setRegionBiome(@NotNull World world, @NotNull Location from, @NotNull Location to, @NotNull CustomBiome customBiome, boolean updateBiome) { + + } +} diff --git a/src/main/java/me/outspending/biomesapi/BiomeSetterImpl.java b/src/main/java/me/outspending/biomesapi/setter/GlobalBiomeSetter.java similarity index 84% rename from src/main/java/me/outspending/biomesapi/BiomeSetterImpl.java rename to src/main/java/me/outspending/biomesapi/setter/GlobalBiomeSetter.java index c145a04..ba0c7aa 100644 --- a/src/main/java/me/outspending/biomesapi/BiomeSetterImpl.java +++ b/src/main/java/me/outspending/biomesapi/setter/GlobalBiomeSetter.java @@ -1,23 +1,20 @@ -package me.outspending.biomesapi; +package me.outspending.biomesapi.setter; +import me.outspending.biomesapi.BiomeUpdater; import me.outspending.biomesapi.biome.CustomBiome; import me.outspending.biomesapi.misc.PointRange3D; -import me.outspending.biomesapi.nms.NMSHandler; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.util.BoundingBox; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; -public class BiomeSetterImpl implements BiomeSetter { +public class GlobalBiomeSetter implements BiomeSetter { @SuppressWarnings("deprecation") private static final UnsafeValues UNSAFE = Bukkit.getUnsafe(); private static final BiomeUpdater BIOME_UPDATER = BiomeUpdater.of(); - private static final int MAX_HEIGHT = 320; - private static final int MIN_HEIGHT = -64; - @Override public void setBlockBiome(@NotNull Block block, @NotNull CustomBiome customBiome) { setBlockBiome(block, customBiome, false); @@ -112,14 +109,23 @@ public void setRegionBiome(@NotNull World world, @NotNull Vector from, @NotNull @Override public void setRegionBiome(@NotNull World world, @NotNull Location from, @NotNull Location to, @NotNull CustomBiome customBiome, boolean updateBiome) { - NMSHandler.executeNMS(nms -> { + if (!from.getWorld().equals(to.getWorld())) { + throw new RuntimeException("Locations must be in the same world!"); + } else { + NamespacedKey key = customBiome.toNamespacedKey(); PointRange3D range = PointRange3D.of(from, to); - nms.updateBiome(range.getMinLocation(world), range.getMaxLocation(world), customBiome.toNamespacedKey()); - }); + for (int x = range.minX(); x <= range.maxX(); x++) { + for (int y = range.minY(); y <= range.maxY(); y++) { + for (int z = range.minZ(); z <= range.maxZ(); z++) { + UNSAFE.setBiomeKey(world, x, y, z, key); + } + } + } - if (updateBiome) { - BIOME_UPDATER.updateChunks(from, to); + if (updateBiome) { + BIOME_UPDATER.updateChunks(from, to); + } } }