Added ore dictionary.
This commit is contained in:
parent
a64a47b24c
commit
c12b2c5b11
2 changed files with 156 additions and 1 deletions
24
forge/forge_common/net/minecraft/src/forge/IOreHandler.java
Normal file
24
forge/forge_common/net/minecraft/src/forge/IOreHandler.java
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/**
|
||||||
|
* This software is provided under the terms of the Minecraft Forge Public
|
||||||
|
* License v1.0.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.minecraft.src.forge;
|
||||||
|
|
||||||
|
import net.minecraft.src.ItemStack;
|
||||||
|
|
||||||
|
/** The current list of known classes.
|
||||||
|
* oreTin, oreCopper, oreSilver
|
||||||
|
* ingotTin, ingotCopper, ingotSilver
|
||||||
|
* dyeBlue
|
||||||
|
* gemRuby, gemEmerald, gemSapphire
|
||||||
|
* woodRubber
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface IOreHandler {
|
||||||
|
/** Called when a new ore is registered with the ore dictionary.
|
||||||
|
* @param oreClass The string class of the ore.
|
||||||
|
* @param ore The ItemStack for the ore.
|
||||||
|
*/
|
||||||
|
public void registerOre(String oreClass, ItemStack ore);
|
||||||
|
}
|
|
@ -15,7 +15,6 @@ import java.util.*;
|
||||||
public class MinecraftForge {
|
public class MinecraftForge {
|
||||||
|
|
||||||
private static LinkedList<IBucketHandler> bucketHandlers = new LinkedList<IBucketHandler>();
|
private static LinkedList<IBucketHandler> bucketHandlers = new LinkedList<IBucketHandler>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a new custom bucket handler.
|
* Register a new custom bucket handler.
|
||||||
*/
|
*/
|
||||||
|
@ -66,6 +65,138 @@ public class MinecraftForge {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ore Dictionary
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
private static LinkedList<IOreHandler> oreHandlers = new LinkedList<IOreHandler>();
|
||||||
|
private static TreeMap<String,List<ItemStack>> oreDict=
|
||||||
|
new TreeMap<String,List<ItemStack>>();
|
||||||
|
|
||||||
|
/** Register a new ore handler. This will automatically call the handler
|
||||||
|
* with all current ores during registration, and every time a new ore is
|
||||||
|
* added later.
|
||||||
|
*/
|
||||||
|
public static void registerOreHandler(IOreHandler handler) {
|
||||||
|
oreHandlers.add(handler);
|
||||||
|
|
||||||
|
for(String key : oreDict.keySet()) {
|
||||||
|
List<ItemStack> val=oreDict.get(key);
|
||||||
|
for(ItemStack ist : val) {
|
||||||
|
handler.registerOre(key,ist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Register a new item with the ore dictionary.
|
||||||
|
* @param oreClass The string class of the ore.
|
||||||
|
* @param ore The ItemStack for the ore.
|
||||||
|
*/
|
||||||
|
public static void registerOre(String oreClass, ItemStack ore) {
|
||||||
|
List<ItemStack> orelist=oreDict.get(oreClass);
|
||||||
|
if(orelist==null) {
|
||||||
|
orelist=new ArrayList<ItemStack>();
|
||||||
|
oreDict.put(oreClass,orelist);
|
||||||
|
}
|
||||||
|
orelist.add(ore);
|
||||||
|
for(IOreHandler ioh : oreHandlers) {
|
||||||
|
ioh.registerOre(oreClass,ore);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the list of ores in a given class.
|
||||||
|
*/
|
||||||
|
public static List<ItemStack> getOreClass(String oreClass) {
|
||||||
|
return oreDict.get(oreClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class OreQuery implements Iterable<Object[]> {
|
||||||
|
Object[] proto;
|
||||||
|
|
||||||
|
public class OreQueryIterator implements Iterator<Object[]> {
|
||||||
|
LinkedList itering;
|
||||||
|
LinkedList output;
|
||||||
|
|
||||||
|
private OreQueryIterator() {
|
||||||
|
itering=new LinkedList();
|
||||||
|
output=new LinkedList();
|
||||||
|
|
||||||
|
for(int i=0; i<proto.length; i++) {
|
||||||
|
if(proto[i] instanceof Collection) {
|
||||||
|
Iterator it=((Collection)proto[i])
|
||||||
|
.iterator();
|
||||||
|
if(!it.hasNext()) {
|
||||||
|
output=null; break;
|
||||||
|
}
|
||||||
|
itering.addLast(it);
|
||||||
|
output.addLast(it.next());
|
||||||
|
} else {
|
||||||
|
itering.addLast(proto[i]);
|
||||||
|
output.addLast(proto[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasNext() {
|
||||||
|
return output!=null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object[] next() {
|
||||||
|
Object[] tr=output.toArray();
|
||||||
|
|
||||||
|
Object to;
|
||||||
|
while(true) {
|
||||||
|
if(itering.size()==0) {
|
||||||
|
output=null;
|
||||||
|
return tr;
|
||||||
|
}
|
||||||
|
to=itering.getLast();
|
||||||
|
output.removeLast();
|
||||||
|
if(to instanceof Iterator) {
|
||||||
|
Iterator it=(Iterator)to;
|
||||||
|
if(it.hasNext()) {
|
||||||
|
output.addLast(it.next());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
itering.removeLast();
|
||||||
|
}
|
||||||
|
for(int i=itering.size(); i<proto.length; i++) {
|
||||||
|
if(proto[i] instanceof Collection) {
|
||||||
|
Iterator it=((Collection)proto[i])
|
||||||
|
.iterator();
|
||||||
|
if(!it.hasNext()) {
|
||||||
|
output=null; break;
|
||||||
|
}
|
||||||
|
itering.addLast(it);
|
||||||
|
output.addLast(it.next());
|
||||||
|
} else {
|
||||||
|
itering.addLast(proto[i]);
|
||||||
|
output.addLast(proto[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remove() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
private OreQuery(Object[] pattern) {
|
||||||
|
proto=pattern;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Iterator<Object[]> iterator() {
|
||||||
|
return new OreQueryIterator();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Generate all valid legal recipe combinations. Any Lists in pattern
|
||||||
|
* will be fully expanded to all valid combinations.
|
||||||
|
*/
|
||||||
|
public static OreQuery generateRecipes(Object... pattern) {
|
||||||
|
return new OreQuery(pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
|
||||||
/** Register a new plant to be planted when bonemeal is used on grass.
|
/** Register a new plant to be planted when bonemeal is used on grass.
|
||||||
* @param bid The block ID to plant.
|
* @param bid The block ID to plant.
|
||||||
* @param md The metadata to plant.
|
* @param md The metadata to plant.
|
||||||
|
|
Loading…
Reference in a new issue