clean up after driver api restructuring

This commit is contained in:
Florian Nücke 2014-02-05 23:37:50 +01:00
parent 70d99f625f
commit d39cdd40a4
10 changed files with 39 additions and 160 deletions

View File

@ -1,19 +1,11 @@
package li.cil.oc.driver;
import li.cil.oc.util.TileEntityLookup;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public abstract class TileEntityDriver implements li.cil.oc.api.driver.Block {
public abstract Class<?> getFilterClass();
@Override
public boolean worksWith(final World world, final ItemStack stack) {
final Class clazz = TileEntityLookup.get(world, stack);
return clazz != null && getFilterClass().isAssignableFrom(clazz);
}
@Override
public boolean worksWith(final World world, final int x, final int y, final int z) {
final TileEntity tileEntity = world.getBlockTileEntity(x, y, z);

View File

@ -4,18 +4,16 @@ import li.cil.oc.api.network.Arguments;
import li.cil.oc.api.network.Callback;
import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.potion.Potion;
import net.minecraft.tileentity.TileEntityBeacon;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverBeacon extends DriverBlock {
DriverBeacon() {
super(new ItemStack(Block.beacon, 1, OreDictionary.WILDCARD_VALUE));
public final class DriverBeacon extends TileEntityDriver {
@Override
public Class<?> getFilterClass() {
return TileEntityBeacon.class;
}
@Override

View File

@ -4,19 +4,15 @@ import li.cil.oc.api.network.Arguments;
import li.cil.oc.api.network.Callback;
import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.tileentity.TileEntityBrewingStand;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverBrewingStand extends DriverBlock {
DriverBrewingStand() {
super(new ItemStack(Item.brewingStand),
new ItemStack(Block.brewingStand, 1, OreDictionary.WILDCARD_VALUE));
public final class DriverBrewingStand extends TileEntityDriver {
@Override
public Class<?> getFilterClass() {
return TileEntityBrewingStand.class;
}
@Override

View File

@ -4,20 +4,15 @@ import li.cil.oc.api.network.Arguments;
import li.cil.oc.api.network.Callback;
import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.tileentity.TileEntityComparator;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverComparator extends DriverBlock {
DriverComparator() {
super(new ItemStack(Item.comparator),
new ItemStack(Block.redstoneComparatorIdle, 1, OreDictionary.WILDCARD_VALUE),
new ItemStack(Block.redstoneComparatorActive, 1, OreDictionary.WILDCARD_VALUE));
public final class DriverComparator extends TileEntityDriver {
@Override
public Class<?> getFilterClass() {
return TileEntityComparator.class;
}
@Override

View File

@ -4,18 +4,15 @@ import li.cil.oc.api.network.Arguments;
import li.cil.oc.api.network.Callback;
import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverFurnace extends DriverBlock {
DriverFurnace() {
super(new ItemStack(Block.furnaceIdle, 1, OreDictionary.WILDCARD_VALUE),
new ItemStack(Block.furnaceBurning, 1, OreDictionary.WILDCARD_VALUE));
public final class DriverFurnace extends TileEntityDriver {
@Override
public Class<?> getFilterClass() {
return TileEntityFurnace.class;
}
@Override

View File

@ -5,23 +5,15 @@ import li.cil.oc.api.network.Callback;
import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.driver.ManagedTileEntityEnvironment;
import li.cil.oc.util.TileEntityLookup;
import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public final class DriverInventory implements li.cil.oc.api.driver.Block {
public final class DriverInventory extends TileEntityDriver {
@Override
public boolean worksWith(final World world, final ItemStack stack) {
final Class clazz = TileEntityLookup.get(world, stack);
return clazz != null && IInventory.class.isAssignableFrom(clazz);
}
@Override
public boolean worksWith(final World world, final int x, final int y, final int z) {
final TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
return tileEntity != null && tileEntity instanceof IInventory;
public Class<?> getFilterClass() {
return IInventory.class;
}
@Override

View File

@ -4,17 +4,15 @@ import li.cil.oc.api.network.Arguments;
import li.cil.oc.api.network.Callback;
import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.tileentity.TileEntityMobSpawner;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverMobSpawner extends DriverBlock {
DriverMobSpawner() {
super(new ItemStack(Block.mobSpawner, 1, OreDictionary.WILDCARD_VALUE));
public final class DriverMobSpawner extends TileEntityDriver {
@Override
public Class<?> getFilterClass() {
return TileEntityMobSpawner.class;
}
@Override

View File

@ -4,18 +4,17 @@ import li.cil.oc.api.network.Arguments;
import li.cil.oc.api.network.Callback;
import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block;
import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.item.ItemRecord;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityRecordPlayer;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverRecordPlayer extends DriverBlock {
DriverRecordPlayer() {
super(new ItemStack(Block.jukebox, 1, OreDictionary.WILDCARD_VALUE));
public final class DriverRecordPlayer extends TileEntityDriver {
@Override
public Class<?> getFilterClass() {
return TileEntityRecordPlayer.class;
}
@Override

View File

@ -4,20 +4,15 @@ import li.cil.oc.api.network.Arguments;
import li.cil.oc.api.network.Callback;
import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.tileentity.TileEntitySign;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverSign extends DriverBlock {
DriverSign() {
super(new ItemStack(Item.sign, 1, OreDictionary.WILDCARD_VALUE),
new ItemStack(Block.signPost, 1, OreDictionary.WILDCARD_VALUE),
new ItemStack(Block.signWall, 1, OreDictionary.WILDCARD_VALUE));
public final class DriverSign extends TileEntityDriver {
@Override
public Class<?> getFilterClass() {
return TileEntitySign.class;
}
@Override

View File

@ -1,83 +0,0 @@
package li.cil.oc.util;
import net.minecraft.block.Block;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import java.util.HashMap;
import java.util.Map;
public final class TileEntityLookup {
private static Map<BlockData, Class<? extends TileEntity>> cache = new HashMap<BlockData, Class<? extends TileEntity>>();
private TileEntityLookup() {
}
public static Class<? extends TileEntity> get(World world, int blockId, int metadata) {
BlockData data = new BlockData(blockId, metadata);
if (!cache.containsKey(data)) {
Class<? extends TileEntity> clazz = null;
try {
boolean isValidBlock = blockId >= 0 && blockId < Block.blocksList.length && Block.blocksList[blockId] != null;
if (isValidBlock) {
Block block = Block.blocksList[blockId];
if (block.hasTileEntity(metadata)) {
TileEntity tileEntity = block.createTileEntity(world, metadata);
if (tileEntity != null) {
clazz = tileEntity.getClass();
}
}
}
} catch (Throwable ignored) {
}
cache.put(data, clazz);
}
return cache.get(data);
}
public static Class<? extends TileEntity> get(World world, ItemStack stack) {
if (stack != null) {
if (stack.getItem() instanceof ItemBlock) {
ItemBlock itemBlock = (ItemBlock) stack.getItem();
int blockId = itemBlock.getBlockID();
int metadata = itemBlock.getMetadata(stack.getItemDamage());
return get(world, blockId, metadata);
}
}
return null;
}
private static class BlockData {
public final int id;
public final int metadata;
public BlockData(int id, int metadata) {
this.id = id;
this.metadata = metadata;
}
@Override
public int hashCode() {
return (23 * 31 + id) * 31 + metadata;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj instanceof BlockData) {
BlockData other = (BlockData) obj;
return other.id == id && other.metadata == metadata;
}
return false;
}
@Override
public String toString() {
return "{" + id + ":" + metadata + "}";
}
}
}