diff --git a/src/main/java/com/cricketcraft/chisel/api/ChiselAPIProps.java b/src/main/java/com/cricketcraft/chisel/api/ChiselAPIProps.java
index 065b8219..579b9a21 100644
--- a/src/main/java/com/cricketcraft/chisel/api/ChiselAPIProps.java
+++ b/src/main/java/com/cricketcraft/chisel/api/ChiselAPIProps.java
@@ -2,6 +2,6 @@ package com.cricketcraft.chisel.api;
public class ChiselAPIProps {
- public static final String VERSION = "0.0.1";
+ public static final String VERSION = "0.0.2";
}
diff --git a/src/main/java/com/cricketcraft/chisel/api/carving/CarvingUtils.java b/src/main/java/com/cricketcraft/chisel/api/carving/CarvingUtils.java
index 317c75b8..d47676ef 100644
--- a/src/main/java/com/cricketcraft/chisel/api/carving/CarvingUtils.java
+++ b/src/main/java/com/cricketcraft/chisel/api/carving/CarvingUtils.java
@@ -1,5 +1,7 @@
package com.cricketcraft.chisel.api.carving;
+import java.lang.reflect.Field;
+
import net.minecraft.item.ItemStack;
public class CarvingUtils {
@@ -27,4 +29,30 @@ public class CarvingUtils {
public static ItemStack getStack(ICarvingVariation variation) {
return new ItemStack(variation.getBlock(), 1, variation.getItemMeta());
}
+
+ private static Field _chisel;
+ private static boolean errored = false;
+ private static final String CARVING_CLASS = "com.cricketcraft.chisel.carving.Carving";
+
+ /**
+ * @return The instance of the chisel carving registry from the chisel mod.
+ *
+ * If chisel is not installed or some other error occurs this will return null.
+ */
+ public static ICarvingRegistry getChiselRegistry() {
+ if (errored) {
+ return null;
+ }
+
+ try {
+ if (_chisel == null) {
+ _chisel = Class.forName(CARVING_CLASS).getDeclaredField("chisel");
+ }
+ return (ICarvingRegistry) _chisel.get(null);
+ } catch (Exception e) {
+ e.printStackTrace();
+ errored = true;
+ return getChiselRegistry();
+ }
+ }
}
diff --git a/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingGroup.java b/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingGroup.java
index 928aa869..e5d189c3 100644
--- a/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingGroup.java
+++ b/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingGroup.java
@@ -2,6 +2,8 @@ package com.cricketcraft.chisel.api.carving;
import java.util.List;
+import net.minecraft.block.Block;
+
/**
* Represents a group of chiselable blocks.
*
@@ -63,4 +65,15 @@ public interface ICarvingGroup {
* An {@link ICarvingVariation} to add to this group
*/
void addVariation(ICarvingVariation variation);
+
+ /**
+ * Removes a varaition with the passed {@link Block} and metadata from this group.
+ *
+ * @param block
+ * The {@link Block} of the {@link ICarvingVariation variation}
+ * @param metadata
+ * The metadata of the {@link ICarvingVariation variation}
+ * @return The ICarvingVariation that was removed. Null if nothing was removed.
+ */
+ ICarvingVariation removeVariation(Block block, int metadata);
}
diff --git a/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java b/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java
index a4baac9b..64507435 100644
--- a/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java
+++ b/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java
@@ -1,6 +1,6 @@
package com.cricketcraft.chisel.block.tileentity;
-import java.util.ArrayList;
+import java.util.List;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
@@ -178,7 +178,7 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory
// lets make sure the user isn't trying to make something from a block that doesn't have this as a valid target
private boolean canBeMadeFrom(ItemStack from, ItemStack to) {
- ArrayList results = Carving.chisel.getItems(from);
+ List results = Carving.chisel.getItemsForChiseling(from);
for (ItemStack s : results) {
if (s.getItem() == to.getItem() && s.getItemDamage() == to.getItemDamage()) {
return true;
@@ -329,7 +329,7 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory
switch (slot) {
case BASE:
case TARGET:
- return !Carving.chisel.getItems(itemStack).isEmpty();
+ return !Carving.chisel.getItemsForChiseling(itemStack).isEmpty();
case OUTPUT:
return false;
case CHISEL:
diff --git a/src/main/java/com/cricketcraft/chisel/carving/Carving.java b/src/main/java/com/cricketcraft/chisel/carving/Carving.java
index 4a4a51b6..f3f7f461 100644
--- a/src/main/java/com/cricketcraft/chisel/carving/Carving.java
+++ b/src/main/java/com/cricketcraft/chisel/carving/Carving.java
@@ -12,9 +12,10 @@ import net.minecraftforge.oredict.OreDictionary;
import com.cricketcraft.chisel.Chisel;
import com.cricketcraft.chisel.api.carving.ICarvingGroup;
+import com.cricketcraft.chisel.api.carving.ICarvingRegistry;
import com.cricketcraft.chisel.api.carving.ICarvingVariation;
-public class Carving {
+public class Carving implements ICarvingRegistry {
GroupList groups = new GroupList();
@@ -24,6 +25,7 @@ public class Carving {
private Carving() {
}
+ @Override
public ICarvingVariation getVariation(Block block, int metadata) {
ICarvingGroup g = getGroup(block, metadata);
if (g != null) {
@@ -36,7 +38,8 @@ public class Carving {
return null;
}
- public List getVariations(Block block, int metadata) {
+ @Override
+ public List getGroupVariations(Block block, int metadata) {
ICarvingGroup group = getGroup(block, metadata);
if (group == null)
return null;
@@ -44,7 +47,8 @@ public class Carving {
return group.getVariations();
}
- public String getOre(Block block, int metadata) {
+ @Override
+ public String getOreName(Block block, int metadata) {
ICarvingGroup group = getGroup(block, metadata);
if (group == null)
return null;
@@ -52,7 +56,8 @@ public class Carving {
return group.getOreName();
}
- public ArrayList getItems(ItemStack chiseledItem) {
+ @Override
+ public List getItemsForChiseling(ItemStack chiseledItem) {
ArrayList items = new ArrayList();
int damage = chiseledItem.getItemDamage();
@@ -94,6 +99,7 @@ public class Carving {
return items;
}
+ @Override
public ICarvingGroup getGroup(Block block, int metadata) {
int[] ids = OreDictionary.getOreIDs(new ItemStack(block, metadata));
if (ids.length > 0) {
@@ -108,10 +114,12 @@ public class Carving {
return groups.getGroup(block, metadata);
}
+ @Override
public ICarvingGroup getGroup(String name) {
return groups.getGroupByName(name);
}
+ @Override
public void addVariation(String groupName, Block block, int metadata, int order) {
if (block == null) {
throw new NullPointerException("Cannot add variation in group " + groupName + " for null block.");
@@ -121,6 +129,7 @@ public class Carving {
addVariation(groupName, variation);
}
+ @Override
public void addVariation(String groupName, ICarvingVariation variation) {
if (groupName == null) {
throw new NullPointerException("Cannot add variation to null group name.");
@@ -138,10 +147,12 @@ public class Carving {
groups.addVariation(groupName, variation);
}
+ @Override
public void addGroup(ICarvingGroup group) {
groups.add(group);
}
+ @Override
public void registerOre(String name, String oreName) {
ICarvingGroup group = groups.getGroupByName(name);
if (group != null) {
@@ -151,6 +162,7 @@ public class Carving {
}
}
+ @Override
public void setVariationSound(String name, String sound) {
ICarvingGroup group = groups.getGroupByName(name);
if (group != null) {
@@ -160,16 +172,19 @@ public class Carving {
}
}
+ @Override
public String getVariationSound(Block block, int metadata) {
return getVariationSound(Item.getItemFromBlock(block), metadata);
}
+ @Override
public String getVariationSound(Item item, int metadata) {
ICarvingGroup group = groups.getGroup(Block.getBlockFromItem(item), metadata);
String sound = group == null ? null : group.getSound();
return sound == null ? Chisel.MOD_ID + ":chisel.fallback" : sound;
}
+ @Override
public List getSortedGroupNames() {
List names = new ArrayList();
names.addAll(groups.getNames());
diff --git a/src/main/java/com/cricketcraft/chisel/carving/CarvingGroup.java b/src/main/java/com/cricketcraft/chisel/carving/CarvingGroup.java
index e29af8b1..3a42618f 100644
--- a/src/main/java/com/cricketcraft/chisel/carving/CarvingGroup.java
+++ b/src/main/java/com/cricketcraft/chisel/carving/CarvingGroup.java
@@ -4,6 +4,8 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.List;
+import net.minecraft.block.Block;
+
import com.cricketcraft.chisel.api.carving.CarvingUtils;
import com.cricketcraft.chisel.api.carving.ICarvingGroup;
import com.cricketcraft.chisel.api.carving.ICarvingVariation;
@@ -36,6 +38,17 @@ public class CarvingGroup implements ICarvingGroup {
}
});
}
+
+ @Override
+ public ICarvingVariation removeVariation(Block block, int metadata) {
+ ICarvingVariation toRemove = null;
+ for (ICarvingVariation v : variations) {
+ if (v.getBlock() == block && v.getBlockMeta() == metadata) {
+ toRemove = v;
+ }
+ }
+ return toRemove == null ? null : variations.remove(toRemove) ? toRemove : null;
+ }
@Override
public String getName() {
diff --git a/src/main/java/com/cricketcraft/chisel/carving/GroupList.java b/src/main/java/com/cricketcraft/chisel/carving/GroupList.java
index a33db007..d3c99ed9 100644
--- a/src/main/java/com/cricketcraft/chisel/carving/GroupList.java
+++ b/src/main/java/com/cricketcraft/chisel/carving/GroupList.java
@@ -130,6 +130,8 @@ public class GroupList implements Set {
public boolean remove(Object o) {
if (o instanceof ICarvingGroup) {
return groups.remove(((ICarvingGroup) o).getName()) != null;
+ } else if (o instanceof ICarvingVariation) {
+ // TODO support carving variation removal
}
return false;
}
diff --git a/src/main/java/com/cricketcraft/chisel/inventory/ContainerChisel.java b/src/main/java/com/cricketcraft/chisel/inventory/ContainerChisel.java
index e837fdc2..ac841217 100644
--- a/src/main/java/com/cricketcraft/chisel/inventory/ContainerChisel.java
+++ b/src/main/java/com/cricketcraft/chisel/inventory/ContainerChisel.java
@@ -7,6 +7,7 @@ import net.minecraft.inventory.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
+import com.cricketcraft.chisel.api.carving.ICarvingRegistry;
import com.cricketcraft.chisel.carving.Carving;
import com.cricketcraft.chisel.item.chisel.ItemChisel;
import com.cricketcraft.chisel.utils.General;
@@ -18,7 +19,7 @@ public class ContainerChisel extends Container {
int currentIndex;
public ItemStack chisel;
public boolean finished;
- public Carving carving;
+ public ICarvingRegistry carving;
public ContainerChisel(InventoryPlayer inventoryplayer, InventoryChiselSelection inv) {
inventory = inv;
diff --git a/src/main/java/com/cricketcraft/chisel/inventory/InventoryChiselSelection.java b/src/main/java/com/cricketcraft/chisel/inventory/InventoryChiselSelection.java
index 4751c3e9..e69aa789 100644
--- a/src/main/java/com/cricketcraft/chisel/inventory/InventoryChiselSelection.java
+++ b/src/main/java/com/cricketcraft/chisel/inventory/InventoryChiselSelection.java
@@ -1,6 +1,6 @@
package com.cricketcraft.chisel.inventory;
-import java.util.ArrayList;
+import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
@@ -124,7 +124,7 @@ public class InventoryChiselSelection implements IInventory {
if (!((IChiselItem) chisel.getItem()).canChisel(container.playerInventory.player.worldObj, chisel, General.getVariation(chiseledItem)))
return;
- ArrayList list = container.carving.getItems(chiseledItem);
+ List list = container.carving.getItemsForChiseling(chiseledItem);
activeVariations = 0;
while (activeVariations < normalSlots && activeVariations < list.size()) {
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 490aefc0..1727e8f5 100644
--- a/src/main/java/com/cricketcraft/chisel/item/chisel/ItemChisel.java
+++ b/src/main/java/com/cricketcraft/chisel/item/chisel/ItemChisel.java
@@ -15,6 +15,7 @@ import net.minecraftforge.common.MinecraftForge;
import com.cricketcraft.chisel.Chisel;
import com.cricketcraft.chisel.api.IChiselItem;
+import com.cricketcraft.chisel.api.carving.ICarvingRegistry;
import com.cricketcraft.chisel.api.carving.ICarvingVariation;
import com.cricketcraft.chisel.carving.Carving;
import com.cricketcraft.chisel.config.Configurations;
@@ -36,7 +37,7 @@ public class ItemChisel extends Item implements IChiselItem {
}
}
- public static Carving carving = Carving.chisel;
+ public static ICarvingRegistry carving = Carving.chisel;
private ChiselType type;