From a28041daa73e766e0c772e36d2052aa10703d925 Mon Sep 17 00:00:00 2001 From: md_5 Date: Wed, 1 Jun 2016 17:08:55 +1000 Subject: SPIGOT-1292: BlockState based FlowerPot API. --- .../org/bukkit/craftbukkit/block/CraftBlock.java | 2 ++ .../bukkit/craftbukkit/block/CraftFlowerPot.java | 40 ++++++++++++++++++++++ .../craftbukkit/inventory/CraftMetaBlockState.java | 10 ++++++ 3 files changed, 52 insertions(+) create mode 100644 src/main/java/org/bukkit/craftbukkit/block/CraftFlowerPot.java (limited to 'src') diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java index 991afb14..cdeff9bc 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -296,6 +296,8 @@ public class CraftBlock implements Block { case WALL_BANNER: case STANDING_BANNER: return new CraftBanner(this); + case FLOWER_POT: + return new CraftFlowerPot(this); default: return new CraftBlockState(this); } diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftFlowerPot.java b/src/main/java/org/bukkit/craftbukkit/block/CraftFlowerPot.java new file mode 100644 index 00000000..e16f5efe --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftFlowerPot.java @@ -0,0 +1,40 @@ +package org.bukkit.craftbukkit.block; + +import net.minecraft.server.TileEntityFlowerPot; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.FlowerPot; +import org.bukkit.craftbukkit.CraftWorld; +import org.bukkit.craftbukkit.util.CraftMagicNumbers; +import org.bukkit.material.MaterialData; + +public class CraftFlowerPot extends CraftBlockState implements FlowerPot { + + private final TileEntityFlowerPot pot; + + public CraftFlowerPot(Block block) { + super(block); + + pot = (TileEntityFlowerPot) ((CraftWorld) block.getWorld()).getTileEntityAt(getX(), getY(), getZ()); + } + + public CraftFlowerPot(Material material, TileEntityFlowerPot pot) { + super(material); + + this.pot = pot; + } + + @Override + public MaterialData getContents() { + return (pot.d() == null) ? null : CraftMagicNumbers.getMaterial(pot.d()).getNewData((byte) pot.e()); // PAIL: rename + } + + @Override + public void setContents(MaterialData item) { + if (item == null) { + pot.a(null, 0); + } else { + pot.a(CraftMagicNumbers.getItem(item.getItemType()), item.getData()); // PAIL: rename + } + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java index 609a1211..f0f891da 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java @@ -16,6 +16,7 @@ import net.minecraft.server.TileEntityCommand; import net.minecraft.server.TileEntityDispenser; import net.minecraft.server.TileEntityDropper; import net.minecraft.server.TileEntityEndGateway; +import net.minecraft.server.TileEntityFlowerPot; import net.minecraft.server.TileEntityFurnace; import net.minecraft.server.TileEntityHopper; import net.minecraft.server.TileEntityMobSpawner; @@ -36,6 +37,7 @@ import org.bukkit.craftbukkit.block.CraftCreatureSpawner; import org.bukkit.craftbukkit.block.CraftDispenser; import org.bukkit.craftbukkit.block.CraftDropper; import org.bukkit.craftbukkit.block.CraftEndGateway; +import org.bukkit.craftbukkit.block.CraftFlowerPot; import org.bukkit.craftbukkit.block.CraftFurnace; import org.bukkit.craftbukkit.block.CraftHopper; import org.bukkit.craftbukkit.block.CraftJukebox; @@ -279,6 +281,11 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta te = new TileEntityBanner(); } return new CraftBanner(material, (TileEntityBanner) te); + case FLOWER_POT_ITEM: + if (te == null) { + te = new TileEntityFlowerPot(); + } + return new CraftFlowerPot(material, (TileEntityFlowerPot) te); default: throw new IllegalStateException("Missing blockState for " + material); } @@ -346,6 +353,9 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta case STANDING_BANNER: valid = te instanceof TileEntityBanner; break; + case FLOWER_POT_ITEM: + valid = te instanceof TileEntityFlowerPot; + break; default: valid = false; break; -- cgit v1.2.3