Add 1.16 tree types (#757)

This commit is contained in:
Aurora 2020-11-23 19:04:34 +01:00 committed by GitHub
parent 202631ca26
commit 11f50f8b53
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 21 deletions

View File

@ -54,28 +54,22 @@ public class ForestGenerator implements RegionFunction {
BlockState block = editSession.getBlock(position); BlockState block = editSession.getBlock(position);
BlockType t = block.getBlockType(); BlockType t = block.getBlockType();
switch (t.getInternalId()) { if (t.getMaterial().isSolid()) {
case BlockID.GRASS_BLOCK:
case BlockID.DIRT:
case BlockID.PODZOL:
case BlockID.COARSE_DIRT:
return treeType.generate(editSession, position.add(0, 1, 0)); return treeType.generate(editSession, position.add(0, 1, 0));
default: } else if (t.getMaterial().isReplacedDuringPlacement()) {
if (t.getMaterial().isReplacedDuringPlacement()) { // since the implementation's tree generators generally don't generate in non-air spots,
// since the implementation's tree generators generally don't generate in non-air spots, // we trick editsession history here in the first call
// we trick editsession history here in the first call editSession.setBlock(position, BlockTypes.AIR.getDefaultState());
editSession.setBlock(position, BlockTypes.AIR.getDefaultState()); // and then trick the generator here by directly setting into the world
// and then trick the generator here by directly setting into the world editSession.getWorld().setBlock(position, BlockTypes.AIR.getDefaultState());
editSession.getWorld().setBlock(position, BlockTypes.AIR.getDefaultState()); // so that now the generator can generate the tree
// so that now the generator can generate the tree boolean success = treeType.generate(editSession, position);
boolean success = treeType.generate(editSession, position); if (!success) {
if (!success) { editSession.setBlock(position, block); // restore on failure
editSession.setBlock(position, block); // restore on failure
}
return success;
} else { // Trees won't grow on this!
return false;
} }
return success;
} else { // Trees won't grow on this!
return false;
} }
} }
} }

View File

@ -82,10 +82,12 @@ public class TreeGenerator {
JUNGLE_BUSH("Jungle bush", "junglebush", "jungleshrub"), JUNGLE_BUSH("Jungle bush", "junglebush", "jungleshrub"),
RED_MUSHROOM("Red mushroom", "redmushroom", "redgiantmushroom"), RED_MUSHROOM("Red mushroom", "redmushroom", "redgiantmushroom"),
BROWN_MUSHROOM("Brown mushroom", "brownmushroom", "browngiantmushroom"), BROWN_MUSHROOM("Brown mushroom", "brownmushroom", "browngiantmushroom"),
CRIMSON_FUNGUS("Crimson fungus", "crimsonfungus", "rednethermushroom"),
WARPED_FUNGUS("Warped fungus", "warpedfungus", "greennethermushroom"),
RANDOM_MUSHROOM("Random mushroom", "randmushroom", "randommushroom") { RANDOM_MUSHROOM("Random mushroom", "randmushroom", "randommushroom") {
@Override @Override
public boolean generate(EditSession editSession, BlockVector3 pos) throws MaxChangedBlocksException { 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); return choices[TreeGenerator.RANDOM.nextInt(choices.length)].generate(editSession, pos);
} }
}, },
@ -99,6 +101,13 @@ public class TreeGenerator {
return true; 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") { RANDOM("Random tree", "rand", "random") {
@Override @Override
public boolean generate(EditSession editSession, BlockVector3 pos) throws MaxChangedBlocksException { public boolean generate(EditSession editSession, BlockVector3 pos) throws MaxChangedBlocksException {