refactor blockdata

This commit is contained in:
dfsek
2020-12-31 01:50:47 -07:00
parent 1826adf1c2
commit 92afe1c9ab
18 changed files with 140 additions and 95 deletions

View File

@@ -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

View File

@@ -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));
}
}
}

View File

@@ -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

View File

@@ -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);
}
}
}

View File

@@ -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

View File

@@ -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) {

View File

@@ -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);
}
}
}

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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 {

View File

@@ -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) {