mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-02-16 02:20:57 +00:00
Rotation & tree stuff
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package com.dfsek.terra.api.gaea.tree.fractal;
|
||||
|
||||
import com.dfsek.terra.api.gaea.tree.Tree;
|
||||
import com.dfsek.terra.api.gaea.util.GlueList;
|
||||
import com.dfsek.terra.api.generic.Entity;
|
||||
import com.dfsek.terra.api.generic.TerraPlugin;
|
||||
@@ -12,10 +13,11 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
|
||||
public abstract class FractalTree {
|
||||
public abstract class FractalTree implements Tree {
|
||||
private final Map<Location, BlockData> treeAssembler = new HashMap<>();
|
||||
private final List<EntitySpawnHolder> entities = new GlueList<>();
|
||||
private final Location origin;
|
||||
@@ -110,5 +112,13 @@ public abstract class FractalTree {
|
||||
return treeAssembler.getOrDefault(l, main.getWorldHandle().createBlockData("minecraft:air")).getMaterial();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean plant(Location l, Random r) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<MaterialData> getSpawnable() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.dfsek.terra.api.generic;
|
||||
|
||||
public interface Tree extends Handle {
|
||||
public interface Tree extends Handle, com.dfsek.terra.api.gaea.tree.Tree {
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.dfsek.terra.api.generic.world;
|
||||
|
||||
import com.dfsek.terra.api.generic.Tree;
|
||||
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.MaterialData;
|
||||
@@ -17,4 +18,6 @@ public interface WorldHandle {
|
||||
BlockData createBlockData(String data);
|
||||
|
||||
MaterialData createMaterialData(String data);
|
||||
|
||||
Tree getTree(String id);
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ public class ConfigPack implements LoaderRegistrar {
|
||||
private final PaletteRegistry paletteRegistry;
|
||||
private final FloraRegistry floraRegistry;
|
||||
private final OreRegistry oreRegistry = new OreRegistry();
|
||||
private final TreeRegistry treeRegistry = new TreeRegistry();
|
||||
private final TreeRegistry treeRegistry;
|
||||
|
||||
private final AbstractConfigLoader abstractConfigLoader = new AbstractConfigLoader();
|
||||
private final ConfigLoader selfLoader = new ConfigLoader();
|
||||
@@ -89,6 +89,7 @@ public class ConfigPack implements LoaderRegistrar {
|
||||
long l = System.nanoTime();
|
||||
floraRegistry = new FloraRegistry(main);
|
||||
paletteRegistry = new PaletteRegistry(main);
|
||||
treeRegistry = new TreeRegistry(main);
|
||||
register(abstractConfigLoader);
|
||||
|
||||
main.register(selfLoader);
|
||||
@@ -109,6 +110,7 @@ public class ConfigPack implements LoaderRegistrar {
|
||||
long l = System.nanoTime();
|
||||
floraRegistry = new FloraRegistry(main);
|
||||
paletteRegistry = new PaletteRegistry(main);
|
||||
treeRegistry = new TreeRegistry(main);
|
||||
register(abstractConfigLoader);
|
||||
|
||||
main.register(selfLoader);
|
||||
|
||||
@@ -1,9 +1,20 @@
|
||||
package com.dfsek.terra.registry;
|
||||
|
||||
import com.dfsek.terra.api.gaea.tree.Tree;
|
||||
import com.dfsek.terra.api.generic.TerraPlugin;
|
||||
|
||||
public class TreeRegistry extends TerraRegistry<Tree> {
|
||||
public TreeRegistry() {
|
||||
private final TerraPlugin main;
|
||||
|
||||
public TreeRegistry(TerraPlugin main) {
|
||||
this.main = main;
|
||||
}
|
||||
|
||||
private void addTree(String id) {
|
||||
try {
|
||||
add(id, main.getWorldHandle().getTree(id));
|
||||
} catch(IllegalArgumentException e) {
|
||||
main.getLogger().warning("Unable to load tree " + id + ": " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,59 @@
|
||||
package com.dfsek.terra.bukkit;
|
||||
|
||||
import com.dfsek.terra.api.generic.TerraPlugin;
|
||||
import com.dfsek.terra.api.generic.Tree;
|
||||
import com.dfsek.terra.api.generic.world.WorldHandle;
|
||||
import com.dfsek.terra.api.generic.world.block.MaterialData;
|
||||
import com.dfsek.terra.api.generic.world.vector.Location;
|
||||
import com.dfsek.terra.bukkit.util.BukkitConversions;
|
||||
import com.dfsek.terra.util.MaterialSet;
|
||||
import org.bukkit.TreeType;
|
||||
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
|
||||
public class BukkitTree implements Tree {
|
||||
private final TreeType delegate;
|
||||
private final MaterialSet spawnable;
|
||||
private final TerraPlugin main;
|
||||
|
||||
public BukkitTree(TreeType delegate) {
|
||||
public BukkitTree(TreeType delegate, TerraPlugin main) {
|
||||
this.delegate = delegate;
|
||||
this.main = main;
|
||||
this.spawnable = getSpawnable(delegate);
|
||||
}
|
||||
|
||||
private MaterialSet getSpawnable(TreeType type) {
|
||||
WorldHandle handle = main.getWorldHandle();
|
||||
switch(type) {
|
||||
case CRIMSON_FUNGUS:
|
||||
return MaterialSet.get(handle.createMaterialData("minecraft:crimson_nylium"));
|
||||
case WARPED_FUNGUS:
|
||||
return MaterialSet.get(handle.createMaterialData("minecraft:warped_nylium"));
|
||||
case BROWN_MUSHROOM:
|
||||
case RED_MUSHROOM:
|
||||
return MaterialSet.get(handle.createMaterialData("minecraft:mycelium"), handle.createMaterialData("minecraft:grass_block"),
|
||||
handle.createMaterialData("minecraft:podzol"));
|
||||
case CHORUS_PLANT:
|
||||
return MaterialSet.get(handle.createMaterialData("minecraft:end_stone"));
|
||||
default:
|
||||
return MaterialSet.get(handle.createMaterialData("minecraft:grass_block"), handle.createMaterialData("minecraft:dirt"),
|
||||
handle.createMaterialData("minecraft:podzol"));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public TreeType getHandle() {
|
||||
return delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean plant(Location l, Random r) {
|
||||
return ((BukkitWorld) l.getWorld()).getHandle().generateTree(BukkitConversions.toBukkitLocation(l), delegate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<MaterialData> getSpawnable() {
|
||||
return spawnable;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,29 @@
|
||||
package com.dfsek.terra.bukkit;
|
||||
|
||||
import com.dfsek.terra.api.generic.TerraPlugin;
|
||||
import com.dfsek.terra.api.generic.Tree;
|
||||
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.BlockData;
|
||||
import com.dfsek.terra.api.generic.world.block.MaterialData;
|
||||
import com.dfsek.terra.api.generic.world.block.data.Waterlogged;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
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.BukkitStairs;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitWaterlogged;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.TreeType;
|
||||
import org.bukkit.block.data.MultipleFacing;
|
||||
import org.bukkit.block.data.Waterlogged;
|
||||
import org.bukkit.block.data.type.Stairs;
|
||||
|
||||
public class BukkitWorldHandle implements WorldHandle {
|
||||
private final TerraPlugin main;
|
||||
|
||||
public BukkitWorldHandle(TerraPlugin main) {
|
||||
this.main = main;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBlockData(Block block, BlockData data, boolean physics) {
|
||||
@@ -33,8 +43,9 @@ public class BukkitWorldHandle implements WorldHandle {
|
||||
@Override
|
||||
public BlockData createBlockData(String data) {
|
||||
org.bukkit.block.data.BlockData bukkitData = Bukkit.createBlockData(data);
|
||||
if(bukkitData instanceof Stairs) return new BukkitStairs(bukkitData);
|
||||
if(bukkitData instanceof Waterlogged) return new BukkitWaterlogged(bukkitData);
|
||||
if(bukkitData instanceof MultipleFacing) return new BukkitMultipleFacing((MultipleFacing) bukkitData);
|
||||
if(bukkitData instanceof Stairs) return new BukkitStairs((Stairs) bukkitData);
|
||||
if(bukkitData instanceof Waterlogged) return new BukkitWaterlogged((Waterlogged) bukkitData);
|
||||
return new BukkitBlockData(Bukkit.createBlockData(data));
|
||||
}
|
||||
|
||||
@@ -42,4 +53,9 @@ public class BukkitWorldHandle implements WorldHandle {
|
||||
public MaterialData createMaterialData(String data) {
|
||||
return new BukkitMaterialData(Material.matchMaterial(data));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tree getTree(String id) {
|
||||
return new BukkitTree(TreeType.valueOf(id), main);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +45,8 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin {
|
||||
private final Map<String, ConfigPack> worlds = new HashMap<>();
|
||||
private final ConfigRegistry registry = new ConfigRegistry();
|
||||
private final PluginConfig config = new PluginConfig();
|
||||
private WorldHandle handle = new BukkitWorldHandle();
|
||||
private final ItemHandle itemHandle = new BukkitItemHandle();
|
||||
private WorldHandle handle = new BukkitWorldHandle(this);
|
||||
private final GenericLoaders genericLoaders = new GenericLoaders(this);
|
||||
|
||||
|
||||
@@ -61,7 +62,7 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin {
|
||||
|
||||
@Override
|
||||
public ItemHandle getItemHandle() {
|
||||
return null;
|
||||
return itemHandle;
|
||||
}
|
||||
|
||||
public void setHandle(WorldHandle handle) {
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
package com.dfsek.terra.bukkit.util;
|
||||
|
||||
import com.dfsek.terra.api.generic.world.vector.Vector3;
|
||||
import com.dfsek.terra.bukkit.BukkitWorld;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public final class BukkitConversions {
|
||||
public static Vector3 toTerraVector(Vector bukkit) {
|
||||
return new Vector3(bukkit.getX(), bukkit.getY(), bukkit.getZ());
|
||||
}
|
||||
|
||||
public static Location toBukkitLocation(com.dfsek.terra.api.generic.world.vector.Location terra) {
|
||||
return new Location(((BukkitWorld) terra.getWorld()).getHandle(), terra.getX(), terra.getY(), terra.getZ());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,9 @@ import com.dfsek.terra.api.generic.world.block.BlockFace;
|
||||
import com.dfsek.terra.api.generic.world.block.data.Bisected;
|
||||
import com.dfsek.terra.api.generic.world.block.data.Stairs;
|
||||
|
||||
/**
|
||||
* Utility class to adapt Bukkit enums to Terra enums.
|
||||
*/
|
||||
public final class BukkitEnumAdapter {
|
||||
public static Stairs.Shape fromBukkitStair(org.bukkit.block.data.type.Stairs.Shape shape) {
|
||||
switch(shape) {
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.dfsek.terra.bukkit.world.block.data;
|
||||
|
||||
import com.dfsek.terra.api.generic.world.block.BlockFace;
|
||||
import com.dfsek.terra.api.generic.world.block.data.MultipleFacing;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class BukkitMultipleFacing extends BukkitBlockData implements MultipleFacing {
|
||||
private final org.bukkit.block.data.MultipleFacing delegate;
|
||||
|
||||
public BukkitMultipleFacing(org.bukkit.block.data.MultipleFacing delegate) {
|
||||
super(delegate);
|
||||
this.delegate = delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<BlockFace> getFaces() {
|
||||
return delegate.getFaces().stream().map(BukkitEnumAdapter::fromBukkitBlockFace).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFace(BlockFace face, boolean facing) {
|
||||
delegate.setFace(TerraEnumAdapter.fromTerraBlockFace(face), facing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<BlockFace> getAllowedFaces() {
|
||||
return delegate.getAllowedFaces().stream().map(BukkitEnumAdapter::fromBukkitBlockFace).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasFace(BlockFace f) {
|
||||
return delegate.hasFace(TerraEnumAdapter.fromTerraBlockFace(f));
|
||||
}
|
||||
}
|
||||
@@ -3,14 +3,13 @@ package com.dfsek.terra.bukkit.world.block.data;
|
||||
import com.dfsek.terra.api.generic.world.block.BlockFace;
|
||||
import com.dfsek.terra.api.generic.world.block.data.Stairs;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
public class BukkitStairs extends BukkitBlockData implements Stairs {
|
||||
private final org.bukkit.block.data.type.Stairs stairs;
|
||||
|
||||
public BukkitStairs(BlockData delegate) {
|
||||
public BukkitStairs(org.bukkit.block.data.type.Stairs delegate) {
|
||||
super(delegate);
|
||||
this.stairs = (org.bukkit.block.data.type.Stairs) delegate;
|
||||
this.stairs = delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,12 +2,11 @@ package com.dfsek.terra.bukkit.world.block.data;
|
||||
|
||||
import com.dfsek.terra.api.generic.world.block.data.Waterlogged;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
public class BukkitWaterlogged extends BukkitBlockData implements Waterlogged {
|
||||
private boolean waterlogged;
|
||||
|
||||
public BukkitWaterlogged(BlockData delegate) {
|
||||
public BukkitWaterlogged(org.bukkit.block.data.Waterlogged delegate) {
|
||||
super(delegate);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,9 @@ import com.dfsek.terra.api.generic.world.block.BlockFace;
|
||||
import org.bukkit.block.data.Bisected;
|
||||
import org.bukkit.block.data.type.Stairs;
|
||||
|
||||
/**
|
||||
* Utility class to adapt Terra enums to Bukkit enums
|
||||
*/
|
||||
public final class TerraEnumAdapter {
|
||||
public static Stairs.Shape fromTerraStair(com.dfsek.terra.api.generic.world.block.data.Stairs.Shape shape) {
|
||||
switch(shape) {
|
||||
|
||||
Reference in New Issue
Block a user