Max log distance from trunk setting, bug fixes

This commit is contained in:
Esophose 2019-05-02 18:33:26 -06:00
parent a7787caa84
commit c98377bb93
11 changed files with 77 additions and 22 deletions

View File

@ -11,6 +11,7 @@ public class TreeDefinition {
private final String key; private final String key;
private final Set<IBlockData> logBlockData, leafBlockData, plantableSoilBlockData; private final Set<IBlockData> logBlockData, leafBlockData, plantableSoilBlockData;
private final IBlockData saplingBlockData; private final IBlockData saplingBlockData;
private final double maxLogDistanceFromTrunk;
private final int maxLeafDistanceFromLog; private final int maxLeafDistanceFromLog;
private final boolean detectLeavesDiagonally; private final boolean detectLeavesDiagonally;
private final boolean dropOriginalLog, dropOriginalLeaf; private final boolean dropOriginalLog, dropOriginalLeaf;
@ -18,14 +19,15 @@ public class TreeDefinition {
private final Set<ItemStack> requiredTools; private final Set<ItemStack> requiredTools;
public TreeDefinition(String key, Set<IBlockData> logBlockData, Set<IBlockData> leafBlockData, IBlockData saplingBlockData, public TreeDefinition(String key, Set<IBlockData> logBlockData, Set<IBlockData> leafBlockData, IBlockData saplingBlockData,
Set<IBlockData> plantableSoilBlockData, int maxLeafDistanceFromLog, boolean detectLeavesDiagonally, Set<IBlockData> plantableSoilBlockData, double maxLogDistanceFromTrunk, int maxLeafDistanceFromLog,
boolean dropOriginalLog, boolean dropOriginalLeaf, Set<TreeLoot> logLoot, Set<TreeLoot> leafLoot, boolean detectLeavesDiagonally, boolean dropOriginalLog, boolean dropOriginalLeaf, Set<TreeLoot> logLoot,
Set<TreeLoot> entireTreeLoot, Set<ItemStack> requiredTools) { Set<TreeLoot> leafLoot, Set<TreeLoot> entireTreeLoot, Set<ItemStack> requiredTools) {
this.key = key; this.key = key;
this.logBlockData = logBlockData; this.logBlockData = logBlockData;
this.leafBlockData = leafBlockData; this.leafBlockData = leafBlockData;
this.saplingBlockData = saplingBlockData; this.saplingBlockData = saplingBlockData;
this.plantableSoilBlockData = plantableSoilBlockData; this.plantableSoilBlockData = plantableSoilBlockData;
this.maxLogDistanceFromTrunk = maxLogDistanceFromTrunk;
this.maxLeafDistanceFromLog = maxLeafDistanceFromLog; this.maxLeafDistanceFromLog = maxLeafDistanceFromLog;
this.detectLeavesDiagonally = detectLeavesDiagonally; this.detectLeavesDiagonally = detectLeavesDiagonally;
this.dropOriginalLog = dropOriginalLog; this.dropOriginalLog = dropOriginalLog;
@ -81,6 +83,15 @@ public class TreeDefinition {
return Collections.unmodifiableSet(this.plantableSoilBlockData); return Collections.unmodifiableSet(this.plantableSoilBlockData);
} }
/**
* Gets the max distance away a log can be from the tree trunk in order to be part of the tree
*
* @return The max distance a log can be from the tree trunk
*/
public double getMaxLogDistanceFromTrunk() {
return this.maxLogDistanceFromTrunk;
}
/** /**
* Gets the max distance away a leaf can be from a log in order to be part of the tree * Gets the max distance away a leaf can be from a log in order to be part of the tree
* *

View File

@ -9,7 +9,6 @@ import com.songoda.ultimatetimber.tree.ITreeBlock;
import com.songoda.ultimatetimber.tree.TreeBlock; import com.songoda.ultimatetimber.tree.TreeBlock;
import com.songoda.ultimatetimber.tree.TreeBlockType; import com.songoda.ultimatetimber.tree.TreeBlockType;
import com.songoda.ultimatetimber.tree.TreeDefinition; import com.songoda.ultimatetimber.tree.TreeDefinition;
import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.FallingBlock; import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;

View File

@ -8,7 +8,7 @@ import org.bukkit.event.player.PlayerEvent;
* Abstract tree event containing tree's blocks and broke block * Abstract tree event containing tree's blocks and broke block
*/ */
public abstract class TreeEvent extends PlayerEvent { public abstract class TreeEvent extends PlayerEvent {
protected final DetectedTree detectedTree; protected final DetectedTree detectedTree;
public TreeEvent(Player player, DetectedTree detectedTree) { public TreeEvent(Player player, DetectedTree detectedTree) {

View File

@ -29,7 +29,7 @@ public class TreeFallEvent extends TreeEvent implements Cancellable {
@Override @Override
public boolean isCancelled() { public boolean isCancelled() {
return cancelled; return this.cancelled;
} }
@Override @Override

View File

@ -2,7 +2,6 @@ package com.songoda.ultimatetimber.manager;
import com.songoda.ultimatetimber.UltimateTimber; import com.songoda.ultimatetimber.UltimateTimber;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.HashMap; import java.util.HashMap;

View File

@ -98,7 +98,8 @@ public class CommandManager extends Manager implements CommandExecutor, TabCompl
} }
/** /**
* Checks if a player has a permission * Checks if a player does have a permission
* Sends them an error message if they don't
* *
* @param sender The CommandSender to check * @param sender The CommandSender to check
* @param permission The permission to check for * @param permission The permission to check for

View File

@ -62,7 +62,7 @@ public class SaplingManager extends Manager {
* @param treeBlock The ITreeBlock to replant for * @param treeBlock The ITreeBlock to replant for
*/ */
public void replantSaplingWithChance(TreeDefinition treeDefinition, ITreeBlock treeBlock) { public void replantSaplingWithChance(TreeDefinition treeDefinition, ITreeBlock treeBlock) {
if (!ConfigurationManager.Setting.FALLING_BLOCKS_REPLANT_SAPLINGS.getBoolean()) if (!ConfigurationManager.Setting.FALLING_BLOCKS_REPLANT_SAPLINGS.getBoolean() || !treeBlock.getLocation().getBlock().getType().equals(Material.AIR))
return; return;
double chance = ConfigurationManager.Setting.FALLING_BLOCKS_REPLANT_SAPLINGS_CHANCE.getDouble(); double chance = ConfigurationManager.Setting.FALLING_BLOCKS_REPLANT_SAPLINGS_CHANCE.getDouble();

View File

@ -62,6 +62,7 @@ public class TreeDefinitionManager extends Manager {
Set<IBlockData> leafBlockData = new HashSet<>(); Set<IBlockData> leafBlockData = new HashSet<>();
IBlockData saplingBlockData; IBlockData saplingBlockData;
Set<IBlockData> plantableSoilBlockData = new HashSet<>(); Set<IBlockData> plantableSoilBlockData = new HashSet<>();
double maxLogDistanceFromTrunk;
int maxLeafDistanceFromLog; int maxLeafDistanceFromLog;
boolean detectLeavesDiagonally; boolean detectLeavesDiagonally;
boolean dropOriginalLog; boolean dropOriginalLog;
@ -82,6 +83,7 @@ public class TreeDefinitionManager extends Manager {
for (String blockDataString : tree.getStringList("plantable-soil")) for (String blockDataString : tree.getStringList("plantable-soil"))
plantableSoilBlockData.add(versionAdapter.parseBlockDataFromString(blockDataString)); plantableSoilBlockData.add(versionAdapter.parseBlockDataFromString(blockDataString));
maxLogDistanceFromTrunk = tree.getDouble("max-log-distance-from-trunk");
maxLeafDistanceFromLog = tree.getInt("max-leaf-distance-from-log"); maxLeafDistanceFromLog = tree.getInt("max-leaf-distance-from-log");
detectLeavesDiagonally = tree.getBoolean("search-for-leaves-diagonally"); detectLeavesDiagonally = tree.getBoolean("search-for-leaves-diagonally");
dropOriginalLog = tree.getBoolean("drop-original-log"); dropOriginalLog = tree.getBoolean("drop-original-log");
@ -105,7 +107,7 @@ public class TreeDefinitionManager extends Manager {
for (String itemStackString : tree.getStringList("required-tools")) for (String itemStackString : tree.getStringList("required-tools"))
requiredTools.add(versionAdapter.parseItemStackFromString(itemStackString)); requiredTools.add(versionAdapter.parseItemStackFromString(itemStackString));
this.treeDefinitions.add(new TreeDefinition(key, logBlockData, leafBlockData, saplingBlockData, plantableSoilBlockData, this.treeDefinitions.add(new TreeDefinition(key, logBlockData, leafBlockData, saplingBlockData, plantableSoilBlockData, maxLogDistanceFromTrunk,
maxLeafDistanceFromLog, detectLeavesDiagonally, dropOriginalLog, dropOriginalLeaf, logLoot, leafLoot, entireTreeLoot, requiredTools)); maxLeafDistanceFromLog, detectLeavesDiagonally, dropOriginalLog, dropOriginalLeaf, logLoot, leafLoot, entireTreeLoot, requiredTools));
} }

View File

@ -8,6 +8,7 @@ import com.songoda.ultimatetimber.tree.TreeBlock;
import com.songoda.ultimatetimber.tree.TreeBlockSet; import com.songoda.ultimatetimber.tree.TreeBlockSet;
import com.songoda.ultimatetimber.tree.TreeBlockType; import com.songoda.ultimatetimber.tree.TreeBlockType;
import com.songoda.ultimatetimber.tree.TreeDefinition; import com.songoda.ultimatetimber.tree.TreeDefinition;
import org.bukkit.Location;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@ -91,7 +92,7 @@ public class TreeDetectionManager extends Manager {
List<Block> trunkBlocks = new ArrayList<>(); List<Block> trunkBlocks = new ArrayList<>();
trunkBlocks.add(initialBlock); trunkBlocks.add(initialBlock);
Block targetBlock = initialBlock; Block targetBlock = initialBlock;
while (this.isValidLogType(possibleTreeDefinitions, (targetBlock = targetBlock.getRelative(BlockFace.UP)))) { while (this.isValidLogType(possibleTreeDefinitions, null, (targetBlock = targetBlock.getRelative(BlockFace.UP)))) {
trunkBlocks.add(targetBlock); trunkBlocks.add(targetBlock);
possibleTreeDefinitions.retainAll(this.treeDefinitionManager.narrowTreeDefinition(possibleTreeDefinitions, targetBlock, TreeBlockType.LOG)); possibleTreeDefinitions.retainAll(this.treeDefinitionManager.narrowTreeDefinition(possibleTreeDefinitions, targetBlock, TreeBlockType.LOG));
} }
@ -105,7 +106,7 @@ public class TreeDetectionManager extends Manager {
// Detect branches off the main trunk // Detect branches off the main trunk
for (Block trunkBlock : trunkBlocks) for (Block trunkBlock : trunkBlocks)
this.recursiveBranchSearch(possibleTreeDefinitions, detectedTreeBlocks, trunkBlock, initialBlock.getLocation().getBlockY()); this.recursiveBranchSearch(possibleTreeDefinitions, trunkBlocks, detectedTreeBlocks, trunkBlock, initialBlock.getLocation().getBlockY());
// Detect leaves off the trunk/branches // Detect leaves off the trunk/branches
Set<ITreeBlock<Block>> branchBlocks = new HashSet<>(detectedTreeBlocks.getLogBlocks()); Set<ITreeBlock<Block>> branchBlocks = new HashSet<>(detectedTreeBlocks.getLogBlocks());
@ -128,7 +129,7 @@ public class TreeDetectionManager extends Manager {
for (Block block : groundBlocks) { for (Block block : groundBlocks) {
Block blockBelow = block.getRelative(BlockFace.DOWN); Block blockBelow = block.getRelative(BlockFace.DOWN);
boolean blockBelowIsLog = this.isValidLogType(possibleTreeDefinitions, blockBelow); boolean blockBelowIsLog = this.isValidLogType(possibleTreeDefinitions, null, blockBelow);
boolean blockBelowIsSoil = false; boolean blockBelowIsSoil = false;
for (IBlockData blockData : treeDefinitionManager.getPlantableSoilBlockData(actualTreeDefinition)) { for (IBlockData blockData : treeDefinitionManager.getPlantableSoilBlockData(actualTreeDefinition)) {
if (blockData.isSimilar(blockBelow)) { if (blockData.isSimilar(blockBelow)) {
@ -153,22 +154,23 @@ public class TreeDetectionManager extends Manager {
* Recursively searches for branches off a given block * Recursively searches for branches off a given block
* *
* @param treeDefinitions The possible tree definitions * @param treeDefinitions The possible tree definitions
* @param trunkBlocks The tree trunk blocks
* @param treeBlocks The detected tree blocks * @param treeBlocks The detected tree blocks
* @param block The next block to check for a branch * @param block The next block to check for a branch
* @param startingBlockY The Y coordinate of the initial block * @param startingBlockY The Y coordinate of the initial block
*/ */
private void recursiveBranchSearch(Set<TreeDefinition> treeDefinitions, TreeBlockSet<Block> treeBlocks, Block block, int startingBlockY) { private void recursiveBranchSearch(Set<TreeDefinition> treeDefinitions, List<Block> trunkBlocks, TreeBlockSet<Block> treeBlocks, Block block, int startingBlockY) {
if (treeBlocks.size() > this.maxLogBlocksAllowed) if (treeBlocks.size() > this.maxLogBlocksAllowed)
return; return;
for (Vector offset : this.onlyBreakLogsUpwards ? this.VALID_BRANCH_OFFSETS : this.VALID_TRUNK_OFFSETS) { for (Vector offset : this.onlyBreakLogsUpwards ? this.VALID_BRANCH_OFFSETS : this.VALID_TRUNK_OFFSETS) {
Block targetBlock = block.getRelative(offset.getBlockX(), offset.getBlockY(), offset.getBlockZ()); Block targetBlock = block.getRelative(offset.getBlockX(), offset.getBlockY(), offset.getBlockZ());
TreeBlock treeBlock = new TreeBlock(targetBlock, TreeBlockType.LOG); TreeBlock treeBlock = new TreeBlock(targetBlock, TreeBlockType.LOG);
if (this.isValidLogType(treeDefinitions, targetBlock) && !treeBlocks.contains(treeBlock)) { if (this.isValidLogType(treeDefinitions, trunkBlocks, targetBlock) && !treeBlocks.contains(treeBlock)) {
treeBlocks.add(treeBlock); treeBlocks.add(treeBlock);
treeDefinitions.retainAll(this.treeDefinitionManager.narrowTreeDefinition(treeDefinitions, targetBlock, TreeBlockType.LOG)); treeDefinitions.retainAll(this.treeDefinitionManager.narrowTreeDefinition(treeDefinitions, targetBlock, TreeBlockType.LOG));
if (!this.onlyBreakLogsUpwards || targetBlock.getLocation().getBlockY() > startingBlockY) if (!this.onlyBreakLogsUpwards || targetBlock.getLocation().getBlockY() > startingBlockY)
this.recursiveBranchSearch(treeDefinitions, treeBlocks, targetBlock, startingBlockY); this.recursiveBranchSearch(treeDefinitions, trunkBlocks, treeBlocks, targetBlock, startingBlockY);
} }
} }
} }
@ -177,6 +179,7 @@ public class TreeDetectionManager extends Manager {
* Recursively searches for leaves that are next to this tree * Recursively searches for leaves that are next to this tree
* *
* @param treeDefinitions The possible tree definitions * @param treeDefinitions The possible tree definitions
*
* @param treeBlocks The detected tree blocks * @param treeBlocks The detected tree blocks
* @param block The next block to check for a leaf * @param block The next block to check for a leaf
* @param distanceFromLog The distance this leaf is from a log * @param distanceFromLog The distance this leaf is from a log
@ -212,7 +215,7 @@ public class TreeDetectionManager extends Manager {
private boolean doesLeafBorderInvalidLog(Set<TreeDefinition> treeDefinitions, TreeBlockSet<Block> treeBlocks, Block block) { private boolean doesLeafBorderInvalidLog(Set<TreeDefinition> treeDefinitions, TreeBlockSet<Block> treeBlocks, Block block) {
for (Vector offset : this.VALID_TRUNK_OFFSETS) { for (Vector offset : this.VALID_TRUNK_OFFSETS) {
Block targetBlock = block.getRelative(offset.getBlockX(), offset.getBlockY(), offset.getBlockZ()); Block targetBlock = block.getRelative(offset.getBlockX(), offset.getBlockY(), offset.getBlockZ());
if (this.isValidLogType(treeDefinitions, targetBlock) && !treeBlocks.contains(new TreeBlock(targetBlock, TreeBlockType.LOG))) if (this.isValidLogType(treeDefinitions, null, targetBlock) && !treeBlocks.contains(new TreeBlock(targetBlock, TreeBlockType.LOG)))
return true; return true;
} }
return false; return false;
@ -222,17 +225,41 @@ public class TreeDetectionManager extends Manager {
* Checks if a given block is valid for the given TreeDefinitions * Checks if a given block is valid for the given TreeDefinitions
* *
* @param treeDefinitions The Set of TreeDefinitions to compare against * @param treeDefinitions The Set of TreeDefinitions to compare against
* @param trunkBlocks The trunk blocks of the tree for checking the distance
* @param block The Block to check * @param block The Block to check
* @return True if the block is a valid log type, otherwise false * @return True if the block is a valid log type, otherwise false
*/ */
private boolean isValidLogType(Set<TreeDefinition> treeDefinitions, Block block) { private boolean isValidLogType(Set<TreeDefinition> treeDefinitions, List<Block> trunkBlocks, Block block) {
// Check if block is placed
if (this.placedBlockManager.isBlockPlaced(block)) if (this.placedBlockManager.isBlockPlaced(block))
return false; return false;
for (TreeDefinition treeDefinition : treeDefinitions) // Check if it matches the tree definition
for (IBlockData logBlockData : treeDefinition.getLogBlockData()) boolean isCorrectType = false;
if (logBlockData.isSimilar(block)) for (TreeDefinition treeDefinition : treeDefinitions) {
for (IBlockData logBlockData : treeDefinition.getLogBlockData()) {
if (logBlockData.isSimilar(block)) {
isCorrectType = true;
break;
}
}
}
if (!isCorrectType)
return false;
// Check that it is close enough to the trunk
if (trunkBlocks == null || trunkBlocks.isEmpty())
return true;
Location location = block.getLocation();
for (TreeDefinition treeDefinition : treeDefinitions) {
double maxDistance = treeDefinition.getMaxLogDistanceFromTrunk() * treeDefinition.getMaxLogDistanceFromTrunk();
for (Block trunkBlock : trunkBlocks)
if (location.distanceSquared(trunkBlock.getLocation()) < maxDistance)
return true; return true;
}
return false; return false;
} }

View File

@ -190,6 +190,7 @@ trees:
- OAK_LEAVES - OAK_LEAVES
sapling: OAK_SAPLING sapling: OAK_SAPLING
plantable-soil: [] plantable-soil: []
max-log-distance-from-trunk: 6
max-leaf-distance-from-log: 6 max-leaf-distance-from-log: 6
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: true drop-original-log: true
@ -214,6 +215,7 @@ trees:
- SPRUCE_LEAVES - SPRUCE_LEAVES
sapling: SPRUCE_SAPLING sapling: SPRUCE_SAPLING
plantable-soil: [] plantable-soil: []
max-log-distance-from-trunk: 1
max-leaf-distance-from-log: 6 max-leaf-distance-from-log: 6
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: true drop-original-log: true
@ -235,6 +237,7 @@ trees:
- BIRCH_LEAVES - BIRCH_LEAVES
sapling: BIRCH_SAPLING sapling: BIRCH_SAPLING
plantable-soil: [] plantable-soil: []
max-log-distance-from-trunk: 1
max-leaf-distance-from-log: 4 max-leaf-distance-from-log: 4
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: true drop-original-log: true
@ -256,6 +259,7 @@ trees:
- JUNGLE_LEAVES - JUNGLE_LEAVES
sapling: JUNGLE_SAPLING sapling: JUNGLE_SAPLING
plantable-soil: [] plantable-soil: []
max-log-distance-from-trunk: 5
max-leaf-distance-from-log: 6 max-leaf-distance-from-log: 6
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: true drop-original-log: true
@ -277,6 +281,7 @@ trees:
- ACACIA_LEAVES - ACACIA_LEAVES
sapling: ACACIA_SAPLING sapling: ACACIA_SAPLING
plantable-soil: [] plantable-soil: []
max-log-distance-from-trunk: 4
max-leaf-distance-from-log: 5 max-leaf-distance-from-log: 5
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: true drop-original-log: true
@ -298,6 +303,7 @@ trees:
- DARK_OAK_LEAVES - DARK_OAK_LEAVES
sapling: DARK_OAK_SAPLING sapling: DARK_OAK_SAPLING
plantable-soil: [] plantable-soil: []
max-log-distance-from-trunk: 3
max-leaf-distance-from-log: 5 max-leaf-distance-from-log: 5
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: true drop-original-log: true
@ -320,6 +326,7 @@ trees:
sapling: BROWN_MUSHROOM sapling: BROWN_MUSHROOM
plantable-soil: plantable-soil:
- MYCELIUM - MYCELIUM
max-log-distance-from-trunk: 4
max-leaf-distance-from-log: 4 max-leaf-distance-from-log: 4
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: false drop-original-log: false
@ -339,6 +346,7 @@ trees:
sapling: RED_MUSHROOM sapling: RED_MUSHROOM
plantable-soil: plantable-soil:
- MYCELIUM - MYCELIUM
max-log-distance-from-trunk: 4
max-leaf-distance-from-log: 4 max-leaf-distance-from-log: 4
search-for-leaves-diagonally: true search-for-leaves-diagonally: true
drop-original-log: false drop-original-log: false

View File

@ -188,6 +188,7 @@ trees:
- LEAVES:0,4,8,12 - LEAVES:0,4,8,12
sapling: SAPLING:0 sapling: SAPLING:0
plantable-soil: [] plantable-soil: []
max-log-distance-from-trunk: 6
max-leaf-distance-from-log: 6 max-leaf-distance-from-log: 6
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: true drop-original-log: true
@ -209,6 +210,7 @@ trees:
- LEAVES:1,5,9,13 - LEAVES:1,5,9,13
sapling: SAPLING:1 sapling: SAPLING:1
plantable-soil: [] plantable-soil: []
max-log-distance-from-trunk: 1
max-leaf-distance-from-log: 6 max-leaf-distance-from-log: 6
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: true drop-original-log: true
@ -227,6 +229,7 @@ trees:
- LEAVES:2,6,10,14 - LEAVES:2,6,10,14
sapling: SAPLING:2 sapling: SAPLING:2
plantable-soil: [] plantable-soil: []
max-log-distance-from-trunk: 1
max-leaf-distance-from-log: 4 max-leaf-distance-from-log: 4
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: true drop-original-log: true
@ -245,6 +248,7 @@ trees:
- LEAVES:3,7,11,15 - LEAVES:3,7,11,15
sapling: SAPLING:3 sapling: SAPLING:3
plantable-soil: [] plantable-soil: []
max-log-distance-from-trunk: 5
max-leaf-distance-from-log: 6 max-leaf-distance-from-log: 6
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: true drop-original-log: true
@ -263,6 +267,7 @@ trees:
- LEAVES_2:0,4,8,12 - LEAVES_2:0,4,8,12
sapling: SAPLING:4 sapling: SAPLING:4
plantable-soil: [] plantable-soil: []
max-log-distance-from-trunk: 4
max-leaf-distance-from-log: 5 max-leaf-distance-from-log: 5
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: true drop-original-log: true
@ -281,6 +286,7 @@ trees:
- LEAVES_2:1,5,9,13 - LEAVES_2:1,5,9,13
sapling: SAPLING:5 sapling: SAPLING:5
plantable-soil: [] plantable-soil: []
max-log-distance-from-trunk: 3
max-leaf-distance-from-log: 5 max-leaf-distance-from-log: 5
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: true drop-original-log: true
@ -303,7 +309,8 @@ trees:
sapling: BROWN_MUSHROOM sapling: BROWN_MUSHROOM
plantable-soil: plantable-soil:
- MYCEL - MYCEL
max-leaf-distance-from-log: 6 max-log-distance-from-trunk: 4
max-leaf-distance-from-log: 4
search-for-leaves-diagonally: false search-for-leaves-diagonally: false
drop-original-log: false drop-original-log: false
drop-original-leaf: false drop-original-leaf: false
@ -322,6 +329,7 @@ trees:
sapling: RED_MUSHROOM sapling: RED_MUSHROOM
plantable-soil: plantable-soil:
- MYCEL - MYCEL
max-log-distance-from-trunk: 4
max-leaf-distance-from-log: 4 max-leaf-distance-from-log: 4
search-for-leaves-diagonally: true search-for-leaves-diagonally: true
drop-original-log: false drop-original-log: false