2015-08-18 20:40:55 -04:00
|
|
|
package team.chisel.carving;
|
2014-12-14 20:05:39 +00:00
|
|
|
|
2020-02-23 19:46:21 +01:00
|
|
|
import java.util.*;
|
2014-12-14 20:05:39 +00:00
|
|
|
|
2015-04-24 17:05:12 -04:00
|
|
|
import com.cricketcraft.chisel.api.carving.CarvingUtils;
|
2015-01-15 03:16:02 -05:00
|
|
|
import com.cricketcraft.chisel.api.carving.ICarvingGroup;
|
2015-01-22 21:33:43 -05:00
|
|
|
import com.cricketcraft.chisel.api.carving.ICarvingRegistry;
|
2015-01-15 00:03:43 -05:00
|
|
|
import com.cricketcraft.chisel.api.carving.ICarvingVariation;
|
2014-12-16 22:27:44 +00:00
|
|
|
|
2015-08-18 20:40:55 -04:00
|
|
|
import team.chisel.Chisel;
|
|
|
|
|
import net.minecraft.block.Block;
|
|
|
|
|
import net.minecraft.item.Item;
|
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
|
import net.minecraftforge.oredict.OreDictionary;
|
|
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
public class Carving implements ICarvingRegistry {
|
2015-01-07 19:50:18 -05:00
|
|
|
|
2015-01-16 22:45:57 -05:00
|
|
|
GroupList groups = new GroupList();
|
2015-01-07 19:50:18 -05:00
|
|
|
|
2015-01-24 23:22:55 -05:00
|
|
|
public static final ICarvingRegistry chisel = new Carving();
|
2015-01-16 22:45:57 -05:00
|
|
|
public static final Carving needle = new Carving();
|
2015-08-06 00:00:22 -04:00
|
|
|
|
2015-04-24 17:05:12 -04:00
|
|
|
static {
|
|
|
|
|
CarvingUtils.chisel = chisel;
|
|
|
|
|
}
|
2015-08-06 00:00:22 -04:00
|
|
|
|
|
|
|
|
public static void construct() {
|
2020-02-23 19:46:21 +01:00
|
|
|
/* do nothing */
|
2015-08-06 00:00:22 -04:00
|
|
|
}
|
2015-01-15 03:16:02 -05:00
|
|
|
|
2015-01-16 22:45:57 -05:00
|
|
|
private Carving() {
|
2020-02-23 19:46:21 +01:00
|
|
|
/* do nothing */
|
2015-01-16 22:45:57 -05:00
|
|
|
}
|
2015-01-07 19:50:18 -05:00
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
2015-01-18 14:40:39 -05:00
|
|
|
public ICarvingVariation getVariation(Block block, int metadata) {
|
|
|
|
|
ICarvingGroup g = getGroup(block, metadata);
|
|
|
|
|
if (g != null) {
|
|
|
|
|
for (ICarvingVariation v : g.getVariations()) {
|
|
|
|
|
if (v.getBlock() == block && v.getBlockMeta() == metadata) {
|
|
|
|
|
return v;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
|
|
|
|
public List<ICarvingVariation> getGroupVariations(Block block, int metadata) {
|
2015-01-16 22:45:57 -05:00
|
|
|
ICarvingGroup group = getGroup(block, metadata);
|
|
|
|
|
if (group == null)
|
2020-02-23 19:46:21 +01:00
|
|
|
return Collections.emptyList();
|
2015-01-07 19:50:18 -05:00
|
|
|
|
2015-01-16 22:45:57 -05:00
|
|
|
return group.getVariations();
|
|
|
|
|
}
|
2015-01-07 19:50:18 -05:00
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
|
|
|
|
public String getOreName(Block block, int metadata) {
|
2015-01-16 22:45:57 -05:00
|
|
|
ICarvingGroup group = getGroup(block, metadata);
|
|
|
|
|
if (group == null)
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
return group.getOreName();
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
|
|
|
|
public List<ItemStack> getItemsForChiseling(ItemStack chiseledItem) {
|
2020-02-23 19:46:21 +01:00
|
|
|
ArrayList<ItemStack> items = new ArrayList<>();
|
2015-01-16 22:45:57 -05:00
|
|
|
|
2015-01-24 23:22:55 -05:00
|
|
|
ICarvingGroup group = null;
|
|
|
|
|
|
2020-02-23 19:46:21 +01:00
|
|
|
int[] oreIDs = OreDictionary.getOreIDs(chiseledItem);
|
|
|
|
|
for (int i : oreIDs) {
|
2015-01-24 23:22:55 -05:00
|
|
|
group = groups.getGroupByOre(OreDictionary.getOreName(i));
|
|
|
|
|
if (group != null) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (group == null) {
|
|
|
|
|
group = getGroup(Block.getBlockFromItem(chiseledItem.getItem()), chiseledItem.getItemDamage());
|
|
|
|
|
}
|
2015-01-16 22:45:57 -05:00
|
|
|
|
|
|
|
|
if (group == null)
|
|
|
|
|
return items;
|
|
|
|
|
|
2020-02-23 19:46:21 +01:00
|
|
|
HashSet<String> mapping = new HashSet<>();
|
2015-01-16 22:45:57 -05:00
|
|
|
|
|
|
|
|
List<ICarvingVariation> variations = group.getVariations();
|
|
|
|
|
|
2020-02-23 19:46:21 +01:00
|
|
|
for (ICarvingVariation v : variations) {
|
|
|
|
|
String key = Block.getIdFromBlock(v.getBlock()) + "|" + v.getItemMeta();
|
|
|
|
|
if (mapping.add(key)) items.add(new ItemStack(v.getBlock(), 1, v.getItemMeta()));
|
2015-01-16 22:45:57 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String oreName = group.getOreName();
|
2020-02-23 19:46:21 +01:00
|
|
|
if (oreName != null) {
|
|
|
|
|
ArrayList<ItemStack> ores = OreDictionary.getOres(oreName);
|
2015-01-16 22:45:57 -05:00
|
|
|
for (ItemStack stack : ores) {
|
|
|
|
|
String key = Item.getIdFromItem(stack.getItem()) + "|" + stack.getItemDamage();
|
2020-02-23 19:46:21 +01:00
|
|
|
if (mapping.add(key)) items.add(stack);
|
2015-01-16 22:45:57 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return items;
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
2015-01-16 22:45:57 -05:00
|
|
|
public ICarvingGroup getGroup(Block block, int metadata) {
|
2015-01-25 15:08:29 -05:00
|
|
|
int[] ids = OreDictionary.getOreIDs(new ItemStack(block, 1, metadata));
|
2015-01-16 22:45:57 -05:00
|
|
|
if (ids.length > 0) {
|
|
|
|
|
for (int id : ids) {
|
|
|
|
|
ICarvingGroup oreGroup = groups.getGroupByOre(OreDictionary.getOreName(id));
|
|
|
|
|
if (oreGroup != null) {
|
|
|
|
|
return oreGroup;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return groups.getGroup(block, metadata);
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
2015-01-16 22:45:57 -05:00
|
|
|
public ICarvingGroup getGroup(String name) {
|
|
|
|
|
return groups.getGroupByName(name);
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-23 16:09:40 -05:00
|
|
|
@Override
|
|
|
|
|
public ICarvingGroup removeGroup(String groupName) {
|
|
|
|
|
ICarvingGroup g = groups.getGroupByName(groupName);
|
|
|
|
|
return groups.remove(g) ? g : null;
|
|
|
|
|
}
|
2015-08-06 00:00:22 -04:00
|
|
|
|
2015-01-23 22:35:21 -05:00
|
|
|
@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);
|
|
|
|
|
}
|
2015-01-23 16:09:40 -05:00
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
2015-01-16 22:45:57 -05:00
|
|
|
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.");
|
|
|
|
|
}
|
|
|
|
|
|
2015-04-24 17:05:12 -04:00
|
|
|
ICarvingVariation variation = CarvingUtils.getDefaultVariationFor(block, metadata, order);
|
2015-01-16 22:45:57 -05:00
|
|
|
addVariation(groupName, variation);
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
2015-01-16 22:45:57 -05:00
|
|
|
public void addVariation(String groupName, ICarvingVariation variation) {
|
|
|
|
|
if (groupName == null) {
|
|
|
|
|
throw new NullPointerException("Cannot add variation to null group name.");
|
|
|
|
|
} else if (variation == null) {
|
|
|
|
|
throw new NullPointerException("Cannot add variation in group " + groupName + " for null variation.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ICarvingGroup group = groups.getGroupByName(groupName);
|
|
|
|
|
|
|
|
|
|
if (group == null) {
|
2015-04-24 17:05:12 -04:00
|
|
|
group = CarvingUtils.getDefaultGroupFor(groupName);
|
2015-01-16 22:45:57 -05:00
|
|
|
addGroup(group);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
groups.addVariation(groupName, variation);
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
2015-01-16 22:45:57 -05:00
|
|
|
public void addGroup(ICarvingGroup group) {
|
|
|
|
|
groups.add(group);
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
2015-01-16 22:45:57 -05:00
|
|
|
public void registerOre(String name, String oreName) {
|
|
|
|
|
ICarvingGroup group = groups.getGroupByName(name);
|
|
|
|
|
if (group != null) {
|
|
|
|
|
group.setOreName(oreName);
|
|
|
|
|
} else {
|
|
|
|
|
throw new NullPointerException("Cannot register ore name for group " + name + ", as it does not exist.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
2015-01-16 22:45:57 -05:00
|
|
|
public void setVariationSound(String name, String sound) {
|
|
|
|
|
ICarvingGroup group = groups.getGroupByName(name);
|
|
|
|
|
if (group != null) {
|
|
|
|
|
group.setSound(sound);
|
|
|
|
|
} else {
|
|
|
|
|
throw new NullPointerException("Cannot set sound for group " + name + ", as it does not exist.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
2015-01-16 22:45:57 -05:00
|
|
|
public String getVariationSound(Block block, int metadata) {
|
|
|
|
|
return getVariationSound(Item.getItemFromBlock(block), metadata);
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
2015-01-16 22:45:57 -05:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-22 21:33:43 -05:00
|
|
|
@Override
|
2015-01-16 22:45:57 -05:00
|
|
|
public List<String> getSortedGroupNames() {
|
2020-02-23 19:46:21 +01:00
|
|
|
List<String> names = new ArrayList<>(groups.getNames());
|
2015-01-16 22:45:57 -05:00
|
|
|
Collections.sort(names);
|
|
|
|
|
return names;
|
|
|
|
|
}
|
2015-01-07 19:50:18 -05:00
|
|
|
}
|