mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-02-16 10:30:42 +00:00
refactor blockdata
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package com.dfsek.terra.api.structures.script.functions;
|
||||
|
||||
import com.dfsek.terra.api.math.vector.Vector2;
|
||||
import com.dfsek.terra.api.platform.TerraPlugin;
|
||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||
import com.dfsek.terra.api.structures.parser.lang.functions.Function;
|
||||
import com.dfsek.terra.api.structures.structure.Rotation;
|
||||
import com.dfsek.terra.api.structures.structure.buffer.Buffer;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class LootFunction implements Function<Void> {
|
||||
private final Returnable<String> data;
|
||||
private final Returnable<Number> x, y, z;
|
||||
private final Position position;
|
||||
|
||||
public LootFunction(Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, Returnable<String> data, TerraPlugin main, Position position) {
|
||||
this.position = position;
|
||||
this.data = data;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String name() {
|
||||
return "block";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Buffer buffer, Rotation rotation, Random random, int recursions) {
|
||||
Vector2 xz = new Vector2(x.apply(buffer, rotation, random, recursions).doubleValue(), z.apply(buffer, rotation, random, recursions).doubleValue());
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Position getPosition() {
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReturnType returnType() {
|
||||
return ReturnType.VOID;
|
||||
}
|
||||
}
|
||||
@@ -34,8 +34,7 @@ public class StructureBuffer implements Buffer {
|
||||
|
||||
@Override
|
||||
public Buffer addItem(BufferedItem item, Vector3 location) {
|
||||
bufferedItemMap.putIfAbsent(location, new Cell());
|
||||
bufferedItemMap.get(location).add(item);
|
||||
bufferedItemMap.computeIfAbsent(location, l -> new Cell()).add(item);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -50,8 +49,7 @@ public class StructureBuffer implements Buffer {
|
||||
|
||||
@Override
|
||||
public Buffer setMark(Mark mark, Vector3 location) {
|
||||
bufferedItemMap.putIfAbsent(location, new Cell());
|
||||
bufferedItemMap.get(location).setMark(mark);
|
||||
bufferedItemMap.computeIfAbsent(location, l -> new Cell()).setMark(mark);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.dfsek.terra.api.structures.structure.buffer.items;
|
||||
|
||||
import com.dfsek.terra.api.math.vector.Location;
|
||||
import com.dfsek.terra.api.platform.block.BlockData;
|
||||
|
||||
public class BufferedLootApplication implements BufferedItem {
|
||||
@Override
|
||||
public void paste(Location origin) {
|
||||
BlockData data = origin.getBlock().getBlockData();
|
||||
}
|
||||
}
|
||||
@@ -15,10 +15,10 @@ public class TokenizerTest {
|
||||
// Actual run
|
||||
long l = System.nanoTime();
|
||||
|
||||
|
||||
while(tokenizer.hasNext()) {
|
||||
Token t = tokenizer.fetch();
|
||||
Token t = tokenizer.fetch();
|
||||
while(t != null) {
|
||||
System.out.println(t);
|
||||
t = tokenizer.fetch();
|
||||
}
|
||||
|
||||
System.out.println((double) (System.nanoTime() - l) / 1000000);
|
||||
|
||||
@@ -7,30 +7,10 @@ import com.dfsek.terra.api.platform.block.BlockData;
|
||||
import com.dfsek.terra.api.platform.block.MaterialData;
|
||||
import com.dfsek.terra.api.platform.world.WorldHandle;
|
||||
import com.dfsek.terra.api.transform.Transformer;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitMaterialData;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitAnaloguePowerable;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitDirectional;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitMultipleFacing;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitOrientable;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitRedstoneWire;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitRotatable;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitSlab;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitStairs;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitWall;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitWaterlogged;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockData;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.data.AnaloguePowerable;
|
||||
import org.bukkit.block.data.Directional;
|
||||
import org.bukkit.block.data.MultipleFacing;
|
||||
import org.bukkit.block.data.Orientable;
|
||||
import org.bukkit.block.data.Rotatable;
|
||||
import org.bukkit.block.data.Waterlogged;
|
||||
import org.bukkit.block.data.type.RedstoneWire;
|
||||
import org.bukkit.block.data.type.Slab;
|
||||
import org.bukkit.block.data.type.Stairs;
|
||||
import org.bukkit.block.data.type.Wall;
|
||||
|
||||
public class BukkitWorldHandle implements WorldHandle {
|
||||
private Transformer<String, Tree> treeTransformer;
|
||||
@@ -60,22 +40,7 @@ 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((Stairs) bukkitData);
|
||||
if(bukkitData instanceof Slab) return new BukkitSlab((Slab) bukkitData);
|
||||
if(bukkitData instanceof Wall) return new BukkitWall((Wall) bukkitData);
|
||||
|
||||
if(bukkitData instanceof RedstoneWire) return new BukkitRedstoneWire((RedstoneWire) bukkitData);
|
||||
if(bukkitData instanceof AnaloguePowerable) return new BukkitAnaloguePowerable((AnaloguePowerable) bukkitData);
|
||||
|
||||
if(bukkitData instanceof MultipleFacing) return new BukkitMultipleFacing((MultipleFacing) bukkitData);
|
||||
if(bukkitData instanceof Rotatable) return new BukkitRotatable((Rotatable) bukkitData);
|
||||
if(bukkitData instanceof Directional) return new BukkitDirectional((Directional) bukkitData);
|
||||
if(bukkitData instanceof Orientable) return new BukkitOrientable((Orientable) bukkitData);
|
||||
|
||||
if(bukkitData instanceof Waterlogged) return new BukkitWaterlogged((Waterlogged) bukkitData);
|
||||
|
||||
return new BukkitBlockData(Bukkit.createBlockData(data));
|
||||
return BukkitBlockData.newInstance(bukkitData);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -7,7 +7,7 @@ import com.dfsek.terra.api.platform.world.World;
|
||||
import com.dfsek.terra.api.world.generation.TerraChunkGenerator;
|
||||
import com.dfsek.terra.bukkit.BukkitBiomeGrid;
|
||||
import com.dfsek.terra.bukkit.BukkitWorld;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockData;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -95,7 +95,7 @@ public class BukkitChunkGenerator implements com.dfsek.terra.api.platform.genera
|
||||
|
||||
@Override
|
||||
public @NotNull BlockData getBlockData(int x, int y, int z) {
|
||||
return new BukkitBlockData(delegate.getBlockData(x, y, z));
|
||||
return BukkitBlockData.newInstance(delegate.getBlockData(x, y, z));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.dfsek.terra.api.platform.block.BlockData;
|
||||
import com.dfsek.terra.api.platform.block.BlockFace;
|
||||
import com.dfsek.terra.api.platform.block.MaterialData;
|
||||
import com.dfsek.terra.bukkit.BukkitWorld;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockData;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitEnumAdapter;
|
||||
|
||||
public class BukkitBlock implements Block {
|
||||
@@ -22,7 +23,7 @@ public class BukkitBlock implements Block {
|
||||
|
||||
@Override
|
||||
public BlockData getBlockData() {
|
||||
return new BukkitBlockData(delegate.getBlockData());
|
||||
return BukkitBlockData.newInstance(delegate.getBlockData());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
package com.dfsek.terra.bukkit.world.block;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.BlockData;
|
||||
import com.dfsek.terra.api.platform.block.MaterialData;
|
||||
|
||||
public class BukkitBlockData implements BlockData {
|
||||
private org.bukkit.block.data.BlockData delegate;
|
||||
|
||||
public BukkitBlockData(org.bukkit.block.data.BlockData delegate) {
|
||||
this.delegate = delegate;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public org.bukkit.block.data.BlockData getHandle() {
|
||||
return delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MaterialData getMaterial() {
|
||||
return new BukkitMaterialData(delegate.getMaterial());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(MaterialData materialData) {
|
||||
return delegate.getMaterial().equals(((BukkitMaterialData) materialData).getHandle());
|
||||
}
|
||||
|
||||
@Override
|
||||
public BukkitBlockData clone() {
|
||||
try {
|
||||
BukkitBlockData n = (BukkitBlockData) super.clone();
|
||||
n.delegate = delegate.clone();
|
||||
return n;
|
||||
} catch(CloneNotSupportedException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.dfsek.terra.bukkit.world.block;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.BlockData;
|
||||
import com.dfsek.terra.api.platform.block.MaterialData;
|
||||
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockData;
|
||||
import org.bukkit.Material;
|
||||
|
||||
public class BukkitMaterialData implements MaterialData {
|
||||
@@ -38,7 +39,7 @@ public class BukkitMaterialData implements MaterialData {
|
||||
|
||||
@Override
|
||||
public BlockData createBlockData() {
|
||||
return new BukkitBlockData(delegate.createBlockData());
|
||||
return BukkitBlockData.newInstance(delegate.createBlockData());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.dfsek.terra.bukkit.world.block.data;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.data.AnaloguePowerable;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
|
||||
public class BukkitAnaloguePowerable extends BukkitBlockData implements AnaloguePowerable {
|
||||
public BukkitAnaloguePowerable(org.bukkit.block.data.AnaloguePowerable delegate) {
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
package com.dfsek.terra.bukkit.world.block.data;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.BlockData;
|
||||
import com.dfsek.terra.api.platform.block.MaterialData;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitMaterialData;
|
||||
import org.bukkit.block.data.AnaloguePowerable;
|
||||
import org.bukkit.block.data.Directional;
|
||||
import org.bukkit.block.data.MultipleFacing;
|
||||
import org.bukkit.block.data.Orientable;
|
||||
import org.bukkit.block.data.Rotatable;
|
||||
import org.bukkit.block.data.Waterlogged;
|
||||
import org.bukkit.block.data.type.RedstoneWire;
|
||||
import org.bukkit.block.data.type.Slab;
|
||||
import org.bukkit.block.data.type.Stairs;
|
||||
import org.bukkit.block.data.type.Wall;
|
||||
|
||||
public class BukkitBlockData implements BlockData {
|
||||
private org.bukkit.block.data.BlockData delegate;
|
||||
|
||||
protected BukkitBlockData(org.bukkit.block.data.BlockData delegate) {
|
||||
this.delegate = delegate;
|
||||
}
|
||||
|
||||
public static BukkitBlockData newInstance(org.bukkit.block.data.BlockData bukkitData) {
|
||||
if(bukkitData instanceof Stairs) return new BukkitStairs((Stairs) bukkitData);
|
||||
if(bukkitData instanceof Slab) return new BukkitSlab((Slab) bukkitData);
|
||||
if(bukkitData instanceof Wall) return new BukkitWall((Wall) bukkitData);
|
||||
|
||||
if(bukkitData instanceof RedstoneWire) return new BukkitRedstoneWire((RedstoneWire) bukkitData);
|
||||
if(bukkitData instanceof AnaloguePowerable) return new BukkitAnaloguePowerable((AnaloguePowerable) bukkitData);
|
||||
|
||||
if(bukkitData instanceof MultipleFacing) return new BukkitMultipleFacing((MultipleFacing) bukkitData);
|
||||
if(bukkitData instanceof Rotatable) return new BukkitRotatable((Rotatable) bukkitData);
|
||||
if(bukkitData instanceof Directional) return new BukkitDirectional((Directional) bukkitData);
|
||||
if(bukkitData instanceof Orientable) return new BukkitOrientable((Orientable) bukkitData);
|
||||
|
||||
if(bukkitData instanceof Waterlogged) return new BukkitWaterlogged((Waterlogged) bukkitData);
|
||||
|
||||
return new BukkitBlockData(bukkitData);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public org.bukkit.block.data.BlockData getHandle() {
|
||||
return delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MaterialData getMaterial() {
|
||||
return new BukkitMaterialData(delegate.getMaterial());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(MaterialData materialData) {
|
||||
return delegate.getMaterial().equals(((BukkitMaterialData) materialData).getHandle());
|
||||
}
|
||||
|
||||
@Override
|
||||
public BukkitBlockData clone() {
|
||||
try {
|
||||
BukkitBlockData n = (BukkitBlockData) super.clone();
|
||||
n.delegate = delegate.clone();
|
||||
return n;
|
||||
} catch(CloneNotSupportedException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package com.dfsek.terra.bukkit.world.block.data;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.BlockFace;
|
||||
import com.dfsek.terra.api.platform.block.data.Directional;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
|
||||
public class BukkitDirectional extends BukkitBlockData implements Directional {
|
||||
public BukkitDirectional(org.bukkit.block.data.Directional delegate) {
|
||||
|
||||
@@ -2,7 +2,6 @@ package com.dfsek.terra.bukkit.world.block.data;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.BlockFace;
|
||||
import com.dfsek.terra.api.platform.block.data.MultipleFacing;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -2,7 +2,6 @@ package com.dfsek.terra.bukkit.world.block.data;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.Axis;
|
||||
import com.dfsek.terra.api.platform.block.data.Orientable;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.dfsek.terra.bukkit.world.block.data;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.data.Rail;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
|
||||
public class BukkitRail extends BukkitBlockData implements Rail {
|
||||
public BukkitRail(org.bukkit.block.data.Rail delegate) {
|
||||
|
||||
@@ -2,7 +2,6 @@ package com.dfsek.terra.bukkit.world.block.data;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.BlockFace;
|
||||
import com.dfsek.terra.api.platform.block.data.Rotatable;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
|
||||
public class BukkitRotatable extends BukkitBlockData implements Rotatable {
|
||||
public BukkitRotatable(org.bukkit.block.data.Rotatable delegate) {
|
||||
|
||||
@@ -2,7 +2,6 @@ package com.dfsek.terra.bukkit.world.block.data;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.BlockFace;
|
||||
import com.dfsek.terra.api.platform.block.data.Stairs;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
|
||||
public class BukkitStairs extends BukkitBlockData implements Stairs {
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.dfsek.terra.bukkit.world.block.data;
|
||||
|
||||
import com.dfsek.terra.api.platform.block.data.Waterlogged;
|
||||
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
|
||||
|
||||
public class BukkitWaterlogged extends BukkitBlockData implements Waterlogged {
|
||||
public BukkitWaterlogged(org.bukkit.block.data.Waterlogged delegate) {
|
||||
|
||||
Reference in New Issue
Block a user