diff --git a/src/main/java/modtweaker/mods/chisel/ChiselHelper.java b/src/main/java/modtweaker/mods/chisel/ChiselHelper.java index 28b4001..f853f2d 100644 --- a/src/main/java/modtweaker/mods/chisel/ChiselHelper.java +++ b/src/main/java/modtweaker/mods/chisel/ChiselHelper.java @@ -1,6 +1,11 @@ package modtweaker.mods.chisel; import static modtweaker.helpers.InputHelper.toStack; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; @@ -9,6 +14,7 @@ import minetweaker.api.item.IItemStack; import com.cricketcraft.chisel.api.carving.CarvingUtils; import com.cricketcraft.chisel.api.carving.ICarvingGroup; import com.cricketcraft.chisel.api.carving.ICarvingVariation; +import com.google.common.collect.Lists; public class ChiselHelper { @@ -40,6 +46,11 @@ public class ChiselHelper { return new CarvingVariation(Block.getBlockFromItem(toStack(stack).getItem()), stack.getDamage()); } + public static ICarvingGroup makeGroup(String name) + { + return new CarvingGroup(name); + } + public static boolean groupContainsVariation(ICarvingGroup group, ICarvingVariation variation) { for(ICarvingVariation otherVariation : group.getVariations()) @@ -81,4 +92,69 @@ public class ChiselHelper { return 99; } } + + static class CarvingGroup implements ICarvingGroup + { + private String name; + private String sound; + private String oreName; + + private List variations = Lists.newArrayList(); + + public CarvingGroup(String name) { + this.name = name; + } + + public List getVariations() { + return Lists.newArrayList(variations); + } + + @Override + public void addVariation(ICarvingVariation variation) { + variations.add(variation); + Collections.sort(variations, new Comparator() { + + @Override + public int compare(ICarvingVariation o1, ICarvingVariation o2) { + return CarvingUtils.compare(o1, o2); + } + }); + } + + @Override + public boolean removeVariation(ICarvingVariation variation) { + ICarvingVariation toRemove = null; + for (ICarvingVariation v : variations) { + if (v.getBlock() == variation.getBlock() && v.getBlockMeta() == variation.getBlockMeta()) { + toRemove = v; + } + } + return toRemove == null ? false : variations.remove(toRemove); + } + + @Override + public String getName() { + return name; + } + + @Override + public String getSound() { + return sound; + } + + @Override + public void setSound(String sound) { + this.sound = sound; + } + + @Override + public String getOreName() { + return oreName; + } + + @Override + public void setOreName(String oreName) { + this.oreName = oreName; + } + } } diff --git a/src/main/java/modtweaker/mods/chisel/handlers/Groups.java b/src/main/java/modtweaker/mods/chisel/handlers/Groups.java index 85d1631..0d201ec 100644 --- a/src/main/java/modtweaker/mods/chisel/handlers/Groups.java +++ b/src/main/java/modtweaker/mods/chisel/handlers/Groups.java @@ -137,5 +137,105 @@ public class Groups { } } + @ZenMethod + public static void addGroup(String groupName) { + ICarvingGroup group=ChiselHelper.getGroup(groupName); + if(group!=null) + { + MineTweakerAPI.getLogger().logError("Group already exists " + groupName); + return; + } + group=ChiselHelper.makeGroup(groupName); + MineTweakerAPI.apply(new AddGroup(group)); + } + + static class AddGroup implements IUndoableAction { + + ICarvingGroup group; + + public AddGroup(ICarvingGroup group) { + this.group=group; + } + + @Override + public void apply() { + CarvingUtils.getChiselRegistry().addGroup(group); + } + + @Override + public boolean canUndo() { + return group != null; + } + + @Override + public String describe() { + return "Adding Group: " + group.getName(); + } + + @Override + public String describeUndo() { + return "Removing Group: " + group.getName(); + } + + @Override + public void undo() { + CarvingUtils.getChiselRegistry().removeGroup(group.getName()); + } + + @Override + public Object getOverrideKey() { + return null; + } + } + + @ZenMethod + public static void removeGroup(String groupName) { + ICarvingGroup group=ChiselHelper.getGroup(groupName); + if(group==null) + { + MineTweakerAPI.getLogger().logError("Could not find group " + groupName); + return; + } + MineTweakerAPI.apply(new RemoveGroup(group)); + } + + static class RemoveGroup implements IUndoableAction { + + ICarvingGroup group; + + public RemoveGroup(ICarvingGroup group) { + this.group=group; + } + + @Override + public void apply() { + CarvingUtils.getChiselRegistry().removeGroup(group.getName()); + } + + @Override + public boolean canUndo() { + return group != null; + } + + @Override + public String describe() { + return "Removing Group: " + group.getName(); + } + + @Override + public String describeUndo() { + return "Adding Group: " + group.getName(); + } + + @Override + public void undo() { + CarvingUtils.getChiselRegistry().addGroup(group); + } + + @Override + public Object getOverrideKey() { + return null; + } + } }