From 356771bceaaaeb2d3769b2f3b6d0bd16cd6cf19a Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 31 Dec 2020 20:37:14 -0700 Subject: [PATCH] work on inventory stuff --- .../dfsek/terra/api/platform/block/Block.java | 3 ++ .../api/platform/block/state/BlockState.java | 17 +++++- .../api/platform/block/state/Container.java | 6 +++ .../inventory/BlockInventoryHolder.java | 7 +++ .../platform/inventory/InventoryHolder.java | 7 +++ .../platform/inventory/item/Damageable.java | 5 +- .../dfsek/terra/bukkit/BukkitItemHandle.java | 1 + .../dfsek/terra/bukkit/BukkitItemMeta.java | 16 ------ .../terra/bukkit/world/block/BukkitBlock.java | 8 ++- .../world/block/state/BukkitBlockState.java | 54 +++++++++++++++++++ .../world/block/state/BukkitContainer.java | 16 ++++++ .../world/inventory/BukkitInventory.java | 32 +++++++++++ .../world/inventory/BukkitItemMeta.java | 23 ++++++++ .../inventory}/BukkitItemStack.java | 6 +-- .../inventory/meta/BukkitDamageable.java | 26 +++++++++ .../terra/fabric/world/block/FabricBlock.java | 6 +++ 16 files changed, 210 insertions(+), 23 deletions(-) create mode 100644 common/src/main/java/com/dfsek/terra/api/platform/block/state/Container.java create mode 100644 common/src/main/java/com/dfsek/terra/api/platform/inventory/BlockInventoryHolder.java create mode 100644 common/src/main/java/com/dfsek/terra/api/platform/inventory/InventoryHolder.java delete mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitItemMeta.java create mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitBlockState.java create mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitContainer.java create mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/BukkitInventory.java create mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/BukkitItemMeta.java rename platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/{ => world/inventory}/BukkitItemStack.java (88%) create mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/meta/BukkitDamageable.java diff --git a/common/src/main/java/com/dfsek/terra/api/platform/block/Block.java b/common/src/main/java/com/dfsek/terra/api/platform/block/Block.java index c29b982aa..47242d6e2 100644 --- a/common/src/main/java/com/dfsek/terra/api/platform/block/Block.java +++ b/common/src/main/java/com/dfsek/terra/api/platform/block/Block.java @@ -2,12 +2,15 @@ package com.dfsek.terra.api.platform.block; import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.platform.Handle; +import com.dfsek.terra.api.platform.block.state.BlockState; public interface Block extends Handle { void setBlockData(BlockData data, boolean physics); BlockData getBlockData(); + BlockState getState(); + Block getRelative(BlockFace face); Block getRelative(BlockFace face, int len); diff --git a/common/src/main/java/com/dfsek/terra/api/platform/block/state/BlockState.java b/common/src/main/java/com/dfsek/terra/api/platform/block/state/BlockState.java index b5fc693ce..74fdd2be9 100644 --- a/common/src/main/java/com/dfsek/terra/api/platform/block/state/BlockState.java +++ b/common/src/main/java/com/dfsek/terra/api/platform/block/state/BlockState.java @@ -1,4 +1,19 @@ package com.dfsek.terra.api.platform.block.state; -public interface BlockState { +import com.dfsek.terra.api.platform.Handle; +import com.dfsek.terra.api.platform.block.Block; +import com.dfsek.terra.api.platform.block.BlockData; + +public interface BlockState extends Handle { + Block getBlock(); + + int getX(); + + int getY(); + + int getZ(); + + BlockData getBlockData(); + + boolean update(boolean applyPhysics); } diff --git a/common/src/main/java/com/dfsek/terra/api/platform/block/state/Container.java b/common/src/main/java/com/dfsek/terra/api/platform/block/state/Container.java new file mode 100644 index 000000000..450b8d09a --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/platform/block/state/Container.java @@ -0,0 +1,6 @@ +package com.dfsek.terra.api.platform.block.state; + +import com.dfsek.terra.api.platform.inventory.BlockInventoryHolder; + +public interface Container extends BlockState, BlockInventoryHolder { +} diff --git a/common/src/main/java/com/dfsek/terra/api/platform/inventory/BlockInventoryHolder.java b/common/src/main/java/com/dfsek/terra/api/platform/inventory/BlockInventoryHolder.java new file mode 100644 index 000000000..157d8837e --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/platform/inventory/BlockInventoryHolder.java @@ -0,0 +1,7 @@ +package com.dfsek.terra.api.platform.inventory; + +import com.dfsek.terra.api.platform.block.Block; + +public interface BlockInventoryHolder extends InventoryHolder { + Block getBlock(); +} diff --git a/common/src/main/java/com/dfsek/terra/api/platform/inventory/InventoryHolder.java b/common/src/main/java/com/dfsek/terra/api/platform/inventory/InventoryHolder.java new file mode 100644 index 000000000..c8550a121 --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/platform/inventory/InventoryHolder.java @@ -0,0 +1,7 @@ +package com.dfsek.terra.api.platform.inventory; + +import com.dfsek.terra.api.platform.Handle; + +public interface InventoryHolder extends Handle { + Inventory getInventory(); +} diff --git a/common/src/main/java/com/dfsek/terra/api/platform/inventory/item/Damageable.java b/common/src/main/java/com/dfsek/terra/api/platform/inventory/item/Damageable.java index b4c6a5596..160388c94 100644 --- a/common/src/main/java/com/dfsek/terra/api/platform/inventory/item/Damageable.java +++ b/common/src/main/java/com/dfsek/terra/api/platform/inventory/item/Damageable.java @@ -2,9 +2,10 @@ package com.dfsek.terra.api.platform.inventory.item; import com.dfsek.terra.api.platform.Handle; -public interface Damageable extends Handle, Cloneable { - Damageable clone(); +public interface Damageable extends Handle { int getDamage(); + void setDamage(int damage); + boolean hasDamage(); } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitItemHandle.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitItemHandle.java index 29c8d8eca..fa6d7fd3b 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitItemHandle.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitItemHandle.java @@ -4,6 +4,7 @@ import com.dfsek.terra.api.platform.block.MaterialData; import com.dfsek.terra.api.platform.inventory.ItemHandle; import com.dfsek.terra.api.platform.inventory.ItemStack; import com.dfsek.terra.bukkit.world.block.BukkitMaterialData; +import com.dfsek.terra.bukkit.world.inventory.BukkitItemStack; public class BukkitItemHandle implements ItemHandle { @Override diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitItemMeta.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitItemMeta.java deleted file mode 100644 index a4742e02c..000000000 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitItemMeta.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.dfsek.terra.bukkit; - -import com.dfsek.terra.api.platform.inventory.item.ItemMeta; - -public class BukkitItemMeta implements ItemMeta { - private final org.bukkit.inventory.meta.ItemMeta delegate; - - public BukkitItemMeta(org.bukkit.inventory.meta.ItemMeta delegate) { - this.delegate = delegate; - } - - @Override - public org.bukkit.inventory.meta.ItemMeta getHandle() { - return delegate; - } -} diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/BukkitBlock.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/BukkitBlock.java index e890163af..ad933841a 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/BukkitBlock.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/BukkitBlock.java @@ -5,6 +5,7 @@ import com.dfsek.terra.api.platform.block.Block; 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.api.platform.block.state.BlockState; import com.dfsek.terra.bukkit.BukkitWorld; import com.dfsek.terra.bukkit.world.block.data.BukkitBlockData; import com.dfsek.terra.bukkit.world.block.data.BukkitEnumAdapter; @@ -26,6 +27,11 @@ public class BukkitBlock implements Block { return BukkitBlockData.newInstance(delegate.getBlockData()); } + @Override + public BlockState getState() { + return null; + } + @Override public Block getRelative(BlockFace face) { return new BukkitBlock(delegate.getRelative(BukkitEnumAdapter.adapt(face))); @@ -72,7 +78,7 @@ public class BukkitBlock implements Block { } @Override - public Object getHandle() { + public org.bukkit.block.Block getHandle() { return delegate; } } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitBlockState.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitBlockState.java new file mode 100644 index 000000000..85e9e4183 --- /dev/null +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitBlockState.java @@ -0,0 +1,54 @@ +package com.dfsek.terra.bukkit.world.block.state; + +import com.dfsek.terra.api.platform.block.Block; +import com.dfsek.terra.api.platform.block.BlockData; +import com.dfsek.terra.api.platform.block.state.BlockState; +import com.dfsek.terra.bukkit.world.block.BukkitBlock; +import com.dfsek.terra.bukkit.world.block.data.BukkitBlockData; + +public class BukkitBlockState implements BlockState { + private final org.bukkit.block.BlockState delegate; + + protected BukkitBlockState(org.bukkit.block.BlockState block) { + this.delegate = block; + } + + public static BukkitBlockState newInstance(org.bukkit.block.BlockState block) { + return new BukkitBlockState(block); + } + + @Override + public org.bukkit.block.BlockState getHandle() { + return delegate; + } + + @Override + public Block getBlock() { + return new BukkitBlock(delegate.getBlock()); + } + + @Override + public int getX() { + return delegate.getX(); + } + + @Override + public int getY() { + return delegate.getY(); + } + + @Override + public int getZ() { + return delegate.getZ(); + } + + @Override + public BlockData getBlockData() { + return BukkitBlockData.newInstance(delegate.getBlockData()); + } + + @Override + public boolean update(boolean applyPhysics) { + return delegate.update(true, applyPhysics); + } +} diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitContainer.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitContainer.java new file mode 100644 index 000000000..d68254b36 --- /dev/null +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitContainer.java @@ -0,0 +1,16 @@ +package com.dfsek.terra.bukkit.world.block.state; + +import com.dfsek.terra.api.platform.block.state.Container; +import com.dfsek.terra.api.platform.inventory.Inventory; +import com.dfsek.terra.bukkit.world.inventory.BukkitInventory; + +public class BukkitContainer extends BukkitBlockState implements Container { + protected BukkitContainer(org.bukkit.block.Container block) { + super(block); + } + + @Override + public Inventory getInventory() { + return new BukkitInventory(((org.bukkit.block.Container) getHandle()).getInventory()); + } +} diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/BukkitInventory.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/BukkitInventory.java new file mode 100644 index 000000000..87e8aeb3d --- /dev/null +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/BukkitInventory.java @@ -0,0 +1,32 @@ +package com.dfsek.terra.bukkit.world.inventory; + +import com.dfsek.terra.api.platform.inventory.Inventory; +import com.dfsek.terra.api.platform.inventory.ItemStack; + +public class BukkitInventory implements Inventory { + private final org.bukkit.inventory.Inventory delegate; + + public BukkitInventory(org.bukkit.inventory.Inventory delegate) { + this.delegate = delegate; + } + + @Override + public int getSize() { + return delegate.getSize(); + } + + @Override + public ItemStack getItem(int slot) { + return new BukkitItemStack(delegate.getItem(slot)); + } + + @Override + public void setItem(int slot, ItemStack newStack) { + delegate.setItem(slot, ((BukkitItemStack) newStack).getHandle()); + } + + @Override + public org.bukkit.inventory.Inventory getHandle() { + return delegate; + } +} diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/BukkitItemMeta.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/BukkitItemMeta.java new file mode 100644 index 000000000..3e9e4299f --- /dev/null +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/BukkitItemMeta.java @@ -0,0 +1,23 @@ +package com.dfsek.terra.bukkit.world.inventory; + +import com.dfsek.terra.api.platform.inventory.item.ItemMeta; +import com.dfsek.terra.bukkit.world.inventory.meta.BukkitDamageable; +import org.bukkit.inventory.meta.Damageable; + +public class BukkitItemMeta implements ItemMeta { + private final org.bukkit.inventory.meta.ItemMeta delegate; + + protected BukkitItemMeta(org.bukkit.inventory.meta.ItemMeta delegate) { + this.delegate = delegate; + } + + public static BukkitItemMeta newInstance(org.bukkit.inventory.meta.ItemMeta delegate) { + if(delegate instanceof Damageable) return new BukkitDamageable((Damageable) delegate); + return new BukkitItemMeta(delegate); + } + + @Override + public org.bukkit.inventory.meta.ItemMeta getHandle() { + return delegate; + } +} diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitItemStack.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/BukkitItemStack.java similarity index 88% rename from platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitItemStack.java rename to platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/BukkitItemStack.java index 54836de15..5d94c45c5 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitItemStack.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/BukkitItemStack.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit; +package com.dfsek.terra.bukkit.world.inventory; import com.dfsek.terra.api.platform.block.MaterialData; import com.dfsek.terra.api.platform.inventory.ItemStack; @@ -6,7 +6,7 @@ import com.dfsek.terra.api.platform.inventory.item.ItemMeta; import com.dfsek.terra.bukkit.world.block.BukkitMaterialData; public class BukkitItemStack implements ItemStack { - protected org.bukkit.inventory.ItemStack delegate; + private org.bukkit.inventory.ItemStack delegate; public BukkitItemStack(org.bukkit.inventory.ItemStack delegate) { this.delegate = delegate; @@ -41,7 +41,7 @@ public class BukkitItemStack implements ItemStack { @Override public ItemMeta getItemMeta() { - return new BukkitItemMeta(delegate.getItemMeta()); + return BukkitItemMeta.newInstance(delegate.getItemMeta()); } @Override diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/meta/BukkitDamageable.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/meta/BukkitDamageable.java new file mode 100644 index 000000000..0c2ba018f --- /dev/null +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/inventory/meta/BukkitDamageable.java @@ -0,0 +1,26 @@ +package com.dfsek.terra.bukkit.world.inventory.meta; + +import com.dfsek.terra.api.platform.inventory.item.Damageable; +import com.dfsek.terra.bukkit.world.inventory.BukkitItemMeta; +import org.bukkit.inventory.meta.ItemMeta; + +public class BukkitDamageable extends BukkitItemMeta implements Damageable { + public BukkitDamageable(org.bukkit.inventory.meta.Damageable delegate) { + super((ItemMeta) delegate); + } + + @Override + public int getDamage() { + return ((org.bukkit.inventory.meta.Damageable) getHandle()).getDamage(); + } + + @Override + public void setDamage(int damage) { + ((org.bukkit.inventory.meta.Damageable) getHandle()).setDamage(damage); + } + + @Override + public boolean hasDamage() { + return ((org.bukkit.inventory.meta.Damageable) getHandle()).hasDamage(); + } +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlock.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlock.java index 9e0d8bfd9..2b22b99ba 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlock.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlock.java @@ -5,6 +5,7 @@ import com.dfsek.terra.api.platform.block.Block; 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.api.platform.block.state.BlockState; import com.dfsek.terra.fabric.world.FabricAdapters; import com.dfsek.terra.fabric.world.handles.world.FabricWorldAccess; import net.minecraft.util.math.BlockPos; @@ -27,6 +28,11 @@ public class FabricBlock implements Block { return new FabricBlockData(delegate.worldAccess.getBlockState(delegate.position)); } + @Override + public BlockState getState() { + return null; + } + @Override public Block getRelative(BlockFace face) { return getRelative(face, 1);