From c7539dc5dd6f1dc047d5dc86f2914c3c18690f39 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 10 Dec 2020 22:47:53 -0700 Subject: [PATCH] haha yes it works sort of --- src/main/java/com/dfsek/terra/TerraWorld.java | 4 ++-- .../dfsek/terra/api/gaea/profiler/WorldProfiler.java | 7 ++++--- .../terra/api/generic/generator/ChunkGenerator.java | 1 + .../api/generic/generator/TerraChunkGenerator.java | 3 ++- .../api/implementations/bukkit/TerraBukkitPlugin.java | 10 +++++++--- .../bukkit/generator/BukkitChunkGeneratorWrapper.java | 9 ++++++--- .../dfsek/terra/config/loaders/MaterialSetLoader.java | 3 +-- .../java/com/dfsek/terra/config/loaders/Types.java | 2 +- .../dfsek/terra/generation/TerraChunkGenerator.java | 9 +++++---- 9 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/dfsek/terra/TerraWorld.java b/src/main/java/com/dfsek/terra/TerraWorld.java index 50ca0751e..1d90a3072 100644 --- a/src/main/java/com/dfsek/terra/TerraWorld.java +++ b/src/main/java/com/dfsek/terra/TerraWorld.java @@ -2,8 +2,8 @@ package com.dfsek.terra; import com.dfsek.terra.api.gaea.biome.BiomeGrid; import com.dfsek.terra.api.generic.TerraPlugin; -import com.dfsek.terra.api.generic.generator.TerraChunkGenerator; import com.dfsek.terra.api.generic.world.World; +import com.dfsek.terra.api.implementations.bukkit.generator.BukkitChunkGenerator; import com.dfsek.terra.biome.BiomeZone; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.biome.grid.master.TerraRadialBiomeGrid; @@ -55,7 +55,7 @@ public class TerraWorld { } public static boolean isTerraWorld(World w) { - return w.getGenerator() instanceof TerraChunkGenerator; + return w.getGenerator() instanceof BukkitChunkGenerator; } public TerraBiomeGrid getGrid() { diff --git a/src/main/java/com/dfsek/terra/api/gaea/profiler/WorldProfiler.java b/src/main/java/com/dfsek/terra/api/gaea/profiler/WorldProfiler.java index 9a493930d..f98e284e5 100644 --- a/src/main/java/com/dfsek/terra/api/gaea/profiler/WorldProfiler.java +++ b/src/main/java/com/dfsek/terra/api/gaea/profiler/WorldProfiler.java @@ -1,7 +1,8 @@ package com.dfsek.terra.api.gaea.profiler; -import com.dfsek.terra.api.generic.generator.TerraChunkGenerator; import com.dfsek.terra.api.generic.world.World; +import com.dfsek.terra.api.implementations.bukkit.generator.BukkitChunkGenerator; +import com.dfsek.terra.api.implementations.bukkit.generator.BukkitChunkGeneratorWrapper; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import net.jafama.FastMath; @@ -15,7 +16,7 @@ public class WorldProfiler { private boolean isProfiling; public WorldProfiler(World w) { - if(!(w.getGenerator() instanceof TerraChunkGenerator)) + if(!(w.getGenerator() instanceof BukkitChunkGenerator)) throw new IllegalArgumentException("Attempted to instantiate profiler on non-Gaea managed world!"); this.addMeasurement(new Measurement(2500000, DataType.PERIOD_MILLISECONDS), "TotalChunkGenTime") .addMeasurement(new Measurement(2500000, DataType.PERIOD_MILLISECONDS), "ChunkBaseGenTime") @@ -23,7 +24,7 @@ public class WorldProfiler { .addMeasurement(new Measurement(2000000, DataType.PERIOD_MILLISECONDS), "PopulationManagerTime"); isProfiling = false; this.world = w; - ((TerraChunkGenerator) w.getGenerator()).attachProfiler(this); + ((BukkitChunkGeneratorWrapper) ((BukkitChunkGenerator) w.getGenerator()).getHandle()).getDelegate().attachProfiler(this); } public String getResultsFormatted() { diff --git a/src/main/java/com/dfsek/terra/api/generic/generator/ChunkGenerator.java b/src/main/java/com/dfsek/terra/api/generic/generator/ChunkGenerator.java index bda0a2fb3..09593b2f8 100644 --- a/src/main/java/com/dfsek/terra/api/generic/generator/ChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/api/generic/generator/ChunkGenerator.java @@ -22,6 +22,7 @@ public interface ChunkGenerator extends Handle { ChunkData generateChunkData(@NotNull World world, @NotNull Random random, int x, int z, @NotNull BiomeGrid biome); + List getDefaultPopulators(World world); interface ChunkData { diff --git a/src/main/java/com/dfsek/terra/api/generic/generator/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/api/generic/generator/TerraChunkGenerator.java index ff3821387..e76a54497 100644 --- a/src/main/java/com/dfsek/terra/api/generic/generator/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/api/generic/generator/TerraChunkGenerator.java @@ -9,7 +9,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Random; public interface TerraChunkGenerator { - void generateChunkData(@NotNull World world, @NotNull Random random, int x, int z, @NotNull BiomeGrid biome, ChunkGenerator.ChunkData data); + ChunkGenerator.ChunkData generateChunkData(@NotNull World world, @NotNull Random random, int x, int z, @NotNull BiomeGrid biome, ChunkGenerator.ChunkData original); void attachProfiler(WorldProfiler profiler); @@ -24,4 +24,5 @@ public interface TerraChunkGenerator { boolean shouldGenerateStructures(); ConfigPack getConfigPack(); + } diff --git a/src/main/java/com/dfsek/terra/api/implementations/bukkit/TerraBukkitPlugin.java b/src/main/java/com/dfsek/terra/api/implementations/bukkit/TerraBukkitPlugin.java index f3340d0f3..638269366 100644 --- a/src/main/java/com/dfsek/terra/api/implementations/bukkit/TerraBukkitPlugin.java +++ b/src/main/java/com/dfsek/terra/api/implementations/bukkit/TerraBukkitPlugin.java @@ -6,11 +6,14 @@ import com.dfsek.terra.api.GenericLoaders; import com.dfsek.terra.api.gaea.GaeaPlugin; import com.dfsek.terra.api.gaea.lang.Language; import com.dfsek.terra.api.generic.TerraPlugin; +import com.dfsek.terra.api.generic.world.Biome; import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.api.generic.world.WorldHandle; import com.dfsek.terra.api.generic.world.block.BlockData; import com.dfsek.terra.api.generic.world.block.MaterialData; +import com.dfsek.terra.api.implementations.bukkit.generator.BukkitChunkGenerator; import com.dfsek.terra.api.implementations.bukkit.generator.BukkitChunkGeneratorWrapper; +import com.dfsek.terra.api.implementations.bukkit.world.BukkitBiome; import com.dfsek.terra.command.TerraCommand; import com.dfsek.terra.command.structure.LocateCommand; import com.dfsek.terra.config.base.ConfigPack; @@ -24,7 +27,6 @@ import com.dfsek.terra.registry.ConfigRegistry; import com.dfsek.terra.util.PaperUtil; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; -import org.bukkit.block.Biome; import org.bukkit.command.PluginCommand; import org.bukkit.entity.EntityType; import org.bukkit.generator.ChunkGenerator; @@ -130,7 +132,8 @@ public class TerraBukkitPlugin extends GaeaPlugin implements TerraPlugin { } public TerraWorld getWorld(World w) { - if(!(w.getGenerator() instanceof TerraChunkGenerator)) throw new IllegalArgumentException("Not a Terra world!"); + if(!(w.getGenerator() instanceof BukkitChunkGenerator)) + throw new IllegalArgumentException("Not a Terra world! " + w.getGenerator()); if(!worlds.containsKey(w.getName())) { getLogger().warning("Unexpected world load detected: \"" + w.getName() + "\""); return new TerraWorld(w, ((TerraChunkGenerator) w.getGenerator()).getConfigPack(), this); @@ -151,9 +154,10 @@ public class TerraBukkitPlugin extends GaeaPlugin implements TerraPlugin { @Override public void register(TypeRegistry registry) { - registry.registerLoader(Biome.class, (t, o, l) -> Biome.valueOf((String) o)) + registry .registerLoader(BlockData.class, (t, o, l) -> handle.createBlockData((String) o)) .registerLoader(MaterialData.class, (t, o, l) -> handle.createMaterialData((String) o)) + .registerLoader(Biome.class, (t, o, l) -> new BukkitBiome(org.bukkit.block.Biome.valueOf((String) o))) .registerLoader(EntityType.class, (t, o, l) -> EntityType.valueOf((String) o)); genericLoaders.register(registry); } diff --git a/src/main/java/com/dfsek/terra/api/implementations/bukkit/generator/BukkitChunkGeneratorWrapper.java b/src/main/java/com/dfsek/terra/api/implementations/bukkit/generator/BukkitChunkGeneratorWrapper.java index f3d7d470e..0c9b846d9 100644 --- a/src/main/java/com/dfsek/terra/api/implementations/bukkit/generator/BukkitChunkGeneratorWrapper.java +++ b/src/main/java/com/dfsek/terra/api/implementations/bukkit/generator/BukkitChunkGeneratorWrapper.java @@ -19,8 +19,11 @@ public class BukkitChunkGeneratorWrapper extends ChunkGenerator { @Override public @NotNull ChunkData generateChunkData(@NotNull World world, @NotNull Random random, int x, int z, @NotNull BiomeGrid biome) { BukkitWorld bukkitWorld = new BukkitWorld(world); - BukkitChunkGenerator.BukkitChunkData data = new BukkitChunkGenerator.BukkitChunkData(createChunkData(world)); - delegate.generateChunkData(bukkitWorld, random, x, z, new BukkitBiomeGrid(biome), new BukkitChunkGenerator.BukkitChunkData(createChunkData(bukkitWorld.getHandle()))); - return data.getHandle(); + + return (ChunkData) delegate.generateChunkData(bukkitWorld, random, x, z, new BukkitBiomeGrid(biome), new BukkitChunkGenerator.BukkitChunkData(createChunkData(world))).getHandle(); + } + + public TerraChunkGenerator getDelegate() { + return delegate; } } diff --git a/src/main/java/com/dfsek/terra/config/loaders/MaterialSetLoader.java b/src/main/java/com/dfsek/terra/config/loaders/MaterialSetLoader.java index c582f8714..3924521d1 100644 --- a/src/main/java/com/dfsek/terra/config/loaders/MaterialSetLoader.java +++ b/src/main/java/com/dfsek/terra/config/loaders/MaterialSetLoader.java @@ -5,7 +5,6 @@ import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.terra.api.generic.world.block.MaterialData; import com.dfsek.terra.util.MaterialSet; -import org.bukkit.Material; import java.lang.reflect.Type; import java.util.List; @@ -20,7 +19,7 @@ public class MaterialSetLoader implements TypeLoader { for(String string : stringData) { try { if(string.startsWith("#")) set.addTag(string.substring(1)); - else set.add((MaterialData) configLoader.loadType(Material.class, string)); + else set.add((MaterialData) configLoader.loadType(MaterialData.class, string)); } catch(NullPointerException e) { throw new LoadException("Invalid data identifier \"" + string + "\"", e); } diff --git a/src/main/java/com/dfsek/terra/config/loaders/Types.java b/src/main/java/com/dfsek/terra/config/loaders/Types.java index 4eb23e120..6271084a2 100644 --- a/src/main/java/com/dfsek/terra/config/loaders/Types.java +++ b/src/main/java/com/dfsek/terra/config/loaders/Types.java @@ -4,8 +4,8 @@ import com.dfsek.terra.api.gaea.math.ProbabilityCollection; import com.dfsek.terra.api.gaea.tree.Tree; import com.dfsek.terra.api.gaea.world.Flora; import com.dfsek.terra.api.gaea.world.palette.Palette; +import com.dfsek.terra.api.generic.world.block.BlockData; import org.bukkit.Material; -import org.bukkit.block.data.BlockData; import java.lang.reflect.Type; import java.util.Set; diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index b22620085..8ef632b6f 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -95,8 +95,8 @@ public class TerraChunkGenerator implements com.dfsek.terra.api.generic.generato @Override - @SuppressWarnings({"deprecation", "try"}) - public void generateChunkData(@NotNull World world, @NotNull Random random, int chunkX, int chunkZ, @NotNull BiomeGrid biome, ChunkGenerator.ChunkData chunk) { + @SuppressWarnings({"try"}) + public ChunkGenerator.ChunkData generateChunkData(@NotNull World world, @NotNull Random random, int chunkX, int chunkZ, @NotNull BiomeGrid biome, ChunkGenerator.ChunkData chunk) { TerraWorld tw = main.getWorld(world); com.dfsek.terra.api.gaea.biome.BiomeGrid grid = tw.getGrid(); try(ProfileFuture ignore = tw.getProfiler().measure("TotalChunkGenTime")) { @@ -105,7 +105,7 @@ public class TerraChunkGenerator implements com.dfsek.terra.api.generic.generato interp = new ChunkInterpolator3(world, chunkX, chunkZ, tw.getGrid()); if(needsLoad) load(world); // Load population data for world. - if(!tw.isSafe()) return; + if(!tw.isSafe()) return chunk; int xOrig = (chunkX << 4); int zOrig = (chunkZ << 4); @@ -142,7 +142,7 @@ public class TerraChunkGenerator implements com.dfsek.terra.api.generic.generato } paletteLevel++; } else if(y <= sea) { - chunk.setBlock(x, y, z, seaPalette.get(sea - y, x + xOrig, z + zOrig)); + //chunk.setBlock(x, y, z, seaPalette.get(sea - y, x + xOrig, z + zOrig)); if(justSet && c.doSlabs()) { SlabUtil.prepareBlockPartCeiling(data, chunk.getBlockData(x, y, z), chunk, new Vector3(x, y, z), c.getSlabPalettes(), c.getStairPalettes(), c.getSlabThreshold(), sampler); } @@ -170,6 +170,7 @@ public class TerraChunkGenerator implements com.dfsek.terra.api.generic.generato biome.setBiome(x << 2, z << 2, b.getVanillaBiome()); } } + return chunk; } }