mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-18 14:50:56 +00:00
Trees on Bukkit
This commit is contained in:
@@ -15,6 +15,7 @@ public class Cactus extends FractalTree {
|
|||||||
main.getWorldHandle().createMaterialData("minecraft:red_sand"));
|
main.getWorldHandle().createMaterialData("minecraft:red_sand"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a TreeGrower at an origin location.
|
* Instantiates a TreeGrower at an origin location.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -23,16 +23,16 @@ public class Transformer<F, T> {
|
|||||||
* @return Result
|
* @return Result
|
||||||
*/
|
*/
|
||||||
public T translate(F from) {
|
public T translate(F from) {
|
||||||
List<TransformException> exceptions = new ArrayList<>();
|
List<Exception> exceptions = new ArrayList<>();
|
||||||
for(Transform<F, T> transform : transformer) {
|
for(Transform<F, T> transform : transformer) {
|
||||||
try {
|
try {
|
||||||
return transform.transform(from);
|
return transform.transform(from);
|
||||||
} catch(TransformException exception) {
|
} catch(Exception exception) {
|
||||||
exceptions.add(exception);
|
exceptions.add(exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StringBuilder exBuilder = new StringBuilder("Could not transform input; all attempts failed: ").append(from.toString()).append("\n");
|
StringBuilder exBuilder = new StringBuilder("Could not transform input; all attempts failed: ").append(from.toString()).append("\n");
|
||||||
for(TransformException exception : exceptions) exBuilder.append(exception.getMessage()).append("\n");
|
for(Exception exception : exceptions) exBuilder.append(exception.getMessage()).append("\n");
|
||||||
throw new AttemptsFailedException(exBuilder.toString());
|
throw new AttemptsFailedException(exBuilder.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.dfsek.terra.registry;
|
|||||||
import com.dfsek.terra.api.gaea.tree.Tree;
|
import com.dfsek.terra.api.gaea.tree.Tree;
|
||||||
import com.dfsek.terra.api.gaea.tree.fractal.FractalTree;
|
import com.dfsek.terra.api.gaea.tree.fractal.FractalTree;
|
||||||
import com.dfsek.terra.api.gaea.tree.fractal.trees.Cactus;
|
import com.dfsek.terra.api.gaea.tree.fractal.trees.Cactus;
|
||||||
|
import com.dfsek.terra.api.gaea.tree.fractal.trees.IceSpike;
|
||||||
import com.dfsek.terra.api.gaea.tree.fractal.trees.OakTree;
|
import com.dfsek.terra.api.gaea.tree.fractal.trees.OakTree;
|
||||||
import com.dfsek.terra.api.gaea.tree.fractal.trees.ShatteredPillar;
|
import com.dfsek.terra.api.gaea.tree.fractal.trees.ShatteredPillar;
|
||||||
import com.dfsek.terra.api.gaea.tree.fractal.trees.ShatteredTree;
|
import com.dfsek.terra.api.gaea.tree.fractal.trees.ShatteredTree;
|
||||||
@@ -48,6 +49,7 @@ public class TreeRegistry extends TerraRegistry<Tree> {
|
|||||||
addTree("SPRUCE");
|
addTree("SPRUCE");
|
||||||
addTree("SWAMP_OAK");
|
addTree("SWAMP_OAK");
|
||||||
tryAdd("SMALL_SHATTERED_PILLAR", SmallShatteredPillar.class);
|
tryAdd("SMALL_SHATTERED_PILLAR", SmallShatteredPillar.class);
|
||||||
|
tryAdd("ICE_SPIKE", IceSpike.class);
|
||||||
addTree("TALL_BIRCH");
|
addTree("TALL_BIRCH");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +83,6 @@ public class TreeRegistry extends TerraRegistry<Tree> {
|
|||||||
public boolean plant(Location l, Random r) {
|
public boolean plant(Location l, Random r) {
|
||||||
try {
|
try {
|
||||||
FractalTree tree = constructor.newInstance(l, r, main);
|
FractalTree tree = constructor.newInstance(l, r, main);
|
||||||
if(!getSpawnable().contains(l.subtract(0, 1, 0).getBlock().getType())) return false;
|
|
||||||
tree.grow();
|
tree.grow();
|
||||||
tree.plant();
|
tree.plant();
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.dfsek.terra.util;
|
||||||
|
|
||||||
|
public final class StringUtils {
|
||||||
|
/**
|
||||||
|
* Strip Minecraft namespace from string
|
||||||
|
*
|
||||||
|
* @param in String to strip namespace of
|
||||||
|
* @return Stripped string/
|
||||||
|
*/
|
||||||
|
public static String stripMinecraftNamespace(String in) {
|
||||||
|
if(!in.startsWith("minecraft:")) return in;
|
||||||
|
return in.substring(10);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import com.dfsek.terra.api.generic.world.WorldHandle;
|
|||||||
import com.dfsek.terra.api.generic.world.block.Block;
|
import com.dfsek.terra.api.generic.world.block.Block;
|
||||||
import com.dfsek.terra.api.generic.world.block.BlockData;
|
import com.dfsek.terra.api.generic.world.block.BlockData;
|
||||||
import com.dfsek.terra.api.generic.world.block.MaterialData;
|
import com.dfsek.terra.api.generic.world.block.MaterialData;
|
||||||
|
import com.dfsek.terra.api.translator.Transformer;
|
||||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||||
import com.dfsek.terra.bukkit.world.block.BukkitMaterialData;
|
import com.dfsek.terra.bukkit.world.block.BukkitMaterialData;
|
||||||
import com.dfsek.terra.bukkit.world.block.data.BukkitMultipleFacing;
|
import com.dfsek.terra.bukkit.world.block.data.BukkitMultipleFacing;
|
||||||
@@ -13,18 +14,22 @@ import com.dfsek.terra.bukkit.world.block.data.BukkitStairs;
|
|||||||
import com.dfsek.terra.bukkit.world.block.data.BukkitWaterlogged;
|
import com.dfsek.terra.bukkit.world.block.data.BukkitWaterlogged;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.TreeType;
|
|
||||||
import org.bukkit.block.data.MultipleFacing;
|
import org.bukkit.block.data.MultipleFacing;
|
||||||
import org.bukkit.block.data.Waterlogged;
|
import org.bukkit.block.data.Waterlogged;
|
||||||
import org.bukkit.block.data.type.Stairs;
|
import org.bukkit.block.data.type.Stairs;
|
||||||
|
|
||||||
public class BukkitWorldHandle implements WorldHandle {
|
public class BukkitWorldHandle implements WorldHandle {
|
||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
|
private Transformer<String, Tree> treeTransformer;
|
||||||
|
|
||||||
public BukkitWorldHandle(TerraPlugin main) {
|
public BukkitWorldHandle(TerraPlugin main) {
|
||||||
this.main = main;
|
this.main = main;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setTreeTransformer(Transformer<String, Tree> treeTransformer) {
|
||||||
|
this.treeTransformer = treeTransformer;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setBlockData(Block block, BlockData data, boolean physics) {
|
public void setBlockData(Block block, BlockData data, boolean physics) {
|
||||||
block.setBlockData(data, physics);
|
block.setBlockData(data, physics);
|
||||||
@@ -56,6 +61,6 @@ public class BukkitWorldHandle implements WorldHandle {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Tree getTree(String id) {
|
public Tree getTree(String id) {
|
||||||
return new BukkitTree(TreeType.valueOf(id), main);
|
return treeTransformer.translate(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,12 +5,15 @@ import com.dfsek.terra.TerraWorld;
|
|||||||
import com.dfsek.terra.api.GenericLoaders;
|
import com.dfsek.terra.api.GenericLoaders;
|
||||||
import com.dfsek.terra.api.gaea.lang.Language;
|
import com.dfsek.terra.api.gaea.lang.Language;
|
||||||
import com.dfsek.terra.api.generic.TerraPlugin;
|
import com.dfsek.terra.api.generic.TerraPlugin;
|
||||||
|
import com.dfsek.terra.api.generic.Tree;
|
||||||
import com.dfsek.terra.api.generic.inventory.ItemHandle;
|
import com.dfsek.terra.api.generic.inventory.ItemHandle;
|
||||||
import com.dfsek.terra.api.generic.world.Biome;
|
import com.dfsek.terra.api.generic.world.Biome;
|
||||||
import com.dfsek.terra.api.generic.world.World;
|
import com.dfsek.terra.api.generic.world.World;
|
||||||
import com.dfsek.terra.api.generic.world.WorldHandle;
|
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.BlockData;
|
||||||
import com.dfsek.terra.api.generic.world.block.MaterialData;
|
import com.dfsek.terra.api.generic.world.block.MaterialData;
|
||||||
|
import com.dfsek.terra.api.translator.MapTransform;
|
||||||
|
import com.dfsek.terra.api.translator.Transformer;
|
||||||
import com.dfsek.terra.bukkit.command.command.TerraCommand;
|
import com.dfsek.terra.bukkit.command.command.TerraCommand;
|
||||||
import com.dfsek.terra.bukkit.command.command.structure.LocateCommand;
|
import com.dfsek.terra.bukkit.command.command.structure.LocateCommand;
|
||||||
import com.dfsek.terra.bukkit.generator.BukkitChunkGenerator;
|
import com.dfsek.terra.bukkit.generator.BukkitChunkGenerator;
|
||||||
@@ -25,8 +28,10 @@ import com.dfsek.terra.config.lang.LangUtil;
|
|||||||
import com.dfsek.terra.debug.Debug;
|
import com.dfsek.terra.debug.Debug;
|
||||||
import com.dfsek.terra.generation.TerraChunkGenerator;
|
import com.dfsek.terra.generation.TerraChunkGenerator;
|
||||||
import com.dfsek.terra.registry.ConfigRegistry;
|
import com.dfsek.terra.registry.ConfigRegistry;
|
||||||
|
import com.dfsek.terra.util.StringUtils;
|
||||||
import org.bstats.bukkit.Metrics;
|
import org.bstats.bukkit.Metrics;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.TreeType;
|
||||||
import org.bukkit.command.PluginCommand;
|
import org.bukkit.command.PluginCommand;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.generator.ChunkGenerator;
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
@@ -84,6 +89,19 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin {
|
|||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
Debug.setLogger(getLogger()); // Set debug logger.
|
Debug.setLogger(getLogger()); // Set debug logger.
|
||||||
|
|
||||||
|
((BukkitWorldHandle) handle).setTreeTransformer(new Transformer.Builder<String, Tree>()
|
||||||
|
.addTransform(id -> new BukkitTree(TreeType.valueOf(id), this)) // First try getting directly from enum
|
||||||
|
.addTransform(new MapTransform<String, Tree>() // Then try map of less stupid names
|
||||||
|
.add("JUNGLE_COCOA", new BukkitTree(TreeType.COCOA_TREE, this))
|
||||||
|
.add("LARGE_OAK", new BukkitTree(TreeType.BIG_TREE, this))
|
||||||
|
.add("LARGE_SPRUCE", new BukkitTree(TreeType.TALL_REDWOOD, this))
|
||||||
|
.add("SPRUCE", new BukkitTree(TreeType.REDWOOD, this))
|
||||||
|
.add("OAK", new BukkitTree(TreeType.TREE, this))
|
||||||
|
.add("MEGA_SPRUCE", new BukkitTree(TreeType.MEGA_REDWOOD, this))
|
||||||
|
.add("SWAMP_OAK", new BukkitTree(TreeType.SWAMP, this)))
|
||||||
|
.addTransform(id -> new BukkitTree(TreeType.valueOf(StringUtils.stripMinecraftNamespace(id)), this)) // Finally, try stripping minecraft namespace.
|
||||||
|
.build());
|
||||||
|
|
||||||
saveDefaultConfig();
|
saveDefaultConfig();
|
||||||
|
|
||||||
Metrics metrics = new Metrics(this, 9017); // Set up bStats.
|
Metrics metrics = new Metrics(this, 9017); // Set up bStats.
|
||||||
|
|||||||
Reference in New Issue
Block a user