mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-18 11:48:02 -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;
|
package li.cil.oc.api;
|
||||||
|
|
||||||
|
import li.cil.oc.api.detail.ItemAPI;
|
||||||
|
import li.cil.oc.api.detail.ItemInfo;
|
||||||
import net.minecraft.item.ItemStack;
|
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 final class Items {
|
||||||
public static ItemStack
|
/**
|
||||||
AbstractBusCard,
|
* Get a descriptor object for the block or item with the specified name.
|
||||||
Acid,
|
* <p/>
|
||||||
ALU,
|
* The names are the same as the ones used in the recipe files. An info
|
||||||
Analyzer,
|
* object can be used to retrieve both the block and item instance of the
|
||||||
ButtonArrows,
|
* item, if available. It can also be used to create a new item stack of
|
||||||
ButtonGroup,
|
* the item.
|
||||||
ButtonNumPad,
|
*
|
||||||
CardBase,
|
* @param name the name of the item to get the descriptor for.
|
||||||
CircuitBoard,
|
* @return the descriptor for the item with the specified name, or
|
||||||
ControlUnit,
|
* <tt>null</tt> if there is no such item.
|
||||||
CPUTier1,
|
*/
|
||||||
CPUTier2,
|
public static ItemInfo get(String name) {
|
||||||
CPUTier3,
|
if (instance != null)
|
||||||
CuttingWire,
|
return instance.get(name);
|
||||||
DiskPlatter,
|
return null;
|
||||||
FloppyDisk,
|
}
|
||||||
GraphicsCardTier1,
|
|
||||||
GraphicsCardTier2,
|
/**
|
||||||
GraphicsCardTier3,
|
* Get a descriptor object for the block or item represented by the
|
||||||
HardDiskTier2,
|
* specified item stack.
|
||||||
HardDiskTier3,
|
*
|
||||||
HardDriveTier1,
|
* @param stack the stack to get the descriptor for.
|
||||||
InternetCard,
|
* @return the descriptor for the specified item stack, or <tt>null</tt>
|
||||||
IronNugget,
|
* if the stack is not a valid OpenComputers item or block.
|
||||||
MemoryTier1,
|
*/
|
||||||
MemoryTier2,
|
public static ItemInfo get(ItemStack stack) {
|
||||||
MemoryTier3,
|
if (instance != null)
|
||||||
MemoryTier4,
|
return instance.get(stack);
|
||||||
MemoryTier5,
|
return null;
|
||||||
MicrochipTier1,
|
}
|
||||||
MicroChipTier2,
|
|
||||||
MicroChipTier3,
|
// ----------------------------------------------------------------------- //
|
||||||
NetworkCard,
|
|
||||||
PrintedCircuitBoard,
|
|
||||||
RawCircuitBoard,
|
|
||||||
RedstoneCard,
|
|
||||||
ServerTier1,
|
|
||||||
ServerTier2,
|
|
||||||
ServerTier3,
|
|
||||||
Terminal,
|
|
||||||
Transistor,
|
|
||||||
UpgradeCrafting,
|
|
||||||
UpgradeGenerator,
|
|
||||||
UpgradeNavigation,
|
|
||||||
UpgradeSign,
|
|
||||||
UpgradeSolarGenerator,
|
|
||||||
WirelessNetworkCard;
|
|
||||||
|
|
||||||
private Items() {
|
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
|
// v1.2.6
|
||||||
case4 = new Case.TierCreative(blockSimpleWithRedstone)
|
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())
|
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.common.item
|
||||||
import li.cil.oc.util.mods.Mods
|
import li.cil.oc.util.mods.Mods
|
||||||
import net.minecraft.block.Block
|
import net.minecraft.block.Block
|
||||||
import net.minecraft.item.{Item, ItemStack}
|
import net.minecraft.item.{ItemBlock, Item, ItemStack}
|
||||||
import net.minecraftforge.oredict.OreDictionary
|
import net.minecraftforge.oredict.OreDictionary
|
||||||
import scala.collection.convert.WrapAsScala._
|
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 = _
|
var multi: item.Delegator = _
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
@ -152,55 +182,6 @@ object Items {
|
|||||||
upgradeAngel = Recipes.addItemDelegate(new item.UpgradeAngel(multi), "angelUpgrade")
|
upgradeAngel = Recipes.addItemDelegate(new item.UpgradeAngel(multi), "angelUpgrade")
|
||||||
ram2 = Recipes.addItemDelegate(new item.Memory(multi, 1), "ram2")
|
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))
|
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 org.apache.commons.io.FileUtils
|
||||||
import scala.collection.convert.WrapAsScala._
|
import scala.collection.convert.WrapAsScala._
|
||||||
import scala.collection.mutable
|
import scala.collection.mutable
|
||||||
|
import li.cil.oc.api.detail.ItemInfo
|
||||||
|
|
||||||
object Recipes {
|
object Recipes {
|
||||||
val list = mutable.LinkedHashMap.empty[ItemStack, String]
|
val list = mutable.LinkedHashMap.empty[ItemStack, String]
|
||||||
|
|
||||||
def addBlockDelegate[T <: common.block.Delegate](block: T, name: String) = {
|
def addBlockDelegate[T <: common.block.Delegate](delegate: T, name: String) = {
|
||||||
list += block.createItemStack() -> name
|
Items.descriptors += name -> new ItemInfo {
|
||||||
block
|
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) = {
|
def addItemDelegate[T <: common.item.Delegate](delegate: T, name: String) = {
|
||||||
list += item.createItemStack() -> name
|
Items.descriptors += name -> new ItemInfo {
|
||||||
item
|
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) = {
|
def addItem(instance: Item, name: String) = {
|
||||||
list += new ItemStack(item) -> name
|
Items.descriptors += name -> new ItemInfo {
|
||||||
item
|
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() {
|
def init() {
|
||||||
|
@ -35,6 +35,7 @@ class Proxy {
|
|||||||
api.CreativeTab.Instance = CreativeTab
|
api.CreativeTab.Instance = CreativeTab
|
||||||
api.Driver.instance = driver.Registry
|
api.Driver.instance = driver.Registry
|
||||||
api.FileSystem.instance = fs.FileSystem
|
api.FileSystem.instance = fs.FileSystem
|
||||||
|
api.Items.instance = Items
|
||||||
api.Machine.instance = machine.Machine
|
api.Machine.instance = machine.Machine
|
||||||
api.Machine.LuaArchitecture =
|
api.Machine.LuaArchitecture =
|
||||||
if (LuaStateFactory.isAvailable) classOf[NativeLuaArchitecture]
|
if (LuaStateFactory.isAvailable) classOf[NativeLuaArchitecture]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user