mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-17 11:15:12 -04:00
New API for fetching items and blocks provided by OpenComputers, abstracting things away a bit more and making it more easily extendable.
This commit is contained in:
parent
05c63c6a8d
commit
416735e32c
@ -1,37 +0,0 @@
|
||||
package li.cil.oc.api;
|
||||
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/**
|
||||
* Item stacks for all blocks OpenComputers defines.
|
||||
* </p>
|
||||
* The underlying items of those are all of type {@link ItemBlock}, so you can
|
||||
* use that to get the block ID if required.
|
||||
*/
|
||||
public final class Blocks {
|
||||
public static ItemStack
|
||||
AccessPoint,
|
||||
Adapter,
|
||||
Cable,
|
||||
Capacitor,
|
||||
Charger,
|
||||
CaseTier1,
|
||||
CaseTier2,
|
||||
CaseTier3,
|
||||
DiskDrive,
|
||||
Keyboard,
|
||||
HologramProjector,
|
||||
PowerConverter,
|
||||
PowerDistributor,
|
||||
RedstoneIO,
|
||||
Robot,
|
||||
ScreenTier1,
|
||||
ScreenTier2,
|
||||
ScreenTier3,
|
||||
ServerRack,
|
||||
Switch;
|
||||
|
||||
private Blocks() {
|
||||
}
|
||||
}
|
@ -1,60 +1,50 @@
|
||||
package li.cil.oc.api;
|
||||
|
||||
import li.cil.oc.api.detail.ItemAPI;
|
||||
import li.cil.oc.api.detail.ItemInfo;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/**
|
||||
* Item stacks for all items OpenComputers defines.
|
||||
* Access to item definitions for all blocks and items provided by
|
||||
* OpenComputers.
|
||||
*/
|
||||
public final class Items {
|
||||
public static ItemStack
|
||||
AbstractBusCard,
|
||||
Acid,
|
||||
ALU,
|
||||
Analyzer,
|
||||
ButtonArrows,
|
||||
ButtonGroup,
|
||||
ButtonNumPad,
|
||||
CardBase,
|
||||
CircuitBoard,
|
||||
ControlUnit,
|
||||
CPUTier1,
|
||||
CPUTier2,
|
||||
CPUTier3,
|
||||
CuttingWire,
|
||||
DiskPlatter,
|
||||
FloppyDisk,
|
||||
GraphicsCardTier1,
|
||||
GraphicsCardTier2,
|
||||
GraphicsCardTier3,
|
||||
HardDiskTier2,
|
||||
HardDiskTier3,
|
||||
HardDriveTier1,
|
||||
InternetCard,
|
||||
IronNugget,
|
||||
MemoryTier1,
|
||||
MemoryTier2,
|
||||
MemoryTier3,
|
||||
MemoryTier4,
|
||||
MemoryTier5,
|
||||
MicrochipTier1,
|
||||
MicroChipTier2,
|
||||
MicroChipTier3,
|
||||
NetworkCard,
|
||||
PrintedCircuitBoard,
|
||||
RawCircuitBoard,
|
||||
RedstoneCard,
|
||||
ServerTier1,
|
||||
ServerTier2,
|
||||
ServerTier3,
|
||||
Terminal,
|
||||
Transistor,
|
||||
UpgradeCrafting,
|
||||
UpgradeGenerator,
|
||||
UpgradeNavigation,
|
||||
UpgradeSign,
|
||||
UpgradeSolarGenerator,
|
||||
WirelessNetworkCard;
|
||||
/**
|
||||
* Get a descriptor object for the block or item with the specified name.
|
||||
* <p/>
|
||||
* The names are the same as the ones used in the recipe files. An info
|
||||
* object can be used to retrieve both the block and item instance of the
|
||||
* item, if available. It can also be used to create a new item stack of
|
||||
* the item.
|
||||
*
|
||||
* @param name the name of the item to get the descriptor for.
|
||||
* @return the descriptor for the item with the specified name, or
|
||||
* <tt>null</tt> if there is no such item.
|
||||
*/
|
||||
public static ItemInfo get(String name) {
|
||||
if (instance != null)
|
||||
return instance.get(name);
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a descriptor object for the block or item represented by the
|
||||
* specified item stack.
|
||||
*
|
||||
* @param stack the stack to get the descriptor for.
|
||||
* @return the descriptor for the specified item stack, or <tt>null</tt>
|
||||
* if the stack is not a valid OpenComputers item or block.
|
||||
*/
|
||||
public static ItemInfo get(ItemStack stack) {
|
||||
if (instance != null)
|
||||
return instance.get(stack);
|
||||
return null;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
private Items() {
|
||||
}
|
||||
|
||||
public static ItemAPI instance = null;
|
||||
}
|
||||
|
29
src/main/java/li/cil/oc/api/detail/ItemAPI.java
Normal file
29
src/main/java/li/cil/oc/api/detail/ItemAPI.java
Normal file
@ -0,0 +1,29 @@
|
||||
package li.cil.oc.api.detail;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public interface ItemAPI {
|
||||
/**
|
||||
* Get a descriptor object for the block or item with the specified name.
|
||||
* <p/>
|
||||
* The names are the same as the ones used in the recipe files. An info
|
||||
* object can be used to retrieve both the block and item instance of the
|
||||
* item, if available. It can also be used to create a new item stack of
|
||||
* the item.
|
||||
*
|
||||
* @param name the name of the item to get the descriptor for.
|
||||
* @return the descriptor for the item with the specified name, or
|
||||
* <tt>null</tt> if there is no such item.
|
||||
*/
|
||||
ItemInfo get(String name);
|
||||
|
||||
/**
|
||||
* Get a descriptor object for the block or item represented by the
|
||||
* specified item stack.
|
||||
*
|
||||
* @param stack the stack to get the descriptor for.
|
||||
* @return the descriptor for the specified item stack, or <tt>null</tt>
|
||||
* if the stack is not a valid OpenComputers item or block.
|
||||
*/
|
||||
ItemInfo get(ItemStack stack);
|
||||
}
|
39
src/main/java/li/cil/oc/api/detail/ItemInfo.java
Normal file
39
src/main/java/li/cil/oc/api/detail/ItemInfo.java
Normal file
@ -0,0 +1,39 @@
|
||||
package li.cil.oc.api.detail;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public interface ItemInfo {
|
||||
/**
|
||||
* Returns the block type of the represented item. In case the item is not
|
||||
* a block this will return <tt>null</tt>.
|
||||
* <p/>
|
||||
* Note that OpenComputers represents most of its items using just a few
|
||||
* actual <tt>Block</tt> instances, so descriptors for different blocks may
|
||||
* return the same object here.
|
||||
*
|
||||
* @return the block type of the represented block.
|
||||
*/
|
||||
Block block();
|
||||
|
||||
/**
|
||||
* Returns the item type of the represented item. In case the item is a
|
||||
* blocks this will return <tt>null</tt>.
|
||||
* <p/>
|
||||
* Note that OpenComputers represents most of its items using just a few
|
||||
* actual <tt>Item</tt> instances, so descriptors for different items may
|
||||
* return the same object here.
|
||||
*
|
||||
* @return the item type of the represented item.
|
||||
*/
|
||||
Item item();
|
||||
|
||||
/**
|
||||
* Creates a new item stack of the item represended by this descriptor.
|
||||
*
|
||||
* @param size the size of the item stack to create.
|
||||
* @return the created item stack.
|
||||
*/
|
||||
ItemStack createItemStack(int size);
|
||||
}
|
@ -106,28 +106,6 @@ object Blocks {
|
||||
// v1.2.6
|
||||
case4 = new Case.TierCreative(blockSimpleWithRedstone)
|
||||
|
||||
// Initialize API.
|
||||
api.Blocks.AccessPoint = wirelessRouter.createItemStack()
|
||||
api.Blocks.Adapter = adapter.createItemStack()
|
||||
api.Blocks.Cable = cable.createItemStack()
|
||||
api.Blocks.Capacitor = capacitor.createItemStack()
|
||||
api.Blocks.Charger = charger.createItemStack()
|
||||
api.Blocks.CaseTier1 = case1.createItemStack()
|
||||
api.Blocks.CaseTier2 = case2.createItemStack()
|
||||
api.Blocks.CaseTier3 = case3.createItemStack()
|
||||
api.Blocks.DiskDrive = diskDrive.createItemStack()
|
||||
api.Blocks.Keyboard = keyboard.createItemStack()
|
||||
api.Blocks.HologramProjector = hologram.createItemStack()
|
||||
api.Blocks.PowerConverter = powerConverter.createItemStack()
|
||||
api.Blocks.PowerDistributor = powerDistributor.createItemStack()
|
||||
api.Blocks.RedstoneIO = redstone.createItemStack()
|
||||
api.Blocks.Robot = robotProxy.createItemStack()
|
||||
api.Blocks.Switch = router.createItemStack()
|
||||
api.Blocks.ScreenTier1 = screen1.createItemStack()
|
||||
api.Blocks.ScreenTier2 = screen2.createItemStack()
|
||||
api.Blocks.ScreenTier3 = screen3.createItemStack()
|
||||
api.Blocks.ServerRack = serverRack.createItemStack()
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
register("oc:craftingCable", cable.createItemStack())
|
||||
|
@ -4,11 +4,41 @@ import cpw.mods.fml.common.registry.GameRegistry
|
||||
import li.cil.oc.common.item
|
||||
import li.cil.oc.util.mods.Mods
|
||||
import net.minecraft.block.Block
|
||||
import net.minecraft.item.{Item, ItemStack}
|
||||
import net.minecraft.item.{ItemBlock, Item, ItemStack}
|
||||
import net.minecraftforge.oredict.OreDictionary
|
||||
import scala.collection.convert.WrapAsScala._
|
||||
import scala.collection.mutable
|
||||
import li.cil.oc.api.detail.{ItemAPI, ItemInfo}
|
||||
|
||||
object Items extends ItemAPI {
|
||||
val descriptors = mutable.Map.empty[String, ItemInfo]
|
||||
|
||||
val names = mutable.Map.empty[Any, String]
|
||||
|
||||
override def get(name: String): ItemInfo = descriptors.get(name).orNull
|
||||
|
||||
override def get(stack: ItemStack) = names.get(getBlockOrItem(stack)) match {
|
||||
case Some(name) => get(name)
|
||||
case _ => null
|
||||
}
|
||||
|
||||
private def getBlockOrItem(stack: ItemStack): Any = {
|
||||
multi.subItem(stack).getOrElse(
|
||||
Blocks.blockSimple.subBlock(stack).getOrElse(
|
||||
Blocks.blockSimpleWithRedstone.subBlock(stack).getOrElse(
|
||||
Blocks.blockSpecial.subBlock(stack).getOrElse(
|
||||
Blocks.blockSpecialWithRedstone.subBlock(stack).getOrElse(stack.getItem match {
|
||||
case block: ItemBlock if block.getBlockID >= 0 => net.minecraft.block.Block.blocksList(block.getBlockID)
|
||||
case item => item
|
||||
})
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
object Items {
|
||||
var multi: item.Delegator = _
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
@ -152,55 +182,6 @@ object Items {
|
||||
upgradeAngel = Recipes.addItemDelegate(new item.UpgradeAngel(multi), "angelUpgrade")
|
||||
ram2 = Recipes.addItemDelegate(new item.Memory(multi, 1), "ram2")
|
||||
|
||||
// Initialize API.
|
||||
api.Items.AbstractBusCard = abstractBus.createItemStack()
|
||||
api.Items.Acid = acid.createItemStack()
|
||||
api.Items.ALU = alu.createItemStack()
|
||||
api.Items.Analyzer = analyzer.createItemStack()
|
||||
api.Items.ButtonArrows = arrowKeys.createItemStack()
|
||||
api.Items.ButtonGroup = buttonGroup.createItemStack()
|
||||
api.Items.ButtonNumPad = numPad.createItemStack()
|
||||
api.Items.CardBase = card.createItemStack()
|
||||
api.Items.CircuitBoard = circuitBoard.createItemStack()
|
||||
api.Items.ControlUnit = cu.createItemStack()
|
||||
api.Items.CPUTier1 = cpu0.createItemStack()
|
||||
api.Items.CPUTier2 = cpu1.createItemStack()
|
||||
api.Items.CPUTier3 = cpu2.createItemStack()
|
||||
api.Items.CuttingWire = cuttingWire.createItemStack()
|
||||
api.Items.DiskPlatter = disk.createItemStack()
|
||||
api.Items.FloppyDisk = floppyDisk.createItemStack()
|
||||
api.Items.GraphicsCardTier1 = gpu1.createItemStack()
|
||||
api.Items.GraphicsCardTier2 = gpu2.createItemStack()
|
||||
api.Items.GraphicsCardTier3 = gpu3.createItemStack()
|
||||
api.Items.HardDiskTier2 = hdd1.createItemStack()
|
||||
api.Items.HardDiskTier3 = hdd2.createItemStack()
|
||||
api.Items.HardDriveTier1 = hdd3.createItemStack()
|
||||
api.Items.InternetCard = internet.createItemStack()
|
||||
api.Items.IronNugget = ironNugget.createItemStack()
|
||||
api.Items.MemoryTier1 = ram1.createItemStack()
|
||||
api.Items.MemoryTier2 = ram2.createItemStack()
|
||||
api.Items.MemoryTier3 = ram3.createItemStack()
|
||||
api.Items.MemoryTier4 = ram4.createItemStack()
|
||||
api.Items.MemoryTier5 = ram5.createItemStack()
|
||||
api.Items.MicrochipTier1 = chip1.createItemStack()
|
||||
api.Items.MicroChipTier2 = chip2.createItemStack()
|
||||
api.Items.MicroChipTier3 = chip3.createItemStack()
|
||||
api.Items.NetworkCard = lan.createItemStack()
|
||||
api.Items.PrintedCircuitBoard = pcb.createItemStack()
|
||||
api.Items.RawCircuitBoard = rawCircuitBoard.createItemStack()
|
||||
api.Items.RedstoneCard = rs.createItemStack()
|
||||
api.Items.ServerTier1 = server1.createItemStack()
|
||||
api.Items.ServerTier2 = server2.createItemStack()
|
||||
api.Items.ServerTier3 = server3.createItemStack()
|
||||
api.Items.Terminal = terminal.createItemStack()
|
||||
api.Items.Transistor = transistor.createItemStack()
|
||||
api.Items.UpgradeCrafting = upgradeCrafting.createItemStack()
|
||||
api.Items.UpgradeGenerator = upgradeGenerator.createItemStack()
|
||||
api.Items.UpgradeNavigation = upgradeNavigation.createItemStack()
|
||||
api.Items.UpgradeSign = upgradeSign.createItemStack()
|
||||
api.Items.UpgradeSolarGenerator = upgradeSolarGenerator.createItemStack()
|
||||
api.Items.WirelessNetworkCard = wlan.createItemStack()
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
registerExclusive("craftingPiston", new ItemStack(Block.pistonBase), new ItemStack(Block.pistonStickyBase))
|
||||
|
@ -13,23 +13,48 @@ import net.minecraftforge.oredict.{OreDictionary, ShapelessOreRecipe, ShapedOreR
|
||||
import org.apache.commons.io.FileUtils
|
||||
import scala.collection.convert.WrapAsScala._
|
||||
import scala.collection.mutable
|
||||
import li.cil.oc.api.detail.ItemInfo
|
||||
|
||||
object Recipes {
|
||||
val list = mutable.LinkedHashMap.empty[ItemStack, String]
|
||||
|
||||
def addBlockDelegate[T <: common.block.Delegate](block: T, name: String) = {
|
||||
list += block.createItemStack() -> name
|
||||
block
|
||||
def addBlockDelegate[T <: common.block.Delegate](delegate: T, name: String) = {
|
||||
Items.descriptors += name -> new ItemInfo {
|
||||
override def block = delegate.parent
|
||||
|
||||
override def item = null
|
||||
|
||||
override def createItemStack(size: Int) = delegate.createItemStack(size)
|
||||
}
|
||||
Items.names += delegate -> name
|
||||
list += delegate.createItemStack() -> name
|
||||
delegate
|
||||
}
|
||||
|
||||
def addItemDelegate[T <: common.item.Delegate](item: T, name: String) = {
|
||||
list += item.createItemStack() -> name
|
||||
item
|
||||
def addItemDelegate[T <: common.item.Delegate](delegate: T, name: String) = {
|
||||
Items.descriptors += name -> new ItemInfo {
|
||||
override def block = null
|
||||
|
||||
override def item = delegate.parent
|
||||
|
||||
override def createItemStack(size: Int) = delegate.createItemStack(size)
|
||||
}
|
||||
Items.names += delegate -> name
|
||||
list += delegate.createItemStack() -> name
|
||||
delegate
|
||||
}
|
||||
|
||||
def addItem(item: Item, name: String) = {
|
||||
list += new ItemStack(item) -> name
|
||||
item
|
||||
def addItem(instance: Item, name: String) = {
|
||||
Items.descriptors += name -> new ItemInfo {
|
||||
override def block = null
|
||||
|
||||
override def item = instance
|
||||
|
||||
override def createItemStack(size: Int) = new ItemStack(instance, size)
|
||||
}
|
||||
Items.names += instance -> name
|
||||
list += new ItemStack(instance) -> name
|
||||
instance
|
||||
}
|
||||
|
||||
def init() {
|
||||
|
@ -35,6 +35,7 @@ class Proxy {
|
||||
api.CreativeTab.Instance = CreativeTab
|
||||
api.Driver.instance = driver.Registry
|
||||
api.FileSystem.instance = fs.FileSystem
|
||||
api.Items.instance = Items
|
||||
api.Machine.instance = machine.Machine
|
||||
api.Machine.LuaArchitecture =
|
||||
if (LuaStateFactory.isAvailable) classOf[NativeLuaArchitecture]
|
||||
|
Loading…
x
Reference in New Issue
Block a user