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; package li.cil.oc.driver;
import li.cil.oc.util.TileEntityLookup;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
public abstract class TileEntityDriver implements li.cil.oc.api.driver.Block { public abstract class TileEntityDriver implements li.cil.oc.api.driver.Block {
public abstract Class<?> getFilterClass(); 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 @Override
public boolean worksWith(final World world, final int x, final int y, final int z) { public boolean worksWith(final World world, final int x, final int y, final int z) {
final TileEntity tileEntity = world.getBlockTileEntity(x, y, 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.Callback;
import li.cil.oc.api.network.Context; import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment; import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment; import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block; import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion; import net.minecraft.potion.Potion;
import net.minecraft.tileentity.TileEntityBeacon; import net.minecraft.tileentity.TileEntityBeacon;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverBeacon extends DriverBlock { public final class DriverBeacon extends TileEntityDriver {
DriverBeacon() { @Override
super(new ItemStack(Block.beacon, 1, OreDictionary.WILDCARD_VALUE)); public Class<?> getFilterClass() {
return TileEntityBeacon.class;
} }
@Override @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.Callback;
import li.cil.oc.api.network.Context; import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment; import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment; import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block; import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityBrewingStand; import net.minecraft.tileentity.TileEntityBrewingStand;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverBrewingStand extends DriverBlock { public final class DriverBrewingStand extends TileEntityDriver {
DriverBrewingStand() { @Override
super(new ItemStack(Item.brewingStand), public Class<?> getFilterClass() {
new ItemStack(Block.brewingStand, 1, OreDictionary.WILDCARD_VALUE)); return TileEntityBrewingStand.class;
} }
@Override @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.Callback;
import li.cil.oc.api.network.Context; import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment; import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment; import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block; import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityComparator; import net.minecraft.tileentity.TileEntityComparator;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverComparator extends DriverBlock { public final class DriverComparator extends TileEntityDriver {
DriverComparator() { @Override
super(new ItemStack(Item.comparator), public Class<?> getFilterClass() {
new ItemStack(Block.redstoneComparatorIdle, 1, OreDictionary.WILDCARD_VALUE), return TileEntityComparator.class;
new ItemStack(Block.redstoneComparatorActive, 1, OreDictionary.WILDCARD_VALUE));
} }
@Override @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.Callback;
import li.cil.oc.api.network.Context; import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment; import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment; import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block; import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverFurnace extends DriverBlock { public final class DriverFurnace extends TileEntityDriver {
DriverFurnace() { @Override
super(new ItemStack(Block.furnaceIdle, 1, OreDictionary.WILDCARD_VALUE), public Class<?> getFilterClass() {
new ItemStack(Block.furnaceBurning, 1, OreDictionary.WILDCARD_VALUE)); return TileEntityFurnace.class;
} }
@Override @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.Context;
import li.cil.oc.api.network.ManagedEnvironment; import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.driver.ManagedTileEntityEnvironment; 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.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
public final class DriverInventory implements li.cil.oc.api.driver.Block { public final class DriverInventory extends TileEntityDriver {
@Override @Override
public boolean worksWith(final World world, final ItemStack stack) { public Class<?> getFilterClass() {
final Class clazz = TileEntityLookup.get(world, stack); return IInventory.class;
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;
} }
@Override @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.Callback;
import li.cil.oc.api.network.Context; import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment; import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment; import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block; import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityMobSpawner; import net.minecraft.tileentity.TileEntityMobSpawner;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverMobSpawner extends DriverBlock { public final class DriverMobSpawner extends TileEntityDriver {
DriverMobSpawner() { @Override
super(new ItemStack(Block.mobSpawner, 1, OreDictionary.WILDCARD_VALUE)); public Class<?> getFilterClass() {
return TileEntityMobSpawner.class;
} }
@Override @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.Callback;
import li.cil.oc.api.network.Context; import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment; import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment; 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.ItemRecord;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityRecordPlayer; import net.minecraft.tileentity.TileEntityRecordPlayer;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverRecordPlayer extends DriverBlock { public final class DriverRecordPlayer extends TileEntityDriver {
DriverRecordPlayer() { @Override
super(new ItemStack(Block.jukebox, 1, OreDictionary.WILDCARD_VALUE)); public Class<?> getFilterClass() {
return TileEntityRecordPlayer.class;
} }
@Override @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.Callback;
import li.cil.oc.api.network.Context; import li.cil.oc.api.network.Context;
import li.cil.oc.api.network.ManagedEnvironment; import li.cil.oc.api.network.ManagedEnvironment;
import li.cil.oc.api.prefab.DriverBlock;
import li.cil.oc.driver.ManagedTileEntityEnvironment; import li.cil.oc.driver.ManagedTileEntityEnvironment;
import net.minecraft.block.Block; import li.cil.oc.driver.TileEntityDriver;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntitySign; import net.minecraft.tileentity.TileEntitySign;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public final class DriverSign extends DriverBlock { public final class DriverSign extends TileEntityDriver {
DriverSign() { @Override
super(new ItemStack(Item.sign, 1, OreDictionary.WILDCARD_VALUE), public Class<?> getFilterClass() {
new ItemStack(Block.signPost, 1, OreDictionary.WILDCARD_VALUE), return TileEntitySign.class;
new ItemStack(Block.signWall, 1, OreDictionary.WILDCARD_VALUE));
} }
@Override @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 + "}";
}
}
}