package modtweaker.mods.chisel; import com.google.common.collect.Lists; import minetweaker.api.item.IItemStack; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import team.chisel.api.carving.CarvingUtils; import team.chisel.api.carving.ICarvingGroup; import team.chisel.api.carving.ICarvingVariation; import javax.annotation.Nonnull; import java.util.Collections; import java.util.Comparator; import java.util.List; import static com.blamejared.mtlib.helpers.InputHelper.toStack; public class ChiselHelper { public static ICarvingGroup getGroup(String name) { return CarvingUtils.getChiselRegistry().getGroup(name); } public static ICarvingGroup getGroup(IItemStack stack) { return CarvingUtils.getChiselRegistry().getGroup(toStack(stack)); } public static ICarvingVariation getVariation(IItemStack stack) { ICarvingGroup g = getGroup(stack); if (g != null) { for (ICarvingVariation v : g.getVariations()) { if (v.getStack().isItemEqual(toStack(stack))) { return v; } } } return null; } public static ICarvingVariation makeVariation(IItemStack stack) { Block block = Block.getBlockFromItem(toStack(stack).getItem()); IBlockState state = block.getStateFromMeta(toStack(stack).getItemDamage()); return CarvingUtils.getDefaultVariationFor(state, 0); } public static ICarvingGroup makeGroup(String name) { return new CarvingGroup(name); } public static boolean groupContainsVariation(ICarvingGroup group, ICarvingVariation variation) { for (ICarvingVariation otherVariation : group.getVariations()) { if (otherVariation.getStack().isItemEqual(variation.getStack())) { return true; } return false; } return false; } public static class CarvingVariation implements ICarvingVariation { Block block; public CarvingVariation(Block block) { this.block = block; } @Override public Block getBlock() { return block; } @Override public IBlockState getBlockState() { return block.getDefaultState(); } @Nonnull @Override public ItemStack getStack() { return new ItemStack(block); } @Override public int getOrder() { return 99; } } static class CarvingGroup implements ICarvingGroup { private String name; private String sound; private String oreName; private List<ICarvingVariation> variations = Lists.newArrayList(); public CarvingGroup(String name) { this.name = name; } public List<ICarvingVariation> getVariations() { return Lists.newArrayList(variations); } @Override public void addVariation(ICarvingVariation variation) { variations.add(variation); Collections.sort(variations, new Comparator<ICarvingVariation>() { @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.getStack().isItemEqual(variation.getStack())) { 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; } } }