diff --git a/src/main/java/com/cricketcraft/chisel/api/IChiselItem.java b/src/main/java/com/cricketcraft/chisel/api/IChiselItem.java index 5ae491c3..72e6fca9 100644 --- a/src/main/java/com/cricketcraft/chisel/api/IChiselItem.java +++ b/src/main/java/com/cricketcraft/chisel/api/IChiselItem.java @@ -40,6 +40,25 @@ public interface IChiselItem extends IChiselMode { */ void onChisel(World world, IInventory inv, int slot, ItemStack chisel, ItemStack target); + /** + * Called to check if this {@link ItemStack} can be chiseled in this chisel. If not, there will be no possible variants displayed in the GUI. + *

+ * It is not necessary to take into account whether this item has any variants, this method will only be called after that check. + * + * @param world + * {@link World} object + * @param inv + * The inventory this chisel is currently in + * @param slot + * The slot index of the chisel in the inventory + * @param chisel + * The {@link ItemStack} representing the chisel + * @param target + * The {@link ItemStack} representing the target item + * @return True if the current target can be chiseled into anything. False otherwise. + */ + boolean canChisel(World world, IInventory inv, int slot, ItemStack chisel, ItemStack target); + /** * Allows you to control if your item can chisel this block in the world. * diff --git a/src/main/java/com/cricketcraft/chisel/inventory/InventoryChiselSelection.java b/src/main/java/com/cricketcraft/chisel/inventory/InventoryChiselSelection.java index 3a749037..ffc34e94 100644 --- a/src/main/java/com/cricketcraft/chisel/inventory/InventoryChiselSelection.java +++ b/src/main/java/com/cricketcraft/chisel/inventory/InventoryChiselSelection.java @@ -8,6 +8,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import com.cricketcraft.chisel.api.IChiselItem; import com.cricketcraft.chisel.item.chisel.ItemChisel; public class InventoryChiselSelection implements IInventory { @@ -119,6 +120,9 @@ public class InventoryChiselSelection implements IInventory { if (Block.getBlockFromItem(item) == null) return; + if (!((IChiselItem) chisel.getItem()).canChisel(container.playerInventory.player.worldObj, this, container.playerInventory.currentItem, chisel, chiseledItem)) + return; + ArrayList list = container.carving.getItems(chiseledItem); activeVariations = 0; diff --git a/src/main/java/com/cricketcraft/chisel/item/chisel/ItemChisel.java b/src/main/java/com/cricketcraft/chisel/item/chisel/ItemChisel.java index 303c5d1c..4487d9fb 100644 --- a/src/main/java/com/cricketcraft/chisel/item/chisel/ItemChisel.java +++ b/src/main/java/com/cricketcraft/chisel/item/chisel/ItemChisel.java @@ -17,6 +17,7 @@ import com.cricketcraft.chisel.api.ChiselMode; import com.cricketcraft.chisel.api.IChiselItem; import com.cricketcraft.chisel.carving.Carving; import com.cricketcraft.chisel.config.Configurations; +import com.cricketcraft.chisel.init.ChiselBlocks; import com.cricketcraft.chisel.utils.GeneralClient; public class ItemChisel extends Item implements IChiselItem { @@ -82,12 +83,17 @@ public class ItemChisel extends Item implements IChiselItem { public ChiselMode getChiselMode(ItemStack itemStack) { return ChiselMode.SINGLE; } - + @Override public boolean canOpenGui(World world, EntityPlayer player, ItemStack chisel) { return true; } + @Override + public boolean canChisel(World world, IInventory inv, int slot, ItemStack chisel, ItemStack target) { + return Block.getBlockFromItem(target.getItem()) != ChiselBlocks.marble; + } + @Override public void onChisel(World world, IInventory inv, int slot, ItemStack chisel, ItemStack target) { if (Configurations.allowChiselDamage) { diff --git a/src/main/java/com/cricketcraft/chisel/network/ChiselGuiHandler.java b/src/main/java/com/cricketcraft/chisel/network/ChiselGuiHandler.java index 8046079b..002b357a 100644 --- a/src/main/java/com/cricketcraft/chisel/network/ChiselGuiHandler.java +++ b/src/main/java/com/cricketcraft/chisel/network/ChiselGuiHandler.java @@ -22,7 +22,7 @@ public class ChiselGuiHandler implements IGuiHandler { public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { switch (ID) { case 0: - return new ContainerChisel(player.inventory, new InventoryChiselSelection(null)); + return new ContainerChisel(player.inventory, new InventoryChiselSelection(player.getCurrentEquippedItem())); case 1: TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntityAutoChisel) @@ -40,7 +40,7 @@ public class ChiselGuiHandler implements IGuiHandler { public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { switch (ID) { case 0: - return new GuiChisel(player.inventory, new InventoryChiselSelection(null)); + return new GuiChisel(player.inventory, new InventoryChiselSelection(player.getCurrentEquippedItem())); case 1: TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntityAutoChisel)