From 0780539326d4c9a223b4c5cbc655100bdfece7e0 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 24 Dec 2020 14:58:53 -0700 Subject: [PATCH] reimplement sapling override --- .../main/java/com/dfsek/terra/TerraWorld.java | 4 +- .../platform/generator/GeneratorWrapper.java | 6 +++ .../BukkitChunkGeneratorWrapper.java | 4 +- .../terra/bukkit/listeners/EventListener.java | 39 ++++++++++++++----- .../FabricChunkGeneratorWrapper.java | 4 +- 5 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 common/src/main/java/com/dfsek/terra/api/platform/generator/GeneratorWrapper.java diff --git a/common/src/main/java/com/dfsek/terra/TerraWorld.java b/common/src/main/java/com/dfsek/terra/TerraWorld.java index 62efb8e94..6fddf3da5 100644 --- a/common/src/main/java/com/dfsek/terra/TerraWorld.java +++ b/common/src/main/java/com/dfsek/terra/TerraWorld.java @@ -1,11 +1,11 @@ package com.dfsek.terra; import com.dfsek.terra.api.platform.TerraPlugin; +import com.dfsek.terra.api.platform.generator.GeneratorWrapper; import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.biome.BiomeZone; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.config.base.ConfigPack; -import com.dfsek.terra.generation.MasterChunkGenerator; public class TerraWorld { private final TerraBiomeGrid grid; @@ -24,7 +24,7 @@ public class TerraWorld { } public static boolean isTerraWorld(World w) { - return w.getGenerator() instanceof MasterChunkGenerator; + return w.getGenerator().getHandle() instanceof GeneratorWrapper; } public TerraBiomeGrid getGrid() { diff --git a/common/src/main/java/com/dfsek/terra/api/platform/generator/GeneratorWrapper.java b/common/src/main/java/com/dfsek/terra/api/platform/generator/GeneratorWrapper.java new file mode 100644 index 000000000..60a05b386 --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/platform/generator/GeneratorWrapper.java @@ -0,0 +1,6 @@ +package com.dfsek.terra.api.platform.generator; + +import com.dfsek.terra.api.platform.Handle; + +public interface GeneratorWrapper extends Handle { +} diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java index 9f938d71c..695535ef4 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java @@ -1,7 +1,7 @@ package com.dfsek.terra.bukkit.generator; -import com.dfsek.terra.api.platform.Handle; import com.dfsek.terra.api.platform.TerraPlugin; +import com.dfsek.terra.api.platform.generator.GeneratorWrapper; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.api.world.generation.population.PopulationManager; @@ -30,7 +30,7 @@ import java.util.logging.Level; import java.util.stream.Collectors; import java.util.stream.Stream; -public class BukkitChunkGeneratorWrapper extends ChunkGenerator implements Handle { +public class BukkitChunkGeneratorWrapper extends ChunkGenerator implements GeneratorWrapper { private static final Map popMap = new HashMap<>(); diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/EventListener.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/EventListener.java index 8fb58bc2d..e56821ff0 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/EventListener.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/EventListener.java @@ -1,6 +1,21 @@ package com.dfsek.terra.bukkit.listeners; +import com.dfsek.terra.TerraWorld; +import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.platform.TerraPlugin; +import com.dfsek.terra.api.platform.world.World; +import com.dfsek.terra.api.transform.MapTransform; +import com.dfsek.terra.api.transform.Transformer; +import com.dfsek.terra.api.util.FastRandom; +import com.dfsek.terra.api.world.tree.Tree; +import com.dfsek.terra.bukkit.BukkitWorld; +import com.dfsek.terra.config.base.ConfigPack; +import com.dfsek.terra.debug.Debug; +import com.dfsek.terra.registry.TreeRegistry; +import org.bukkit.Material; +import org.bukkit.TreeType; +import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.world.StructureGrowEvent; @@ -15,9 +30,19 @@ public class EventListener implements Listener { this.main = main; } + private static final Transformer TREE_TYPE_STRING_TRANSFORMER = new Transformer.Builder() + .addTransform(new MapTransform() + .add(TreeType.COCOA_TREE, "JUNGLE_COCOA") + .add(TreeType.BIG_TREE, "LARGE_OAK") + .add(TreeType.TALL_REDWOOD, "LARGE_SPRUCE") + .add(TreeType.REDWOOD, "SPRUCE") + .add(TreeType.TREE, "OAK") + .add(TreeType.MEGA_REDWOOD, "MEGA_SPRUCE") + .add(TreeType.SWAMP, "SWAMP_OAK")) + .addTransform(TreeType::toString).build(); + @EventHandler public void onSaplingGrow(StructureGrowEvent e) { - /* World bukkit = new BukkitWorld(e.getWorld()); if(!TerraWorld.isTerraWorld(bukkit)) return; TerraWorld tw = main.getWorld(bukkit); @@ -28,14 +53,10 @@ public class EventListener implements Listener { BlockData data = block.getBlockData(); block.setType(Material.AIR); TreeRegistry registry = c.getTreeRegistry(); - Tree tree = registry.get(TreeType.fromBukkit(e.getSpecies()).toString()); - Debug.info("Overriding tree type: " + e.getSpecies()); - if(tree instanceof TerraTree) { - if(!((TerraTree) tree).plantBlockCheck(e.getLocation().subtract(0, 1, 0), new FastRandom(), main)) { - block.setBlockData(data); - } - } else if(!tree.plant(e.getLocation().subtract(0, 1, 0), new FastRandom(), main)) block.setBlockData(data); + Tree tree = registry.get(TREE_TYPE_STRING_TRANSFORMER.translate(e.getSpecies())); + Debug.info("Overrode tree type: " + e.getSpecies()); + org.bukkit.Location location = e.getLocation().subtract(0, 1, 0); + if(!tree.plant(new Location(bukkit, location.getX(), location.getY(), location.getZ()), new FastRandom())) block.setBlockData(data); - */ } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java index f25e68d2e..e4c88358e 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java @@ -1,6 +1,6 @@ package com.dfsek.terra.fabric.world.generator; -import com.dfsek.terra.api.platform.Handle; +import com.dfsek.terra.api.platform.generator.GeneratorWrapper; import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.fabric.TerraFabricPlugin; @@ -30,7 +30,7 @@ import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.chunk.StructuresConfig; import net.minecraft.world.gen.chunk.VerticalBlockSample; -public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Handle { +public class FabricChunkGeneratorWrapper extends ChunkGenerator implements GeneratorWrapper { private final long seed; private final MasterChunkGenerator delegate; private final TerraBiomeSource biomeSource;