Added mahogany trees
This commit is contained in:
parent
2c85a16a6f
commit
7ce0f6eafd
5 changed files with 170 additions and 58 deletions
|
@ -35,6 +35,7 @@ import biomesoplenty.common.world.feature.GeneratorSplatter;
|
||||||
import biomesoplenty.common.world.feature.GeneratorSplotches;
|
import biomesoplenty.common.world.feature.GeneratorSplotches;
|
||||||
import biomesoplenty.common.world.feature.GeneratorWaterside;
|
import biomesoplenty.common.world.feature.GeneratorWaterside;
|
||||||
import biomesoplenty.common.world.feature.tree.GeneratorBasicTree;
|
import biomesoplenty.common.world.feature.tree.GeneratorBasicTree;
|
||||||
|
import biomesoplenty.common.world.feature.tree.GeneratorMahoganyTree;
|
||||||
|
|
||||||
public class BiomeGenTropicalRainforest extends BOPBiome
|
public class BiomeGenTropicalRainforest extends BOPBiome
|
||||||
{
|
{
|
||||||
|
@ -67,7 +68,7 @@ public class BiomeGenTropicalRainforest extends BOPBiome
|
||||||
// trees
|
// trees
|
||||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(15.0F);
|
GeneratorWeighted treeGenerator = new GeneratorWeighted(15.0F);
|
||||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||||
treeGenerator.add("mahogany", 6, (new GeneratorBasicTree.Builder()).log(BOPWoods.MAHOGANY).leaves(BOPTrees.MAHOGANY).minLeavesRadius(2).minHeight(10).maxHeight(15).create());
|
treeGenerator.add("mahogany", 6, (new GeneratorMahoganyTree.Builder()).create());
|
||||||
treeGenerator.add("jungle", 2, (new GeneratorBasicTree.Builder()).log(BlockPlanks.EnumType.JUNGLE).leaves(BlockPlanks.EnumType.JUNGLE).minHeight(8).maxHeight(12).vine(Blocks.vine.getDefaultState()).create());
|
treeGenerator.add("jungle", 2, (new GeneratorBasicTree.Builder()).log(BlockPlanks.EnumType.JUNGLE).leaves(BlockPlanks.EnumType.JUNGLE).minHeight(8).maxHeight(12).vine(Blocks.vine.getDefaultState()).create());
|
||||||
|
|
||||||
// flowers
|
// flowers
|
||||||
|
|
|
@ -46,5 +46,6 @@ public class ModGenerators
|
||||||
registerGenerator("crystals", GeneratorCrystals.class, new GeneratorCrystals.Builder());
|
registerGenerator("crystals", GeneratorCrystals.class, new GeneratorCrystals.Builder());
|
||||||
registerGenerator("spike", GeneratorSpike.class, new GeneratorSpike.Builder());
|
registerGenerator("spike", GeneratorSpike.class, new GeneratorSpike.Builder());
|
||||||
registerGenerator("redwood_tree", GeneratorRedwoodTree.class, new GeneratorRedwoodTree.Builder());
|
registerGenerator("redwood_tree", GeneratorRedwoodTree.class, new GeneratorRedwoodTree.Builder());
|
||||||
|
registerGenerator("mahogany_tree", GeneratorMahoganyTree.class, new GeneratorMahoganyTree.Builder());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,6 +68,8 @@ public class WorldChunkManagerBOP extends WorldChunkManager
|
||||||
// loop through the biomes and apply the settings
|
// loop through the biomes and apply the settings
|
||||||
for (BiomeGenBase biome : BiomeGenBase.getBiomeGenArray())
|
for (BiomeGenBase biome : BiomeGenBase.getBiomeGenArray())
|
||||||
{
|
{
|
||||||
|
if (biome == null) {continue;}
|
||||||
|
|
||||||
IExtendedBiome extBiome = BOPBiomes.REG_INSTANCE.getExtendedBiome(biome);
|
IExtendedBiome extBiome = BOPBiomes.REG_INSTANCE.getExtendedBiome(biome);
|
||||||
|
|
||||||
if (extBiome == null) {continue;}
|
if (extBiome == null) {continue;}
|
||||||
|
|
|
@ -33,25 +33,9 @@ import net.minecraft.world.World;
|
||||||
|
|
||||||
public class GeneratorBasicTree extends GeneratorTreeBase
|
public class GeneratorBasicTree extends GeneratorTreeBase
|
||||||
{
|
{
|
||||||
|
|
||||||
// TODO: update neighbours in builder?
|
// TODO: update neighbours in builder?
|
||||||
public static class Builder extends GeneratorTreeBase.InnerBuilder<Builder, GeneratorBasicTree> implements IGeneratorBuilder<GeneratorBasicTree>
|
public static class Builder extends GeneratorBasicTree.InnerBuilder<Builder, GeneratorBasicTree> implements IGeneratorBuilder<GeneratorBasicTree>
|
||||||
{
|
{
|
||||||
protected int leafLayers;
|
|
||||||
protected int leavesOffset;
|
|
||||||
protected int minLeavesRadius;
|
|
||||||
protected IBlockPosQuery placeVinesOn;
|
|
||||||
|
|
||||||
public Builder leafLayers(int a) {this.leafLayers = a; return this.self();}
|
|
||||||
public Builder leavesOffset(int a) {this.leavesOffset = a; return this.self();}
|
|
||||||
public Builder minLeavesRadius(int a) {this.minLeavesRadius = a; return this.self();}
|
|
||||||
|
|
||||||
public Builder placeVinesOn(IBlockPosQuery a) {this.placeVinesOn = a; return this.self();}
|
|
||||||
public Builder placeVinesOn(String a) throws BlockQueryParseException {this.placeVinesOn = BlockQuery.parseQueryString(a); return this.self();}
|
|
||||||
public Builder placeVinesOn(Block a) {this.placeVinesOn = new BlockQueryBlock(a); return this.self();}
|
|
||||||
public Builder placeVinesOn(IBlockState a) {this.placeVinesOn = new BlockQueryState(a); return this.self();}
|
|
||||||
public Builder placeVinesOn(Material... a) {this.placeVinesOn = new BlockQueryMaterial(a); return this.self();}
|
|
||||||
|
|
||||||
public Builder()
|
public Builder()
|
||||||
{
|
{
|
||||||
// defaults
|
// defaults
|
||||||
|
@ -66,29 +50,52 @@ public class GeneratorBasicTree extends GeneratorTreeBase
|
||||||
this.leafLayers = 4;
|
this.leafLayers = 4;
|
||||||
this.leavesOffset = 1;
|
this.leavesOffset = 1;
|
||||||
this.minLeavesRadius = 1;
|
this.minLeavesRadius = 1;
|
||||||
|
this.leavesLayerHeight = 2;
|
||||||
this.placeVinesOn = BlockQueries.air;
|
this.placeVinesOn = BlockQueries.air;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GeneratorBasicTree create()
|
public GeneratorBasicTree create()
|
||||||
{
|
{
|
||||||
return new GeneratorBasicTree(this.amountPerChunk, this.placeOn, this.replace, this.log, this.leaves, this.vine, this.minHeight, this.maxHeight, false, this.leafLayers, this.leavesOffset, this.minLeavesRadius, this.placeVinesOn);
|
return new GeneratorBasicTree(this.amountPerChunk, this.placeOn, this.replace, this.log, this.leaves, this.vine, this.minHeight, this.maxHeight, false, this.leafLayers, this.leavesOffset, this.minLeavesRadius, this.leavesLayerHeight, this.placeVinesOn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean updateNeighbours;
|
protected static abstract class InnerBuilder<T extends InnerBuilder<T, G>, G extends GeneratorBasicTree> extends GeneratorTreeBase.InnerBuilder<T, G>
|
||||||
private int leafLayers;
|
{
|
||||||
|
protected int leafLayers;
|
||||||
protected int leavesOffset;
|
protected int leavesOffset;
|
||||||
private int minLeavesRadius;
|
protected int minLeavesRadius;
|
||||||
private final IBlockPosQuery placeVinesOn;
|
protected int leavesLayerHeight;
|
||||||
|
protected IBlockPosQuery placeVinesOn;
|
||||||
|
|
||||||
public GeneratorBasicTree(float amountPerChunk, IBlockPosQuery placeOn, IBlockPosQuery replace, IBlockState log, IBlockState leaves, IBlockState vine, int minHeight, int maxHeight, boolean updateNeighbours, int leafLayers, int leavesOffset, int minLeavesRadius, IBlockPosQuery placeVinesOn)
|
public T leafLayers(int a) {this.leafLayers = a; return this.self();}
|
||||||
|
public T leavesOffset(int a) {this.leavesOffset = a; return this.self();}
|
||||||
|
public T leavesLayerHeight(int a) {this.leavesLayerHeight = a; return this.self();}
|
||||||
|
public T minLeavesRadius(int a) {this.minLeavesRadius = a; return this.self();}
|
||||||
|
|
||||||
|
public T placeVinesOn(IBlockPosQuery a) {this.placeVinesOn = a; return this.self();}
|
||||||
|
public T placeVinesOn(String a) throws BlockQueryParseException {this.placeVinesOn = BlockQuery.parseQueryString(a); return this.self();}
|
||||||
|
public T placeVinesOn(Block a) {this.placeVinesOn = new BlockQueryBlock(a); return this.self();}
|
||||||
|
public T placeVinesOn(IBlockState a) {this.placeVinesOn = new BlockQueryState(a); return this.self();}
|
||||||
|
public T placeVinesOn(Material... a) {this.placeVinesOn = new BlockQueryMaterial(a); return this.self();}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean updateNeighbours;
|
||||||
|
protected int leafLayers;
|
||||||
|
protected int leavesOffset;
|
||||||
|
protected int minLeavesRadius;
|
||||||
|
protected int leavesLayerHeight;
|
||||||
|
protected IBlockPosQuery placeVinesOn;
|
||||||
|
|
||||||
|
public GeneratorBasicTree(float amountPerChunk, IBlockPosQuery placeOn, IBlockPosQuery replace, IBlockState log, IBlockState leaves, IBlockState vine, int minHeight, int maxHeight, boolean updateNeighbours, int leafLayers, int leavesOffset, int minLeavesRadius, int leavesLayerHeight, IBlockPosQuery placeVinesOn)
|
||||||
{
|
{
|
||||||
super(amountPerChunk, placeOn, replace, log, leaves, vine, minHeight, maxHeight);
|
super(amountPerChunk, placeOn, replace, log, leaves, vine, minHeight, maxHeight);
|
||||||
this.updateNeighbours = updateNeighbours;
|
this.updateNeighbours = updateNeighbours;
|
||||||
this.leavesOffset = leavesOffset;
|
this.leavesOffset = leavesOffset;
|
||||||
this.leafLayers = leafLayers;
|
this.leafLayers = leafLayers;
|
||||||
this.minLeavesRadius = minLeavesRadius;
|
this.minLeavesRadius = minLeavesRadius;
|
||||||
|
this.leavesLayerHeight = leavesLayerHeight;
|
||||||
this.placeVinesOn = placeVinesOn;
|
this.placeVinesOn = placeVinesOn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,7 +169,7 @@ public class GeneratorBasicTree extends GeneratorTreeBase
|
||||||
int currentLayer = y - (pos.getY() + height);
|
int currentLayer = y - (pos.getY() + height);
|
||||||
//Uses integer division truncation (-3 / 2 = -1, -2 / 2 = -1) to reduce
|
//Uses integer division truncation (-3 / 2 = -1, -2 / 2 = -1) to reduce
|
||||||
//the radius closer to the top of the tree. (2, 2, 1, 1)
|
//the radius closer to the top of the tree. (2, 2, 1, 1)
|
||||||
int leavesRadius = this.minLeavesRadius - currentLayer / 2;
|
int leavesRadius = this.minLeavesRadius - currentLayer / this.leavesLayerHeight;
|
||||||
|
|
||||||
for (int x = pos.getX() - leavesRadius; x <= pos.getX() + leavesRadius; x++)
|
for (int x = pos.getX() - leavesRadius; x <= pos.getX() + leavesRadius; x++)
|
||||||
{
|
{
|
||||||
|
@ -186,37 +193,7 @@ public class GeneratorBasicTree extends GeneratorTreeBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Create the trunk from the bottom up, using < to ensure it is covered with one layer of leaves
|
this.generateTrunk(world, pos, height);
|
||||||
for (int layer = 0; layer < height; ++layer)
|
|
||||||
{
|
|
||||||
BlockPos blockpos2 = pos.up(layer);
|
|
||||||
if (this.replace.matches(world, blockpos2))
|
|
||||||
{
|
|
||||||
this.setBlockAndNotifyAdequately(world, pos.up(layer), this.log);
|
|
||||||
|
|
||||||
//If vines are enabled, randomly cover the sides of the trunk with vines from the bottom up
|
|
||||||
/*if (this.vine != null && layer > 0)
|
|
||||||
{
|
|
||||||
if (random.nextInt(3) > 0 && this.placeVinesOn.matches(world, pos.add(-1, layer, 0)))
|
|
||||||
{
|
|
||||||
this.setBlockAndNotifyAdequately(world, pos.add(-1, layer, 0), this.getVineStateForSide(EnumFacing.EAST));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.nextInt(3) > 0 && this.placeVinesOn.matches(world, pos.add(1, layer, 0)))
|
|
||||||
{
|
|
||||||
this.setBlockAndNotifyAdequately(world, pos.add(1, layer, 0), this.getVineStateForSide(EnumFacing.WEST));
|
|
||||||
}
|
|
||||||
if (random.nextInt(3) > 0 && this.placeVinesOn.matches(world, pos.add(0, layer, -1)))
|
|
||||||
{
|
|
||||||
this.setBlockAndNotifyAdequately(world, pos.add(0, layer, -1), this.getVineStateForSide(EnumFacing.SOUTH));
|
|
||||||
}
|
|
||||||
if (random.nextInt(3) > 0 && this.placeVinesOn.matches(world, pos.add(0, layer, 1)))
|
|
||||||
{
|
|
||||||
this.setBlockAndNotifyAdequately(world, pos.add(0, layer, 1), this.getVineStateForSide(EnumFacing.NORTH));
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vine != null)
|
if (this.vine != null)
|
||||||
{
|
{
|
||||||
|
@ -226,7 +203,7 @@ public class GeneratorBasicTree extends GeneratorTreeBase
|
||||||
int currentLayer = y - (pos.getY() + height);
|
int currentLayer = y - (pos.getY() + height);
|
||||||
//Uses integer division truncation (-3 / 2 = -1, -2 / 2 = -1) to reduce
|
//Uses integer division truncation (-3 / 2 = -1, -2 / 2 = -1) to reduce
|
||||||
//the radius closer to the top of the tree. (3, 3, 2, 2)
|
//the radius closer to the top of the tree. (3, 3, 2, 2)
|
||||||
int leavesRadius = (this.minLeavesRadius + this.leavesOffset) - currentLayer / 2;
|
int leavesRadius = (this.minLeavesRadius + this.leavesOffset) - currentLayer / this.leavesLayerHeight;
|
||||||
|
|
||||||
for (int x = pos.getX() - leavesRadius; x <= pos.getX() + leavesRadius; x++)
|
for (int x = pos.getX() - leavesRadius; x <= pos.getX() + leavesRadius; x++)
|
||||||
{
|
{
|
||||||
|
@ -281,6 +258,41 @@ public class GeneratorBasicTree extends GeneratorTreeBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void generateTrunk(World world, BlockPos start, int height)
|
||||||
|
{
|
||||||
|
//Create the trunk from the bottom up, using < to ensure it is covered with one layer of leaves
|
||||||
|
for (int layer = 0; layer < height; ++layer)
|
||||||
|
{
|
||||||
|
BlockPos blockpos2 = start.up(layer);
|
||||||
|
if (this.replace.matches(world, blockpos2))
|
||||||
|
{
|
||||||
|
this.setBlockAndNotifyAdequately(world, start.up(layer), this.log);
|
||||||
|
|
||||||
|
//If vines are enabled, randomly cover the sides of the trunk with vines from the bottom up
|
||||||
|
/*if (this.vine != null && layer > 0)
|
||||||
|
{
|
||||||
|
if (random.nextInt(3) > 0 && this.placeVinesOn.matches(world, pos.add(-1, layer, 0)))
|
||||||
|
{
|
||||||
|
this.setBlockAndNotifyAdequately(world, pos.add(-1, layer, 0), this.getVineStateForSide(EnumFacing.EAST));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (random.nextInt(3) > 0 && this.placeVinesOn.matches(world, pos.add(1, layer, 0)))
|
||||||
|
{
|
||||||
|
this.setBlockAndNotifyAdequately(world, pos.add(1, layer, 0), this.getVineStateForSide(EnumFacing.WEST));
|
||||||
|
}
|
||||||
|
if (random.nextInt(3) > 0 && this.placeVinesOn.matches(world, pos.add(0, layer, -1)))
|
||||||
|
{
|
||||||
|
this.setBlockAndNotifyAdequately(world, pos.add(0, layer, -1), this.getVineStateForSide(EnumFacing.SOUTH));
|
||||||
|
}
|
||||||
|
if (random.nextInt(3) > 0 && this.placeVinesOn.matches(world, pos.add(0, layer, 1)))
|
||||||
|
{
|
||||||
|
this.setBlockAndNotifyAdequately(world, pos.add(0, layer, 1), this.getVineStateForSide(EnumFacing.NORTH));
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private IBlockState getVineStateForSide(EnumFacing side)
|
private IBlockState getVineStateForSide(EnumFacing side)
|
||||||
{
|
{
|
||||||
return this.vine.getBlock() instanceof BlockVine ? this.vine.withProperty(BlockVine.getPropertyFor(side), Boolean.valueOf(true)) : this.vine;
|
return this.vine.getBlock() instanceof BlockVine ? this.vine.withProperty(BlockVine.getPropertyFor(side), Boolean.valueOf(true)) : this.vine;
|
||||||
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright 2016, the Biomes O' Plenty Team
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||||
|
*
|
||||||
|
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||||
|
******************************************************************************/
|
||||||
|
package biomesoplenty.common.world.feature.tree;
|
||||||
|
|
||||||
|
import biomesoplenty.api.block.BlockQueries;
|
||||||
|
import biomesoplenty.common.block.BlockBOPLeaves;
|
||||||
|
import biomesoplenty.common.block.BlockBOPLog;
|
||||||
|
import biomesoplenty.common.enums.BOPTrees;
|
||||||
|
import biomesoplenty.common.enums.BOPWoods;
|
||||||
|
import biomesoplenty.common.util.block.BlockQuery.BlockQueryMaterial;
|
||||||
|
import biomesoplenty.common.util.block.BlockQuery.IBlockPosQuery;
|
||||||
|
import net.minecraft.block.material.Material;
|
||||||
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.util.BlockPos;
|
||||||
|
import net.minecraft.util.EnumFacing;
|
||||||
|
import net.minecraft.util.EnumFacing.Axis;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public class GeneratorMahoganyTree extends GeneratorBasicTree
|
||||||
|
{
|
||||||
|
public static class Builder extends GeneratorBasicTree.InnerBuilder<Builder, GeneratorMahoganyTree> implements IGeneratorBuilder<GeneratorMahoganyTree>
|
||||||
|
{
|
||||||
|
public Builder()
|
||||||
|
{
|
||||||
|
// defaults
|
||||||
|
this.amountPerChunk = 1.0F;
|
||||||
|
this.placeOn = BlockQueries.anything;
|
||||||
|
this.replace = new BlockQueryMaterial(Material.air, Material.leaves);
|
||||||
|
this.log = BlockBOPLog.paging.getVariantState(BOPWoods.MAHOGANY);
|
||||||
|
this.leaves = BlockBOPLeaves.paging.getVariantState(BOPTrees.MAHOGANY);
|
||||||
|
this.vine = null;
|
||||||
|
this.minHeight = 10;
|
||||||
|
this.maxHeight = 15;
|
||||||
|
this.leafLayers = 4;
|
||||||
|
this.leavesOffset = 1;
|
||||||
|
this.minLeavesRadius = 2;
|
||||||
|
this.leavesLayerHeight = 1;
|
||||||
|
this.placeVinesOn = BlockQueries.air;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GeneratorMahoganyTree create()
|
||||||
|
{
|
||||||
|
return new GeneratorMahoganyTree(this.amountPerChunk, this.placeOn, this.replace, this.log, this.leaves, this.vine, this.minHeight, this.maxHeight, false, this.leafLayers, this.leavesOffset, this.minLeavesRadius, this.leavesLayerHeight, this.placeVinesOn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public GeneratorMahoganyTree(float amountPerChunk, IBlockPosQuery placeOn, IBlockPosQuery replace, IBlockState log, IBlockState leaves, IBlockState vine, int minHeight, int maxHeight, boolean updateNeighbours, int leafLayers, int leavesOffset, int minLeavesRadius, int leavesLayerHeight, IBlockPosQuery placeVinesOn)
|
||||||
|
{
|
||||||
|
super(amountPerChunk, placeOn, replace, log, leaves, vine, minHeight, maxHeight, updateNeighbours, leafLayers, leavesOffset, minLeavesRadius, leavesLayerHeight, placeVinesOn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void generateTrunk(World world, BlockPos start, int height)
|
||||||
|
{
|
||||||
|
int endHeight = height - this.leafLayers;
|
||||||
|
|
||||||
|
for (int layer = 0; layer <= height; ++layer)
|
||||||
|
{
|
||||||
|
BlockPos middlePos = start.up(layer);
|
||||||
|
|
||||||
|
if (layer == endHeight - 2)
|
||||||
|
{
|
||||||
|
int branchHeight = height - endHeight - 1 + 2;
|
||||||
|
|
||||||
|
//Generate the upper branches and stop
|
||||||
|
generateBranch(world, middlePos, EnumFacing.NORTH, branchHeight);
|
||||||
|
generateBranch(world, middlePos, EnumFacing.EAST, branchHeight);
|
||||||
|
generateBranch(world, middlePos, EnumFacing.SOUTH, branchHeight);
|
||||||
|
generateBranch(world, middlePos, EnumFacing.WEST, branchHeight);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (this.replace.matches(world, middlePos))
|
||||||
|
{
|
||||||
|
this.setLog(world, middlePos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void generateBranch(World world, BlockPos middle, EnumFacing direction, int height)
|
||||||
|
{
|
||||||
|
BlockPos pos;
|
||||||
|
|
||||||
|
if (replace.matches(world, pos = middle.offset(direction))) this.setLog(world, pos, direction.getAxis());
|
||||||
|
|
||||||
|
for (int i = 1; i <= height; ++i)
|
||||||
|
{
|
||||||
|
if (replace.matches(world, pos = middle.offset(direction, 2).up(i))) this.setLog(world, pos, Axis.Y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue