reimplement sapling override

This commit is contained in:
dfsek
2020-12-24 14:58:53 -07:00
parent c8434e73ef
commit 0780539326
5 changed files with 42 additions and 15 deletions
@@ -1,11 +1,11 @@
package com.dfsek.terra; package com.dfsek.terra;
import com.dfsek.terra.api.platform.TerraPlugin; 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.api.platform.world.World;
import com.dfsek.terra.biome.BiomeZone; import com.dfsek.terra.biome.BiomeZone;
import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid;
import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.generation.MasterChunkGenerator;
public class TerraWorld { public class TerraWorld {
private final TerraBiomeGrid grid; private final TerraBiomeGrid grid;
@@ -24,7 +24,7 @@ public class TerraWorld {
} }
public static boolean isTerraWorld(World w) { public static boolean isTerraWorld(World w) {
return w.getGenerator() instanceof MasterChunkGenerator; return w.getGenerator().getHandle() instanceof GeneratorWrapper;
} }
public TerraBiomeGrid getGrid() { public TerraBiomeGrid getGrid() {
@@ -0,0 +1,6 @@
package com.dfsek.terra.api.platform.generator;
import com.dfsek.terra.api.platform.Handle;
public interface GeneratorWrapper extends Handle {
}
@@ -1,7 +1,7 @@
package com.dfsek.terra.bukkit.generator; 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.TerraPlugin;
import com.dfsek.terra.api.platform.generator.GeneratorWrapper;
import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.api.world.generation.TerraChunkGenerator;
import com.dfsek.terra.api.world.generation.population.PopulationManager; 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.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
public class BukkitChunkGeneratorWrapper extends ChunkGenerator implements Handle { public class BukkitChunkGeneratorWrapper extends ChunkGenerator implements GeneratorWrapper {
private static final Map<com.dfsek.terra.api.platform.world.World, PopulationManager> popMap = new HashMap<>(); private static final Map<com.dfsek.terra.api.platform.world.World, PopulationManager> popMap = new HashMap<>();
@@ -1,6 +1,21 @@
package com.dfsek.terra.bukkit.listeners; 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.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.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.event.world.StructureGrowEvent;
@@ -15,9 +30,19 @@ public class EventListener implements Listener {
this.main = main; this.main = main;
} }
private static final Transformer<TreeType, String> TREE_TYPE_STRING_TRANSFORMER = new Transformer.Builder<TreeType, String>()
.addTransform(new MapTransform<TreeType, String>()
.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 @EventHandler
public void onSaplingGrow(StructureGrowEvent e) { public void onSaplingGrow(StructureGrowEvent e) {
/*
World bukkit = new BukkitWorld(e.getWorld()); World bukkit = new BukkitWorld(e.getWorld());
if(!TerraWorld.isTerraWorld(bukkit)) return; if(!TerraWorld.isTerraWorld(bukkit)) return;
TerraWorld tw = main.getWorld(bukkit); TerraWorld tw = main.getWorld(bukkit);
@@ -28,14 +53,10 @@ public class EventListener implements Listener {
BlockData data = block.getBlockData(); BlockData data = block.getBlockData();
block.setType(Material.AIR); block.setType(Material.AIR);
TreeRegistry registry = c.getTreeRegistry(); TreeRegistry registry = c.getTreeRegistry();
Tree tree = registry.get(TreeType.fromBukkit(e.getSpecies()).toString()); Tree tree = registry.get(TREE_TYPE_STRING_TRANSFORMER.translate(e.getSpecies()));
Debug.info("Overriding tree type: " + e.getSpecies()); Debug.info("Overrode tree type: " + e.getSpecies());
if(tree instanceof TerraTree) { org.bukkit.Location location = e.getLocation().subtract(0, 1, 0);
if(!((TerraTree) tree).plantBlockCheck(e.getLocation().subtract(0, 1, 0), new FastRandom(), main)) { if(!tree.plant(new Location(bukkit, location.getX(), location.getY(), location.getZ()), new FastRandom())) block.setBlockData(data);
block.setBlockData(data);
}
} else if(!tree.plant(e.getLocation().subtract(0, 1, 0), new FastRandom(), main)) block.setBlockData(data);
*/
} }
} }
@@ -1,6 +1,6 @@
package com.dfsek.terra.fabric.world.generator; 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.api.util.FastRandom;
import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.fabric.TerraFabricPlugin; 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.StructuresConfig;
import net.minecraft.world.gen.chunk.VerticalBlockSample; 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 long seed;
private final MasterChunkGenerator delegate; private final MasterChunkGenerator delegate;
private final TerraBiomeSource biomeSource; private final TerraBiomeSource biomeSource;