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 e5d189c3..ffe97843 100644 --- a/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingGroup.java +++ b/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingGroup.java @@ -2,8 +2,6 @@ package com.cricketcraft.chisel.api.carving; import java.util.List; -import net.minecraft.block.Block; - /** * Represents a group of chiselable blocks. *

@@ -59,7 +57,7 @@ public interface ICarvingGroup { List getVariations(); /** - * Adds a variation to this group. + * Adds a variation to this group. Do not call this from external code, as it will fail to remove the inverse lookup from the registry. * * @param variation * An {@link ICarvingVariation} to add to this group @@ -67,13 +65,10 @@ public interface ICarvingGroup { void addVariation(ICarvingVariation variation); /** - * Removes a varaition with the passed {@link Block} and metadata from this group. + * Removes a variation to this group. Do not call this from external code, as it will fail to remove the inverse lookup from the registry. * - * @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. + * @param variation + * An {@link ICarvingVariation} to add to this group */ - ICarvingVariation removeVariation(Block block, int metadata); + boolean removeVariation(ICarvingVariation variation); } diff --git a/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingRegistry.java b/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingRegistry.java index c68dd1cf..49a1fc3e 100644 --- a/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingRegistry.java +++ b/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingRegistry.java @@ -40,9 +40,33 @@ public interface ICarvingRegistry { void addVariation(String groupName, ICarvingVariation variation); void addGroup(ICarvingGroup group); - + ICarvingGroup removeGroup(String groupName); + /** + * Removes a varaition with the passed {@link Block} and metadata from the registry. If this variation is registered with mutiple groups, it will remove it from all of them. + * + * @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); + + /** + * Removes a varaition with the passed {@link Block} and metadata from the registry, but only from the specified {@link ICarvingGroup} name. + * + * @param block + * The {@link Block} of the {@link ICarvingVariation variation} + * @param metadata + * The metadata of the {@link ICarvingVariation variation} + * @param group + * The name of the group that the variation should be removed from + * @return The ICarvingVariation that was removed. Null if nothing was removed. + */ + ICarvingVariation removeVariation(Block block, int metadata, String group); + void registerOre(String groupName, String oreName); void setVariationSound(String name, String sound); diff --git a/src/main/java/com/cricketcraft/chisel/carving/Carving.java b/src/main/java/com/cricketcraft/chisel/carving/Carving.java index 60c03e9a..acea6c4c 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/Carving.java +++ b/src/main/java/com/cricketcraft/chisel/carving/Carving.java @@ -124,6 +124,16 @@ public class Carving implements ICarvingRegistry { ICarvingGroup g = groups.getGroupByName(groupName); return groups.remove(g) ? g : null; } + + @Override + public ICarvingVariation removeVariation(Block block, int metadata) { + return removeVariation(block, metadata, null); + } + + @Override + public ICarvingVariation removeVariation(Block block, int metadata, String group) { + return groups.removeVariation(block, metadata, group); + } @Override public void addVariation(String groupName, Block block, int metadata, int order) { diff --git a/src/main/java/com/cricketcraft/chisel/carving/CarvingGroup.java b/src/main/java/com/cricketcraft/chisel/carving/CarvingGroup.java index 3a42618f..6a1286d5 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/CarvingGroup.java +++ b/src/main/java/com/cricketcraft/chisel/carving/CarvingGroup.java @@ -4,8 +4,6 @@ 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; @@ -40,14 +38,14 @@ public class CarvingGroup implements ICarvingGroup { } @Override - public ICarvingVariation removeVariation(Block block, int metadata) { + public boolean removeVariation(ICarvingVariation variation) { ICarvingVariation toRemove = null; for (ICarvingVariation v : variations) { - if (v.getBlock() == block && v.getBlockMeta() == metadata) { + if (v.getBlock() == variation.getBlock() && v.getBlockMeta() == variation.getBlockMeta()) { toRemove = v; } } - return toRemove == null ? null : variations.remove(toRemove) ? toRemove : null; + return toRemove == null ? false : variations.remove(toRemove); } @Override diff --git a/src/main/java/com/cricketcraft/chisel/carving/GroupList.java b/src/main/java/com/cricketcraft/chisel/carving/GroupList.java index 7d0a2f0c..a2bb7159 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/GroupList.java +++ b/src/main/java/com/cricketcraft/chisel/carving/GroupList.java @@ -216,6 +216,30 @@ public class GroupList implements Set { return groups.keySet(); } + public ICarvingVariation removeVariation(Block block, int metadata, String group) { + ICarvingGroup g = null; + if (group != null) { + g = groups.get(group); + if (g == null) { + throw new IllegalArgumentException("No such group " + group); + } + groups.remove(g.getName()); + } + List toRemove = Lists.newArrayList(); + for (VariationWrapper v : lookup.keySet()) { + if ((g == null || lookup.get(v) == g) && v.v.getBlock() == block && v.v.getBlockMeta() == metadata) { + if (g != null) { + g.removeVariation(v.v); + } + toRemove.add(v); + } + } + for (VariationWrapper v : toRemove) { + lookup.remove(v); + } + return toRemove.isEmpty() ? null : toRemove.get(0).v; + } + @Override public String toString() { return groups.toString(); diff --git a/src/main/java/com/cricketcraft/chisel/client/render/BlockMarblePaneRenderer.java b/src/main/java/com/cricketcraft/chisel/client/render/BlockMarblePaneRenderer.java index f813eded..767482a7 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/BlockMarblePaneRenderer.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/BlockMarblePaneRenderer.java @@ -229,7 +229,11 @@ public class BlockMarblePaneRenderer implements ISimpleBlockRenderingHandler { if (iconPane == null || iconTop == null || iconSide == null) return false; - paneRenderer.set(x, y, z, iconPane, iconTop, iconSide); + if (renderer.hasOverrideBlockTexture()) { + paneRenderer.set(x, y, z, renderer.overrideBlockTexture, renderer.overrideBlockTexture, renderer.overrideBlockTexture); + } else { + paneRenderer.set(x, y, z, iconPane, iconTop, iconSide); + } boolean connectsNorth = block.canPaneConnectToBlock(world.getBlock(x, y, z - 1)); boolean connectsSouth = block.canPaneConnectToBlock(world.getBlock(x, y, z + 1));