diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java index c88de2a76..ae9175943 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java @@ -342,6 +342,9 @@ public class BukkitWorld extends AbstractWorld { public boolean generateTree(TreeGenerator.TreeType type, EditSession editSession, BlockVector3 pt) { World world = getWorld(); TreeType bukkitType = toBukkitTreeType(type); + if (bukkitType == TreeType.CHORUS_PLANT) { + pt = pt.add(0, 1, 0); // bukkit skips the feature gen which does this offset normally, so we have to add it back + } return type != null && world.generateTree(BukkitAdapter.adapt(world, pt), bukkitType, new EditSessionBlockChangeDelegate(editSession)); } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/TreeGenerator.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/TreeGenerator.java index c67731f56..dcb637a18 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/TreeGenerator.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/TreeGenerator.java @@ -40,7 +40,7 @@ import javax.annotation.Nullable; /** * Tree generator. */ -public class TreeGenerator { +public final class TreeGenerator { public enum TreeType { TREE("Oak tree", "oak", "tree", "regular"), @@ -82,10 +82,12 @@ public class TreeGenerator { JUNGLE_BUSH("Jungle bush", "junglebush", "jungleshrub"), RED_MUSHROOM("Red mushroom", "redmushroom", "redgiantmushroom"), BROWN_MUSHROOM("Brown mushroom", "brownmushroom", "browngiantmushroom"), + CRIMSON_FUNGUS("Crimson fungus", "crimsonfungus", "rednethermushroom"), + WARPED_FUNGUS("Warped fungus", "warpedfungus", "greennethermushroom"), RANDOM_MUSHROOM("Random mushroom", "randmushroom", "randommushroom") { @Override public boolean generate(EditSession editSession, BlockVector3 pos) throws MaxChangedBlocksException { - TreeType[] choices = { RED_MUSHROOM, BROWN_MUSHROOM }; + TreeType[] choices = { RED_MUSHROOM, BROWN_MUSHROOM, CRIMSON_FUNGUS, WARPED_FUNGUS }; return choices[TreeGenerator.RANDOM.nextInt(choices.length)].generate(editSession, pos); } }, @@ -99,6 +101,13 @@ public class TreeGenerator { return true; } }, + CHORUS_PLANT("Chorus plant", "chorusplant") { + @Override + public boolean generate(EditSession editSession, BlockVector3 pos) throws MaxChangedBlocksException { + // chorus plants have to generate starting in the end stone itself, not the air above the ground + return editSession.getWorld().generateTree(this, editSession, pos.subtract(0, 1, 0)); + } + }, RANDOM("Random tree", "rand", "random") { @Override public boolean generate(EditSession editSession, BlockVector3 pos) throws MaxChangedBlocksException {