diff --git a/build.properties b/build.properties index dbbb0a742..2c4135ba6 100644 --- a/build.properties +++ b/build.properties @@ -7,7 +7,7 @@ mod.group=li.cil.oc mod.version=1.7.0 forestry.version=5.3.1.38 -jei.version=4.2.7.240 +jei.version=4.2.11.251 mcmp.version=2.0.0_17 tis3d.version=1.1.1.37 diff --git a/src/main/java/li/cil/oc/api/Driver.java b/src/main/java/li/cil/oc/api/Driver.java index 0c446073a..3f67f4db3 100644 --- a/src/main/java/li/cil/oc/api/Driver.java +++ b/src/main/java/li/cil/oc/api/Driver.java @@ -1,6 +1,5 @@ package li.cil.oc.api; -import li.cil.oc.api.driver.Block; import li.cil.oc.api.driver.Converter; import li.cil.oc.api.driver.EnvironmentProvider; import li.cil.oc.api.driver.InventoryProvider; @@ -10,8 +9,8 @@ import li.cil.oc.api.network.EnvironmentHost; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.items.IItemHandler; @@ -36,25 +35,6 @@ import java.util.Set; * @see Item */ public final class Driver { - /** - * Registers a new block driver. - *

- * Whenever the neighboring blocks of an Adapter block change, it checks if - * there exists a driver for the changed block, and if it is configured to - * interface that block type connects it to the component network. - *

- * This must be called in the init phase, not the pre- or post-init - * phases. - * - * @param driver the driver to register. - * @deprecated Use {@link SidedBlock} instead. - */ - @Deprecated // TODO Remove in OC 1.7 - public static void add(final Block driver) { - if (API.driver != null) - API.driver.add(driver); - } - /** * Registers a new side-aware block driver. *

@@ -138,30 +118,8 @@ public final class Driver { *

* Note that several drivers for a single block can exist. Because of this * block drivers are always encapsulated in a 'compound' driver, which is - * what will be returned here. In other words, you should will not - * get actual instances of drivers registered via {@link #add(li.cil.oc.api.driver.Block)}. - * - * @param world the world containing the block. - * @param pos the position of the block. - * @return a driver for the block, or null if there is none. - * @deprecated Use {@link #driverFor(World, BlockPos, EnumFacing)}, - * passing null if the side is to be ignored. - */ - @Deprecated // TODO Remove in OC 1.7 - public static Block driverFor(World world, BlockPos pos) { - if (API.driver != null) - return API.driver.driverFor(world, pos); - return null; - } - - /** - * Looks up a driver for the block at the specified position in the - * specified world. - *

- * Note that several drivers for a single block can exist. Because of this - * block drivers are always encapsulated in a 'compound' driver, which is - * what will be returned here. In other words, you should will not - * get actual instances of drivers registered via {@link #add(li.cil.oc.api.driver.Block)}. + * what will be returned here. In other words, you will not + * get actual instances of drivers registered via {@link #add(li.cil.oc.api.driver.SidedBlock)}. * * @param world the world containing the block. * @param pos the position of the block. @@ -273,22 +231,6 @@ public final class Driver { return null; } - /** - * Get a list of all registered block drivers. - *

- * This is intended to allow checking for particular drivers using more - * customized logic. - *

- * The returned collection is read-only. - * - * @return the list of all registered block drivers. - */ - public static Collection blockDrivers() { - if (API.driver != null) - return API.driver.blockDrivers(); - return null; - } - /** * Get a list of all registered item drivers. *

diff --git a/src/main/java/li/cil/oc/api/Items.java b/src/main/java/li/cil/oc/api/Items.java index 1d0d8a7d3..3a3f55927 100644 --- a/src/main/java/li/cil/oc/api/Items.java +++ b/src/main/java/li/cil/oc/api/Items.java @@ -73,7 +73,7 @@ public final class Items { public static ItemStack registerFloppy(String name, EnumDyeColor color, Callable factory) { if (API.items != null) return API.items.registerFloppy(name, color, factory); - return null; + return ItemStack.EMPTY; } /** @@ -104,7 +104,7 @@ public final class Items { public static ItemStack registerFloppy(String name, EnumDyeColor color, Callable factory, boolean doRecipeCycling) { if (API.items != null) return API.items.registerFloppy(name, color, factory, doRecipeCycling); - return null; + return ItemStack.EMPTY; } /** @@ -126,7 +126,7 @@ public final class Items { public static ItemStack registerEEPROM(String name, byte[] code, byte[] data, boolean readonly) { if (API.items != null) return API.items.registerEEPROM(name, code, data, readonly); - return null; + return ItemStack.EMPTY; } // ----------------------------------------------------------------------- // diff --git a/src/main/java/li/cil/oc/api/detail/DriverAPI.java b/src/main/java/li/cil/oc/api/detail/DriverAPI.java index ad2fcd0fa..04207acef 100644 --- a/src/main/java/li/cil/oc/api/detail/DriverAPI.java +++ b/src/main/java/li/cil/oc/api/detail/DriverAPI.java @@ -1,6 +1,6 @@ package li.cil.oc.api.detail; -import li.cil.oc.api.driver.Block; +import jline.internal.Nullable; import li.cil.oc.api.driver.Converter; import li.cil.oc.api.driver.EnvironmentProvider; import li.cil.oc.api.driver.InventoryProvider; @@ -10,8 +10,8 @@ import li.cil.oc.api.network.EnvironmentHost; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.items.IItemHandler; @@ -19,22 +19,6 @@ import java.util.Collection; import java.util.Set; public interface DriverAPI { - /** - * Registers a new driver for a block component. - *

- * Whenever the neighboring blocks of an Adapter block change, it checks if - * there exists a driver for the changed block, and if it is configured to - * interface that block type connects it to the component network. - *

- * This must be called in the init phase, not the pre- or post-init - * phases. - * - * @param driver the driver for a block component. - * @deprecated Use {@link SidedBlock} instead. - */ - @Deprecated // TODO Remove in OC 1.7 - void add(Block driver); - /** * Registers a new side-aware block driver. *

@@ -104,31 +88,14 @@ public interface DriverAPI { * Note that several drivers for a single block can exist. Because of this * block drivers are always encapsulated in a 'compound' driver, which is * what will be returned here. In other words, you should will not - * get actual instances of drivers registered via {@link #add(li.cil.oc.api.driver.Block)}. - * - * @param world the world containing the block. - * @param pos the position of the block. - * @return a driver for the block, or null if there is none. - * @deprecated Use {@link #driverFor(World, BlockPos, EnumFacing)}, - * passing null if the side is to be ignored. - */ - @Deprecated // TODO Remove in OC 1.7 - Block driverFor(World world, BlockPos pos); - - /** - * Looks up a driver for the block at the specified position in the - * specified world. - *

- * Note that several drivers for a single block can exist. Because of this - * block drivers are always encapsulated in a 'compound' driver, which is - * what will be returned here. In other words, you should will not - * get actual instances of drivers registered via {@link #add(li.cil.oc.api.driver.Block)}. + * get actual instances of drivers registered via {@link #add(li.cil.oc.api.driver.SidedBlock)}. * * @param world the world containing the block. * @param pos the position of the block. * @param side the side of the block. * @return a driver for the block, or null if there is none. */ + @Nullable SidedBlock driverFor(World world, BlockPos pos, EnumFacing side); /** @@ -142,6 +109,7 @@ public interface DriverAPI { * @param host the type that will host the environment created by returned driver. * @return a driver for the item, or null if there is none. */ + @Nullable Item driverFor(ItemStack stack, Class host); /** @@ -157,6 +125,7 @@ public interface DriverAPI { * @param stack the item stack to get a driver for. * @return a driver for the item, or null if there is none. */ + @Nullable Item driverFor(ItemStack stack); /** @@ -188,7 +157,8 @@ public interface DriverAPI { /** * @deprecated Use {@link #itemHandlerFor(ItemStack, EntityPlayer)} instead. */ - @Deprecated // TODO Remove in OC 1.7 + @Deprecated + // TODO Remove in OC 1.7 IInventory inventoryFor(ItemStack stack, EntityPlayer player); /** @@ -207,18 +177,6 @@ public interface DriverAPI { */ IItemHandler itemHandlerFor(ItemStack stack, EntityPlayer player); - /** - * Get a list of all registered block drivers. - *

- * This is intended to allow checking for particular drivers using more - * customized logic. - *

- * The returned collection is read-only. - * - * @return the list of all registered block drivers. - */ - Collection blockDrivers(); - /** * Get a list of all registered item drivers. *

diff --git a/src/main/java/li/cil/oc/api/detail/ItemAPI.java b/src/main/java/li/cil/oc/api/detail/ItemAPI.java index 33beda68c..847f9fe69 100644 --- a/src/main/java/li/cil/oc/api/detail/ItemAPI.java +++ b/src/main/java/li/cil/oc/api/detail/ItemAPI.java @@ -1,5 +1,6 @@ package li.cil.oc.api.detail; +import jline.internal.Nullable; import li.cil.oc.api.FileSystem; import net.minecraft.item.EnumDyeColor; import net.minecraft.item.ItemStack; @@ -19,6 +20,7 @@ public interface ItemAPI { * @return the descriptor for the item with the specified name, or * null if there is no such item. */ + @Nullable ItemInfo get(String name); /** @@ -29,6 +31,7 @@ public interface ItemAPI { * @return the descriptor for the specified item stack, or null * if the stack is not a valid OpenComputers item or block. */ + @Nullable ItemInfo get(ItemStack stack); /** diff --git a/src/main/java/li/cil/oc/api/prefab/DriverBlock.java b/src/main/java/li/cil/oc/api/prefab/DriverBlock.java deleted file mode 100644 index b672abccd..000000000 --- a/src/main/java/li/cil/oc/api/prefab/DriverBlock.java +++ /dev/null @@ -1,55 +0,0 @@ -package li.cil.oc.api.prefab; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; - -/** - * If you wish to create a block component for a third-party block, i.e. a block - * for which you do not control the tile entity, such as vanilla blocks, you - * will need a block driver. - *

- * This prefab allows creating a driver that works for a specified list of item - * stacks (to support different blocks with the same id but different metadata - * values). - *

- * You still have to provide the implementation for creating its environment, if - * any. - * - * @see li.cil.oc.api.network.ManagedEnvironment - * @deprecated Use {@link DriverSidedBlock} instead. - */ -@Deprecated // TODO Remove in OC 1.7 -@SuppressWarnings("UnusedDeclaration") -public abstract class DriverBlock implements li.cil.oc.api.driver.Block { - protected final ItemStack[] blocks; - - protected DriverBlock(final ItemStack... blocks) { - this.blocks = blocks.clone(); - } - - @Override - public boolean worksWith(final World world, final BlockPos pos) { - final IBlockState state = world.getBlockState(pos); - final Block block = state.getBlock(); - return worksWith(block, block.getMetaFromState(state)); - } - - protected boolean worksWith(final Block referenceBlock, final int referenceMetadata) { - for (ItemStack stack : blocks) { - if (stack != null && stack.getItem() instanceof ItemBlock) { - final ItemBlock item = (ItemBlock) stack.getItem(); - final Block supportedBlock = item.getBlock(); - final int supportedMetadata = item.getMetadata(stack.getItemDamage()); - if (referenceBlock == supportedBlock && (referenceMetadata == supportedMetadata || stack.getItemDamage() == OreDictionary.WILDCARD_VALUE)) { - return true; - } - } - } - return false; - } -} diff --git a/src/main/java/li/cil/oc/api/prefab/DriverItem.java b/src/main/java/li/cil/oc/api/prefab/DriverItem.java index 5b098a449..57001429c 100644 --- a/src/main/java/li/cil/oc/api/prefab/DriverItem.java +++ b/src/main/java/li/cil/oc/api/prefab/DriverItem.java @@ -28,9 +28,9 @@ public abstract class DriverItem implements li.cil.oc.api.driver.Item { @Override public boolean worksWith(final ItemStack stack) { - if (stack != null) { + if (!stack.isEmpty()) { for (ItemStack item : items) { - if (item != null && item.isItemEqual(stack)) { + if (!item.isEmpty() && item.isItemEqual(stack)) { return true; } } diff --git a/src/main/java/li/cil/oc/api/prefab/DriverSidedBlock.java b/src/main/java/li/cil/oc/api/prefab/DriverSidedBlock.java index 3f4db0ee5..60f2af3c9 100644 --- a/src/main/java/li/cil/oc/api/prefab/DriverSidedBlock.java +++ b/src/main/java/li/cil/oc/api/prefab/DriverSidedBlock.java @@ -43,7 +43,7 @@ public abstract class DriverSidedBlock implements li.cil.oc.api.driver.SidedBloc protected boolean worksWith(final Block referenceBlock, final int referenceMetadata) { for (ItemStack stack : blocks) { - if (stack != null && stack.getItem() instanceof ItemBlock) { + if (!stack.isEmpty() && stack.getItem() instanceof ItemBlock) { final ItemBlock item = (ItemBlock) stack.getItem(); final Block supportedBlock = item.getBlock(); final int supportedMetadata = item.getMetadata(stack.getItemDamage()); diff --git a/src/main/resources/assets/opencomputers/blockstates/accessPoint.json b/src/main/resources/assets/opencomputers/blockstates/accesspoint.json similarity index 100% rename from src/main/resources/assets/opencomputers/blockstates/accessPoint.json rename to src/main/resources/assets/opencomputers/blockstates/accesspoint.json diff --git a/src/main/resources/assets/opencomputers/blockstates/caseCreative.json b/src/main/resources/assets/opencomputers/blockstates/casecreative.json similarity index 100% rename from src/main/resources/assets/opencomputers/blockstates/caseCreative.json rename to src/main/resources/assets/opencomputers/blockstates/casecreative.json diff --git a/src/main/resources/assets/opencomputers/blockstates/chameliumBlock.json b/src/main/resources/assets/opencomputers/blockstates/chameliumblock.json similarity index 100% rename from src/main/resources/assets/opencomputers/blockstates/chameliumBlock.json rename to src/main/resources/assets/opencomputers/blockstates/chameliumblock.json diff --git a/src/main/resources/assets/opencomputers/blockstates/diskDrive.json b/src/main/resources/assets/opencomputers/blockstates/diskdrive.json similarity index 100% rename from src/main/resources/assets/opencomputers/blockstates/diskDrive.json rename to src/main/resources/assets/opencomputers/blockstates/diskdrive.json diff --git a/src/main/resources/assets/opencomputers/blockstates/motionSensor.json b/src/main/resources/assets/opencomputers/blockstates/motionsensor.json similarity index 100% rename from src/main/resources/assets/opencomputers/blockstates/motionSensor.json rename to src/main/resources/assets/opencomputers/blockstates/motionsensor.json diff --git a/src/main/resources/assets/opencomputers/blockstates/powerConverter.json b/src/main/resources/assets/opencomputers/blockstates/powerconverter.json similarity index 100% rename from src/main/resources/assets/opencomputers/blockstates/powerConverter.json rename to src/main/resources/assets/opencomputers/blockstates/powerconverter.json diff --git a/src/main/resources/assets/opencomputers/blockstates/powerDistributor.json b/src/main/resources/assets/opencomputers/blockstates/powerdistributor.json similarity index 100% rename from src/main/resources/assets/opencomputers/blockstates/powerDistributor.json rename to src/main/resources/assets/opencomputers/blockstates/powerdistributor.json diff --git a/src/main/resources/assets/opencomputers/models/block/accessPoint.json b/src/main/resources/assets/opencomputers/models/block/accesspoint.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/block/accessPoint.json rename to src/main/resources/assets/opencomputers/models/block/accesspoint.json diff --git a/src/main/resources/assets/opencomputers/models/block/chameliumBlock.json b/src/main/resources/assets/opencomputers/models/block/chameliumblock.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/block/chameliumBlock.json rename to src/main/resources/assets/opencomputers/models/block/chameliumblock.json diff --git a/src/main/resources/assets/opencomputers/models/block/diskDrive.json b/src/main/resources/assets/opencomputers/models/block/diskdrive.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/block/diskDrive.json rename to src/main/resources/assets/opencomputers/models/block/diskdrive.json diff --git a/src/main/resources/assets/opencomputers/models/block/motionSensor.json b/src/main/resources/assets/opencomputers/models/block/motionsensor.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/block/motionSensor.json rename to src/main/resources/assets/opencomputers/models/block/motionsensor.json diff --git a/src/main/resources/assets/opencomputers/models/block/powerConverter.json b/src/main/resources/assets/opencomputers/models/block/powerconverter.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/block/powerConverter.json rename to src/main/resources/assets/opencomputers/models/block/powerconverter.json diff --git a/src/main/resources/assets/opencomputers/models/block/powerDistributor.json b/src/main/resources/assets/opencomputers/models/block/powerdistributor.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/block/powerDistributor.json rename to src/main/resources/assets/opencomputers/models/block/powerdistributor.json diff --git a/src/main/resources/assets/opencomputers/models/item/abstractBusCard.json b/src/main/resources/assets/opencomputers/models/item/abstractbuscard.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/abstractBusCard.json rename to src/main/resources/assets/opencomputers/models/item/abstractbuscard.json diff --git a/src/main/resources/assets/opencomputers/models/item/accessPoint.json b/src/main/resources/assets/opencomputers/models/item/accesspoint.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/accessPoint.json rename to src/main/resources/assets/opencomputers/models/item/accesspoint.json diff --git a/src/main/resources/assets/opencomputers/models/item/angelUpgrade.json b/src/main/resources/assets/opencomputers/models/item/angelupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/angelUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/angelupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/apuCreative.json b/src/main/resources/assets/opencomputers/models/item/apucreative.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/apuCreative.json rename to src/main/resources/assets/opencomputers/models/item/apucreative.json diff --git a/src/main/resources/assets/opencomputers/models/item/arrowKeys.json b/src/main/resources/assets/opencomputers/models/item/arrowkeys.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/arrowKeys.json rename to src/main/resources/assets/opencomputers/models/item/arrowkeys.json diff --git a/src/main/resources/assets/opencomputers/models/item/batteryUpgrade1.json b/src/main/resources/assets/opencomputers/models/item/batteryupgrade1.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/batteryUpgrade1.json rename to src/main/resources/assets/opencomputers/models/item/batteryupgrade1.json diff --git a/src/main/resources/assets/opencomputers/models/item/batteryUpgrade2.json b/src/main/resources/assets/opencomputers/models/item/batteryupgrade2.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/batteryUpgrade2.json rename to src/main/resources/assets/opencomputers/models/item/batteryupgrade2.json diff --git a/src/main/resources/assets/opencomputers/models/item/batteryUpgrade3.json b/src/main/resources/assets/opencomputers/models/item/batteryupgrade3.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/batteryUpgrade3.json rename to src/main/resources/assets/opencomputers/models/item/batteryupgrade3.json diff --git a/src/main/resources/assets/opencomputers/models/item/buttonGroup.json b/src/main/resources/assets/opencomputers/models/item/buttongroup.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/buttonGroup.json rename to src/main/resources/assets/opencomputers/models/item/buttongroup.json diff --git a/src/main/resources/assets/opencomputers/models/item/cardContainer1.json b/src/main/resources/assets/opencomputers/models/item/cardcontainer1.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/cardContainer1.json rename to src/main/resources/assets/opencomputers/models/item/cardcontainer1.json diff --git a/src/main/resources/assets/opencomputers/models/item/cardContainer2.json b/src/main/resources/assets/opencomputers/models/item/cardcontainer2.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/cardContainer2.json rename to src/main/resources/assets/opencomputers/models/item/cardcontainer2.json diff --git a/src/main/resources/assets/opencomputers/models/item/cardContainer3.json b/src/main/resources/assets/opencomputers/models/item/cardcontainer3.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/cardContainer3.json rename to src/main/resources/assets/opencomputers/models/item/cardcontainer3.json diff --git a/src/main/resources/assets/opencomputers/models/item/caseCreative.json b/src/main/resources/assets/opencomputers/models/item/casecreative.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/caseCreative.json rename to src/main/resources/assets/opencomputers/models/item/casecreative.json diff --git a/src/main/resources/assets/opencomputers/models/item/chameliumBlock.json b/src/main/resources/assets/opencomputers/models/item/chameliumblock.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/chameliumBlock.json rename to src/main/resources/assets/opencomputers/models/item/chameliumblock.json diff --git a/src/main/resources/assets/opencomputers/models/item/chipDiamond.json b/src/main/resources/assets/opencomputers/models/item/chipdiamond.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/chipDiamond.json rename to src/main/resources/assets/opencomputers/models/item/chipdiamond.json diff --git a/src/main/resources/assets/opencomputers/models/item/chunkloaderUpgrade.json b/src/main/resources/assets/opencomputers/models/item/chunkloaderupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/chunkloaderUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/chunkloaderupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/circuitBoard.json b/src/main/resources/assets/opencomputers/models/item/circuitboard.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/circuitBoard.json rename to src/main/resources/assets/opencomputers/models/item/circuitboard.json diff --git a/src/main/resources/assets/opencomputers/models/item/componentBus1.json b/src/main/resources/assets/opencomputers/models/item/componentbus1.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/componentBus1.json rename to src/main/resources/assets/opencomputers/models/item/componentbus1.json diff --git a/src/main/resources/assets/opencomputers/models/item/componentBus2.json b/src/main/resources/assets/opencomputers/models/item/componentbus2.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/componentBus2.json rename to src/main/resources/assets/opencomputers/models/item/componentbus2.json diff --git a/src/main/resources/assets/opencomputers/models/item/componentBus3.json b/src/main/resources/assets/opencomputers/models/item/componentbus3.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/componentBus3.json rename to src/main/resources/assets/opencomputers/models/item/componentbus3.json diff --git a/src/main/resources/assets/opencomputers/models/item/craftingUpgrade.json b/src/main/resources/assets/opencomputers/models/item/craftingupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/craftingUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/craftingupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/cuttingWire.json b/src/main/resources/assets/opencomputers/models/item/cuttingwire.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/cuttingWire.json rename to src/main/resources/assets/opencomputers/models/item/cuttingwire.json diff --git a/src/main/resources/assets/opencomputers/models/item/databaseUpgrade1.json b/src/main/resources/assets/opencomputers/models/item/databaseupgrade1.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/databaseUpgrade1.json rename to src/main/resources/assets/opencomputers/models/item/databaseupgrade1.json diff --git a/src/main/resources/assets/opencomputers/models/item/databaseUpgrade2.json b/src/main/resources/assets/opencomputers/models/item/databaseupgrade2.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/databaseUpgrade2.json rename to src/main/resources/assets/opencomputers/models/item/databaseupgrade2.json diff --git a/src/main/resources/assets/opencomputers/models/item/databaseUpgrade3.json b/src/main/resources/assets/opencomputers/models/item/databaseupgrade3.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/databaseUpgrade3.json rename to src/main/resources/assets/opencomputers/models/item/databaseupgrade3.json diff --git a/src/main/resources/assets/opencomputers/models/item/dataCard1.json b/src/main/resources/assets/opencomputers/models/item/datacard1.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/dataCard1.json rename to src/main/resources/assets/opencomputers/models/item/datacard1.json diff --git a/src/main/resources/assets/opencomputers/models/item/dataCard2.json b/src/main/resources/assets/opencomputers/models/item/datacard2.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/dataCard2.json rename to src/main/resources/assets/opencomputers/models/item/datacard2.json diff --git a/src/main/resources/assets/opencomputers/models/item/dataCard3.json b/src/main/resources/assets/opencomputers/models/item/datacard3.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/dataCard3.json rename to src/main/resources/assets/opencomputers/models/item/datacard3.json diff --git a/src/main/resources/assets/opencomputers/models/item/debugCard.json b/src/main/resources/assets/opencomputers/models/item/debugcard.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/debugCard.json rename to src/main/resources/assets/opencomputers/models/item/debugcard.json diff --git a/src/main/resources/assets/opencomputers/models/item/diskDrive.json b/src/main/resources/assets/opencomputers/models/item/diskdrive.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/diskDrive.json rename to src/main/resources/assets/opencomputers/models/item/diskdrive.json diff --git a/src/main/resources/assets/opencomputers/models/item/diskDriveMountable.json b/src/main/resources/assets/opencomputers/models/item/diskdrivemountable.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/diskDriveMountable.json rename to src/main/resources/assets/opencomputers/models/item/diskdrivemountable.json diff --git a/src/main/resources/assets/opencomputers/models/item/droneCase1.json b/src/main/resources/assets/opencomputers/models/item/dronecase1.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/droneCase1.json rename to src/main/resources/assets/opencomputers/models/item/dronecase1.json diff --git a/src/main/resources/assets/opencomputers/models/item/droneCase2.json b/src/main/resources/assets/opencomputers/models/item/dronecase2.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/droneCase2.json rename to src/main/resources/assets/opencomputers/models/item/dronecase2.json diff --git a/src/main/resources/assets/opencomputers/models/item/droneCaseCreative.json b/src/main/resources/assets/opencomputers/models/item/dronecasecreative.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/droneCaseCreative.json rename to src/main/resources/assets/opencomputers/models/item/dronecasecreative.json diff --git a/src/main/resources/assets/opencomputers/models/item/experienceUpgrade.json b/src/main/resources/assets/opencomputers/models/item/experienceupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/experienceUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/experienceupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/generatorUpgrade.json b/src/main/resources/assets/opencomputers/models/item/generatorupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/generatorUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/generatorupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/graphicsCard1.json b/src/main/resources/assets/opencomputers/models/item/graphicscard1.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/graphicsCard1.json rename to src/main/resources/assets/opencomputers/models/item/graphicscard1.json diff --git a/src/main/resources/assets/opencomputers/models/item/graphicsCard2.json b/src/main/resources/assets/opencomputers/models/item/graphicscard2.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/graphicsCard2.json rename to src/main/resources/assets/opencomputers/models/item/graphicscard2.json diff --git a/src/main/resources/assets/opencomputers/models/item/hoverBoots.json b/src/main/resources/assets/opencomputers/models/item/hoverboots.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/hoverBoots.json rename to src/main/resources/assets/opencomputers/models/item/hoverboots.json diff --git a/src/main/resources/assets/opencomputers/models/item/hoverUpgrade1.json b/src/main/resources/assets/opencomputers/models/item/hoverupgrade1.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/hoverUpgrade1.json rename to src/main/resources/assets/opencomputers/models/item/hoverupgrade1.json diff --git a/src/main/resources/assets/opencomputers/models/item/hoverUpgrade2.json b/src/main/resources/assets/opencomputers/models/item/hoverupgrade2.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/hoverUpgrade2.json rename to src/main/resources/assets/opencomputers/models/item/hoverupgrade2.json diff --git a/src/main/resources/assets/opencomputers/models/item/inkCartridge.json b/src/main/resources/assets/opencomputers/models/item/inkcartridge.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/inkCartridge.json rename to src/main/resources/assets/opencomputers/models/item/inkcartridge.json diff --git a/src/main/resources/assets/opencomputers/models/item/inkCartridgeEmpty.json b/src/main/resources/assets/opencomputers/models/item/inkcartridgeempty.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/inkCartridgeEmpty.json rename to src/main/resources/assets/opencomputers/models/item/inkcartridgeempty.json diff --git a/src/main/resources/assets/opencomputers/models/item/internetCard.json b/src/main/resources/assets/opencomputers/models/item/internetcard.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/internetCard.json rename to src/main/resources/assets/opencomputers/models/item/internetcard.json diff --git a/src/main/resources/assets/opencomputers/models/item/inventoryControllerUpgrade.json b/src/main/resources/assets/opencomputers/models/item/inventorycontrollerupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/inventoryControllerUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/inventorycontrollerupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/inventoryUpgrade.json b/src/main/resources/assets/opencomputers/models/item/inventoryupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/inventoryUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/inventoryupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/lanCard.json b/src/main/resources/assets/opencomputers/models/item/lancard.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/lanCard.json rename to src/main/resources/assets/opencomputers/models/item/lancard.json diff --git a/src/main/resources/assets/opencomputers/models/item/leashUpgrade.json b/src/main/resources/assets/opencomputers/models/item/leashupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/leashUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/leashupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/linkedCard.json b/src/main/resources/assets/opencomputers/models/item/linkedcard.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/linkedCard.json rename to src/main/resources/assets/opencomputers/models/item/linkedcard.json diff --git a/src/main/resources/assets/opencomputers/models/item/lootDisk.json b/src/main/resources/assets/opencomputers/models/item/lootdisk.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/lootDisk.json rename to src/main/resources/assets/opencomputers/models/item/lootdisk.json diff --git a/src/main/resources/assets/opencomputers/models/item/microcontrollerCase1.json b/src/main/resources/assets/opencomputers/models/item/microcontrollercase1.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/microcontrollerCase1.json rename to src/main/resources/assets/opencomputers/models/item/microcontrollercase1.json diff --git a/src/main/resources/assets/opencomputers/models/item/microcontrollerCase2.json b/src/main/resources/assets/opencomputers/models/item/microcontrollercase2.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/microcontrollerCase2.json rename to src/main/resources/assets/opencomputers/models/item/microcontrollercase2.json diff --git a/src/main/resources/assets/opencomputers/models/item/microcontrollerCaseCreative.json b/src/main/resources/assets/opencomputers/models/item/microcontrollercasecreative.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/microcontrollerCaseCreative.json rename to src/main/resources/assets/opencomputers/models/item/microcontrollercasecreative.json diff --git a/src/main/resources/assets/opencomputers/models/item/motionSensor.json b/src/main/resources/assets/opencomputers/models/item/motionsensor.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/motionSensor.json rename to src/main/resources/assets/opencomputers/models/item/motionsensor.json diff --git a/src/main/resources/assets/opencomputers/models/item/navigationUpgrade.json b/src/main/resources/assets/opencomputers/models/item/navigationupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/navigationUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/navigationupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/nuggetIron.json b/src/main/resources/assets/opencomputers/models/item/nuggetiron.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/nuggetIron.json rename to src/main/resources/assets/opencomputers/models/item/nuggetiron.json diff --git a/src/main/resources/assets/opencomputers/models/item/numPad.json b/src/main/resources/assets/opencomputers/models/item/numpad.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/numPad.json rename to src/main/resources/assets/opencomputers/models/item/numpad.json diff --git a/src/main/resources/assets/opencomputers/models/item/pistonUpgrade.json b/src/main/resources/assets/opencomputers/models/item/pistonupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/pistonUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/pistonupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/powerConverter.json b/src/main/resources/assets/opencomputers/models/item/powerconverter.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/powerConverter.json rename to src/main/resources/assets/opencomputers/models/item/powerconverter.json diff --git a/src/main/resources/assets/opencomputers/models/item/powerDistributor.json b/src/main/resources/assets/opencomputers/models/item/powerdistributor.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/powerDistributor.json rename to src/main/resources/assets/opencomputers/models/item/powerdistributor.json diff --git a/src/main/resources/assets/opencomputers/models/item/printedCircuitBoard.json b/src/main/resources/assets/opencomputers/models/item/printedcircuitboard.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/printedCircuitBoard.json rename to src/main/resources/assets/opencomputers/models/item/printedcircuitboard.json diff --git a/src/main/resources/assets/opencomputers/models/item/rawCircuitBoard.json b/src/main/resources/assets/opencomputers/models/item/rawcircuitboard.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/rawCircuitBoard.json rename to src/main/resources/assets/opencomputers/models/item/rawcircuitboard.json diff --git a/src/main/resources/assets/opencomputers/models/item/redstoneCard1.json b/src/main/resources/assets/opencomputers/models/item/redstonecard1.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/redstoneCard1.json rename to src/main/resources/assets/opencomputers/models/item/redstonecard1.json diff --git a/src/main/resources/assets/opencomputers/models/item/redstoneCard2.json b/src/main/resources/assets/opencomputers/models/item/redstonecard2.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/redstoneCard2.json rename to src/main/resources/assets/opencomputers/models/item/redstonecard2.json diff --git a/src/main/resources/assets/opencomputers/models/item/serverCreative.json b/src/main/resources/assets/opencomputers/models/item/servercreative.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/serverCreative.json rename to src/main/resources/assets/opencomputers/models/item/servercreative.json diff --git a/src/main/resources/assets/opencomputers/models/item/signUpgrade.json b/src/main/resources/assets/opencomputers/models/item/signupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/signUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/signupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/solarGeneratorUpgrade.json b/src/main/resources/assets/opencomputers/models/item/solargeneratorupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/solarGeneratorUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/solargeneratorupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/tabletCase1.json b/src/main/resources/assets/opencomputers/models/item/tabletcase1.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/tabletCase1.json rename to src/main/resources/assets/opencomputers/models/item/tabletcase1.json diff --git a/src/main/resources/assets/opencomputers/models/item/tabletCase2.json b/src/main/resources/assets/opencomputers/models/item/tabletcase2.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/tabletCase2.json rename to src/main/resources/assets/opencomputers/models/item/tabletcase2.json diff --git a/src/main/resources/assets/opencomputers/models/item/tabletCaseCreative.json b/src/main/resources/assets/opencomputers/models/item/tabletcasecreative.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/tabletCaseCreative.json rename to src/main/resources/assets/opencomputers/models/item/tabletcasecreative.json diff --git a/src/main/resources/assets/opencomputers/models/item/tankControllerUpgrade.json b/src/main/resources/assets/opencomputers/models/item/tankcontrollerupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/tankControllerUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/tankcontrollerupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/tankUpgrade.json b/src/main/resources/assets/opencomputers/models/item/tankupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/tankUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/tankupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/terminalServer.json b/src/main/resources/assets/opencomputers/models/item/terminalserver.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/terminalServer.json rename to src/main/resources/assets/opencomputers/models/item/terminalserver.json diff --git a/src/main/resources/assets/opencomputers/models/item/texturePicker.json b/src/main/resources/assets/opencomputers/models/item/texturepicker.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/texturePicker.json rename to src/main/resources/assets/opencomputers/models/item/texturepicker.json diff --git a/src/main/resources/assets/opencomputers/models/item/tractorBeamUpgrade.json b/src/main/resources/assets/opencomputers/models/item/tractorbeamupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/tractorBeamUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/tractorbeamupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/tradingUpgrade.json b/src/main/resources/assets/opencomputers/models/item/tradingupgrade.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/tradingUpgrade.json rename to src/main/resources/assets/opencomputers/models/item/tradingupgrade.json diff --git a/src/main/resources/assets/opencomputers/models/item/upgradeContainer1.json b/src/main/resources/assets/opencomputers/models/item/upgradecontainer1.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/upgradeContainer1.json rename to src/main/resources/assets/opencomputers/models/item/upgradecontainer1.json diff --git a/src/main/resources/assets/opencomputers/models/item/upgradeContainer2.json b/src/main/resources/assets/opencomputers/models/item/upgradecontainer2.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/upgradeContainer2.json rename to src/main/resources/assets/opencomputers/models/item/upgradecontainer2.json diff --git a/src/main/resources/assets/opencomputers/models/item/upgradeContainer3.json b/src/main/resources/assets/opencomputers/models/item/upgradecontainer3.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/upgradeContainer3.json rename to src/main/resources/assets/opencomputers/models/item/upgradecontainer3.json diff --git a/src/main/resources/assets/opencomputers/models/item/wlanCard.json b/src/main/resources/assets/opencomputers/models/item/wlancard.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/wlanCard.json rename to src/main/resources/assets/opencomputers/models/item/wlancard.json diff --git a/src/main/resources/assets/opencomputers/models/item/worldSensorCard.json b/src/main/resources/assets/opencomputers/models/item/worldsensorcard.json similarity index 100% rename from src/main/resources/assets/opencomputers/models/item/worldSensorCard.json rename to src/main/resources/assets/opencomputers/models/item/worldsensorcard.json diff --git a/src/main/scala/li/cil/oc/client/PacketHandler.scala b/src/main/scala/li/cil/oc/client/PacketHandler.scala index 5ffdfe38c..1de3aa265 100644 --- a/src/main/scala/li/cil/oc/client/PacketHandler.scala +++ b/src/main/scala/li/cil/oc/client/PacketHandler.scala @@ -318,7 +318,7 @@ object PacketHandler extends CommonPacketHandler { def onLootDisk(p: PacketParser) = { val stack = p.readItemStack() - if (stack != null) { + if (!stack.isEmpty) { Loot.disksForClient += stack } if(Mods.JustEnoughItems.isAvailable) { @@ -333,7 +333,7 @@ object PacketHandler extends CommonPacketHandler { def onCyclingDisk(p: PacketParser) = { val stack = p.readItemStack() - if (stack != null) { + if (!stack.isEmpty) { Loot.disksForCyclingClient += stack } } diff --git a/src/main/scala/li/cil/oc/client/gui/Assembler.scala b/src/main/scala/li/cil/oc/client/gui/Assembler.scala index 85f64fb9f..60146d69c 100644 --- a/src/main/scala/li/cil/oc/client/gui/Assembler.scala +++ b/src/main/scala/li/cil/oc/client/gui/Assembler.scala @@ -55,7 +55,7 @@ class Assembler(playerInventory: InventoryPlayer, val assembler: tileentity.Asse add(buttonList, runButton) } - override def drawSecondaryForegroundLayer(mouseX: Int, mouseY: Int) = { + override def drawSecondaryForegroundLayer(mouseX: Int, mouseY: Int): Unit = { RenderState.pushAttrib() if (!inventoryContainer.isAssembling) { val message = diff --git a/src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala b/src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala index 8a488d1be..bd4a44acb 100644 --- a/src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala +++ b/src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala @@ -93,7 +93,7 @@ abstract class DynamicGuiContainer[C <: Container](container: C) extends CustomG */ if (Mods.JustEnoughItems.isAvailable) { - drawJEIHighlights() +// drawJEIHighlights() } } @@ -129,7 +129,7 @@ abstract class DynamicGuiContainer[C <: Container](container: C) extends CustomG } protected def drawSlotHighlight(slot: Slot) { - if (mc.player.inventory.getItemStack == null) slot match { + if (mc.player.inventory.getItemStack.isEmpty) slot match { case component: ComponentSlot if component.slot == common.Slot.None || component.tier == common.Tier.None => // Ignore. case _ => val currentIsInPlayerInventory = isInPlayerInventory(slot) @@ -187,7 +187,7 @@ abstract class DynamicGuiContainer[C <: Container](container: C) extends CustomG override def onGuiClosed(): Unit = { super.onGuiClosed() if(Mods.JustEnoughItems.isAvailable) { - resetJEIHighlights() +// resetJEIHighlights() } } /* TODO NEI diff --git a/src/main/scala/li/cil/oc/client/renderer/block/ModelInitialization.scala b/src/main/scala/li/cil/oc/client/renderer/block/ModelInitialization.scala index 4988badc6..e94caf842 100644 --- a/src/main/scala/li/cil/oc/client/renderer/block/ModelInitialization.scala +++ b/src/main/scala/li/cil/oc/client/renderer/block/ModelInitialization.scala @@ -86,13 +86,13 @@ object ModelInitialization { ModelLoader.setCustomModelResourceLocation(stack.getItem, stack.getMetadata, itemLocation) ModelLoader.setCustomStateMapper(block, new StateMapperBase { - override def getModelResourceLocation(state: IBlockState) = blockLocation + override def getModelResourceLocation(state: IBlockState): ModelResourceLocation = blockLocation }) } private def registerItems(): Unit = { val meshDefinition = new ItemMeshDefinition { - override def getModelLocation(stack: ItemStack) = { + override def getModelLocation(stack: ItemStack): ModelResourceLocation = { Option(api.Items.get(stack)) match { case Some(descriptor) => val location = Settings.resourceDomain + ":" + descriptor.name() diff --git a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/OreDictImageProvider.scala b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/OreDictImageProvider.scala index 084ede5e3..0bad3914f 100644 --- a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/OreDictImageProvider.scala +++ b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/OreDictImageProvider.scala @@ -10,7 +10,7 @@ import scala.collection.convert.WrapAsScala._ object OreDictImageProvider extends ImageProvider { override def getImage(data: String): ImageRenderer = { - val stacks = OreDictionary.getOres(data).filter(stack => stack != null && stack.getItem != null) + val stacks = OreDictionary.getOres(data).filter(stack => !stack.isEmpty && stack.getItem != null) if (stacks != null && stacks.nonEmpty) new ItemStackImageRenderer(stacks.toArray) else new TextureImageRenderer(Textures.GUI.ManualMissingItem) with InteractiveImageRenderer { override def getTooltip(tooltip: String): String = "oc:gui.Manual.Warning.OreDictMissing" diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/DiskDriveRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/DiskDriveRenderer.scala index c2eb1ea40..0866fad97 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/DiskDriveRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/DiskDriveRenderer.scala @@ -33,7 +33,7 @@ object DiskDriveRenderer extends TileEntitySpecialRenderer[DiskDrive] { } drive.items(0) match { - case Some(stack) => + case stack if !stack.isEmpty => GlStateManager.pushMatrix() GlStateManager.translate(0, 3.5f / 16, 6 / 16f) GlStateManager.rotate(90, -1, 0, 0) diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/RackRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/RackRenderer.scala index 4863f0031..d1c9290a2 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/RackRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/RackRenderer.scala @@ -34,7 +34,7 @@ object RackRenderer extends TileEntitySpecialRenderer[Rack] { // Note: we manually sync the rack inventory for this to work. for (i <- 0 until rack.getSizeInventory) { - if (rack.getStackInSlot(i) != null) { + if (!rack.getStackInSlot(i).isEmpty) { GlStateManager.pushMatrix() RenderState.pushAttrib() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala index 91134ea1a..a149c89c4 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala @@ -420,7 +420,7 @@ object RobotRenderer extends TileEntitySpecialRenderer[tileentity.RobotProxy] { lazy val slotMapping = Array.fill(mountPoints.length)(null: (ItemStack, UpgradeRenderer)) val renderers = (robot.componentSlots ++ robot.containerSlots).map(robot.getStackInSlot). - collect { case stack if stack != null && stack.getItem.isInstanceOf[UpgradeRenderer] => (stack, stack.getItem.asInstanceOf[UpgradeRenderer]) } + collect { case stack if !stack.isEmpty && stack.getItem.isInstanceOf[UpgradeRenderer] => (stack, stack.getItem.asInstanceOf[UpgradeRenderer]) } for ((stack, renderer) <- renderers) { val preferredSlot = renderer.computePreferredMountPoint(stack, robot, availableSlots) diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala index 303b4bfd9..deee40c16 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala @@ -122,7 +122,7 @@ object ScreenRenderer extends TileEntitySpecialRenderer[Screen] { private def drawOverlay() = if (screen.facing == EnumFacing.UP || screen.facing == EnumFacing.DOWN) { // Show up vector overlay when holding same screen block. val stack = Minecraft.getMinecraft.player.getHeldItemMainhand - if (stack != null) { + if (!stack.isEmpty) { if (Wrench.holdsApplicableWrench(Minecraft.getMinecraft.player, screen.getPos) || screens.contains(api.Items.get(stack))) { GlStateManager.pushMatrix() transform() diff --git a/src/main/scala/li/cil/oc/common/Achievement.scala b/src/main/scala/li/cil/oc/common/Achievement.scala index ca02165f6..ae8c4a686 100644 --- a/src/main/scala/li/cil/oc/common/Achievement.scala +++ b/src/main/scala/li/cil/oc/common/Achievement.scala @@ -297,7 +297,7 @@ object Achievement { } for (requirement <- customCrafting) { - if (requirement != null) { + if (!requirement.isEmpty) { Achievement.CustomCraftingMap += requirement -> achievement } } diff --git a/src/main/scala/li/cil/oc/common/EventHandler.scala b/src/main/scala/li/cil/oc/common/EventHandler.scala index 9836418e3..8b0fba099 100644 --- a/src/main/scala/li/cil/oc/common/EventHandler.scala +++ b/src/main/scala/li/cil/oc/common/EventHandler.scala @@ -315,7 +315,7 @@ object EventHandler { didRecraft = recraft(e, tablet, stack => { // Restore EEPROM currently used in tablet. - new TabletData(stack).items.collect { case Some(item) => item }.find(api.Items.get(_) == eeprom) + new TabletData(stack).items.collect { case item if !item.isEmpty => item }.find(api.Items.get(_) == eeprom) }) || didRecraft // Presents? diff --git a/src/main/scala/li/cil/oc/common/PacketBuilder.scala b/src/main/scala/li/cil/oc/common/PacketBuilder.scala index b88dc29bb..27d0bb801 100644 --- a/src/main/scala/li/cil/oc/common/PacketBuilder.scala +++ b/src/main/scala/li/cil/oc/common/PacketBuilder.scala @@ -43,7 +43,7 @@ abstract class PacketBuilder(stream: OutputStream) extends DataOutputStream(stre } def writeItemStack(stack: ItemStack) = { - val haveStack = stack != null && stack.getCount > 0 + val haveStack = !stack.isEmpty && stack.getCount > 0 writeBoolean(haveStack) if (haveStack) { writeNBT(stack.writeToNBT(new NBTTagCompound())) diff --git a/src/main/scala/li/cil/oc/common/PacketHandler.scala b/src/main/scala/li/cil/oc/common/PacketHandler.scala index 0145fcccb..392a0591c 100644 --- a/src/main/scala/li/cil/oc/common/PacketHandler.scala +++ b/src/main/scala/li/cil/oc/common/PacketHandler.scala @@ -16,6 +16,7 @@ import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.EntityPlayerMP import net.minecraft.item.ItemStack import net.minecraft.nbt.CompressedStreamTools +import net.minecraft.nbt.NBTTagCompound import net.minecraft.network.INetHandler import net.minecraft.util.EnumFacing import net.minecraft.util.math.BlockPos @@ -123,20 +124,20 @@ abstract class PacketHandler { getEntity[T](dimension, id) } - def readDirection() = readByte() match { + def readDirection(): Option[EnumFacing] = readByte() match { case id if id < 0 => None case id => Option(EnumFacing.getFront(id)) } - def readItemStack() = { + def readItemStack(): ItemStack = { val haveStack = readBoolean() if (haveStack) { new ItemStack(readNBT()) } - else null + else ItemStack.EMPTY } - def readNBT() = { + def readNBT(): NBTTagCompound = { val haveNbt = readBoolean() if (haveNbt) { CompressedStreamTools.read(this) diff --git a/src/main/scala/li/cil/oc/common/block/Cable.scala b/src/main/scala/li/cil/oc/common/block/Cable.scala index 3009d730d..16ec2c4d3 100644 --- a/src/main/scala/li/cil/oc/common/block/Cable.scala +++ b/src/main/scala/li/cil/oc/common/block/Cable.scala @@ -54,7 +54,7 @@ class Cable(protected implicit val tileTag: ClassTag[tileentity.Cable]) extends override def getPickBlock(state: IBlockState, target: RayTraceResult, world: World, pos: BlockPos, player: EntityPlayer) = world.getTileEntity(pos) match { case t: tileentity.Cable => t.createItemStack() - case _ => null + case _ => ItemStack.EMPTY } override def getBoundingBox(state: IBlockState, world: IBlockAccess, pos: BlockPos): AxisAlignedBB = Cable.bounds(world, pos) diff --git a/src/main/scala/li/cil/oc/common/block/DiskDrive.scala b/src/main/scala/li/cil/oc/common/block/DiskDrive.scala index be0f18a1c..be637f9da 100644 --- a/src/main/scala/li/cil/oc/common/block/DiskDrive.scala +++ b/src/main/scala/li/cil/oc/common/block/DiskDrive.scala @@ -33,13 +33,13 @@ class DiskDrive extends SimpleBlock with traits.GUI { override def getComparatorInputOverride(state: IBlockState, world: World, pos: BlockPos): Int = world.getTileEntity(pos) match { - case drive: tileentity.DiskDrive if drive.getStackInSlot(0) != null => 15 + case drive: tileentity.DiskDrive if !drive.getStackInSlot(0).isEmpty => 15 case _ => 0 } // ----------------------------------------------------------------------- // - override def localOnBlockActivated(world: World, pos: BlockPos, player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = { + override def localOnBlockActivated(world: World, pos: BlockPos, player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Boolean = { // Behavior: sneaking -> Insert[+Eject], not sneaking -> GUI. if (player.isSneaking) world.getTileEntity(pos) match { case drive: tileentity.DiskDrive => diff --git a/src/main/scala/li/cil/oc/common/block/Microcontroller.scala b/src/main/scala/li/cil/oc/common/block/Microcontroller.scala index 6c9bd3645..d7efa81ca 100644 --- a/src/main/scala/li/cil/oc/common/block/Microcontroller.scala +++ b/src/main/scala/li/cil/oc/common/block/Microcontroller.scala @@ -19,6 +19,7 @@ import net.minecraft.block.state.BlockStateContainer import net.minecraft.block.state.IBlockState import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer +import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.util.EnumFacing import net.minecraft.util.EnumHand @@ -43,7 +44,7 @@ class Microcontroller(protected implicit val tileTag: ClassTag[tileentity.Microc override def getPickBlock(state: IBlockState, target: RayTraceResult, world: World, pos: BlockPos, player: EntityPlayer): ItemStack = world.getTileEntity(pos) match { case mcu: tileentity.Microcontroller => mcu.info.copyItemStack() - case _ => null + case _ => ItemStack.EMPTY } // ----------------------------------------------------------------------- // @@ -52,26 +53,26 @@ class Microcontroller(protected implicit val tileTag: ClassTag[tileentity.Microc super.tooltipTail(metadata, stack, player, tooltip, advanced) if (KeyBindings.showExtendedTooltips) { val info = new MicrocontrollerData(stack) - for (component <- info.components if component != null) { + for (component <- info.components if !component.isEmpty) { tooltip.add("- " + component.getDisplayName) } } } - override def rarity(stack: ItemStack) = { + override def rarity(stack: ItemStack): EnumRarity = { val data = new MicrocontrollerData(stack) Rarity.byTier(data.tier) } // ----------------------------------------------------------------------- // - override def energyThroughput = Settings.get.caseRate(Tier.One) + override def energyThroughput: Double = Settings.get.caseRate(Tier.One) override def createNewTileEntity(world: World, metadata: Int) = new tileentity.Microcontroller() // ----------------------------------------------------------------------- // - override def localOnBlockActivated(world: World, pos: BlockPos, player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = { + override def localOnBlockActivated(world: World, pos: BlockPos, player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Boolean = { if (!Wrench.holdsApplicableWrench(player, pos)) { if (!player.isSneaking) { if (!world.isRemote) { diff --git a/src/main/scala/li/cil/oc/common/block/Print.scala b/src/main/scala/li/cil/oc/common/block/Print.scala index 529bc3b26..0906eeca7 100644 --- a/src/main/scala/li/cil/oc/common/block/Print.scala +++ b/src/main/scala/li/cil/oc/common/block/Print.scala @@ -94,7 +94,7 @@ class Print(protected implicit val tileTag: ClassTag[tileentity.Print]) extends override def shouldSideBeRendered(state: IBlockState, world: IBlockAccess, pos: BlockPos, side: EnumFacing) = true - override def isBlockSolid(world: IBlockAccess, pos: BlockPos, side: EnumFacing) = + override def isBlockSolid(world: IBlockAccess, pos: BlockPos, side: EnumFacing): Boolean = world.getTileEntity(pos) match { case print: tileentity.Print => print.isSideSolid(side) case _ => false @@ -106,7 +106,7 @@ class Print(protected implicit val tileTag: ClassTag[tileentity.Print]) extends override def getPickBlock(state: IBlockState, target: RayTraceResult, world: World, pos: BlockPos, player: EntityPlayer): ItemStack = { world.getTileEntity(pos) match { case print: tileentity.Print => print.data.createItemStack() - case _ => null + case _ => ItemStack.EMPTY } } diff --git a/src/main/scala/li/cil/oc/common/block/Raid.scala b/src/main/scala/li/cil/oc/common/block/Raid.scala index 49dee2d1f..273251323 100644 --- a/src/main/scala/li/cil/oc/common/block/Raid.scala +++ b/src/main/scala/li/cil/oc/common/block/Raid.scala @@ -30,7 +30,7 @@ class Raid(protected implicit val tileTag: ClassTag[tileentity.Raid]) extends Si super.tooltipTail(metadata, stack, player, tooltip, advanced) if (KeyBindings.showExtendedTooltips) { val data = new RaidData(stack) - for (disk <- data.disks if disk != null) { + for (disk <- data.disks if !disk.isEmpty) { tooltip.add("- " + disk.getDisplayName) } } @@ -70,9 +70,9 @@ class Raid(protected implicit val tileTag: ClassTag[tileentity.Raid]) extends Si override protected def doCustomDrops(tileEntity: tileentity.Raid, player: EntityPlayer, willHarvest: Boolean): Unit = { super.doCustomDrops(tileEntity, player, willHarvest) val stack = createItemStack() - if (tileEntity.items.exists(_.isDefined)) { + if (tileEntity.items.exists(!_.isEmpty)) { val data = new RaidData() - data.disks = tileEntity.items.map(_.orNull) + data.disks = tileEntity.items.clone() tileEntity.filesystem.foreach(_.save(data.filesystem)) data.label = Option(tileEntity.label.getLabel) data.save(stack) diff --git a/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala b/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala index b0f33f3f7..7d8e890da 100644 --- a/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala +++ b/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala @@ -40,7 +40,7 @@ class RobotAfterimage extends SimpleBlock { override def getPickBlock(state: IBlockState, target: RayTraceResult, world: World, pos: BlockPos, player: EntityPlayer): ItemStack = findMovingRobot(world, pos) match { case Some(robot) => robot.info.createItemStack() - case _ => null + case _ => ItemStack.EMPTY } override def getBoundingBox(state: IBlockState, world: IBlockAccess, pos: BlockPos): AxisAlignedBB = { diff --git a/src/main/scala/li/cil/oc/common/block/RobotProxy.scala b/src/main/scala/li/cil/oc/common/block/RobotProxy.scala index 4217e5798..5d0ae93f0 100644 --- a/src/main/scala/li/cil/oc/common/block/RobotProxy.scala +++ b/src/main/scala/li/cil/oc/common/block/RobotProxy.scala @@ -21,6 +21,7 @@ import net.minecraft.block.state.IBlockState import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer +import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.util._ import net.minecraft.util.math.AxisAlignedBB @@ -56,7 +57,7 @@ class RobotProxy extends RedstoneAware with traits.StateAware { override def getPickBlock(state: IBlockState, target: RayTraceResult, world: World, pos: BlockPos, player: EntityPlayer): ItemStack = world.getTileEntity(pos) match { case proxy: tileentity.RobotProxy => proxy.robot.info.copyItemStack() - case _ => null + case _ => ItemStack.EMPTY } override def getBoundingBox(state: IBlockState, world: IBlockAccess, pos: BlockPos): AxisAlignedBB = { @@ -78,7 +79,7 @@ class RobotProxy extends RedstoneAware with traits.StateAware { // ----------------------------------------------------------------------- // - override def rarity(stack: ItemStack) = { + override def rarity(stack: ItemStack): EnumRarity = { val data = new RobotData(stack) Rarity.byTier(data.tier) } @@ -126,7 +127,7 @@ class RobotProxy extends RedstoneAware with traits.StateAware { // ----------------------------------------------------------------------- // - override def createNewTileEntity(world: World, metadata: Int) = { + override def createNewTileEntity(world: World, metadata: Int): tileentity.RobotProxy = { moving.get match { case Some(robot) => new tileentity.RobotProxy(robot) case _ => new tileentity.RobotProxy() @@ -137,7 +138,7 @@ class RobotProxy extends RedstoneAware with traits.StateAware { override def getExplosionResistance(entity: Entity) = 10f - override def getDrops(world: IBlockAccess, pos: BlockPos, state: IBlockState, fortune: Int) = { + override def getDrops(world: IBlockAccess, pos: BlockPos, state: IBlockState, fortune: Int): util.ArrayList[ItemStack] = { val list = new java.util.ArrayList[ItemStack]() // Superspecial hack... usually this will not work, because Minecraft calls @@ -177,7 +178,7 @@ class RobotProxy extends RedstoneAware with traits.StateAware { private def gettingDropsForActualDrop = new Exception().getStackTrace.exists(element => getDropForRealDropCallers.contains(element.getClassName + "." + element.getMethodName)) - override def collisionRayTrace(state: IBlockState, world: World, pos: BlockPos, start: Vec3d, end: Vec3d) = { + override def collisionRayTrace(state: IBlockState, world: World, pos: BlockPos, start: Vec3d, end: Vec3d): RayTraceResult = { val bounds = getCollisionBoundingBox(state, world, pos) world.getTileEntity(pos) match { case proxy: tileentity.RobotProxy if proxy.robot.animationTicksLeft <= 0 && bounds.isVecInside(start) => null @@ -187,7 +188,7 @@ class RobotProxy extends RedstoneAware with traits.StateAware { // ----------------------------------------------------------------------- // - override def localOnBlockActivated(world: World, pos: BlockPos, player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = { + override def localOnBlockActivated(world: World, pos: BlockPos, player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Boolean = { if (!player.isSneaking) { if (!world.isRemote) { // We only send slot changes to nearby players, so if there was no slot @@ -202,7 +203,7 @@ class RobotProxy extends RedstoneAware with traits.StateAware { } true } - else if (heldItem == null) { + else if (heldItem.isEmpty) { if (!world.isRemote) { world.getTileEntity(pos) match { case proxy: tileentity.RobotProxy if !proxy.machine.isRunning && proxy.isUsableByPlayer(player) => proxy.machine.start() diff --git a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala index 2abfb97de..aecfdaf95 100644 --- a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala +++ b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala @@ -891,7 +891,7 @@ object TextBuffer { override def copyToAnalyzer(line: Int, player: EntityPlayer): Unit = { val stack = player.getHeldItem(EnumHand.MAIN_HAND) - if (stack != null) { + if (!stack.isEmpty) { if (!stack.hasTagCompound) { stack.setTagCompound(new NBTTagCompound()) } diff --git a/src/main/scala/li/cil/oc/common/container/Drone.scala b/src/main/scala/li/cil/oc/common/container/Drone.scala index 6158906a1..a5da73716 100644 --- a/src/main/scala/li/cil/oc/common/container/Drone.scala +++ b/src/main/scala/li/cil/oc/common/container/Drone.scala @@ -5,6 +5,7 @@ import li.cil.oc.common import li.cil.oc.common.entity import net.minecraft.entity.player.InventoryPlayer import net.minecraft.inventory.IInventory +import net.minecraft.item.ItemStack import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly @@ -33,7 +34,7 @@ class Drone(playerInventory: InventoryPlayer, drone: entity.Drone) extends Playe override def getStack = { if (isValid) super.getStack - else null + else ItemStack.EMPTY } } diff --git a/src/main/scala/li/cil/oc/common/container/DynamicComponentSlot.scala b/src/main/scala/li/cil/oc/common/container/DynamicComponentSlot.scala index 9b5dba116..09f1a8277 100644 --- a/src/main/scala/li/cil/oc/common/container/DynamicComponentSlot.scala +++ b/src/main/scala/li/cil/oc/common/container/DynamicComponentSlot.scala @@ -7,27 +7,28 @@ import li.cil.oc.util.InventoryUtils import li.cil.oc.util.SideTracker import net.minecraft.entity.player.EntityPlayer import net.minecraft.inventory.IInventory +import net.minecraft.util.ResourceLocation class DynamicComponentSlot(val container: Player, inventory: IInventory, index: Int, x: Int, y: Int, val info: DynamicComponentSlot => InventorySlot, val containerTierGetter: () => Int) extends ComponentSlot(inventory, index, x, y) { - override def tier = { + override def tier: Int = { val mainTier = containerTierGetter() if (mainTier >= 0) info(this).tier else mainTier } - def tierIcon = Textures.Icons.get(tier) + def tierIcon: ResourceLocation = Textures.Icons.get(tier) - def slot = { + def slot: String = { val mainTier = containerTierGetter() if (mainTier >= 0) info(this).slot else common.Slot.None } - override def hasBackground = Textures.Icons.get(slot) != null + override def hasBackground: Boolean = Textures.Icons.get(slot) != null - override def getBackgroundLocation = Option(Textures.Icons.get(slot)).getOrElse(super.getBackgroundLocation) + override def getBackgroundLocation: ResourceLocation = Option(Textures.Icons.get(slot)).getOrElse(super.getBackgroundLocation) - override def getSlotStackLimit = + override def getSlotStackLimit: Int = slot match { case common.Slot.Tool | common.Slot.Any | common.Slot.Filtered => super.getSlotStackLimit case common.Slot.None => 0 diff --git a/src/main/scala/li/cil/oc/common/container/Player.scala b/src/main/scala/li/cil/oc/common/container/Player.scala index b09d08aec..200a2d13b 100644 --- a/src/main/scala/li/cil/oc/common/container/Player.scala +++ b/src/main/scala/li/cil/oc/common/container/Player.scala @@ -37,8 +37,7 @@ abstract class Player(val playerInventory: InventoryPlayer, val otherInventory: // because stacks can change their... "character" just by being inserted in // certain containers - by being assigned an address. } - if (result != null && result.getCount > 0) result - else null + result } override def transferStackInSlot(player: EntityPlayer, index: Int): ItemStack = { @@ -49,7 +48,7 @@ abstract class Player(val playerInventory: InventoryPlayer, val otherInventory: detectAndSendChanges() } } - null + ItemStack.EMPTY } protected def tryTransferStackInSlot(from: Slot, intoPlayerInventory: Boolean) { diff --git a/src/main/scala/li/cil/oc/common/container/Rack.scala b/src/main/scala/li/cil/oc/common/container/Rack.scala index 32bc54c23..7c3fe1900 100644 --- a/src/main/scala/li/cil/oc/common/container/Rack.scala +++ b/src/main/scala/li/cil/oc/common/container/Rack.scala @@ -18,7 +18,7 @@ class Rack(playerInventory: InventoryPlayer, val rack: tileentity.Rack) extends addPlayerInventorySlots(8, 128) final val MaxConnections = 4 - val nodePresence = Array.fill(4)(Array.fill(4)(false)) + val nodePresence: Array[Array[Boolean]] = Array.fill(4)(Array.fill(4)(false)) override def updateCustomData(nbt: NBTTagCompound): Unit = { super.updateCustomData(nbt) diff --git a/src/main/scala/li/cil/oc/common/container/Robot.scala b/src/main/scala/li/cil/oc/common/container/Robot.scala index bd37e0abb..b4fe73a15 100644 --- a/src/main/scala/li/cil/oc/common/container/Robot.scala +++ b/src/main/scala/li/cil/oc/common/container/Robot.scala @@ -7,17 +7,19 @@ import li.cil.oc.common.tileentity import li.cil.oc.util.SideTracker import net.minecraft.entity.player.InventoryPlayer import net.minecraft.inventory.IInventory +import net.minecraft.item.ItemStack +import net.minecraft.util.ResourceLocation import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly class Robot(playerInventory: InventoryPlayer, robot: tileentity.Robot) extends Player(playerInventory, robot) { - val hasScreen = robot.components.exists { + val hasScreen: Boolean = robot.components.exists { case Some(buffer: api.internal.TextBuffer) => true case _ => false } private val withScreenHeight = 256 private val noScreenHeight = 108 - val deltaY = if (hasScreen) 0 else withScreenHeight - noScreenHeight + val deltaY: Int = if (hasScreen) 0 else withScreenHeight - noScreenHeight addSlotToContainer(170 + 0 * slotSize, 232 - deltaY, common.Slot.Tool) addSlotToContainer(170 + 1 * slotSize, 232 - deltaY, robot.containerSlotType(1), robot.containerSlotTier(1)) @@ -76,18 +78,18 @@ class Robot(playerInventory: InventoryPlayer, robot: tileentity.Robot) extends P } class InventorySlot(container: Player, inventory: IInventory, index: Int, x: Int, y: Int) extends StaticComponentSlot(container, inventory, index, x, y, common.Slot.Any, common.Tier.Any) { - def isValid = robot.isInventorySlot(getSlotIndex) + def isValid: Boolean = robot.isInventorySlot(getSlotIndex) @SideOnly(Side.CLIENT) override - def canBeHovered = isValid && super.canBeHovered + def canBeHovered: Boolean = isValid && super.canBeHovered - override def getBackgroundLocation = + override def getBackgroundLocation: ResourceLocation = if (isValid) super.getBackgroundLocation else Textures.Icons.get(common.Tier.None) - override def getStack = { + override def getStack: ItemStack = { if (isValid) super.getStack - else null + else ItemStack.EMPTY } } diff --git a/src/main/scala/li/cil/oc/common/entity/Drone.scala b/src/main/scala/li/cil/oc/common/entity/Drone.scala index 3fc19c347..0ec1af3de 100644 --- a/src/main/scala/li/cil/oc/common/entity/Drone.scala +++ b/src/main/scala/li/cil/oc/common/entity/Drone.scala @@ -1,5 +1,6 @@ package li.cil.oc.common.entity +import java.lang import java.lang.Iterable import java.util.UUID @@ -13,6 +14,7 @@ import li.cil.oc.api.Machine import li.cil.oc.api.driver.item import li.cil.oc.api.internal import li.cil.oc.api.internal.MultiTank +import li.cil.oc.api.machine import li.cil.oc.api.machine.Context import li.cil.oc.api.machine.MachineHost import li.cil.oc.api.network._ @@ -36,6 +38,7 @@ import net.minecraft.entity.item.EntityItem import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound +import net.minecraft.network.datasync.DataParameter import net.minecraft.network.datasync.DataSerializers import net.minecraft.network.datasync.EntityDataManager import net.minecraft.util.EnumFacing @@ -48,24 +51,24 @@ import net.minecraftforge.fluids.IFluidTank import scala.collection.convert.WrapAsJava._ object Drone { - val DataRunning = EntityDataManager.createKey(classOf[Drone], DataSerializers.BOOLEAN) - val DataTargetX = EntityDataManager.createKey(classOf[Drone], DataSerializers.FLOAT) - val DataTargetY = EntityDataManager.createKey(classOf[Drone], DataSerializers.FLOAT) - val DataTargetZ = EntityDataManager.createKey(classOf[Drone], DataSerializers.FLOAT) - val DataMaxAcceleration = EntityDataManager.createKey(classOf[Drone], DataSerializers.FLOAT) - val DataSelectedSlot = EntityDataManager.createKey(classOf[Drone], DataSerializers.VARINT) - val DataCurrentEnergy = EntityDataManager.createKey(classOf[Drone], DataSerializers.VARINT) - val DataMaxEnergy = EntityDataManager.createKey(classOf[Drone], DataSerializers.VARINT) - val DataStatusText = EntityDataManager.createKey(classOf[Drone], DataSerializers.STRING) - val DataInventorySize = EntityDataManager.createKey(classOf[Drone], DataSerializers.VARINT) - val DataLightColor = EntityDataManager.createKey(classOf[Drone], DataSerializers.VARINT) + val DataRunning: DataParameter[lang.Boolean] = EntityDataManager.createKey(classOf[Drone], DataSerializers.BOOLEAN) + val DataTargetX: DataParameter[lang.Float] = EntityDataManager.createKey(classOf[Drone], DataSerializers.FLOAT) + val DataTargetY: DataParameter[lang.Float] = EntityDataManager.createKey(classOf[Drone], DataSerializers.FLOAT) + val DataTargetZ: DataParameter[lang.Float] = EntityDataManager.createKey(classOf[Drone], DataSerializers.FLOAT) + val DataMaxAcceleration: DataParameter[lang.Float] = EntityDataManager.createKey(classOf[Drone], DataSerializers.FLOAT) + val DataSelectedSlot: DataParameter[Integer] = EntityDataManager.createKey(classOf[Drone], DataSerializers.VARINT) + val DataCurrentEnergy: DataParameter[Integer] = EntityDataManager.createKey(classOf[Drone], DataSerializers.VARINT) + val DataMaxEnergy: DataParameter[Integer] = EntityDataManager.createKey(classOf[Drone], DataSerializers.VARINT) + val DataStatusText: DataParameter[String] = EntityDataManager.createKey(classOf[Drone], DataSerializers.STRING) + val DataInventorySize: DataParameter[Integer] = EntityDataManager.createKey(classOf[Drone], DataSerializers.VARINT) + val DataLightColor: DataParameter[Integer] = EntityDataManager.createKey(classOf[Drone], DataSerializers.VARINT) } // internal.Rotatable is also in internal.Drone, but it wasn't since the start // so this is to ensure it is implemented here, in the very unlikely case that // someone decides to ship that specific version of the API. class Drone(world: World) extends Entity(world) with MachineHost with internal.Drone with internal.Rotatable with Analyzable with Context { - override def world = getEntityWorld + override def world: World = getEntityWorld // Some basic constants. val gravity = 0.05f @@ -78,28 +81,28 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D isImmuneToFire = true // Rendering stuff, purely eyecandy. - val targetFlapAngles = Array.fill(4, 2)(0f) - val flapAngles = Array.fill(4, 2)(0f) + val targetFlapAngles: Array[Array[Float]] = Array.fill(4, 2)(0f) + val flapAngles: Array[Array[Float]] = Array.fill(4, 2)(0f) var nextFlapChange = 0 - var bodyAngle = math.random.toFloat * 90 + var bodyAngle: Float = math.random.toFloat * 90 var angularVelocity = 0f var nextAngularVelocityChange = 0 var lastEnergyUpdate = 0 // Logic stuff, components, machine and such. val info = new DroneData() - val machine = if (!world.isRemote) { + val machine: api.machine.Machine = if (!world.isRemote) { val m = Machine.create(this) m.node.asInstanceOf[Connector].setLocalBufferSize(0) m } else null - val control = if (!world.isRemote) new component.Drone(this) else null + val control: component.Drone = if (!world.isRemote) new component.Drone(this) else null val components = new ComponentInventory { - override def host = Drone.this + override def host: Drone = Drone.this - override def items = info.components.map(Option(_)) + override def items: Array[ItemStack] = info.components - override def getSizeInventory = info.components.length + override def getSizeInventory: Int = info.components.length override def markDirty() {} @@ -107,7 +110,7 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D override def isUsableByPlayer(player: EntityPlayer) = true - override def node = Option(machine).map(_.node).orNull + override def node: Node = Option(machine).map(_.node).orNull override def onConnect(node: Node) {} @@ -116,7 +119,7 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D override def onMessage(message: Message) {} } val equipmentInventory = new Inventory { - val items = Array.empty[Option[ItemStack]] + val items = Array.empty[ItemStack] override def getSizeInventory = 0 @@ -129,20 +132,20 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D override def isUsableByPlayer(player: EntityPlayer) = false } val mainInventory = new Inventory { - val items = Array.fill[Option[ItemStack]](8)(None) + val items: Array[ItemStack] = Array.fill[ItemStack](8)(ItemStack.EMPTY) - override def getSizeInventory = inventorySize + override def getSizeInventory: Int = inventorySize override def getInventoryStackLimit = 64 override def markDirty() {} // TODO update client GUI? - override def isItemValidForSlot(slot: Int, stack: ItemStack) = slot >= 0 && slot < getSizeInventory + override def isItemValidForSlot(slot: Int, stack: ItemStack): Boolean = slot >= 0 && slot < getSizeInventory - override def isUsableByPlayer(player: EntityPlayer) = player.getDistanceSqToEntity(Drone.this) < 64 + override def isUsableByPlayer(player: EntityPlayer): Boolean = player.getDistanceSqToEntity(Drone.this) < 64 } val tank = new MultiTank { - override def tankCount = components.components.count { + override def tankCount: Int = components.components.count { case Some(tank: IFluidTank) => true case _ => false } @@ -155,20 +158,20 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D override def setSelectedTank(index: Int): Unit = selectedTank = index - override def tier = info.tier + override def tier: Int = info.tier override def player(): EntityPlayer = { agent.Player.updatePositionAndRotation(player_, facing, facing) player_ } - override def name = info.name + override def name: String = info.name override def setName(name: String): Unit = info.name = name - var ownerName = Settings.get.fakePlayerName + var ownerName: String = Settings.get.fakePlayerName - var ownerUUID = Settings.get.fakePlayerProfile.getId + var ownerUUID: UUID = Settings.get.fakePlayerProfile.getId private lazy val player_ = new agent.Player(this) @@ -176,21 +179,21 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D // Forward context stuff to our machine. Interface needed for some components // to work correctly (such as the chunkloader upgrade). - override def node = machine.node + override def node: Node = machine.node - override def canInteract(player: String) = machine.canInteract(player) + override def canInteract(player: String): Boolean = machine.canInteract(player) - override def isPaused = machine.isPaused + override def isPaused: Boolean = machine.isPaused - override def start() = machine.start() + override def start(): Boolean = machine.start() - override def pause(seconds: Double) = machine.pause(seconds) + override def pause(seconds: Double): Boolean = machine.pause(seconds) - override def stop() = machine.stop() + override def stop(): Boolean = machine.stop() - override def consumeCallBudget(callCost: Double) = machine.consumeCallBudget(callCost) + override def consumeCallBudget(callCost: Double): Unit = machine.consumeCallBudget(callCost) - override def signal(name: String, args: AnyRef*) = machine.signal(name, args: _*) + override def signal(name: String, args: AnyRef*): Boolean = machine.signal(name, args: _*) // ----------------------------------------------------------------------- // @@ -212,11 +215,11 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D // ----------------------------------------------------------------------- // - override def xPosition = posX + override def xPosition: Double = posX - override def yPosition = posY + override def yPosition: Double = posY - override def zPosition = posZ + override def zPosition: Double = posZ override def markChanged() {} @@ -224,9 +227,9 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D override def facing = EnumFacing.SOUTH - override def toLocal(value: EnumFacing) = value + override def toLocal(value: EnumFacing): EnumFacing = value - override def toGlobal(value: EnumFacing) = value + override def toGlobal(value: EnumFacing): EnumFacing = value // ----------------------------------------------------------------------- // @@ -236,13 +239,13 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D override def internalComponents(): Iterable[ItemStack] = asJavaIterable(info.components) - override def componentSlot(address: String) = components.components.indexWhere(_.exists(env => env.node != null && env.node.address == address)) + override def componentSlot(address: String): Int = components.components.indexWhere(_.exists(env => env.node != null && env.node.address == address)) override def onMachineConnect(node: Node) {} override def onMachineDisconnect(node: Node) {} - def computeInventorySize() = math.min(maxInventorySize, info.components.foldLeft(0)((acc, component) => acc + (Option(component) match { + def computeInventorySize(): Int = math.min(maxInventorySize, info.components.foldLeft(0)((acc, component) => acc + (Option(component) match { case Some(stack) => Option(Driver.driverFor(stack, getClass)) match { case Some(driver: item.Inventory) => math.max(1, driver.inventoryCapacity(stack) / 4) case _ => 0 @@ -290,29 +293,29 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D components.connectComponents() } - def isRunning = getDataManager.get(Drone.DataRunning) + def isRunning: Boolean = getDataManager.get(Drone.DataRunning) - def targetX = getDataManager.get(Drone.DataTargetX) + def targetX: lang.Float = getDataManager.get(Drone.DataTargetX) - def targetY = getDataManager.get(Drone.DataTargetY) + def targetY: lang.Float = getDataManager.get(Drone.DataTargetY) - def targetZ = getDataManager.get(Drone.DataTargetZ) + def targetZ: lang.Float = getDataManager.get(Drone.DataTargetZ) - def targetAcceleration = getDataManager.get(Drone.DataMaxAcceleration) + def targetAcceleration: lang.Float = getDataManager.get(Drone.DataMaxAcceleration) - def selectedSlot = getDataManager.get(Drone.DataSelectedSlot) & 0xFF + def selectedSlot: Int = getDataManager.get(Drone.DataSelectedSlot) & 0xFF - def globalBuffer = getDataManager.get(Drone.DataCurrentEnergy) + def globalBuffer: Integer = getDataManager.get(Drone.DataCurrentEnergy) - def globalBufferSize = getDataManager.get(Drone.DataMaxEnergy) + def globalBufferSize: Integer = getDataManager.get(Drone.DataMaxEnergy) - def statusText = getDataManager.get(Drone.DataStatusText) + def statusText: String = getDataManager.get(Drone.DataStatusText) - def inventorySize = getDataManager.get(Drone.DataInventorySize) & 0xFF + def inventorySize: Int = getDataManager.get(Drone.DataInventorySize) & 0xFF - def lightColor = getDataManager.get(Drone.DataLightColor) + def lightColor: Integer = getDataManager.get(Drone.DataLightColor) - def setRunning(value: Boolean) = getDataManager.set(Drone.DataRunning, Boolean.box(value)) + def setRunning(value: Boolean): Unit = getDataManager.set(Drone.DataRunning, Boolean.box(value)) // Round target values to low accuracy to avoid floating point errors accumulating. def targetX_=(value: Float): Unit = getDataManager.set(Drone.DataTargetX, Float.box(math.round(value * 4) / 4f)) @@ -323,17 +326,17 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D def targetAcceleration_=(value: Float): Unit = getDataManager.set(Drone.DataMaxAcceleration, Float.box(math.max(0, math.min(maxAcceleration, value)))) - def setSelectedSlot(value: Int) = getDataManager.set(Drone.DataSelectedSlot, Int.box(value.toByte)) + def setSelectedSlot(value: Int): Unit = getDataManager.set(Drone.DataSelectedSlot, Int.box(value.toByte)) - def globalBuffer_=(value: Int) = getDataManager.set(Drone.DataCurrentEnergy, Int.box(value)) + def globalBuffer_=(value: Int): Unit = getDataManager.set(Drone.DataCurrentEnergy, Int.box(value)) - def globalBufferSize_=(value: Int) = getDataManager.set(Drone.DataMaxEnergy, Int.box(value)) + def globalBufferSize_=(value: Int): Unit = getDataManager.set(Drone.DataMaxEnergy, Int.box(value)) - def statusText_=(value: String) = getDataManager.set(Drone.DataStatusText, Option(value).fold("")(_.lines.map(_.take(10)).take(2).mkString("\n"))) + def statusText_=(value: String): Unit = getDataManager.set(Drone.DataStatusText, Option(value).fold("")(_.lines.map(_.take(10)).take(2).mkString("\n"))) - def inventorySize_=(value: Int) = getDataManager.set(Drone.DataInventorySize, Int.box(value.toByte)) + def inventorySize_=(value: Int): Unit = getDataManager.set(Drone.DataInventorySize, Int.box(value.toByte)) - def lightColor_=(value: Int) = getDataManager.set(Drone.DataLightColor, Int.box(value)) + def lightColor_=(value: Int): Unit = getDataManager.set(Drone.DataLightColor, Int.box(value)) override def setPositionAndRotationDirect(x: Double, y: Double, z: Double, yaw: Float, pitch: Float, posRotationIncrements: Int, teleport: Boolean): Unit = { // Only set exact position if we're too far away from the server's @@ -458,7 +461,7 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D } } - override def hitByEntity(entity: Entity) = { + override def hitByEntity(entity: Entity): Boolean = { if (isRunning) { val direction = new Vec3d(entity.posX - posX, entity.posY + entity.getEyeHeight - posY, entity.posZ - posZ).normalize() if (!world.isRemote) { @@ -560,9 +563,9 @@ class Drone(world: World) extends Entity(world) with MachineHost with internal.D } } - override def getName = Localization.localizeImmediately("entity.oc.Drone.name") + override def getName: String = Localization.localizeImmediately("entity.oc.Drone.name") - override def handleWaterMovement() = { + override def handleWaterMovement(): Boolean = { inWater = world.handleMaterialAcceleration(getEntityBoundingBox, Material.WATER, this) inWater } diff --git a/src/main/scala/li/cil/oc/common/event/HoverBootsHandler.scala b/src/main/scala/li/cil/oc/common/event/HoverBootsHandler.scala index dcd4d7aa1..d990c8f34 100644 --- a/src/main/scala/li/cil/oc/common/event/HoverBootsHandler.scala +++ b/src/main/scala/li/cil/oc/common/event/HoverBootsHandler.scala @@ -75,5 +75,5 @@ object HoverBootsHandler { case _ => // Ignore. } - private def equippedArmor(player: EntityPlayer) = player.getArmorInventoryList.filter(_ != null) + private def equippedArmor(player: EntityPlayer) = player.getArmorInventoryList.filter(!_.isEmpty) } diff --git a/src/main/scala/li/cil/oc/common/event/RackMountableRenderHandler.scala b/src/main/scala/li/cil/oc/common/event/RackMountableRenderHandler.scala index 58de1995b..ec3e40954 100644 --- a/src/main/scala/li/cil/oc/common/event/RackMountableRenderHandler.scala +++ b/src/main/scala/li/cil/oc/common/event/RackMountableRenderHandler.scala @@ -37,7 +37,7 @@ object RackMountableRenderHandler { if (e.data.hasKey("disk")) { val stack = new ItemStack(e.data.getCompoundTag("disk")) - if (stack != null) { + if (!stack.isEmpty) { GlStateManager.pushMatrix() GlStateManager.scale(1, -1, 1) GlStateManager.translate(10 / 16f, -(3.5f + e.mountable * 3f) / 16f, -2 / 16f) diff --git a/src/main/scala/li/cil/oc/common/init/Items.scala b/src/main/scala/li/cil/oc/common/init/Items.scala index d2bfee734..6eea8972e 100644 --- a/src/main/scala/li/cil/oc/common/init/Items.scala +++ b/src/main/scala/li/cil/oc/common/init/Items.scala @@ -1,6 +1,5 @@ package li.cil.oc.common.init -import java.util import java.util.concurrent.Callable import li.cil.oc.Constants @@ -23,7 +22,6 @@ import li.cil.oc.common.item.data.TabletData import li.cil.oc.common.item.traits.Delegate import li.cil.oc.common.item.traits.SimpleItem import li.cil.oc.common.recipe.Recipes -import li.cil.oc.integration.Mods import net.minecraft.block.Block import net.minecraft.creativetab.CreativeTabs import net.minecraft.item.EnumDyeColor @@ -36,6 +34,7 @@ import net.minecraft.util.ResourceLocation import net.minecraftforge.fml.common.registry.GameRegistry import scala.collection.mutable +import scala.collection.mutable.ArrayBuffer object Items extends ItemAPI { val descriptors = mutable.Map.empty[String, ItemInfo] @@ -48,12 +47,12 @@ object Items extends ItemAPI { override def get(name: String): ItemInfo = descriptors.get(name).orNull - override def get(stack: ItemStack) = names.get(getBlockOrItem(stack)) match { + override def get(stack: ItemStack): ItemInfo = names.get(getBlockOrItem(stack)) match { case Some(name) => get(name) case _ => null } - def registerBlock[T <: Block](instance: T, id: String) = { + def registerBlock[T <: Block](instance: T, id: String): T = { if (!descriptors.contains(id)) { instance match { case simple: SimpleBlock => @@ -70,13 +69,13 @@ object Items extends ItemAPI { case _ => } descriptors += id -> new ItemInfo { - override def name = id + override def name: String = id - override def block = instance + override def block: T = instance override def item = null - override def createItemStack(size: Int) = instance match { + override def createItemStack(size: Int): ItemStack = instance match { case simple: SimpleBlock => simple.createItemStack(size) case _ => new ItemStack(instance, size) } @@ -86,24 +85,24 @@ object Items extends ItemAPI { instance } - def registerItem[T <: Delegate](delegate: T, id: String) = { + def registerItem[T <: Delegate](delegate: T, id: String): T = { if (!descriptors.contains(id)) { OpenComputers.proxy.registerModel(delegate, id) descriptors += id -> new ItemInfo { - override def name = id + override def name: String = id override def block = null - override def item = delegate.parent + override def item: Delegator = delegate.parent - override def createItemStack(size: Int) = delegate.createItemStack(size) + override def createItemStack(size: Int): ItemStack = delegate.createItemStack(size) } names += delegate -> id } delegate } - def registerItem(instance: Item, id: String) = { + def registerItem(instance: Item, id: String): Item = { if (!descriptors.contains(id)) { instance match { case simple: SimpleItem => @@ -113,13 +112,13 @@ object Items extends ItemAPI { case _ => } descriptors += id -> new ItemInfo { - override def name = id + override def name: String = id override def block = null - override def item = instance + override def item: Item = instance - override def createItemStack(size: Int) = instance match { + override def createItemStack(size: Int): ItemStack = instance match { case simple: SimpleItem => simple.createItemStack(size) case _ => new ItemStack(instance, size) } @@ -129,10 +128,10 @@ object Items extends ItemAPI { instance } - def registerStack(stack: ItemStack, id: String) = { + def registerStack(stack: ItemStack, id: String): ItemStack = { val immutableStack = stack.copy() descriptors += id -> new ItemInfo { - override def name = id + override def name: String = id override def block = null @@ -142,13 +141,13 @@ object Items extends ItemAPI { copy } - override def item = immutableStack.getItem + override def item: Item = immutableStack.getItem } stack } private def getBlockOrItem(stack: ItemStack): Any = - if (stack == null) null + if (stack.isEmpty) null else Delegator.subItem(stack).getOrElse(stack.getItem match { case block: ItemBlock => block.getBlock case item => item @@ -156,7 +155,7 @@ object Items extends ItemAPI { // ----------------------------------------------------------------------- // - val registeredItems = mutable.ArrayBuffer.empty[ItemStack] + val registeredItems: ArrayBuffer[ItemStack] = mutable.ArrayBuffer.empty[ItemStack] @Deprecated override def registerFloppy(name: String, color: EnumDyeColor, factory: Callable[FileSystem]): ItemStack = @@ -198,7 +197,7 @@ object Items extends ItemAPI { private def safeGetStack(name: String) = Option(get(name)).map(_.createItemStack(1)).orNull - def createConfiguredDrone() = { + def createConfiguredDrone(): ItemStack = { val data = new DroneData() data.name = "Crecopter" @@ -222,7 +221,7 @@ object Items extends ItemAPI { data.createItemStack() } - def createConfiguredMicrocontroller() = { + def createConfiguredMicrocontroller(): ItemStack = { val data = new MicrocontrollerData() data.tier = Tier.Four @@ -242,7 +241,7 @@ object Items extends ItemAPI { data.createItemStack() } - def createConfiguredRobot() = { + def createConfiguredRobot(): ItemStack = { val data = new RobotData() data.name = "Creatix" @@ -283,39 +282,39 @@ object Items extends ItemAPI { data.createItemStack() } - def createConfiguredTablet() = { + def createConfiguredTablet(): ItemStack = { val data = new TabletData() data.tier = Tier.Four data.energy = Settings.get.bufferTablet data.maxEnergy = data.energy data.items = Array( - Option(safeGetStack(Constants.BlockName.ScreenTier1)), - Option(safeGetStack(Constants.BlockName.Keyboard)), + safeGetStack(Constants.BlockName.ScreenTier1), + safeGetStack(Constants.BlockName.Keyboard), - Option(safeGetStack(Constants.ItemName.SignUpgrade)), - Option(safeGetStack(Constants.ItemName.PistonUpgrade)), - Option(safeGetStack(Constants.BlockName.Geolyzer)), - Option(safeGetStack(Constants.ItemName.NavigationUpgrade)), + safeGetStack(Constants.ItemName.SignUpgrade), + safeGetStack(Constants.ItemName.PistonUpgrade), + safeGetStack(Constants.BlockName.Geolyzer), + safeGetStack(Constants.ItemName.NavigationUpgrade), - Option(safeGetStack(Constants.ItemName.GraphicsCardTier2)), - Option(safeGetStack(Constants.ItemName.RedstoneCardTier2)), - Option(safeGetStack(Constants.ItemName.WirelessNetworkCard)), + safeGetStack(Constants.ItemName.GraphicsCardTier2), + safeGetStack(Constants.ItemName.RedstoneCardTier2), + safeGetStack(Constants.ItemName.WirelessNetworkCard), - Option(safeGetStack(Constants.ItemName.CPUTier3)), - Option(safeGetStack(Constants.ItemName.RAMTier6)), - Option(safeGetStack(Constants.ItemName.RAMTier6)), + safeGetStack(Constants.ItemName.CPUTier3), + safeGetStack(Constants.ItemName.RAMTier6), + safeGetStack(Constants.ItemName.RAMTier6), - Option(safeGetStack(Constants.ItemName.LuaBios)), - Option(safeGetStack(Constants.ItemName.HDDTier3)) - ).padTo(32, None) - data.items(31) = Option(safeGetStack(Constants.ItemName.OpenOS)) - data.container = Option(safeGetStack(Constants.BlockName.DiskDrive)) + safeGetStack(Constants.ItemName.LuaBios), + safeGetStack(Constants.ItemName.HDDTier3) + ).padTo(32, ItemStack.EMPTY) + data.items(31) = safeGetStack(Constants.ItemName.OpenOS) + data.container = safeGetStack(Constants.BlockName.DiskDrive) data.createItemStack() } - def createChargedHoverBoots() = { + def createChargedHoverBoots(): ItemStack = { val data = new HoverBootsData() data.charge = Settings.get.bufferHoverBoots diff --git a/src/main/scala/li/cil/oc/common/inventory/ComponentInventory.scala b/src/main/scala/li/cil/oc/common/inventory/ComponentInventory.scala index c1107abd5..aa0b84227 100644 --- a/src/main/scala/li/cil/oc/common/inventory/ComponentInventory.scala +++ b/src/main/scala/li/cil/oc/common/inventory/ComponentInventory.scala @@ -46,7 +46,7 @@ trait ComponentInventory extends Inventory with network.Environment { def connectComponents() { for (slot <- 0 until getSizeInventory if slot >= 0 && slot < components.length) { val stack = getStackInSlot(slot) - if (stack != null && components(slot).isEmpty && isComponentSlot(slot, stack)) { + if (!stack.isEmpty && components(slot).isEmpty && isComponentSlot(slot, stack)) { components(slot) = Option(Driver.driverFor(stack)) match { case Some(driver) => Option(driver.createEnvironment(stack, host)) match { @@ -98,7 +98,7 @@ trait ComponentInventory extends Inventory with network.Environment { def saveComponents() { for (slot <- 0 until getSizeInventory) { val stack = getStackInSlot(slot) - if (stack != null) { + if (!stack.isEmpty) { components(slot) match { case Some(component) => // We're guaranteed to have a driver for entries. diff --git a/src/main/scala/li/cil/oc/common/inventory/Inventory.scala b/src/main/scala/li/cil/oc/common/inventory/Inventory.scala index 64a9bb7db..6f6cd2f97 100644 --- a/src/main/scala/li/cil/oc/common/inventory/Inventory.scala +++ b/src/main/scala/li/cil/oc/common/inventory/Inventory.scala @@ -7,50 +7,50 @@ import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.common.util.Constants.NBT trait Inventory extends SimpleInventory { - def items: Array[Option[ItemStack]] + def items: Array[ItemStack] - def updateItems(slot: Int, stack: ItemStack) = items(slot) = Option(stack) + def updateItems(slot: Int, stack: ItemStack): Unit = items(slot) = stack // ----------------------------------------------------------------------- // - override def getStackInSlot(slot: Int) = - if (slot >= 0 && slot < getSizeInventory) items(slot).orNull - else null + override def getStackInSlot(slot: Int): ItemStack = + if (slot >= 0 && slot < getSizeInventory) items(slot) + else ItemStack.EMPTY override def setInventorySlotContents(slot: Int, stack: ItemStack): Unit = { if (slot >= 0 && slot < getSizeInventory) { - if (stack == null && items(slot).isEmpty) { + if (stack.isEmpty && items(slot).isEmpty) { return } - if (items(slot).contains(stack)) { + if (items(slot) == stack) { return } val oldStack = items(slot) - updateItems(slot, null) - if (oldStack.isDefined) { - onItemRemoved(slot, oldStack.get) + updateItems(slot, ItemStack.EMPTY) + if (!oldStack.isEmpty) { + onItemRemoved(slot, oldStack) } - if (stack != null && stack.getCount >= getInventoryStackRequired) { + if (!stack.isEmpty && stack.getCount >= getInventoryStackRequired) { if (stack.getCount > getInventoryStackLimit) { stack.setCount(getInventoryStackLimit) } updateItems(slot, stack) } - if (items(slot).isDefined) { - onItemAdded(slot, items(slot).get) + if (!items(slot).isEmpty) { + onItemAdded(slot, items(slot)) } markDirty() } } - override def getName = Settings.namespace + "container." + inventoryName + override def getName: String = Settings.namespace + "container." + inventoryName - protected def inventoryName = getClass.getSimpleName + protected def inventoryName: String = getClass.getSimpleName - override def isEmpty: Boolean = items.isEmpty || items.flatten.isEmpty + override def isEmpty: Boolean = items.forall(_.isEmpty) // ----------------------------------------------------------------------- // @@ -59,9 +59,6 @@ trait Inventory extends SimpleInventory { private final val ItemTag = "item" def load(nbt: NBTTagCompound) { - // Implicit slot numbers are compatibility code for loading old server save format. - // TODO 1.7 remove compat code. - var count = 0 nbt.getTagList(ItemsTag, NBT.TAG_COMPOUND).foreach((tag: NBTTagCompound) => { if (tag.hasKey(SlotTag)) { val slot = tag.getByte(SlotTag) @@ -69,20 +66,13 @@ trait Inventory extends SimpleInventory { updateItems(slot, new ItemStack(tag.getCompoundTag(ItemTag))) } } - else { - val slot = count - if (slot >= 0 && slot < items.length) { - updateItems(slot, new ItemStack(tag)) - } - } - count += 1 }) } def save(nbt: NBTTagCompound) { nbt.setNewTagList(ItemsTag, items.zipWithIndex collect { - case (Some(stack), slot) => (stack, slot) + case (stack, slot) if !stack.isEmpty => (stack, slot) } map { case (stack, slot) => val slotNbt = new NBTTagCompound() diff --git a/src/main/scala/li/cil/oc/common/inventory/InventoryProxy.scala b/src/main/scala/li/cil/oc/common/inventory/InventoryProxy.scala index d3a2af313..020f62ec5 100644 --- a/src/main/scala/li/cil/oc/common/inventory/InventoryProxy.scala +++ b/src/main/scala/li/cil/oc/common/inventory/InventoryProxy.scala @@ -3,6 +3,7 @@ package li.cil.oc.common.inventory import net.minecraft.entity.player.EntityPlayer import net.minecraft.inventory.IInventory import net.minecraft.item.ItemStack +import net.minecraft.util.text.ITextComponent trait InventoryProxy extends IInventory { def inventory: IInventory @@ -11,59 +12,59 @@ trait InventoryProxy extends IInventory { override def isEmpty: Boolean = inventory.isEmpty - override def getSizeInventory = inventory.getSizeInventory + override def getSizeInventory: Int = inventory.getSizeInventory - override def getInventoryStackLimit = inventory.getInventoryStackLimit + override def getInventoryStackLimit: Int = inventory.getInventoryStackLimit - override def getName = inventory.getName + override def getName: String = inventory.getName - override def getDisplayName = inventory.getDisplayName + override def getDisplayName: ITextComponent = inventory.getDisplayName - override def hasCustomName = inventory.hasCustomName + override def hasCustomName: Boolean = inventory.hasCustomName - override def isUsableByPlayer(player: EntityPlayer) = inventory.isUsableByPlayer(player) + override def isUsableByPlayer(player: EntityPlayer): Boolean = inventory.isUsableByPlayer(player) - override def isItemValidForSlot(slot: Int, stack: ItemStack) = { + override def isItemValidForSlot(slot: Int, stack: ItemStack): Boolean = { val offsetSlot = slot + offset isValidSlot(offsetSlot) && inventory.isItemValidForSlot(offsetSlot, stack) } - override def getStackInSlot(slot: Int) = { + override def getStackInSlot(slot: Int): ItemStack = { val offsetSlot = slot + offset if (isValidSlot(offsetSlot)) inventory.getStackInSlot(offsetSlot) - else null + else ItemStack.EMPTY } - override def decrStackSize(slot: Int, amount: Int) = { + override def decrStackSize(slot: Int, amount: Int): ItemStack = { val offsetSlot = slot + offset if (isValidSlot(offsetSlot)) inventory.decrStackSize(offsetSlot, amount) - else null + else ItemStack.EMPTY } - override def removeStackFromSlot(slot: Int) = { + override def removeStackFromSlot(slot: Int): ItemStack = { val offsetSlot = slot + offset if (isValidSlot(offsetSlot)) inventory.removeStackFromSlot(offsetSlot) - else null + else ItemStack.EMPTY } - override def setInventorySlotContents(slot: Int, stack: ItemStack) = { + override def setInventorySlotContents(slot: Int, stack: ItemStack): Unit = { val offsetSlot = slot + offset if (isValidSlot(offsetSlot)) inventory.setInventorySlotContents(offsetSlot, stack) } - override def markDirty() = inventory.markDirty() + override def markDirty(): Unit = inventory.markDirty() - override def openInventory(player: EntityPlayer) = inventory.openInventory(player) + override def openInventory(player: EntityPlayer): Unit = inventory.openInventory(player) - override def closeInventory(player: EntityPlayer) = inventory.closeInventory(player) + override def closeInventory(player: EntityPlayer): Unit = inventory.closeInventory(player) - override def setField(id: Int, value: Int) = inventory.setField(id, value) + override def setField(id: Int, value: Int): Unit = inventory.setField(id, value) - override def clear() = inventory.clear() + override def clear(): Unit = inventory.clear() - override def getFieldCount = inventory.getFieldCount + override def getFieldCount: Int = inventory.getFieldCount - override def getField(id: Int) = inventory.getField(id) + override def getField(id: Int): Int = inventory.getField(id) private def isValidSlot(slot: Int) = slot >= offset && slot < getSizeInventory + offset } diff --git a/src/main/scala/li/cil/oc/common/inventory/ItemStackInventory.scala b/src/main/scala/li/cil/oc/common/inventory/ItemStackInventory.scala index 891840b13..626afc3f1 100644 --- a/src/main/scala/li/cil/oc/common/inventory/ItemStackInventory.scala +++ b/src/main/scala/li/cil/oc/common/inventory/ItemStackInventory.scala @@ -7,19 +7,19 @@ trait ItemStackInventory extends Inventory { // The item stack that provides the inventory. def container: ItemStack - private lazy val inventory = Array.fill[Option[ItemStack]](getSizeInventory)(None) + private lazy val inventory = Array.fill[ItemStack](getSizeInventory)(ItemStack.EMPTY) override def items = inventory // Initialize the list automatically if we have a container. - if (container != null) { + if (!container.isEmpty) { reinitialize() } // Load items from tag. def reinitialize() { for (i <- items.indices) { - updateItems(i, null) + updateItems(i, ItemStack.EMPTY) } if (!container.hasTagCompound) { container.setTagCompound(new NBTTagCompound()) diff --git a/src/main/scala/li/cil/oc/common/inventory/SimpleInventory.scala b/src/main/scala/li/cil/oc/common/inventory/SimpleInventory.scala index 782d9b50d..34113b728 100644 --- a/src/main/scala/li/cil/oc/common/inventory/SimpleInventory.scala +++ b/src/main/scala/li/cil/oc/common/inventory/SimpleInventory.scala @@ -24,33 +24,33 @@ trait SimpleInventory extends IInventory { if (slot >= 0 && slot < getSizeInventory) { (getStackInSlot(slot) match { case stack: ItemStack if stack.getCount - amount < getInventoryStackRequired => - setInventorySlotContents(slot, null) + setInventorySlotContents(slot, ItemStack.EMPTY) stack case stack: ItemStack => val result = stack.splitStack(amount) markDirty() result - case _ => null + case _ => ItemStack.EMPTY }) match { case stack: ItemStack if stack.getCount > 0 => stack - case _ => null + case _ => ItemStack.EMPTY } } - else null + else ItemStack.EMPTY } override def removeStackFromSlot(slot: Int) = { if (slot >= 0 && slot < getSizeInventory) { val stack = getStackInSlot(slot) - setInventorySlotContents(slot, null) + setInventorySlotContents(slot, ItemStack.EMPTY) stack } - else null + else ItemStack.EMPTY } override def clear(): Unit = { for (slot <- 0 until getSizeInventory) { - setInventorySlotContents(slot, null) + setInventorySlotContents(slot, ItemStack.EMPTY) } } diff --git a/src/main/scala/li/cil/oc/common/item/Acid.scala b/src/main/scala/li/cil/oc/common/item/Acid.scala index 47adbcc8a..0ba9912f2 100644 --- a/src/main/scala/li/cil/oc/common/item/Acid.scala +++ b/src/main/scala/li/cil/oc/common/item/Acid.scala @@ -39,7 +39,7 @@ class Acid(val parent: Delegator) extends traits.Delegate { } stack.shrink(1) if (stack.getCount > 0) stack - else null + else ItemStack.EMPTY case _ => stack } } diff --git a/src/main/scala/li/cil/oc/common/item/Chamelium.scala b/src/main/scala/li/cil/oc/common/item/Chamelium.scala index 6f09583c1..7486f2fac 100644 --- a/src/main/scala/li/cil/oc/common/item/Chamelium.scala +++ b/src/main/scala/li/cil/oc/common/item/Chamelium.scala @@ -31,6 +31,6 @@ class Chamelium(val parent: Delegator) extends traits.Delegate { } stack.shrink(1) if (stack.getCount > 0) stack - else null + else ItemStack.EMPTY } } diff --git a/src/main/scala/li/cil/oc/common/item/Delegator.scala b/src/main/scala/li/cil/oc/common/item/Delegator.scala index d169e9ac3..f905be2ad 100644 --- a/src/main/scala/li/cil/oc/common/item/Delegator.scala +++ b/src/main/scala/li/cil/oc/common/item/Delegator.scala @@ -33,7 +33,7 @@ import scala.collection.mutable object Delegator { def subItem(stack: ItemStack) = - if (stack != null) stack.getItem match { + if (!stack.isEmpty) stack.getItem match { case delegator: Delegator => delegator.subItem(stack.getItemDamage) case _ => None } diff --git a/src/main/scala/li/cil/oc/common/item/Nanomachines.scala b/src/main/scala/li/cil/oc/common/item/Nanomachines.scala index ee5a98ce5..d45ab8b4b 100644 --- a/src/main/scala/li/cil/oc/common/item/Nanomachines.scala +++ b/src/main/scala/li/cil/oc/common/item/Nanomachines.scala @@ -64,7 +64,7 @@ class Nanomachines(val parent: Delegator) extends traits.Delegate { } stack.shrink(1) if (stack.getCount > 0) stack - else null + else ItemStack.EMPTY case _ => stack } } diff --git a/src/main/scala/li/cil/oc/common/item/Present.scala b/src/main/scala/li/cil/oc/common/item/Present.scala index f72d1cfa3..fd333ea59 100644 --- a/src/main/scala/li/cil/oc/common/item/Present.scala +++ b/src/main/scala/li/cil/oc/common/item/Present.scala @@ -133,5 +133,5 @@ object Present { private val rng = new Random() - def nextPresent() = Presents(rng.nextInt(Presents.length)).copy() + def nextPresent(): ItemStack = Presents(rng.nextInt(Presents.length)).copy() } diff --git a/src/main/scala/li/cil/oc/common/item/Server.scala b/src/main/scala/li/cil/oc/common/item/Server.scala index 151e1a0b5..fb6e20ecd 100644 --- a/src/main/scala/li/cil/oc/common/item/Server.scala +++ b/src/main/scala/li/cil/oc/common/item/Server.scala @@ -9,6 +9,7 @@ import li.cil.oc.common.inventory.ServerInventory import li.cil.oc.util.Rarity import li.cil.oc.util.Tooltip import net.minecraft.entity.player.EntityPlayer +import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.util.ActionResult import net.minecraft.util.EnumActionResult @@ -18,16 +19,16 @@ import net.minecraft.world.World import scala.collection.mutable class Server(val parent: Delegator, val tier: Int) extends traits.Delegate { - override val unlocalizedName = super.unlocalizedName + tier + override val unlocalizedName: String = super.unlocalizedName + tier override protected def tooltipName = Option(super.unlocalizedName) - override def rarity(stack: ItemStack) = Rarity.byTier(tier) + override def rarity(stack: ItemStack): EnumRarity = Rarity.byTier(tier) override def maxStackSize = 1 private object HelperInventory extends ServerInventory { - var container: ItemStack = null + var container = ItemStack.EMPTY } override protected def tooltipExtended(stack: ItemStack, tooltip: util.List[String]) { @@ -35,15 +36,15 @@ class Server(val parent: Delegator, val tier: Int) extends traits.Delegate { if (KeyBindings.showExtendedTooltips) { HelperInventory.container = stack HelperInventory.reinitialize() - val items = mutable.Map.empty[String, Int] - for (item <- (0 until HelperInventory.getSizeInventory).map(HelperInventory.getStackInSlot) if item != null) { - val itemName = item.getDisplayName - items += itemName -> (if (items.contains(itemName)) items(itemName) + 1 else 1) + val stacks = mutable.Map.empty[String, Int] + for (aStack <- (0 until HelperInventory.getSizeInventory).map(HelperInventory.getStackInSlot) if !aStack.isEmpty) { + val displayName = aStack.getDisplayName + stacks += displayName -> (if (stacks.contains(displayName)) stacks(displayName) + 1 else 1) } - if (items.nonEmpty) { + if (stacks.nonEmpty) { tooltip.addAll(Tooltip.get("Server.Components")) - for (itemName <- items.keys.toArray.sorted) { - tooltip.add("- " + items(itemName) + "x " + itemName) + for (itemName <- stacks.keys.toArray.sorted) { + tooltip.add("- " + stacks(itemName) + "x " + itemName) } } } diff --git a/src/main/scala/li/cil/oc/common/item/Tablet.scala b/src/main/scala/li/cil/oc/common/item/Tablet.scala index afe0e5c33..5f7bcb9b3 100644 --- a/src/main/scala/li/cil/oc/common/item/Tablet.scala +++ b/src/main/scala/li/cil/oc/common/item/Tablet.scala @@ -6,9 +6,11 @@ import java.util.UUID import java.util.concurrent.Callable import java.util.concurrent.TimeUnit +import com.google.common.cache import com.google.common.cache.CacheBuilder import com.google.common.cache.RemovalListener import com.google.common.cache.RemovalNotification +import com.google.common.collect.ImmutableMap import li.cil.oc.Constants import li.cil.oc.Localization import li.cil.oc.OpenComputers @@ -19,6 +21,7 @@ import li.cil.oc.api.Machine import li.cil.oc.api.driver.item.Chargeable import li.cil.oc.api.driver.item.Container import li.cil.oc.api.internal +import li.cil.oc.api.machine import li.cil.oc.api.machine.MachineHost import li.cil.oc.api.network.Connector import li.cil.oc.api.network.Message @@ -43,6 +46,7 @@ import net.minecraft.client.renderer.block.model.ModelResourceLocation import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer +import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraft.server.integrated.IntegratedServer @@ -77,20 +81,20 @@ class Tablet(val parent: Delegator) extends traits.Delegate with CustomModel wit if (components.length > 1) { tooltip.addAll(Tooltip.get("Server.Components")) components.collect { - case Some(component) => tooltip.add("- " + component.getDisplayName) + case component if !component.isEmpty => tooltip.add("- " + component.getDisplayName) } } } } - override def rarity(stack: ItemStack) = { + override def rarity(stack: ItemStack): EnumRarity = { val data = new TabletData(stack) Rarity.byTier(data.tier) } override def showDurabilityBar(stack: ItemStack) = true - override def durability(stack: ItemStack) = { + override def durability(stack: ItemStack): Double = { if (stack.hasTagCompound) { val data = new TabletData() data.load(stack.getTagCompound) @@ -143,7 +147,7 @@ class Tablet(val parent: Delegator) extends traits.Delegate with CustomModel wit // ----------------------------------------------------------------------- // - override def update(stack: ItemStack, world: World, entity: Entity, slot: Int, selected: Boolean) = + override def update(stack: ItemStack, world: World, entity: Entity, slot: Int, selected: Boolean): Unit = entity match { case player: EntityPlayer => // Play an audio cue to let players know when they finished analyzing a block. @@ -229,13 +233,13 @@ class TabletWrapper(var stack: ItemStack, var player: EntityPlayer) extends Comp // Remember our *original* world, so we know which tablets to clear on dimension // changes of players holding tablets - since the player entity instance may be // kept the same and components are not required to properly handle world changes. - val world = player.world + val world: World = player.world - lazy val machine = if (world.isRemote) null else Machine.create(this) + lazy val machine: api.machine.Machine = if (world.isRemote) null else Machine.create(this) val data = new TabletData() - val tablet = if (world.isRemote) null else new component.Tablet(this) + val tablet: component.Tablet = if (world.isRemote) null else new component.Tablet(this) var autoSave = true @@ -243,16 +247,16 @@ class TabletWrapper(var stack: ItemStack, var player: EntityPlayer) extends Comp private var lastRunning = false - def isCreative = data.tier == Tier.Four + def isCreative: Boolean = data.tier == Tier.Four - def items = data.items + def items: Array[ItemStack] = data.items - override def facing = RotationHelper.fromYaw(player.rotationYaw) + override def facing: EnumFacing = RotationHelper.fromYaw(player.rotationYaw) - override def toLocal(value: EnumFacing) = + override def toLocal(value: EnumFacing): EnumFacing = RotationHelper.toLocal(EnumFacing.NORTH, facing, value) - override def toGlobal(value: EnumFacing) = + override def toGlobal(value: EnumFacing): EnumFacing = RotationHelper.toGlobal(EnumFacing.NORTH, facing, value) def readFromNBT() { @@ -332,11 +336,11 @@ class TabletWrapper(var stack: ItemStack, var player: EntityPlayer) extends Comp override def onMessage(message: Message) {} - override def host = this + override def host: TabletWrapper = this - override def getSizeInventory = items.length + override def getSizeInventory: Int = items.length - override def isItemValidForSlot(slot: Int, stack: ItemStack) = slot == getSizeInventory - 1 && (Option(Driver.driverFor(stack, getClass)) match { + override def isItemValidForSlot(slot: Int, stack: ItemStack): Boolean = slot == getSizeInventory - 1 && (Option(Driver.driverFor(stack, getClass)) match { case Some(driver) => // Same special cases, similar as in robot, but allow keyboards, // because clip-on keyboards kinda seem to make sense, I guess. @@ -346,7 +350,7 @@ class TabletWrapper(var stack: ItemStack, var player: EntityPlayer) extends Comp case _ => false }) - override def isUsableByPlayer(player: EntityPlayer) = machine != null && machine.canInteract(player.getName) + override def isUsableByPlayer(player: EntityPlayer): Boolean = machine != null && machine.canInteract(player.getName) override def markDirty(): Unit = { data.save(stack) @@ -355,41 +359,43 @@ class TabletWrapper(var stack: ItemStack, var player: EntityPlayer) extends Comp // ----------------------------------------------------------------------- // - override def xPosition = player.posX + override def xPosition: Double = player.posX - override def yPosition = player.posY + player.getEyeHeight + override def yPosition: Double = player.posY + player.getEyeHeight - override def zPosition = player.posZ + override def zPosition: Double = player.posZ override def markChanged() {} // ----------------------------------------------------------------------- // - def containerSlotType = data.container.fold(Slot.None)(stack => - Option(Driver.driverFor(stack, getClass)) match { + def containerSlotType: String = + if (data.container.isEmpty) Slot.None + else Option(Driver.driverFor(data.container, getClass)) match { case Some(driver: Container) => driver.providedSlot(stack) case _ => Slot.None - }) + } - def containerSlotTier = data.container.fold(Tier.None)(stack => - Option(Driver.driverFor(stack, getClass)) match { + def containerSlotTier: Int = + if (data.container.isEmpty) Tier.None + else Option(Driver.driverFor(stack, getClass)) match { case Some(driver: Container) => driver.providedTier(stack) case _ => Tier.None - }) + } override def internalComponents(): Iterable[ItemStack] = (0 until getSizeInventory).collect { - case slot if getStackInSlot(slot) != null && isComponentSlot(slot, getStackInSlot(slot)) => getStackInSlot(slot) + case slot if !getStackInSlot(slot).isEmpty && isComponentSlot(slot, getStackInSlot(slot)) => getStackInSlot(slot) } - override def componentSlot(address: String) = components.indexWhere(_.exists(env => env.node != null && env.node.address == address)) + override def componentSlot(address: String): Int = components.indexWhere(_.exists(env => env.node != null && env.node.address == address)) - override def onMachineConnect(node: Node) = onConnect(node) + override def onMachineConnect(node: Node): Unit = onConnect(node) - override def onMachineDisconnect(node: Node) = onDisconnect(node) + override def onMachineDisconnect(node: Node): Unit = onDisconnect(node) // ----------------------------------------------------------------------- // - override def node = Option(machine).fold(null: Node)(_.node) + override def node: Node = Option(machine).fold(null: Node)(_.node) // ----------------------------------------------------------------------- // @@ -442,7 +448,7 @@ object Tablet { // with storing context information for analyzing a block in the singleton. var currentlyAnalyzing: Option[(BlockPosition, EnumFacing, Float, Float, Float)] = None - def getId(stack: ItemStack) = { + def getId(stack: ItemStack): String = { if (!stack.hasTagCompound) { stack.setTagCompound(new NBTTagCompound()) @@ -453,7 +459,7 @@ object Tablet { stack.getTagCompound.getString(Settings.namespace + "tablet") } - def get(stack: ItemStack, holder: EntityPlayer) = { + def get(stack: ItemStack, holder: EntityPlayer): TabletWrapper = { if (holder.world.isRemote) Client.get(stack, holder) else Server.get(stack, holder) } @@ -488,7 +494,7 @@ object Tablet { } abstract class Cache extends Callable[TabletWrapper] with RemovalListener[String, TabletWrapper] { - val cache = com.google.common.cache.CacheBuilder.newBuilder(). + val cache: com.google.common.cache.Cache[String, TabletWrapper] = com.google.common.cache.CacheBuilder.newBuilder(). expireAfterAccess(timeout, TimeUnit.SECONDS). removalListener(this). asInstanceOf[CacheBuilder[String, TabletWrapper]]. @@ -501,7 +507,7 @@ object Tablet { private var currentHolder: EntityPlayer = _ - def get(stack: ItemStack, holder: EntityPlayer) = { + def get(stack: ItemStack, holder: EntityPlayer): TabletWrapper = { val id = getId(stack) cache.synchronized { currentStack = stack @@ -524,7 +530,7 @@ object Tablet { } } - def call = { + def call: TabletWrapper = { new TabletWrapper(currentStack, currentHolder) } @@ -553,7 +559,7 @@ object Tablet { cache.synchronized(cache.cleanUp()) } - def keepAlive() = { + def keepAlive(): ImmutableMap[String, TabletWrapper] = { // Just touching to update last access time. cache.getAllPresent(asJavaIterable(cache.asMap.keys)) } @@ -562,7 +568,7 @@ object Tablet { object Client extends Cache { override protected def timeout = 5 - def get(stack: ItemStack) = { + def get(stack: ItemStack): Option[TabletWrapper] = { if (stack.hasTagCompound && stack.getTagCompound.hasKey(Settings.namespace + "tablet")) { val id = stack.getTagCompound.getString(Settings.namespace + "tablet") cache.synchronized(Option(cache.getIfPresent(id))) diff --git a/src/main/scala/li/cil/oc/common/item/data/ItemData.scala b/src/main/scala/li/cil/oc/common/item/data/ItemData.scala index 18bff6614..4fa2a58f5 100644 --- a/src/main/scala/li/cil/oc/common/item/data/ItemData.scala +++ b/src/main/scala/li/cil/oc/common/item/data/ItemData.scala @@ -22,7 +22,7 @@ abstract class ItemData(val itemName: String) extends Persistable { } def createItemStack() = { - if (itemName == null) null + if (itemName == null) ItemStack.EMPTY else { val stack = api.Items.get(itemName).createItemStack(1) save(stack) diff --git a/src/main/scala/li/cil/oc/common/item/data/MicrocontrollerData.scala b/src/main/scala/li/cil/oc/common/item/data/MicrocontrollerData.scala index 8607df66d..9d1f47036 100644 --- a/src/main/scala/li/cil/oc/common/item/data/MicrocontrollerData.scala +++ b/src/main/scala/li/cil/oc/common/item/data/MicrocontrollerData.scala @@ -17,7 +17,7 @@ class MicrocontrollerData(itemName: String = Constants.BlockName.Microcontroller var tier = Tier.One - var components = Array[ItemStack](null) + var components: Array[ItemStack] = Array[ItemStack](ItemStack.EMPTY) var storedEnergy = 0 @@ -28,23 +28,23 @@ class MicrocontrollerData(itemName: String = Constants.BlockName.Microcontroller override def load(nbt: NBTTagCompound) { tier = nbt.getByte(TierTag) components = nbt.getTagList(ComponentsTag, NBT.TAG_COMPOUND). - toArray[NBTTagCompound].map(new ItemStack(_)).filter(_ != null) + toArray[NBTTagCompound].map(new ItemStack(_)).filter(!_.isEmpty) storedEnergy = nbt.getInteger(StoredEnergyTag) // Reserve slot for EEPROM if necessary, avoids having to resize the // components array in the MCU tile entity, which isn't possible currently. if (!components.exists(stack => api.Items.get(stack) == api.Items.get(Constants.ItemName.EEPROM))) { - components :+= null + components :+= ItemStack.EMPTY } } override def save(nbt: NBTTagCompound) { nbt.setByte(TierTag, tier.toByte) - nbt.setNewTagList(ComponentsTag, components.filter(_ != null).toIterable) + nbt.setNewTagList(ComponentsTag, components.filter(!_.isEmpty).toIterable) nbt.setInteger(StoredEnergyTag, storedEnergy) } - def copyItemStack() = { + def copyItemStack(): ItemStack = { val stack = createItemStack() val newInfo = new MicrocontrollerData(stack) newInfo.save(stack) diff --git a/src/main/scala/li/cil/oc/common/item/data/TabletData.scala b/src/main/scala/li/cil/oc/common/item/data/TabletData.scala index 96087603f..7830d0a43 100644 --- a/src/main/scala/li/cil/oc/common/item/data/TabletData.scala +++ b/src/main/scala/li/cil/oc/common/item/data/TabletData.scala @@ -14,12 +14,12 @@ class TabletData extends ItemData(Constants.ItemName.Tablet) { load(stack) } - var items = Array.fill[Option[ItemStack]](32)(None) + var items = Array.fill[ItemStack](32)(ItemStack.EMPTY) var isRunning = false var energy = 0.0 var maxEnergy = 0.0 var tier = Tier.One - var container: Option[ItemStack] = None + var container = ItemStack.EMPTY private final val ItemsTag = Settings.namespace + "items" private final val SlotTag = "slot" @@ -34,7 +34,7 @@ class TabletData extends ItemData(Constants.ItemName.Tablet) { nbt.getTagList(ItemsTag, NBT.TAG_COMPOUND).foreach((slotNbt: NBTTagCompound) => { val slot = slotNbt.getByte(SlotTag) if (slot >= 0 && slot < items.length) { - items(slot) = Option(new ItemStack(slotNbt.getCompoundTag(ItemTag))) + items(slot) = new ItemStack(slotNbt.getCompoundTag(ItemTag)) } }) isRunning = nbt.getBoolean(IsRunningTag) @@ -42,14 +42,14 @@ class TabletData extends ItemData(Constants.ItemName.Tablet) { maxEnergy = nbt.getDouble(MaxEnergyTag) tier = nbt.getInteger(TierTag) if (nbt.hasKey(ContainerTag)) { - container = Option(new ItemStack(nbt.getCompoundTag(ContainerTag))) + container = new ItemStack(nbt.getCompoundTag(ContainerTag)) } } override def save(nbt: NBTTagCompound) { nbt.setNewTagList(ItemsTag, items.zipWithIndex collect { - case (Some(stack), slot) => (stack, slot) + case (stack, slot) if !stack.isEmpty => (stack, slot) } map { case (stack, slot) => val slotNbt = new NBTTagCompound() @@ -60,6 +60,6 @@ class TabletData extends ItemData(Constants.ItemName.Tablet) { nbt.setDouble(EnergyTag, energy) nbt.setDouble(MaxEnergyTag, maxEnergy) nbt.setInteger(TierTag, tier) - container.foreach(stack => nbt.setNewCompoundTag(ContainerTag, stack.writeToNBT)) + if (!container.isEmpty) nbt.setNewCompoundTag(ContainerTag, container.writeToNBT) } } diff --git a/src/main/scala/li/cil/oc/common/item/traits/Delegate.scala b/src/main/scala/li/cil/oc/common/item/traits/Delegate.scala index ca96b6ea7..4eac02a82 100644 --- a/src/main/scala/li/cil/oc/common/item/traits/Delegate.scala +++ b/src/main/scala/li/cil/oc/common/item/traits/Delegate.scala @@ -1,7 +1,6 @@ package li.cil.oc.common.item.traits import java.util -import javax.annotation.Nonnull import li.cil.oc.Localization import li.cil.oc.Settings @@ -16,6 +15,7 @@ import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.EnumAction +import net.minecraft.item.EnumRarity import net.minecraft.item.ItemStack import net.minecraft.util.ActionResult import net.minecraft.util.EnumActionResult @@ -29,7 +29,7 @@ import net.minecraftforge.fml.relauncher.SideOnly trait Delegate { def parent: Delegator - def unlocalizedName = getClass.getSimpleName + def unlocalizedName: String = getClass.getSimpleName protected def tooltipName = Option(unlocalizedName) @@ -37,7 +37,7 @@ trait Delegate { var showInItemList = true - val itemId = parent.add(this) + val itemId: Int = parent.add(this) def maxStackSize = 64 @@ -65,9 +65,9 @@ trait Delegate { // ----------------------------------------------------------------------- // - def rarity(stack: ItemStack) = Rarity.byTier(tierFromDriver(stack)) + def rarity(stack: ItemStack): EnumRarity = Rarity.byTier(tierFromDriver(stack)) - protected def tierFromDriver(stack: ItemStack) = + protected def tierFromDriver(stack: ItemStack): Int = api.Driver.driverFor(stack) match { case driver: api.driver.Item => driver.tier(stack) case _ => 0 diff --git a/src/main/scala/li/cil/oc/common/item/traits/SimpleItem.scala b/src/main/scala/li/cil/oc/common/item/traits/SimpleItem.scala index 655eff9db..58ef3d7ea 100644 --- a/src/main/scala/li/cil/oc/common/item/traits/SimpleItem.scala +++ b/src/main/scala/li/cil/oc/common/item/traits/SimpleItem.scala @@ -24,7 +24,7 @@ trait SimpleItem extends Item { override def isBookEnchantable(stack: ItemStack, book: ItemStack) = false - override def doesSneakBypassUse(stack: ItemStack, world: IBlockAccess, pos: BlockPos, player: EntityPlayer) = { + override def doesSneakBypassUse(stack: ItemStack, world: IBlockAccess, pos: BlockPos, player: EntityPlayer): Boolean = { world.getTileEntity(pos) match { case drive: tileentity.DiskDrive => true case _ => super.doesSneakBypassUse(stack, world, pos, player) diff --git a/src/main/scala/li/cil/oc/common/nanomachines/Nanomachines.scala b/src/main/scala/li/cil/oc/common/nanomachines/Nanomachines.scala index bfd68536c..c166b696a 100644 --- a/src/main/scala/li/cil/oc/common/nanomachines/Nanomachines.scala +++ b/src/main/scala/li/cil/oc/common/nanomachines/Nanomachines.scala @@ -14,10 +14,10 @@ import scala.collection.mutable object Nanomachines extends api.detail.NanomachinesAPI { val providers = mutable.Set.empty[BehaviorProvider] - val serverControllers = mutable.WeakHashMap.empty[EntityPlayer, ControllerImpl] - val clientControllers = mutable.WeakHashMap.empty[EntityPlayer, ControllerImpl] + val serverControllers: mutable.WeakHashMap[EntityPlayer, ControllerImpl] = mutable.WeakHashMap.empty[EntityPlayer, ControllerImpl] + val clientControllers: mutable.WeakHashMap[EntityPlayer, ControllerImpl] = mutable.WeakHashMap.empty[EntityPlayer, ControllerImpl] - def controllers(player: EntityPlayer) = if (player.getEntityWorld.isRemote) clientControllers else serverControllers + def controllers(player: EntityPlayer): mutable.WeakHashMap[EntityPlayer, ControllerImpl] = if (player.getEntityWorld.isRemote) clientControllers else serverControllers override def addProvider(provider: BehaviorProvider): Unit = providers += provider @@ -28,11 +28,11 @@ object Nanomachines extends api.detail.NanomachinesAPI { else null } - def hasController(player: EntityPlayer) = { + def hasController(player: EntityPlayer): Boolean = { PlayerUtils.persistedData(player).getBoolean(Settings.namespace + "hasNanomachines") } - def installController(player: EntityPlayer) = { + def installController(player: EntityPlayer): Controller = { if (!hasController(player)) { PlayerUtils.persistedData(player).setBoolean(Settings.namespace + "hasNanomachines", true) } diff --git a/src/main/scala/li/cil/oc/common/nanomachines/provider/MagnetProvider.scala b/src/main/scala/li/cil/oc/common/nanomachines/provider/MagnetProvider.scala index 116c40943..0dbfac3bb 100644 --- a/src/main/scala/li/cil/oc/common/nanomachines/provider/MagnetProvider.scala +++ b/src/main/scala/li/cil/oc/common/nanomachines/provider/MagnetProvider.scala @@ -24,7 +24,7 @@ object MagnetProvider extends ScalaProvider("9324d5ec-71f1-41c2-b51c-406e527668f val actualRange = Settings.get.nanomachineMagnetRange * api.Nanomachines.getController(player).getInputCount(this) val items = world.getEntitiesWithinAABB(classOf[EntityItem], player.getEntityBoundingBox.expand(actualRange, actualRange, actualRange)) items.collect { - case item: EntityItem if !item.cannotPickup && item.getEntityItem != null && player.inventory.mainInventory.exists(stack => stack == null || stack.getCount < stack.getMaxStackSize && stack.isItemEqual(item.getEntityItem)) => + case item: EntityItem if !item.cannotPickup && !item.getEntityItem.isEmpty && player.inventory.mainInventory.exists(stack => stack.isEmpty || stack.getCount < stack.getMaxStackSize && stack.isItemEqual(item.getEntityItem)) => val dx = player.posX - item.posX val dy = player.posY - item.posY val dz = player.posZ - item.posZ diff --git a/src/main/scala/li/cil/oc/common/recipe/ColorizeRecipe.scala b/src/main/scala/li/cil/oc/common/recipe/ColorizeRecipe.scala index 202394a86..9c0327e10 100644 --- a/src/main/scala/li/cil/oc/common/recipe/ColorizeRecipe.scala +++ b/src/main/scala/li/cil/oc/common/recipe/ColorizeRecipe.scala @@ -16,8 +16,8 @@ class ColorizeRecipe(target: Item, source: Array[Item] = null) extends Container def this(target: Block, source: Array[Item]) = this(Item.getItemFromBlock(target), source) def this(target: Block) = this(target, null) - val targetItem = target - val sourceItems = if (source != null) source else Array(targetItem) + val targetItem: Item = target + val sourceItems: Array[Item] = if (source != null) source else Array(targetItem) override def matches(crafting: InventoryCrafting, world: World): Boolean = { val stacks = (0 until crafting.getSizeInventory).flatMap(i => Option(crafting.getStackInSlot(i))) @@ -40,7 +40,7 @@ class ColorizeRecipe(target: Item, source: Array[Item] = null) extends Container } else { val dye = Color.findDye(stack) if (dye.isEmpty) - return null + return ItemStack.EMPTY val itemColor = EntitySheep.getDyeRgb(Color.byOreName(dye.get)) val red = (itemColor(0) * 255.0F).toInt @@ -54,7 +54,7 @@ class ColorizeRecipe(target: Item, source: Array[Item] = null) extends Container } } - if (targetStack == null) return null + if (targetStack.isEmpty) return ItemStack.EMPTY if (targetItem == targetStack.getItem) { if (ItemColorizer.hasColor(targetStack)) { diff --git a/src/main/scala/li/cil/oc/common/recipe/DecolorizeRecipe.scala b/src/main/scala/li/cil/oc/common/recipe/DecolorizeRecipe.scala index 919006744..760bde638 100644 --- a/src/main/scala/li/cil/oc/common/recipe/DecolorizeRecipe.scala +++ b/src/main/scala/li/cil/oc/common/recipe/DecolorizeRecipe.scala @@ -31,11 +31,11 @@ class DecolorizeRecipe(target: Item) extends ContainerItemAwareRecipe { targetStack = stack.copy() targetStack.setCount(1) } else if (stack.getItem != Items.WATER_BUCKET) { - return null + return ItemStack.EMPTY } } - if (targetStack == null) return null + if (targetStack.isEmpty) return ItemStack.EMPTY ItemColorizer.removeColor(targetStack) targetStack diff --git a/src/main/scala/li/cil/oc/common/recipe/ExtendedRecipe.scala b/src/main/scala/li/cil/oc/common/recipe/ExtendedRecipe.scala index 7957a791c..4c02be80b 100644 --- a/src/main/scala/li/cil/oc/common/recipe/ExtendedRecipe.scala +++ b/src/main/scala/li/cil/oc/common/recipe/ExtendedRecipe.scala @@ -11,7 +11,6 @@ import li.cil.oc.common.item.data.MicrocontrollerData import li.cil.oc.common.item.data.PrintData import li.cil.oc.common.item.data.RobotData import li.cil.oc.common.item.data.TabletData -import li.cil.oc.integration.Mods import li.cil.oc.util.Color import li.cil.oc.util.ExtendedNBT._ import li.cil.oc.util.SideTracker @@ -129,21 +128,21 @@ object ExtendedRecipe { if (beaconBlocks.exists(_.isItemEqual(stack))) { if (data.isBeaconBase) { // Crafting wouldn't change anything, prevent accidental resource loss. - return null + return ItemStack.EMPTY } data.isBeaconBase = true } if (glowstoneDust.isItemEqual(stack)) { if (data.lightLevel == 15) { // Crafting wouldn't change anything, prevent accidental resource loss. - return null + return ItemStack.EMPTY } data.lightLevel = math.min(15, data.lightLevel + 1) } if (glowstone.isItemEqual(stack)) { if (data.lightLevel == 15) { // Crafting wouldn't change anything, prevent accidental resource loss. - return null + return ItemStack.EMPTY } data.lightLevel = math.min(15, data.lightLevel + 4) } @@ -179,7 +178,7 @@ object ExtendedRecipe { craftedStack } - private def getItems(inventory: InventoryCrafting) = (0 until inventory.getSizeInventory).map(inventory.getStackInSlot).filter(_ != null) + private def getItems(inventory: InventoryCrafting) = (0 until inventory.getSizeInventory).map(inventory.getStackInSlot).filter(!_.isEmpty) private def recraft(craftedStack: ItemStack, inventory: InventoryCrafting, descriptor: ItemInfo, dataFactory: (ItemStack) => ItemDataWrapper) { if (api.Items.get(craftedStack) == descriptor) { @@ -216,40 +215,40 @@ object ExtendedRecipe { private class MCUDataWrapper(val stack: ItemStack) extends ItemDataWrapper { val data = new MicrocontrollerData(stack) - override def components = data.components + override def components: Array[ItemStack] = data.components - override def components_=(value: Array[ItemStack]) = data.components = value + override def components_=(value: Array[ItemStack]): Unit = data.components = value - override def save(stack: ItemStack) = data.save(stack) + override def save(stack: ItemStack): Unit = data.save(stack) } private class DroneDataWrapper(val stack: ItemStack) extends ItemDataWrapper { val data = new DroneData(stack) - override def components = data.components + override def components: Array[ItemStack] = data.components - override def components_=(value: Array[ItemStack]) = data.components = value + override def components_=(value: Array[ItemStack]): Unit = data.components = value - override def save(stack: ItemStack) = data.save(stack) + override def save(stack: ItemStack): Unit = data.save(stack) } private class RobotDataWrapper(val stack: ItemStack) extends ItemDataWrapper { val data = new RobotData(stack) - override def components = data.components + override def components: Array[ItemStack] = data.components - override def components_=(value: Array[ItemStack]) = data.components = value + override def components_=(value: Array[ItemStack]): Unit = data.components = value - override def save(stack: ItemStack) = data.save(stack) + override def save(stack: ItemStack): Unit = data.save(stack) } private class TabletDataWrapper(val stack: ItemStack) extends ItemDataWrapper { val data = new TabletData(stack) - var components = data.items.collect { case Some(item) => item } + var components: Array[ItemStack] = data.items.filter(!_.isEmpty) - override def save(stack: ItemStack) = { - data.items = components.map(stack => Option(stack)) + override def save(stack: ItemStack): Unit = { + data.items = components.clone() data.save(stack) } } diff --git a/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala b/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala index 513ecf8e3..1793944a8 100644 --- a/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala +++ b/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala @@ -9,6 +9,8 @@ import net.minecraft.item.crafting.IRecipe import net.minecraft.util.NonNullList import net.minecraft.world.World +import scala.collection.immutable + class LootDiskCyclingRecipe extends IRecipe { override def matches(crafting: InventoryCrafting, world: World): Boolean = { val stacks = collectStacks(crafting).toArray @@ -23,17 +25,17 @@ class LootDiskCyclingRecipe extends IRecipe { val oldIndex = lootDiskStacks.indexWhere(s => getLootFactoryName(s) == lootFactoryName) val newIndex = (oldIndex + 1) % lootDiskStacks.length lootDiskStacks(newIndex).copy() - case _ => null + case _ => ItemStack.EMPTY } } - def getLootFactoryName(stack: ItemStack) = stack.getTagCompound.getString(Settings.namespace + "lootFactory") + def getLootFactoryName(stack: ItemStack): String = stack.getTagCompound.getString(Settings.namespace + "lootFactory") - def collectStacks(crafting: InventoryCrafting) = (0 until crafting.getSizeInventory).flatMap(i => Option(crafting.getStackInSlot(i))) + def collectStacks(crafting: InventoryCrafting): immutable.IndexedSeq[ItemStack] = (0 until crafting.getSizeInventory).flatMap(i => Option(crafting.getStackInSlot(i))) override def getRecipeSize: Int = 2 - override def getRecipeOutput: ItemStack = null + override def getRecipeOutput: ItemStack = ItemStack.EMPTY override def getRemainingItems(crafting: InventoryCrafting): NonNullList[ItemStack] = { val result = NonNullList.withSize[ItemStack](crafting.getSizeInventory, ItemStack.EMPTY) diff --git a/src/main/scala/li/cil/oc/common/recipe/Recipes.scala b/src/main/scala/li/cil/oc/common/recipe/Recipes.scala index 37d79ac18..b42096677 100644 --- a/src/main/scala/li/cil/oc/common/recipe/Recipes.scala +++ b/src/main/scala/li/cil/oc/common/recipe/Recipes.scala @@ -34,16 +34,16 @@ import scala.collection.convert.WrapAsScala._ import scala.collection.mutable object Recipes { - val list = mutable.LinkedHashMap.empty[ItemStack, String] - val oreDictEntries = mutable.LinkedHashMap.empty[String, ItemStack] + val list: mutable.LinkedHashMap[ItemStack, String] = mutable.LinkedHashMap.empty[ItemStack, String] + val oreDictEntries: mutable.LinkedHashMap[String, ItemStack] = mutable.LinkedHashMap.empty[String, ItemStack] var hadErrors = false - val recipeHandlers = mutable.LinkedHashMap.empty[String, (ItemStack, Config) => Unit] + val recipeHandlers: mutable.LinkedHashMap[String, (ItemStack, Config) => Unit] = mutable.LinkedHashMap.empty[String, (ItemStack, Config) => Unit] def registerRecipeHandler(name: String, recipe: (ItemStack, Config) => Unit): Unit = { recipeHandlers += name -> recipe } - def addBlock(instance: Block, name: String, oreDict: String*) = { + def addBlock(instance: Block, name: String, oreDict: String*): Block = { Items.registerBlock(instance, name) addRecipe(new ItemStack(instance), name) register(instance match { @@ -53,14 +53,14 @@ object Recipes { instance } - def addSubItem[T <: Delegate](delegate: T, name: String, oreDict: String*) = { + def addSubItem[T <: Delegate](delegate: T, name: String, oreDict: String*): T = { Items.registerItem(delegate, name) addRecipe(delegate.createItemStack(), name) register(delegate.createItemStack(), oreDict: _*) delegate } - def addItem(instance: Item, name: String, oreDict: String*) = { + def addItem(instance: Item, name: String, oreDict: String*): Item = { Items.registerItem(instance, name) addRecipe(new ItemStack(instance), name) register(instance match { @@ -70,7 +70,7 @@ object Recipes { instance } - def addSubItem[T <: common.item.traits.Delegate](delegate: T, name: String, registerRecipe: Boolean, oreDict: String*) = { + def addSubItem[T <: common.item.traits.Delegate](delegate: T, name: String, registerRecipe: Boolean, oreDict: String*): T = { Items.registerItem(delegate, name) if (registerRecipe) { addRecipe(delegate.createItemStack(), name) @@ -82,7 +82,7 @@ object Recipes { delegate } - def addStack(stack: ItemStack, name: String, oreDict: String*) = { + def addStack(stack: ItemStack, name: String, oreDict: String*): ItemStack = { Items.registerStack(stack, name) addRecipe(stack, name) register(stack, oreDict: _*) @@ -130,14 +130,14 @@ object Recipes { setIncluder(new ConfigIncluder with ConfigIncluderFile { var fallback: ConfigIncluder = _ - override def withFallback(fallback: ConfigIncluder) = { + override def withFallback(fallback: ConfigIncluder): ConfigIncluder = { this.fallback = fallback this } - override def include(context: ConfigIncludeContext, what: String) = fallback.include(context, what) + override def include(context: ConfigIncludeContext, what: String): ConfigObject = fallback.include(context, what) - override def includeFile(context: ConfigIncludeContext, what: File) = { + override def includeFile(context: ConfigIncludeContext, what: File): ConfigObject = { val in = if (what.isAbsolute) new FileReader(what) else new FileReader(new File(userRecipes.getParentFile, what.getPath)) val result = ConfigFactory.parseReader(in, config) in.close() @@ -376,7 +376,7 @@ object Recipes { hadErrors = true } - def tryGetCount(recipe: Config) = if (recipe.hasPath("output")) recipe.getInt("output") else 1 + def tryGetCount(recipe: Config): Int = if (recipe.hasPath("output")) recipe.getInt("output") else 1 def parseIngredient(entry: AnyRef): AnyRef = entry match { case map: java.util.Map[AnyRef, AnyRef]@unchecked => diff --git a/src/main/scala/li/cil/oc/common/template/AssemblerTemplates.scala b/src/main/scala/li/cil/oc/common/template/AssemblerTemplates.scala index 6b6623ac4..dfa7644d8 100644 --- a/src/main/scala/li/cil/oc/common/template/AssemblerTemplates.scala +++ b/src/main/scala/li/cil/oc/common/template/AssemblerTemplates.scala @@ -43,7 +43,7 @@ object AssemblerTemplates { } def select(stack: ItemStack) = { - if (stack != null && templateFilters.forall(IMC.tryInvokeStatic(_, stack)(true))) + if (!stack.isEmpty && templateFilters.forall(IMC.tryInvokeStatic(_, stack)(true))) templates.find(_.select(stack)) else None diff --git a/src/main/scala/li/cil/oc/common/template/DroneTemplate.scala b/src/main/scala/li/cil/oc/common/template/DroneTemplate.scala index cf1220126..1ba28adb2 100644 --- a/src/main/scala/li/cil/oc/common/template/DroneTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/DroneTemplate.scala @@ -34,7 +34,7 @@ object DroneTemplate extends Template { val data = new DroneData() data.tier = caseTier(inventory) data.name = RobotData.randomName - data.components = items.drop(1).filter(_ != null).toArray + data.components = items.drop(1).filter(!_.isEmpty).toArray data.storedEnergy = Settings.get.bufferDrone.toInt val stack = api.Items.get(Constants.ItemName.Drone).createItemStack(1) data.save(stack) diff --git a/src/main/scala/li/cil/oc/common/template/MicrocontrollerTemplate.scala b/src/main/scala/li/cil/oc/common/template/MicrocontrollerTemplate.scala index 5acb5ba82..333eab517 100644 --- a/src/main/scala/li/cil/oc/common/template/MicrocontrollerTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/MicrocontrollerTemplate.scala @@ -4,6 +4,7 @@ import li.cil.oc.Constants import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.internal +import li.cil.oc.api.internal.Microcontroller import li.cil.oc.common.Slot import li.cil.oc.common.Tier import li.cil.oc.common.item.data.MicrocontrollerData @@ -17,21 +18,21 @@ object MicrocontrollerTemplate extends Template { override protected val suggestedComponents = Array( "BIOS" -> hasComponent("eeprom") _) - override protected def hostClass = classOf[internal.Microcontroller] + override protected def hostClass: Class[Microcontroller] = classOf[internal.Microcontroller] - def selectTier1(stack: ItemStack) = api.Items.get(stack) == api.Items.get(Constants.ItemName.MicrocontrollerCaseTier1) + def selectTier1(stack: ItemStack): Boolean = api.Items.get(stack) == api.Items.get(Constants.ItemName.MicrocontrollerCaseTier1) - def selectTier2(stack: ItemStack) = api.Items.get(stack) == api.Items.get(Constants.ItemName.MicrocontrollerCaseTier2) + def selectTier2(stack: ItemStack): Boolean = api.Items.get(stack) == api.Items.get(Constants.ItemName.MicrocontrollerCaseTier2) - def selectTierCreative(stack: ItemStack) = api.Items.get(stack) == api.Items.get(Constants.ItemName.MicrocontrollerCaseCreative) + def selectTierCreative(stack: ItemStack): Boolean = api.Items.get(stack) == api.Items.get(Constants.ItemName.MicrocontrollerCaseCreative) def validate(inventory: IInventory): Array[AnyRef] = validateComputer(inventory) - def assemble(inventory: IInventory) = { + def assemble(inventory: IInventory): Array[Object] = { val items = (0 until inventory.getSizeInventory).map(inventory.getStackInSlot) val data = new MicrocontrollerData() data.tier = caseTier(inventory) - data.components = items.drop(1).filter(_ != null).toArray + data.components = items.drop(1).filter(!_.isEmpty).toArray data.storedEnergy = Settings.get.bufferMicrocontroller.toInt val stack = data.createItemStack() val energy = Settings.get.microcontrollerBaseCost + complexity(inventory) * Settings.get.microcontrollerComplexityCost @@ -39,9 +40,9 @@ object MicrocontrollerTemplate extends Template { Array(stack, Double.box(energy)) } - def selectDisassembler(stack: ItemStack) = api.Items.get(stack) == api.Items.get(Constants.BlockName.Microcontroller) + def selectDisassembler(stack: ItemStack): Boolean = api.Items.get(stack) == api.Items.get(Constants.BlockName.Microcontroller) - def disassemble(stack: ItemStack, ingredients: Array[ItemStack]) = { + def disassemble(stack: ItemStack, ingredients: Array[ItemStack]): Array[ItemStack] = { val info = new MicrocontrollerData(stack) val itemName = Constants.ItemName.MicrocontrollerCase(info.tier) @@ -127,10 +128,10 @@ object MicrocontrollerTemplate extends Template { "li.cil.oc.common.template.MicrocontrollerTemplate.disassemble") } - override protected def maxComplexity(inventory: IInventory) = + override protected def maxComplexity(inventory: IInventory): Int = if (caseTier(inventory) == Tier.Two) 5 else if (caseTier(inventory) == Tier.Four) 9001 // Creative else 4 - override protected def caseTier(inventory: IInventory) = ItemUtils.caseTier(inventory.getStackInSlot(0)) + override protected def caseTier(inventory: IInventory): Int = ItemUtils.caseTier(inventory.getStackInSlot(0)) } diff --git a/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala b/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala index 8428b3481..59ae9f1b7 100644 --- a/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala @@ -33,8 +33,8 @@ object RobotTemplate extends Template { data.name = RobotData.randomName data.robotEnergy = Settings.get.bufferRobot.toInt data.totalEnergy = data.robotEnergy - data.containers = items.take(3).filter(_ != null).toArray - data.components = items.drop(3).filter(_ != null).toArray + data.containers = items.take(3).filter(!_.isEmpty).toArray + data.components = items.drop(3).filter(!_.isEmpty).toArray val stack = data.createItemStack() val energy = Settings.get.robotBaseCost + complexity(inventory) * Settings.get.robotComplexityCost diff --git a/src/main/scala/li/cil/oc/common/template/TabletTemplate.scala b/src/main/scala/li/cil/oc/common/template/TabletTemplate.scala index 457c89c61..13bd1c04d 100644 --- a/src/main/scala/li/cil/oc/common/template/TabletTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/TabletTemplate.scala @@ -38,11 +38,11 @@ object TabletTemplate extends Template { def validate(inventory: IInventory): Array[AnyRef] = validateComputer(inventory) def assemble(inventory: IInventory): Array[AnyRef] = { - val items = (1 until inventory.getSizeInventory).map(slot => Option(inventory.getStackInSlot(slot))) + val items = (1 until inventory.getSizeInventory).map(slot => inventory.getStackInSlot(slot)) val data = new TabletData() data.tier = ItemUtils.caseTier(inventory.getStackInSlot(0)) - data.container = items.headOption.getOrElse(None) - data.items = Array(Option(api.Items.get(Constants.BlockName.ScreenTier1).createItemStack(1))) ++ items.drop(if (data.tier == Tier.One) 0 else 1).filter(_.isDefined) + data.container = items.headOption.getOrElse(ItemStack.EMPTY) + data.items = Array(api.Items.get(Constants.BlockName.ScreenTier1).createItemStack(1)) ++ items.drop(if (data.tier == Tier.One) 0 else 1).filter(!_.isEmpty) data.energy = Settings.get.bufferTablet data.maxEnergy = data.energy val stack = api.Items.get(Constants.ItemName.Tablet).createItemStack(1) @@ -57,9 +57,7 @@ object TabletTemplate extends Template { def disassemble(stack: ItemStack, ingredients: Array[ItemStack]) = { val info = new TabletData(stack) val itemName = Constants.ItemName.TabletCase(info.tier) - (Array(api.Items.get(itemName).createItemStack(1), info.container.orNull) ++ info.items.collect { - case Some(item) => item - }.drop(1) /* Screen */).filter(_ != null) + (Array(api.Items.get(itemName).createItemStack(1), info.container) ++ info.items.filter(!_.isEmpty).drop(1) /* Screen */).filter(!_.isEmpty) } def register() { diff --git a/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala index 27a7053d3..cc8d2f637 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala @@ -84,7 +84,7 @@ class Assembler extends traits.Environment with traits.PowerAcceptor with traits case Some(template) if !isAssembling && output.isEmpty && template.validate(this)._1 => for (slot <- 0 until getSizeInventory) { val stack = getStackInSlot(slot) - if (stack != null && !isItemValidForSlot(slot, stack)) return false + if (!stack.isEmpty && !isItemValidForSlot(slot, stack)) return false } val (stack, energy) = template.assemble(this) output = Some(stack) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala index 8f6918354..6842931e8 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala @@ -103,7 +103,7 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R val charge = Settings.get.chargeRateTablet * chargeSpeed * Settings.get.tickFrequency canCharge ||= charge > 0 && node.globalBuffer >= charge * 0.5 if (canCharge) { - (0 until getSizeInventory).map(getStackInSlot).foreach(stack => if (stack != null) { + (0 until getSizeInventory).map(getStackInSlot).foreach(stack => if (!stack.isEmpty) { val offered = charge + node.changeBuffer(-charge) val surplus = ItemCharge.charge(stack, offered) node.changeBuffer(surplus) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala index 31addcd0c..3098bcd60 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala @@ -8,7 +8,9 @@ import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.driver.DeviceInfo +import li.cil.oc.api.network.Connector import li.cil.oc.api.network.Visibility +import li.cil.oc.api.util.StateAware import li.cil.oc.common.template.DisassemblerTemplates import li.cil.oc.server.{PacketSender => ServerPacketSender} import li.cil.oc.util.BlockPosition @@ -25,15 +27,16 @@ import net.minecraftforge.fml.relauncher.SideOnly import scala.collection.convert.WrapAsJava._ import scala.collection.mutable +import scala.collection.mutable.ArrayBuffer class Disassembler extends traits.Environment with traits.PowerAcceptor with traits.Inventory with traits.StateAware with traits.PlayerInputAware with traits.Tickable with DeviceInfo { - val node = api.Network.newNode(this, Visibility.None). + val node: Connector = api.Network.newNode(this, Visibility.None). withConnector(Settings.get.bufferConverter). create() var isActive = false - val queue = mutable.ArrayBuffer.empty[ItemStack] + val queue: ArrayBuffer[ItemStack] = mutable.ArrayBuffer.empty[ItemStack] var totalRequiredEnergy = 0.0 @@ -41,7 +44,7 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra var disassembleNextInstantly = false - def progress = if (queue.isEmpty) 0.0 else (1 - (queue.size * Settings.get.disassemblerItemCost - buffer) / totalRequiredEnergy) * 100 + def progress: Double = if (queue.isEmpty) 0.0 else (1 - (queue.size * Settings.get.disassemblerItemCost - buffer) / totalRequiredEnergy) * 100 private def setActive(value: Boolean) = if (value != isActive) { isActive = value @@ -61,13 +64,13 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra // ----------------------------------------------------------------------- // @SideOnly(Side.CLIENT) - override protected def hasConnector(side: EnumFacing) = side != EnumFacing.UP + override protected def hasConnector(side: EnumFacing): Boolean = side != EnumFacing.UP override protected def connector(side: EnumFacing) = Option(if (side != EnumFacing.UP) node else null) - override def energyThroughput = Settings.get.disassemblerRate + override def energyThroughput: Double = Settings.get.disassemblerRate - override def getCurrentState = { + override def getCurrentState: util.EnumSet[StateAware.State] = { if (isActive) util.EnumSet.of(api.util.StateAware.State.IsWorking) else if (queue.nonEmpty) util.EnumSet.of(api.util.StateAware.State.CanWork) else util.EnumSet.noneOf(classOf[api.util.StateAware.State]) @@ -126,7 +129,7 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra } private def drop(stack: ItemStack) { - if (stack != null) { + if (!stack.isEmpty) { for (side <- EnumFacing.values if stack.getCount > 0) { InventoryUtils.insertIntoInventoryAt(stack, BlockPosition(this).offset(side), Some(side.getOpposite)) } @@ -175,12 +178,12 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra override def getSizeInventory = 1 - override def isItemValidForSlot(i: Int, stack: ItemStack) = + override def isItemValidForSlot(i: Int, stack: ItemStack): Boolean = allowDisassembling(stack) && (((Settings.get.disassembleAllTheThings || api.Items.get(stack) != null) && ItemUtils.getIngredients(stack).nonEmpty) || DisassemblerTemplates.select(stack).isDefined) - private def allowDisassembling(stack: ItemStack) = stack != null && (!stack.hasTagCompound || !stack.getTagCompound.getBoolean(Settings.namespace + "undisassemblable")) + private def allowDisassembling(stack: ItemStack) = !stack.isEmpty && (!stack.hasTagCompound || !stack.getTagCompound.getBoolean(Settings.namespace + "undisassemblable")) override def setInventorySlotContents(slot: Int, stack: ItemStack): Unit = { super.setInventorySlotContents(slot, stack) @@ -191,7 +194,7 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra override def onSetInventorySlotContents(player: EntityPlayer, slot: Int, stack: ItemStack): Unit = { if (!getWorld.isRemote) { - disassembleNextInstantly = stack != null && slot == 0 && player.capabilities.isCreativeMode + disassembleNextInstantly = !stack.isEmpty && slot == 0 && player.capabilities.isCreativeMode } } } diff --git a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala index b871a2b6a..25725e44f 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala @@ -34,7 +34,7 @@ class DiskDrive extends traits.Environment with traits.ComponentInventory with t // Used on client side to check whether to render disk activity indicators. var lastAccess = 0L - def filesystemNode = components(0) match { + def filesystemNode: Option[Node] = components(0) match { case Some(environment) => Option(environment.node) case _ => None } @@ -51,7 +51,7 @@ class DiskDrive extends traits.Environment with traits.ComponentInventory with t // ----------------------------------------------------------------------- // // Environment - val node = api.Network.newNode(this, Visibility.Network). + val node: Component = api.Network.newNode(this, Visibility.Network). withComponent("disk_drive"). create() @@ -64,7 +64,7 @@ class DiskDrive extends traits.Environment with traits.ComponentInventory with t def eject(context: Context, args: Arguments): Array[AnyRef] = { val velocity = args.optDouble(0, 0) max 0 min 1 val ejected = decrStackSize(0, 1) - if (ejected != null && ejected.getCount > 0) { + if (!ejected.isEmpty) { val entity = InventoryUtils.spawnStackInWorld(position, ejected, Option(facing)) if (entity != null) { val vx = facing.getFrontOffsetX * velocity @@ -80,14 +80,14 @@ class DiskDrive extends traits.Environment with traits.ComponentInventory with t // ----------------------------------------------------------------------- // // Analyzable - override def onAnalyze(player: EntityPlayer, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = filesystemNode.fold(null: Array[Node])(Array(_)) + override def onAnalyze(player: EntityPlayer, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Array[Node] = filesystemNode.fold(null: Array[Node])(Array(_)) // ----------------------------------------------------------------------- // // IInventory override def getSizeInventory = 1 - override def isItemValidForSlot(slot: Int, stack: ItemStack) = (slot, Option(Driver.driverFor(stack, getClass))) match { + override def isItemValidForSlot(slot: Int, stack: ItemStack): Boolean = (slot, Option(Driver.driverFor(stack, getClass))) match { case (0, Some(driver)) => driver.slot(stack) == Slot.Floppy case _ => false } @@ -132,6 +132,6 @@ class DiskDrive extends traits.Environment with traits.ComponentInventory with t override def writeToNBTForClient(nbt: NBTTagCompound) { super.writeToNBTForClient(nbt) - items(0).foreach(stack => nbt.setNewCompoundTag(DiskTag, stack.writeToNBT)) + if (!items(0).isEmpty) nbt.setNewCompoundTag(DiskTag, items(0).writeToNBT) } } diff --git a/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala b/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala index 02c95bb19..382fd512e 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala @@ -32,14 +32,14 @@ class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.C override def node = null - val outputSides = Array.fill(6)(true) + val outputSides: Array[Boolean] = Array.fill(6)(true) - val snooperNode = api.Network.newNode(this, Visibility.Network). + val snooperNode: ComponentConnector = api.Network.newNode(this, Visibility.Network). withComponent("microcontroller"). withConnector(Settings.get.bufferMicrocontroller). create() - val componentNodes = Array.fill(6)(api.Network.newNode(this, Visibility.Network). + val componentNodes: Array[Component] = Array.fill(6)(api.Network.newNode(this, Visibility.Network). withComponent("microcontroller"). create()) @@ -48,7 +48,7 @@ class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.C machine.setCostPerTick(Settings.get.microcontrollerCost) } - override def tier = info.tier + override def tier: Int = info.tier override protected def runSound = None // Microcontrollers are silent. @@ -65,16 +65,16 @@ class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.C // ----------------------------------------------------------------------- // @SideOnly(Side.CLIENT) - override def canConnect(side: EnumFacing) = side != facing + override def canConnect(side: EnumFacing): Boolean = side != facing override def sidedNode(side: EnumFacing): Node = if (side != facing) super.sidedNode(side) else null @SideOnly(Side.CLIENT) - override protected def hasConnector(side: EnumFacing) = side != facing + override protected def hasConnector(side: EnumFacing): Boolean = side != facing override protected def connector(side: EnumFacing) = Option(if (side != facing) snooperNode else null) - override def energyThroughput = Settings.get.caseRate(Tier.One) + override def energyThroughput: Double = Settings.get.caseRate(Tier.One) // ----------------------------------------------------------------------- // @@ -90,7 +90,7 @@ class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.C override def internalComponents(): java.lang.Iterable[ItemStack] = asJavaIterable(info.components) - override def componentSlot(address: String) = components.indexWhere(_.exists(env => env.node != null && env.node.address == address)) + override def componentSlot(address: String): Int = components.indexWhere(_.exists(env => env.node != null && env.node.address == address)) // ----------------------------------------------------------------------- // @@ -242,11 +242,11 @@ class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.C // ----------------------------------------------------------------------- // - override def items = info.components.map(Option(_)) + override def items: Array[ItemStack] = info.components override def updateItems(slot: Int, stack: ItemStack): Unit = info.components(slot) = stack - override def getSizeInventory = info.components.length + override def getSizeInventory: Int = info.components.length override def isItemValidForSlot(slot: Int, stack: ItemStack) = false @@ -254,13 +254,13 @@ class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.C override def setInventorySlotContents(slot: Int, stack: ItemStack) {} // Nope. - override def decrStackSize(slot: Int, amount: Int) = null + override def decrStackSize(slot: Int, amount: Int) = ItemStack.EMPTY // Nope. - override def removeStackFromSlot(slot: Int) = null + override def removeStackFromSlot(slot: Int) = ItemStack.EMPTY // For hotswapping EEPROMs. - def changeEEPROM(newEeprom: ItemStack) = { + def changeEEPROM(newEeprom: ItemStack): Option[ItemStack] = { val oldEepromIndex = info.components.indexWhere(api.Items.get(_) == api.Items.get(Constants.ItemName.EEPROM)) if (oldEepromIndex >= 0) { val oldEeprom = info.components(oldEepromIndex) @@ -268,7 +268,7 @@ class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.C Some(oldEeprom) } else { - assert(info.components(getSizeInventory - 1) == null) + assert(info.components(getSizeInventory - 1).isEmpty) super.setInventorySlotContents(getSizeInventory - 1, newEeprom) None } diff --git a/src/main/scala/li/cil/oc/common/tileentity/PowerDistributor.scala b/src/main/scala/li/cil/oc/common/tileentity/PowerDistributor.scala index 21f9d5f26..12984473d 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/PowerDistributor.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/PowerDistributor.scala @@ -17,14 +17,14 @@ class PowerDistributor extends traits.Environment with traits.PowerBalancer with withConnector(Settings.get.bufferDistributor). create()) - override protected def isConnected = nodes.exists(node => node.address != null && node.network != null) + override protected def isConnected: Boolean = nodes.exists(node => node.address != null && node.network != null) // ----------------------------------------------------------------------- // @SideOnly(Side.CLIENT) override def canConnect(side: EnumFacing) = true - override def sidedNode(side: EnumFacing) = nodes(side.ordinal) + override def sidedNode(side: EnumFacing): Connector = nodes(side.ordinal) // ----------------------------------------------------------------------- // diff --git a/src/main/scala/li/cil/oc/common/tileentity/Printer.scala b/src/main/scala/li/cil/oc/common/tileentity/Printer.scala index 324b61e61..366b85778 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Printer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Printer.scala @@ -12,6 +12,7 @@ import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context import li.cil.oc.api.network._ +import li.cil.oc.api.util.StateAware import li.cil.oc.common.item.data.PrintData import li.cil.oc.server.{PacketSender => ServerPacketSender} import li.cil.oc.util.ExtendedNBT._ @@ -26,7 +27,7 @@ import net.minecraftforge.fml.relauncher.SideOnly import scala.collection.convert.WrapAsJava._ class Printer extends traits.Environment with traits.Inventory with traits.Rotatable with SidedEnvironment with traits.StateAware with traits.Tickable with ISidedInventory with DeviceInfo { - val node = api.Network.newNode(this, Visibility.Network). + val node: ComponentConnector = api.Network.newNode(this, Visibility.Network). withComponent("printer3d"). withConnector(Settings.get.bufferConverter). create() @@ -59,11 +60,11 @@ class Printer extends traits.Environment with traits.Inventory with traits.Rotat // ----------------------------------------------------------------------- // @SideOnly(Side.CLIENT) - override def canConnect(side: EnumFacing) = side != EnumFacing.UP + override def canConnect(side: EnumFacing): Boolean = side != EnumFacing.UP - override def sidedNode(side: EnumFacing) = if (side != EnumFacing.UP) node else null + override def sidedNode(side: EnumFacing): ComponentConnector = if (side != EnumFacing.UP) node else null - override def getCurrentState = { + override def getCurrentState: util.EnumSet[StateAware.State] = { if (isPrinting) util.EnumSet.of(api.util.StateAware.State.IsWorking) else if (canPrint) util.EnumSet.of(api.util.StateAware.State.CanWork) else util.EnumSet.noneOf(classOf[api.util.StateAware.State]) @@ -71,13 +72,13 @@ class Printer extends traits.Environment with traits.Inventory with traits.Rotat // ----------------------------------------------------------------------- // - def canPrint = data.stateOff.nonEmpty && data.stateOff.size <= Settings.get.maxPrintComplexity && data.stateOn.size <= Settings.get.maxPrintComplexity + def canPrint: Boolean = data.stateOff.nonEmpty && data.stateOff.size <= Settings.get.maxPrintComplexity && data.stateOn.size <= Settings.get.maxPrintComplexity - def isPrinting = output.isDefined + def isPrinting: Boolean = output.isDefined - def progress = (1 - requiredEnergy / totalRequiredEnergy) * 100 + def progress: Double = (1 - requiredEnergy / totalRequiredEnergy) * 100 - def timeRemaining = (requiredEnergy / Settings.get.assemblerTickAmount / 20).toInt + def timeRemaining: Int = (requiredEnergy / Settings.get.assemblerTickAmount / 20).toInt // ----------------------------------------------------------------------- // @@ -234,7 +235,7 @@ class Printer extends traits.Environment with traits.Inventory with traits.Rotat def canMergeOutput = { val presentStack = getStackInSlot(slotOutput) val outputStack = data.createItemStack() - presentStack == null || (presentStack.isItemEqual(outputStack) && ItemStack.areItemStackTagsEqual(presentStack, outputStack)) + presentStack.isEmpty || (presentStack.isItemEqual(outputStack) && ItemStack.areItemStackTagsEqual(presentStack, outputStack)) } if (isActive && output.isEmpty && canMergeOutput) { @@ -263,7 +264,7 @@ class Printer extends traits.Environment with traits.Inventory with traits.Rotat requiredEnergy -= have if (requiredEnergy <= 0) { val result = getStackInSlot(slotOutput) - if (result == null) { + if (result.isEmpty) { setInventorySlotContents(slotOutput, output.get) } else if (result.getCount < result.getMaxStackSize && canMergeOutput /* Should never fail, but just in case... */ ) { @@ -356,7 +357,7 @@ class Printer extends traits.Environment with traits.Inventory with traits.Rotat override def getSizeInventory = 3 - override def isItemValidForSlot(slot: Int, stack: ItemStack) = + override def isItemValidForSlot(slot: Int, stack: ItemStack): Boolean = if (slot == slotMaterial) PrintData.materialValue(stack) > 0 else if (slot == slotInk) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Rack.scala b/src/main/scala/li/cil/oc/common/tileentity/Rack.scala index 7bed2f888..99510eefc 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Rack.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Rack.scala @@ -14,6 +14,7 @@ import li.cil.oc.api.network.Message import li.cil.oc.api.network.Node import li.cil.oc.api.network.Packet import li.cil.oc.api.network.Visibility +import li.cil.oc.api.util.StateAware import li.cil.oc.common.Slot import li.cil.oc.integration.opencomputers.DriverRedstoneCard import li.cil.oc.server.{PacketSender => ServerPacketSender} @@ -32,7 +33,7 @@ import net.minecraftforge.fml.relauncher.SideOnly class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalancer with traits.ComponentInventory with traits.Rotatable with traits.BundledRedstoneAware with Analyzable with internal.Rack with traits.StateAware { var isRelayEnabled = true val lastData = new Array[NBTTagCompound](getSizeInventory) - val hasChanged = Array.fill(getSizeInventory)(true) + val hasChanged: Array[Boolean] = Array.fill(getSizeInventory)(true) // Map node connections for each installed mountable. Each mountable may // have up to four outgoing connections, with the first one always being @@ -41,8 +42,8 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance // The other nodes are "secondary" connections and merely transfer network // messages. // mountable -> connectable -> side - val nodeMapping = Array.fill(getSizeInventory)(Array.fill[Option[EnumFacing]](4)(None)) - val snifferNodes = Array.fill(getSizeInventory)(Array.fill(3)(api.Network.newNode(this, Visibility.Neighbors).create())) + val nodeMapping: Array[Array[Option[EnumFacing]]] = Array.fill(getSizeInventory)(Array.fill[Option[EnumFacing]](4)(None)) + val snifferNodes: Array[Array[Node]] = Array.fill(getSizeInventory)(Array.fill(3)(api.Network.newNode(this, Visibility.Neighbors).create())) def connect(slot: Int, connectableIndex: Int, side: Option[EnumFacing]): Unit = { val newSide = side match { @@ -223,7 +224,7 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance // ----------------------------------------------------------------------- // // SidedEnvironment - override def canConnect(side: EnumFacing) = side != facing + override def canConnect(side: EnumFacing): Boolean = side != facing override def sidedNode(side: EnumFacing): Node = if (side != facing) super.sidedNode(side) else null @@ -231,11 +232,11 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance // power.Common @SideOnly(Side.CLIENT) - override protected def hasConnector(side: EnumFacing) = side != facing + override protected def hasConnector(side: EnumFacing): Boolean = side != facing override protected def connector(side: EnumFacing) = Option(if (side != facing) sidedNode(side).asInstanceOf[Connector] else null) - override def energyThroughput = Settings.get.serverRackRate + override def energyThroughput: Double = Settings.get.serverRackRate // ----------------------------------------------------------------------- // // Analyzable @@ -270,7 +271,7 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance // ----------------------------------------------------------------------- // // StateAware - override def getCurrentState = { + override def getCurrentState: util.EnumSet[StateAware.State] = { val result = util.EnumSet.noneOf(classOf[api.util.StateAware.State]) components.collect { case Some(mountable: RackMountable) => result.addAll(mountable.getCurrentState) @@ -436,7 +437,7 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance // ----------------------------------------------------------------------- // - def slotAt(side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = { + def slotAt(side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Option[Int] = { if (side == facing) { val globalY = (hitY * 16).toInt // [0, 15] val l = 2 @@ -447,9 +448,9 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance else None } - def isWorking(mountable: RackMountable) = mountable.getCurrentState.contains(api.util.StateAware.State.IsWorking) + def isWorking(mountable: RackMountable): Boolean = mountable.getCurrentState.contains(api.util.StateAware.State.IsWorking) - def hasRedstoneCard = components.exists { + def hasRedstoneCard: Boolean = components.exists { case Some(mountable: EnvironmentHost with RackMountable with IInventory) if isWorking(mountable) => mountable.exists(stack => DriverRedstoneCard.worksWith(stack, mountable.getClass)) case _ => false diff --git a/src/main/scala/li/cil/oc/common/tileentity/Raid.scala b/src/main/scala/li/cil/oc/common/tileentity/Raid.scala index 84fda513c..c9b1e286d 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Raid.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Raid.scala @@ -59,7 +59,7 @@ class Raid extends traits.Environment with traits.Inventory with traits.Rotatabl override def markDirty() { super.markDirty() // Makes the implementation of the comparator output easier. - items.map(_.isDefined).copyToArray(presence) + items.map(!_.isEmpty).copyToArray(presence) } override protected def onItemRemoved(slot: Int, stack: ItemStack) { @@ -77,7 +77,7 @@ class Raid extends traits.Environment with traits.Inventory with traits.Rotatabl } def tryCreateRaid(id: String) { - if (items.count(_.isDefined) == items.length && filesystem.fold(true)(fs => fs.node == null || fs.node.address != id)) { + if (items.count(!_.isEmpty) == items.length && filesystem.fold(true)(fs => fs.node == null || fs.node.address != id)) { filesystem.foreach(fs => if (fs.node != null) fs.node.remove()) val fs = api.FileSystem.asManagedEnvironment( api.FileSystem.fromSaveDirectory(id, wipeDisksAndComputeSpace, Settings.get.bufferChanges), @@ -95,7 +95,7 @@ class Raid extends traits.Environment with traits.Inventory with traits.Rotatabl } private def wipeDisksAndComputeSpace = items.foldLeft(0L) { - case (acc, Some(hdd)) => acc + (Option(api.Driver.driverFor(hdd)) match { + case (acc, hdd) if !hdd.isEmpty => acc + (Option(api.Driver.driverFor(hdd)) match { case Some(driver) => driver.createEnvironment(hdd, this) match { case fs: FileSystem => val nbt = driver.dataTag(hdd) @@ -108,7 +108,7 @@ class Raid extends traits.Environment with traits.Inventory with traits.Rotatabl } case _ => 0L }) - case (acc, None) => acc + case (acc, ItemStack.EMPTY) => acc } // ----------------------------------------------------------------------- // @@ -144,7 +144,7 @@ class Raid extends traits.Environment with traits.Inventory with traits.Rotatabl override def writeToNBTForClient(nbt: NBTTagCompound) { super.writeToNBTForClient(nbt) - nbt.setTag(PresenceTag, items.map(_.isDefined)) + nbt.setTag(PresenceTag, items.map(!_.isEmpty)) if (label.getLabel != null) nbt.setString(LabelTag, label.getLabel) } diff --git a/src/main/scala/li/cil/oc/common/tileentity/Redstone.scala b/src/main/scala/li/cil/oc/common/tileentity/Redstone.scala index 96785309c..f44dc9063 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Redstone.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Redstone.scala @@ -2,22 +2,25 @@ package li.cil.oc.common.tileentity import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.network.Component +import li.cil.oc.api.network.Node import li.cil.oc.api.network.Visibility import li.cil.oc.integration.util.BundledRedstone import li.cil.oc.server.component +import li.cil.oc.server.component.RedstoneVanilla import li.cil.oc.util.ExtendedNBT._ import net.minecraft.nbt.NBTTagCompound import net.minecraft.util.EnumFacing class Redstone extends traits.Environment with traits.BundledRedstoneAware with traits.Tickable { - val instance = + val instance: RedstoneVanilla = if (BundledRedstone.isAvailable) new component.Redstone.Bundled(this) else new component.Redstone.Vanilla(this) instance.wakeNeighborsOnly = false - val node = instance.node - val dummyNode = if (node != null) { + val node: Component = instance.node + val dummyNode: Node = if (node != null) { node.setVisibility(Visibility.Network) _isOutputEnabled = true api.Network.newNode(this, Visibility.None).create() diff --git a/src/main/scala/li/cil/oc/common/tileentity/Relay.scala b/src/main/scala/li/cil/oc/common/tileentity/Relay.scala index a48fa9fee..d1d9e6ecf 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Relay.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Relay.scala @@ -1,6 +1,8 @@ package li.cil.oc.common.tileentity import com.google.common.base.Charsets +import li.cil.oc.api.detail.ItemInfo +import li.cil.oc.api.network.Component //import dan200.computercraft.api.peripheral.IComputerAccess import li.cil.oc.Constants import li.cil.oc.Localization @@ -33,10 +35,10 @@ import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly class Relay extends traits.SwitchLike with traits.ComponentInventory with traits.PowerAcceptor with Analyzable with WirelessEndpoint with QuantumNetwork.QuantumNode { - lazy final val WirelessNetworkCard = api.Items.get(Constants.ItemName.WirelessNetworkCard) - lazy final val LinkedCard = api.Items.get(Constants.ItemName.LinkedCard) + lazy final val WirelessNetworkCard: ItemInfo = api.Items.get(Constants.ItemName.WirelessNetworkCard) + lazy final val LinkedCard: ItemInfo = api.Items.get(Constants.ItemName.LinkedCard) - var strength = Settings.get.maxWirelessRange + var strength: Double = Settings.get.maxWirelessRange var isRepeater = true @@ -46,7 +48,7 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits var tunnel = "creative" - val componentNodes = Array.fill(6)(api.Network.newNode(this, Visibility.Network). + val componentNodes: Array[Component] = Array.fill(6)(api.Network.newNode(this, Visibility.Network). withComponent("relay"). create()) @@ -55,12 +57,12 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits @SideOnly(Side.CLIENT) override protected def hasConnector(side: EnumFacing) = true - override protected def connector(side: EnumFacing) = sidedNode(side) match { + override protected def connector(side: EnumFacing): Option[Connector] = sidedNode(side) match { case connector: Connector => Option(connector) case _ => None } - override def energyThroughput = Settings.get.accessPointRate + override def energyThroughput: Double = Settings.get.accessPointRate // ----------------------------------------------------------------------- // @@ -152,7 +154,7 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits // ----------------------------------------------------------------------- // - override protected def createNode(plug: Plug) = api.Network.newNode(plug, Visibility.Network). + override protected def createNode(plug: Plug): Connector = api.Network.newNode(plug, Visibility.Network). withConnector(math.round(Settings.get.bufferAccessPoint)). create() @@ -226,9 +228,9 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits } } - override def getSizeInventory = InventorySlots.relay.length + override def getSizeInventory: Int = InventorySlots.relay.length - override def isItemValidForSlot(slot: Int, stack: ItemStack) = + override def isItemValidForSlot(slot: Int, stack: ItemStack): Boolean = Option(Driver.driverFor(stack, getClass)).fold(false)(driver => { val provided = InventorySlots.relay(slot) val tierSatisfied = driver.slot(stack) == provided.slot && driver.tier(stack) <= provided.tier @@ -244,8 +246,8 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits override def readFromNBTForServer(nbt: NBTTagCompound) { super.readFromNBTForServer(nbt) - for (slot <- items.indices) items(slot) collect { - case stack => updateLimits(slot, stack) + for (slot <- items.indices) if (!items(slot).isEmpty) { + updateLimits(slot, items(slot)) } if (nbt.hasKey(StrengthTag)) { @@ -260,7 +262,7 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits } } - override def writeToNBTForServer(nbt: NBTTagCompound) = { + override def writeToNBTForServer(nbt: NBTTagCompound): Unit = { super.writeToNBTForServer(nbt) nbt.setDouble(StrengthTag, strength) nbt.setBoolean(IsRepeaterTag, isRepeater) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala index 45bff803e..27dc8908f 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala @@ -22,6 +22,7 @@ import li.cil.oc.integration.opencomputers.DriverKeyboard import li.cil.oc.integration.opencomputers.DriverRedstoneCard import li.cil.oc.integration.opencomputers.DriverScreen import li.cil.oc.server.agent +import li.cil.oc.server.agent.Player import li.cil.oc.server.component import li.cil.oc.server.{PacketSender => ServerPacketSender} import li.cil.oc.util.BlockPosition @@ -64,7 +65,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot val info = new RobotData() - val bot = if (isServer) new component.Robot(this) else null + val bot: component.Robot = if (isServer) new component.Robot(this) else null if (isServer) { machine.setCostPerTick(Settings.get.robotCost) @@ -80,30 +81,30 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot super.getCapability(capability, facing) } - override def tier = info.tier + override def tier: Int = info.tier - def isCreative = tier == Tier.Four + def isCreative: Boolean = tier == Tier.Four val equipmentInventory = new InventoryProxy { - override def inventory = Robot.this + override def inventory: Robot = Robot.this override def getSizeInventory = 4 } // Wrapper for the part of the inventory that is mutable. val mainInventory = new InventoryProxy { - override def inventory = Robot.this + override def inventory: Robot = Robot.this - override def getSizeInventory = Robot.this.inventorySize + override def getSizeInventory: Int = Robot.this.inventorySize - override def offset = equipmentInventory.getSizeInventory + override def offset: Int = equipmentInventory.getSizeInventory } val actualInventorySize = 100 - def maxInventorySize = actualInventorySize - equipmentInventory.getSizeInventory - componentCount + def maxInventorySize: Int = actualInventorySize - equipmentInventory.getSizeInventory - componentCount - var inventorySize = -1 + var inventorySize: Int = -1 var selectedSlot = 0 @@ -115,9 +116,9 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot } val tank = new internal.MultiTank { - override def tankCount = Robot.this.tankCount + override def tankCount: Int = Robot.this.tankCount - override def getFluidTank(index: Int) = Robot.this.getFluidTank(index) + override def getFluidTank(index: Int): ManagedEnvironment with IFluidTank = Robot.this.getFluidTank(index) } var selectedTank = 0 @@ -127,16 +128,16 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot // For client. var renderingErrored = false - override def componentCount = info.components.length + override def componentCount: Int = info.components.length - override def getComponentInSlot(index: Int) = components(index).orNull + override def getComponentInSlot(index: Int): ManagedEnvironment = components(index).orNull - override def player = { + override def player: Player = { agent.Player.updatePositionAndRotation(player_, facing, facing) player_ } - override def synchronizeSlot(slot: Int) = if (slot >= 0 && slot < getSizeInventory) this.synchronized { + override def synchronizeSlot(slot: Int): Unit = if (slot >= 0 && slot < getSizeInventory) this.synchronized { val stack = getStackInSlot(slot) components(slot) match { case Some(component) => @@ -147,9 +148,9 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot ServerPacketSender.sendRobotInventory(this, slot, stack) } - def containerSlots = 1 to info.containers.length + def containerSlots: Range.Inclusive = 1 to info.containers.length - def componentSlots = getSizeInventory - componentCount until getSizeInventory + def componentSlots: Range = getSizeInventory - componentCount until getSizeInventory def inventorySlots: Range = equipmentInventory.getSizeInventory until (equipmentInventory.getSizeInventory + mainInventory.getSizeInventory) @@ -158,19 +159,19 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot ServerPacketSender.sendRobotLightChange(this) } - override def shouldAnimate = isRunning + override def shouldAnimate: Boolean = isRunning // ----------------------------------------------------------------------- // - override def node = if (isServer) machine.node else null + override def node: Node = if (isServer) machine.node else null var globalBuffer, globalBufferSize = 0.0 val maxComponents = 32 - var ownerName = Settings.get.fakePlayerName + var ownerName: String = Settings.get.fakePlayerName - var ownerUUID = Settings.get.fakePlayerProfile.getId + var ownerUUID: UUID = Settings.get.fakePlayerProfile.getId var animationTicksLeft = 0 @@ -188,11 +189,11 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot // ----------------------------------------------------------------------- // - override def name = info.name + override def name: String = info.name override def setName(name: String): Unit = info.name = name - override def onAnalyze(player: EntityPlayer, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = { + override def onAnalyze(player: EntityPlayer, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Array[Node] = { player.sendMessage(Localization.Analyzer.RobotOwner(ownerName)) player.sendMessage(Localization.Analyzer.RobotName(player_.getName)) MinecraftForge.EVENT_BUS.post(new RobotAnalyzeEvent(this, player)) @@ -280,18 +281,18 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot // ----------------------------------------------------------------------- // - def isAnimatingMove = animationTicksLeft > 0 && moveFrom.isDefined + def isAnimatingMove: Boolean = animationTicksLeft > 0 && moveFrom.isDefined - def isAnimatingSwing = animationTicksLeft > 0 && swingingTool + def isAnimatingSwing: Boolean = animationTicksLeft > 0 && swingingTool - def isAnimatingTurn = animationTicksLeft > 0 && turnAxis != 0 + def isAnimatingTurn: Boolean = animationTicksLeft > 0 && turnAxis != 0 - def animateSwing(duration: Double) = if (items(0).isDefined) { + def animateSwing(duration: Double): Unit = if (!items(0).isEmpty) { setAnimateSwing((duration * 20).toInt) ServerPacketSender.sendRobotAnimateSwing(this) } - def animateTurn(clockwise: Boolean, duration: Double) = { + def animateTurn(clockwise: Boolean, duration: Double): Unit = { setAnimateTurn(if (clockwise) 1 else -1, (duration * 20).toInt) ServerPacketSender.sendRobotAnimateTurn(this) } @@ -325,7 +326,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot override def shouldRenderInPass(pass: Int) = true - override def getRenderBoundingBox = + override def getRenderBoundingBox: AxisAlignedBB = if (getBlockType != null && getWorld != null) getBlockType.getCollisionBoundingBox(getWorld.getBlockState(getPos), getWorld, getPos).expand(0.5, 0.5, 0.5).offset(getPos) else @@ -456,7 +457,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot } // Side check for Waila (and other mods that may call this client side). - override def writeToNBTForServer(nbt: NBTTagCompound) = if (isServer) this.synchronized { + override def writeToNBTForServer(nbt: NBTTagCompound): Unit = if (isServer) this.synchronized { info.save(nbt) // Note: computer is saved when proxy is saved (in proxy's super writeToNBT) @@ -505,7 +506,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot connectComponents() } - override def writeToNBTForClient(nbt: NBTTagCompound) = this.synchronized { + override def writeToNBTForClient(nbt: NBTTagCompound): Unit = this.synchronized { super.writeToNBTForClient(nbt) save(nbt) info.save(nbt) @@ -634,9 +635,9 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot } } - override def isComponentSlot(slot: Int, stack: ItemStack) = (containerSlots ++ componentSlots) contains slot + override def isComponentSlot(slot: Int, stack: ItemStack): Boolean = (containerSlots ++ componentSlots) contains slot - def containerSlotType(slot: Int) = if (containerSlots contains slot) { + def containerSlotType(slot: Int): String = if (containerSlots contains slot) { val stack = info.containers(slot - 1) Option(Driver.driverFor(stack, getClass)) match { case Some(driver: Container) => driver.providedSlot(stack) @@ -645,7 +646,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot } else Slot.None - def containerSlotTier(slot: Int) = if (containerSlots contains slot) { + def containerSlotTier(slot: Int): Int = if (containerSlots contains slot) { val stack = info.containers(slot - 1) Option(Driver.driverFor(stack, getClass)) match { case Some(driver: Container) => driver.providedTier(stack) @@ -654,13 +655,13 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot } else Tier.None - def isToolSlot(slot: Int) = slot == 0 + def isToolSlot(slot: Int): Boolean = slot == 0 - def isContainerSlot(slot: Int) = containerSlots contains slot + def isContainerSlot(slot: Int): Boolean = containerSlots contains slot - def isInventorySlot(slot: Int) = inventorySlots contains slot + def isInventorySlot(slot: Int): Boolean = inventorySlots contains slot - def isFloppySlot(slot: Int) = getStackInSlot(slot) != null && isComponentSlot(slot, getStackInSlot(slot)) && { + def isFloppySlot(slot: Int): Boolean = !getStackInSlot(slot).isEmpty && isComponentSlot(slot, getStackInSlot(slot)) && { val stack = getStackInSlot(slot) Option(Driver.driverFor(stack, getClass)) match { case Some(driver) => driver.slot(stack) == Slot.Floppy @@ -668,13 +669,13 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot } } - def isUpgradeSlot(slot: Int) = containerSlotType(slot) == Slot.Upgrade + def isUpgradeSlot(slot: Int): Boolean = containerSlotType(slot) == Slot.Upgrade // ----------------------------------------------------------------------- // - override def componentSlot(address: String) = components.indexWhere(_.exists(env => env.node != null && env.node.address == address)) + override def componentSlot(address: String): Int = components.indexWhere(_.exists(env => env.node != null && env.node.address == address)) - override def hasRedstoneCard = (containerSlots ++ componentSlots).exists(slot => Option(getStackInSlot(slot)).fold(false)(DriverRedstoneCard.worksWith(_, getClass))) + override def hasRedstoneCard: Boolean = (containerSlots ++ componentSlots).exists(slot => Option(getStackInSlot(slot)).fold(false)(DriverRedstoneCard.worksWith(_, getClass))) private def computeInventorySize() = math.min(maxInventorySize, (containerSlots ++ componentSlots).foldLeft(0)((acc, slot) => acc + (Option(getStackInSlot(slot)) match { case Some(stack) => Option(Driver.driverFor(stack, getClass)) match { @@ -686,7 +687,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot private var updatingInventorySize = false - def updateInventorySize() = this.synchronized(if (!updatingInventorySize) try { + def updateInventorySize(): Unit = this.synchronized(if (!updatingInventorySize) try { updatingInventorySize = true val newInventorySize = computeInventorySize() if (newInventorySize != inventorySize) { @@ -696,8 +697,8 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot val removed = mutable.ArrayBuffer.empty[ItemStack] for (slot <- realSize until getSizeInventory - componentCount) { val stack = getStackInSlot(slot) - setInventorySlotContents(slot, null) - if (stack != null) removed += stack + setInventorySlotContents(slot, ItemStack.EMPTY) + if (!stack.isEmpty) removed += stack } val copyComponentCount = math.min(getSizeInventory, componentCount) Array.copy(components, getSizeInventory - copyComponentCount, components, realSize, copyComponentCount) @@ -720,11 +721,11 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot // ----------------------------------------------------------------------- // - var getSizeInventory = actualInventorySize + var getSizeInventory: Int = actualInventorySize override def getInventoryStackLimit = 64 - override def getStackInSlot(slot: Int) = { + override def getStackInSlot(slot: Int): ItemStack = { if (slot >= getSizeInventory) null // Required to always show 16 inventory slots in GUI. else if (slot >= getSizeInventory - componentCount) { info.components(slot - (getSizeInventory - componentCount)) @@ -733,8 +734,8 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot } override def setInventorySlotContents(slot: Int, stack: ItemStack) { - if (slot < getSizeInventory - componentCount && (isItemValidForSlot(slot, stack) || stack == null)) { - if (stack != null && stack.getCount > 1 && isComponentSlot(slot, stack)) { + if (slot < getSizeInventory - componentCount && (isItemValidForSlot(slot, stack) || stack.isEmpty)) { + if (!stack.isEmpty && stack.getCount > 1 && isComponentSlot(slot, stack)) { super.setInventorySlotContents(slot, stack.splitStack(1)) if (stack.getCount > 0 && isServer) { player().inventory.addItemStackToInventory(stack) @@ -743,13 +744,13 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot } else super.setInventorySlotContents(slot, stack) } - else if (stack != null && stack.getCount > 0 && !getWorld.isRemote) spawnStackInWorld(stack, Option(EnumFacing.UP)) + else if (!stack.isEmpty && stack.getCount > 0 && !getWorld.isRemote) spawnStackInWorld(stack, Option(EnumFacing.UP)) } - override def isUsableByPlayer(player: EntityPlayer) = + override def isUsableByPlayer(player: EntityPlayer): Boolean = super.isUsableByPlayer(player) && (!isCreative || player.capabilities.isCreativeMode) - override def isItemValidForSlot(slot: Int, stack: ItemStack) = (slot, Option(Driver.driverFor(stack, getClass))) match { + override def isItemValidForSlot(slot: Int, stack: ItemStack): Boolean = (slot, Option(Driver.driverFor(stack, getClass))) match { case (0, _) => true // Allow anything in the tool slot. case (i, Some(driver)) if isContainerSlot(i) => // Yay special cases! Dynamic screens kind of work, but are pretty derpy @@ -769,10 +770,10 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot // ----------------------------------------------------------------------- // - override def dropSlot(slot: Int, count: Int, direction: Option[EnumFacing]) = + override def dropSlot(slot: Int, count: Int, direction: Option[EnumFacing]): Boolean = InventoryUtils.dropSlot(BlockPosition(x, y, z, getWorld), mainInventory, slot, count, direction) - override def dropAllSlots() = { + override def dropAllSlots(): Unit = { InventoryUtils.dropSlot(BlockPosition(x, y, z, getWorld), this, 0, Int.MaxValue) for (slot <- containerSlots) { InventoryUtils.dropSlot(BlockPosition(x, y, z, getWorld), this, slot, Int.MaxValue) @@ -782,14 +783,14 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot // ----------------------------------------------------------------------- // - override def canExtractItem(slot: Int, stack: ItemStack, side: EnumFacing) = + override def canExtractItem(slot: Int, stack: ItemStack, side: EnumFacing): Boolean = getSlotsForFace(side).contains(slot) - override def canInsertItem(slot: Int, stack: ItemStack, side: EnumFacing) = + override def canInsertItem(slot: Int, stack: ItemStack, side: EnumFacing): Boolean = getSlotsForFace(side).contains(slot) && isItemValidForSlot(slot, stack) - override def getSlotsForFace(side: EnumFacing) = + override def getSlotsForFace(side: EnumFacing): Array[Int] = toLocal(side) match { case EnumFacing.WEST => Array(0) // Tool case EnumFacing.EAST => containerSlots.toArray @@ -798,7 +799,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot // ----------------------------------------------------------------------- // - def tryGetTank(tank: Int) = { + def tryGetTank(tank: Int): Option[ManagedEnvironment with IFluidTank] = { val tanks = components.collect { case Some(tank: IFluidTank) => tank } @@ -806,30 +807,30 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot else Option(tanks(tank)) } - def tankCount = components.count { + def tankCount: Int = components.count { case Some(tank: IFluidTank) => true case _ => false } - def getFluidTank(tank: Int) = tryGetTank(tank).orNull + def getFluidTank(tank: Int): ManagedEnvironment with IFluidTank = tryGetTank(tank).orNull // ----------------------------------------------------------------------- // - override def fill(resource: FluidStack, doFill: Boolean) = + override def fill(resource: FluidStack, doFill: Boolean): Int = tryGetTank(selectedTank) match { case Some(t) => t.fill(resource, doFill) case _ => 0 } - override def drain(resource: FluidStack, doDrain: Boolean) = + override def drain(resource: FluidStack, doDrain: Boolean): FluidStack = tryGetTank(selectedTank) match { case Some(t) if t.getFluid != null && t.getFluid.isFluidEqual(resource) => t.drain(resource.amount, doDrain) case _ => null } - override def drain(maxDrain: Int, doDrain: Boolean) = { + override def drain(maxDrain: Int, doDrain: Boolean): FluidStack = { tryGetTank(selectedTank) match { case Some(t) => t.drain(maxDrain, doDrain) @@ -837,7 +838,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot } } - def canFill(fluid: Fluid) = { + def canFill(fluid: Fluid): Boolean = { tryGetTank(selectedTank) match { case Some(t) => t.getFluid == null || t.getFluid.getFluid == fluid case _ => false @@ -851,7 +852,7 @@ class Robot extends traits.Computer with traits.PowerInformation with traits.Rot } } - override def getTankProperties = FluidTankProperties.convert(components.collect { + override def getTankProperties: Array[IFluidTankProperties] = FluidTankProperties.convert(components.collect { case Some(t: IFluidTank) => t.getInfo }).map(_.asInstanceOf[IFluidTankProperties]) } diff --git a/src/main/scala/li/cil/oc/common/tileentity/Switch.scala b/src/main/scala/li/cil/oc/common/tileentity/Switch.scala index 090715988..0280d5acc 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Switch.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Switch.scala @@ -82,8 +82,8 @@ class Switch extends traits.SwitchLike with traits.NotAnalyzable with traits.Com override def readFromNBTForServer(nbt: NBTTagCompound) { super.readFromNBTForServer(nbt) - for (slot <- items.indices) items(slot) collect { - case stack => updateLimits(slot, stack) + for (slot <- items.indices) if (!items(slot).isEmpty) { + updateLimits(slot, items(slot)) } } } diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala index c92ebaf2e..38e5cbf39 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala @@ -5,6 +5,8 @@ import java.util import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.machine.Machine +import li.cil.oc.api.network.Node import li.cil.oc.client.Sound import li.cil.oc.common.tileentity.RobotProxy import li.cil.oc.integration.opencomputers.DriverRedstoneCard @@ -26,9 +28,9 @@ import scala.collection.mutable trait Computer extends Environment with ComponentInventory with Rotatable with BundledRedstoneAware with api.network.Analyzable with api.machine.MachineHost with StateAware with Tickable { private lazy val _machine = if (isServer) api.Machine.create(this) else null - def machine = _machine + def machine: Machine = _machine - override def node = if (isServer) machine.node else null + override def node: Node = if (isServer) machine.node else null private var _isRunning = false @@ -41,11 +43,11 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B // ----------------------------------------------------------------------- // - def canInteract(player: String) = + def canInteract(player: String): Boolean = if (isServer) machine.canInteract(player) else !Settings.get.canComputersBeOwned || _users.isEmpty || _users.contains(player) - def isRunning = _isRunning + def isRunning: Boolean = _isRunning def setRunning(value: Boolean): Unit = if (value != _isRunning) { _isRunning = value @@ -69,7 +71,7 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B _users ++= list } - override def getCurrentState = { + override def getCurrentState: util.EnumSet[api.util.StateAware.State] = { if (isRunning) util.EnumSet.of(api.util.StateAware.State.IsWorking) else util.EnumSet.noneOf(classOf[api.util.StateAware.State]) } @@ -77,16 +79,16 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B // ----------------------------------------------------------------------- // override def internalComponents(): lang.Iterable[ItemStack] = (0 until getSizeInventory).collect { - case slot if getStackInSlot(slot) != null && isComponentSlot(slot, getStackInSlot(slot)) => getStackInSlot(slot) + case slot if !getStackInSlot(slot).isEmpty && isComponentSlot(slot, getStackInSlot(slot)) => getStackInSlot(slot) } - override def onMachineConnect(node: api.network.Node) = this.onConnect(node) + override def onMachineConnect(node: api.network.Node): Unit = this.onConnect(node) - override def onMachineDisconnect(node: api.network.Node) = this.onDisconnect(node) + override def onMachineDisconnect(node: api.network.Node): Unit = this.onDisconnect(node) - def hasRedstoneCard = items.exists { - case Some(item) => machine.isRunning && DriverRedstoneCard.worksWith(item, getClass) + def hasRedstoneCard: Boolean = items.exists { + case item if !item.isEmpty => machine.isRunning && DriverRedstoneCard.worksWith(item, getClass) case _ => false } @@ -190,7 +192,7 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B } } - override def isUsableByPlayer(player: EntityPlayer) = + override def isUsableByPlayer(player: EntityPlayer): Boolean = super.isUsableByPlayer(player) && (player match { case fakePlayer: agent.Player => canInteract(fakePlayer.agent.ownerName()) case _ => canInteract(player.getName) diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Inventory.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Inventory.scala index e60f1ce5c..38ae6cad4 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/Inventory.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Inventory.scala @@ -10,7 +10,7 @@ import net.minecraft.util.EnumFacing import net.minecraft.util.text.ITextComponent trait Inventory extends TileEntity with inventory.Inventory { - private lazy val inventory = Array.fill[Option[ItemStack]](getSizeInventory)(None) + private lazy val inventory = Array.fill[ItemStack](getSizeInventory)(ItemStack.EMPTY) def items = inventory diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala index 3878d61b3..f66269a24 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala @@ -46,7 +46,7 @@ trait PowerBalancer extends PowerInformation with SidedEnvironment with Tickable } } - protected def distribute() = { + protected def distribute(): (Double, Double) = { var sumBuffer, sumSize = 0.0 for (node <- connectors if isPrimary(node)) { sumBuffer += node.globalBuffer diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/TextBuffer.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/TextBuffer.scala index ffcb64e49..bc0ae7798 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/TextBuffer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/TextBuffer.scala @@ -3,12 +3,14 @@ package li.cil.oc.common.tileentity.traits import li.cil.oc.Constants import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.internal +import li.cil.oc.api.network.Node import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly trait TextBuffer extends Environment with Tickable { - lazy val buffer = { + lazy val buffer: internal.TextBuffer = { val screenItem = api.Items.get(Constants.BlockName.ScreenTier1).createItemStack(1) val buffer = api.Driver.driverFor(screenItem, getClass).createEnvironment(screenItem, this).asInstanceOf[api.internal.TextBuffer] val (maxWidth, maxHeight) = Settings.screenResolutionsByTier(tier) @@ -17,7 +19,7 @@ trait TextBuffer extends Environment with Tickable { buffer } - override def node = buffer.node + override def node: Node = buffer.node def tier: Int @@ -30,12 +32,12 @@ trait TextBuffer extends Environment with Tickable { // ----------------------------------------------------------------------- // - override def readFromNBTForServer(nbt: NBTTagCompound) = { + override def readFromNBTForServer(nbt: NBTTagCompound): Unit = { super.readFromNBTForServer(nbt) buffer.load(nbt) } - override def writeToNBTForServer(nbt: NBTTagCompound) = { + override def writeToNBTForServer(nbt: NBTTagCompound): Unit = { super.writeToNBTForServer(nbt) buffer.save(nbt) } diff --git a/src/main/scala/li/cil/oc/integration/Mods.scala b/src/main/scala/li/cil/oc/integration/Mods.scala index 997e9581b..fd4fae1b3 100644 --- a/src/main/scala/li/cil/oc/integration/Mods.scala +++ b/src/main/scala/li/cil/oc/integration/Mods.scala @@ -4,20 +4,22 @@ import li.cil.oc.Settings import li.cil.oc.integration import net.minecraftforge.fml.common.Loader import net.minecraftforge.fml.common.ModAPIManager +import net.minecraftforge.fml.common.versioning.ArtifactVersion import net.minecraftforge.fml.common.versioning.VersionParser import scala.collection.mutable +import scala.collection.mutable.ArrayBuffer object Mods { private val handlers = mutable.Set.empty[ModProxy] private val knownMods = mutable.ArrayBuffer.empty[ModBase] - lazy val isPowerProvidingModPresent = knownMods.exists(mod => mod.providesPower && mod.isAvailable) + lazy val isPowerProvidingModPresent: Boolean = knownMods.exists(mod => mod.providesPower && mod.isAvailable) // ----------------------------------------------------------------------- // - def All = knownMods.clone() + def All: ArrayBuffer[ModBase] = knownMods.clone() val Forestry = new SimpleMod(IDs.Forestry, version = "@[5.2,)") val JustEnoughItems = new SimpleMod(IDs.JustEnoughItems) val Minecraft = new SimpleMod(IDs.Minecraft) @@ -58,9 +60,9 @@ object Mods { object IDs { final val Forestry = "forestry" - final val JustEnoughItems = "JEI" - final val Minecraft = "Minecraft" - final val OpenComputers = "OpenComputers" + final val JustEnoughItems = "jei" + final val Minecraft = "minecraft" + final val OpenComputers = "opencomputers" final val TIS3D = "tis3d" } @@ -71,23 +73,23 @@ object Mods { private var powerDisabled = false - protected lazy val isPowerModEnabled = !providesPower || (!Settings.get.pureIgnorePower && !Settings.get.powerModBlacklist.contains(id)) + protected lazy val isPowerModEnabled: Boolean = !providesPower || (!Settings.get.pureIgnorePower && !Settings.get.powerModBlacklist.contains(id)) def isModAvailable: Boolean def id: String - def isAvailable = !powerDisabled && isModAvailable && isPowerModEnabled + def isAvailable: Boolean = !powerDisabled && isModAvailable && isPowerModEnabled def providesPower: Boolean = false // This is called from the class transformer when injecting an interface of // this power type fails, to avoid class not found / class cast exceptions. - def disablePower() = powerDisabled = true + def disablePower(): Unit = powerDisabled = true def container = Option(Loader.instance.getIndexedModList.get(id)) - def version = container.map(_.getProcessedVersion) + def version: Option[ArtifactVersion] = container.map(_.getProcessedVersion) } class SimpleMod(val id: String, override val providesPower: Boolean = false, version: String = "") extends ModBase { @@ -98,7 +100,7 @@ object Mods { else ModAPIManager.INSTANCE.hasAPI(version.getLabel) } - def isModAvailable = isModAvailable_ + def isModAvailable: Boolean = isModAvailable_ } class ClassBasedMod(val id: String, val classNames: String*)(override val providesPower: Boolean = false) extends ModBase { @@ -106,7 +108,7 @@ object Mods { case _: Throwable => false }) - def isModAvailable = isModAvailable_ + def isModAvailable: Boolean = isModAvailable_ } } diff --git a/src/main/scala/li/cil/oc/integration/jei/CallbackDocHandler.scala b/src/main/scala/li/cil/oc/integration/jei/CallbackDocHandler.scala index 255235fc4..76ffe5a39 100644 --- a/src/main/scala/li/cil/oc/integration/jei/CallbackDocHandler.scala +++ b/src/main/scala/li/cil/oc/integration/jei/CallbackDocHandler.scala @@ -7,9 +7,6 @@ import com.google.common.base.Strings import com.mojang.realmsclient.gui.ChatFormatting import li.cil.oc.Settings import li.cil.oc.api -import li.cil.oc.api.driver.EnvironmentAware -import li.cil.oc.api.prefab.DriverTileEntity -import li.cil.oc.server.driver.Registry import li.cil.oc.server.machine.Callbacks import mezz.jei.api.IGuiHelper import mezz.jei.api.IModRegistry @@ -37,21 +34,6 @@ object CallbackDocHandler { case stack: ItemStack => val callbacks = api.Driver.environmentsFor(stack).flatMap(getCallbacks).toBuffer - // TODO remove in OC 1.7 - if (callbacks.isEmpty) { - callbacks ++= (Option(Registry.driverFor(stack)) match { - case Some(driver: EnvironmentAware) => - getCallbacks(driver.providedEnvironment(stack)) - case _ => Registry.blocks.collect { - case driver: DriverTileEntity with EnvironmentAware => - if (driver.getTileEntityClass != null && !driver.getTileEntityClass.isInterface) - driver.providedEnvironment(stack) - else null - case driver: EnvironmentAware => driver.providedEnvironment(stack) - }.filter(_ != null).flatMap(getCallbacks) - }) - } - if (callbacks.nonEmpty) { val pages = mutable.Buffer.empty[String] val lastPage = callbacks.toArray.sorted.foldLeft("") { @@ -94,16 +76,16 @@ object CallbackDocHandler { } else Seq.empty - protected def wrap(line: String, width: Int) = Minecraft.getMinecraft.fontRenderer.listFormattedStringToWidth(line, width) + protected def wrap(line: String, width: Int): util.List[String] = Minecraft.getMinecraft.fontRenderer.listFormattedStringToWidth(line, width) object CallbackDocRecipeHandler extends IRecipeHandler[CallbackDocRecipe] { - override def getRecipeWrapper(recipe: CallbackDocRecipe) = recipe + override def getRecipeWrapper(recipe: CallbackDocRecipe): CallbackDocRecipe = recipe override def getRecipeCategoryUid(recipe: CallbackDocRecipe): String = CallbackDocRecipeCategory.getUid override def isRecipeValid(recipe: CallbackDocRecipe) = true - override def getRecipeClass = classOf[CallbackDocRecipe] + override def getRecipeClass: Class[CallbackDocRecipe] = classOf[CallbackDocRecipe] } class CallbackDocRecipe(val stack: ItemStack, val page: String) extends BlankRecipeWrapper { diff --git a/src/main/scala/li/cil/oc/integration/minecraft/DriverBeacon.scala b/src/main/scala/li/cil/oc/integration/minecraft/DriverBeacon.scala index 1b1965108..5f8ae6edc 100644 --- a/src/main/scala/li/cil/oc/integration/minecraft/DriverBeacon.scala +++ b/src/main/scala/li/cil/oc/integration/minecraft/DriverBeacon.scala @@ -54,7 +54,7 @@ object DriverBeacon extends DriverSidedTileEntity { object Provider extends EnvironmentProvider { override def getEnvironment(stack: ItemStack): Class[_] = { - if (stack != null && Block.getBlockFromItem(stack.getItem) == Blocks.BEACON) + if (!stack.isEmpty && Block.getBlockFromItem(stack.getItem) == Blocks.BEACON) classOf[Environment] else null } diff --git a/src/main/scala/li/cil/oc/integration/minecraft/DriverBrewingStand.scala b/src/main/scala/li/cil/oc/integration/minecraft/DriverBrewingStand.scala index 9ef72937c..f46a7456b 100644 --- a/src/main/scala/li/cil/oc/integration/minecraft/DriverBrewingStand.scala +++ b/src/main/scala/li/cil/oc/integration/minecraft/DriverBrewingStand.scala @@ -35,7 +35,7 @@ object DriverBrewingStand extends DriverSidedTileEntity { object Provider extends EnvironmentProvider { override def getEnvironment(stack: ItemStack): Class[_] = { - if (stack != null && stack.getItem == Items.BREWING_STAND) + if (!stack.isEmpty && stack.getItem == Items.BREWING_STAND) classOf[Environment] else null } diff --git a/src/main/scala/li/cil/oc/integration/minecraft/DriverCommandBlock.scala b/src/main/scala/li/cil/oc/integration/minecraft/DriverCommandBlock.scala index cabf42638..7c6f55fb9 100644 --- a/src/main/scala/li/cil/oc/integration/minecraft/DriverCommandBlock.scala +++ b/src/main/scala/li/cil/oc/integration/minecraft/DriverCommandBlock.scala @@ -56,7 +56,7 @@ object DriverCommandBlock extends DriverSidedTileEntity { object Provider extends EnvironmentProvider { override def getEnvironment(stack: ItemStack): Class[_] = { - if (stack != null && Block.getBlockFromItem(stack.getItem) == Blocks.COMMAND_BLOCK) + if (!stack.isEmpty && Block.getBlockFromItem(stack.getItem) == Blocks.COMMAND_BLOCK) classOf[Environment] else null } diff --git a/src/main/scala/li/cil/oc/integration/minecraft/DriverComparator.scala b/src/main/scala/li/cil/oc/integration/minecraft/DriverComparator.scala index 2d58a8fd4..a7ea2143e 100644 --- a/src/main/scala/li/cil/oc/integration/minecraft/DriverComparator.scala +++ b/src/main/scala/li/cil/oc/integration/minecraft/DriverComparator.scala @@ -35,7 +35,7 @@ object DriverComparator extends DriverSidedTileEntity { object Provider extends EnvironmentProvider { override def getEnvironment(stack: ItemStack): Class[_] = { - if (stack != null && stack.getItem == Items.COMPARATOR) + if (!stack.isEmpty && stack.getItem == Items.COMPARATOR) classOf[Environment] else null } diff --git a/src/main/scala/li/cil/oc/integration/minecraft/DriverFurnace.scala b/src/main/scala/li/cil/oc/integration/minecraft/DriverFurnace.scala index 12d2896da..90b7e51e1 100644 --- a/src/main/scala/li/cil/oc/integration/minecraft/DriverFurnace.scala +++ b/src/main/scala/li/cil/oc/integration/minecraft/DriverFurnace.scala @@ -56,7 +56,7 @@ object DriverFurnace extends DriverSidedTileEntity { object Provider extends EnvironmentProvider { override def getEnvironment(stack: ItemStack): Class[_] = { - if (stack != null && Block.getBlockFromItem(stack.getItem) == Blocks.FURNACE) + if (!stack.isEmpty && Block.getBlockFromItem(stack.getItem) == Blocks.FURNACE) classOf[Environment] else null } diff --git a/src/main/scala/li/cil/oc/integration/minecraft/DriverInventory.java b/src/main/scala/li/cil/oc/integration/minecraft/DriverInventory.java index a91ce5d29..cec56bb9f 100644 --- a/src/main/scala/li/cil/oc/integration/minecraft/DriverInventory.java +++ b/src/main/scala/li/cil/oc/integration/minecraft/DriverInventory.java @@ -60,7 +60,7 @@ public final class DriverInventory extends DriverSidedTileEntity { if (notPermitted()) return new Object[]{null, "permission denied"}; final int slot = checkSlot(args, 0); final ItemStack stack = tileEntity.getStackInSlot(slot); - if (stack != null) { + if (!stack.isEmpty()) { return new Object[]{stack.getCount()}; } else { return new Object[]{0}; @@ -72,7 +72,7 @@ public final class DriverInventory extends DriverSidedTileEntity { if (notPermitted()) return new Object[]{null, "permission denied"}; final int slot = checkSlot(args, 0); final ItemStack stack = tileEntity.getStackInSlot(slot); - if (stack != null) { + if (!stack.isEmpty()) { return new Object[]{Math.min(tileEntity.getInventoryStackLimit(), stack.getMaxStackSize())}; } else { return new Object[]{tileEntity.getInventoryStackLimit()}; @@ -89,9 +89,9 @@ public final class DriverInventory extends DriverSidedTileEntity { } final ItemStack stackA = tileEntity.getStackInSlot(slotA); final ItemStack stackB = tileEntity.getStackInSlot(slotB); - if (stackA == null && stackB == null) { + if (stackA.isEmpty() && stackB.isEmpty()) { return new Object[]{true}; - } else if (stackA != null && stackB != null) { + } else if (!stackA.isEmpty() && !stackB.isEmpty()) { return new Object[]{itemEquals(stackA, stackB)}; } else { return new Object[]{false}; @@ -109,10 +109,10 @@ public final class DriverInventory extends DriverSidedTileEntity { } final ItemStack stackA = tileEntity.getStackInSlot(slotA); final ItemStack stackB = tileEntity.getStackInSlot(slotB); - if (stackA == null) { + if (stackA.isEmpty()) { // Empty. return new Object[]{false}; - } else if (stackB == null) { + } else if (stackB.isEmpty()) { // Move. tileEntity.setInventorySlotContents(slotB, tileEntity.decrStackSize(slotA, count)); return new Object[]{true}; @@ -125,7 +125,7 @@ public final class DriverInventory extends DriverSidedTileEntity { stackA.setCount(stackA.getCount() - amount); stackB.setCount(stackB.getCount() + amount); if (stackA.getCount() == 0) { - tileEntity.setInventorySlotContents(slotA, null); + tileEntity.setInventorySlotContents(slotA, ItemStack.EMPTY); } tileEntity.markDirty(); return new Object[]{true}; diff --git a/src/main/scala/li/cil/oc/integration/minecraft/DriverMobSpawner.scala b/src/main/scala/li/cil/oc/integration/minecraft/DriverMobSpawner.scala index 0dc8203b1..17fe50ff1 100644 --- a/src/main/scala/li/cil/oc/integration/minecraft/DriverMobSpawner.scala +++ b/src/main/scala/li/cil/oc/integration/minecraft/DriverMobSpawner.scala @@ -36,7 +36,7 @@ object DriverMobSpawner extends DriverSidedTileEntity { object Provider extends EnvironmentProvider { override def getEnvironment(stack: ItemStack): Class[_] = { - if (stack != null && Block.getBlockFromItem(stack.getItem) == Blocks.MOB_SPAWNER) + if (!stack.isEmpty && Block.getBlockFromItem(stack.getItem) == Blocks.MOB_SPAWNER) classOf[Environment] else null } diff --git a/src/main/scala/li/cil/oc/integration/minecraft/DriverNoteBlock.scala b/src/main/scala/li/cil/oc/integration/minecraft/DriverNoteBlock.scala index 9008abdc2..756cb0c50 100644 --- a/src/main/scala/li/cil/oc/integration/minecraft/DriverNoteBlock.scala +++ b/src/main/scala/li/cil/oc/integration/minecraft/DriverNoteBlock.scala @@ -64,7 +64,7 @@ object DriverNoteBlock extends DriverSidedTileEntity { object Provider extends EnvironmentProvider { override def getEnvironment(stack: ItemStack): Class[_] = { - if (stack != null && Block.getBlockFromItem(stack.getItem) == Blocks.NOTEBLOCK) + if (!stack.isEmpty && Block.getBlockFromItem(stack.getItem) == Blocks.NOTEBLOCK) classOf[Environment] else null } diff --git a/src/main/scala/li/cil/oc/integration/minecraft/DriverRecordPlayer.scala b/src/main/scala/li/cil/oc/integration/minecraft/DriverRecordPlayer.scala index 0e2a21b86..ccb4fd9e8 100644 --- a/src/main/scala/li/cil/oc/integration/minecraft/DriverRecordPlayer.scala +++ b/src/main/scala/li/cil/oc/integration/minecraft/DriverRecordPlayer.scala @@ -59,7 +59,7 @@ object DriverRecordPlayer extends DriverSidedTileEntity { object Provider extends EnvironmentProvider { override def getEnvironment(stack: ItemStack): Class[_] = { - if (stack != null && Block.getBlockFromItem(stack.getItem) == Blocks.JUKEBOX) + if (!stack.isEmpty && Block.getBlockFromItem(stack.getItem) == Blocks.JUKEBOX) classOf[Environment] else null } diff --git a/src/main/scala/li/cil/oc/integration/opencomputers/DriverTablet.scala b/src/main/scala/li/cil/oc/integration/opencomputers/DriverTablet.scala index 594ee66e9..850705180 100644 --- a/src/main/scala/li/cil/oc/integration/opencomputers/DriverTablet.scala +++ b/src/main/scala/li/cil/oc/integration/opencomputers/DriverTablet.scala @@ -23,7 +23,7 @@ object DriverTablet extends Item { Tablet.Server.cache.invalidate(Tablet.getId(stack)) val data = new TabletData(stack) data.items.collect { - case Some(fs) if DriverFileSystem.worksWith(fs) => fs + case fs if !fs.isEmpty && DriverFileSystem.worksWith(fs) => fs }.headOption.map(DriverFileSystem.createEnvironment(_, host)) match { case Some(environment) => environment.node match { case component: Component => @@ -41,7 +41,7 @@ object DriverTablet extends Item { override def dataTag(stack: ItemStack) = { val data = new TabletData(stack) val index = data.items.indexWhere { - case Some(fs) => DriverFileSystem.worksWith(fs) + case fs if !fs.isEmpty => DriverFileSystem.worksWith(fs) case _ => false } if (index >= 0 && stack.hasTagCompound && stack.getTagCompound.hasKey(Settings.namespace + "items")) { diff --git a/src/main/scala/li/cil/oc/integration/util/ItemCharge.scala b/src/main/scala/li/cil/oc/integration/util/ItemCharge.scala index a67846c87..e83f7033c 100644 --- a/src/main/scala/li/cil/oc/integration/util/ItemCharge.scala +++ b/src/main/scala/li/cil/oc/integration/util/ItemCharge.scala @@ -12,10 +12,10 @@ object ItemCharge { def add(canCharge: Method, charge: Method): Unit = chargers += ((canCharge, charge)) - def canCharge(stack: ItemStack): Boolean = stack != null && chargers.exists(charger => IMC.tryInvokeStatic(charger._1, stack)(false)) + def canCharge(stack: ItemStack): Boolean = !stack.isEmpty && chargers.exists(charger => IMC.tryInvokeStatic(charger._1, stack)(false)) def charge(stack: ItemStack, amount: Double): Double = { - if (stack != null) chargers.find(charger => IMC.tryInvokeStatic(charger._1, stack)(false)) match { + if (!stack.isEmpty) chargers.find(charger => IMC.tryInvokeStatic(charger._1, stack)(false)) match { case Some(charger) => IMC.tryInvokeStatic(charger._2, stack, Double.box(amount), java.lang.Boolean.FALSE)(0.0) case _ => 0.0 } diff --git a/src/main/scala/li/cil/oc/integration/util/Wrench.scala b/src/main/scala/li/cil/oc/integration/util/Wrench.scala index d679834a6..d3f50a107 100644 --- a/src/main/scala/li/cil/oc/integration/util/Wrench.scala +++ b/src/main/scala/li/cil/oc/integration/util/Wrench.scala @@ -17,11 +17,11 @@ object Wrench { def addCheck(checker: Method): Unit = checks += checker - def isWrench(stack: ItemStack): Boolean = stack != null && checks.exists(IMC.tryInvokeStatic(_, stack)(false)) + def isWrench(stack: ItemStack): Boolean = !stack.isEmpty && checks.exists(IMC.tryInvokeStatic(_, stack)(false)) def holdsApplicableWrench(player: EntityPlayer, position: BlockPos): Boolean = - player.getHeldItemMainhand != null && usages.exists(IMC.tryInvokeStatic(_, player, position, java.lang.Boolean.FALSE)(false)) + !player.getHeldItemMainhand.isEmpty && usages.exists(IMC.tryInvokeStatic(_, player, position, java.lang.Boolean.FALSE)(false)) def wrenchUsed(player: EntityPlayer, position: BlockPos): Unit = - if (player.getHeldItemMainhand != null) usages.foreach(IMC.tryInvokeStaticVoid(_, player, position, java.lang.Boolean.TRUE)) + if (!player.getHeldItemMainhand.isEmpty) usages.foreach(IMC.tryInvokeStaticVoid(_, player, position, java.lang.Boolean.TRUE)) } diff --git a/src/main/scala/li/cil/oc/server/PacketSender.scala b/src/main/scala/li/cil/oc/server/PacketSender.scala index 4673e409b..da7201543 100644 --- a/src/main/scala/li/cil/oc/server/PacketSender.scala +++ b/src/main/scala/li/cil/oc/server/PacketSender.scala @@ -121,9 +121,9 @@ object PacketSender { } // Avoid spamming the network with disk activity notices. - val fileSystemAccessTimeouts = mutable.WeakHashMap.empty[Node, mutable.Map[String, Long]] + val fileSystemAccessTimeouts: mutable.WeakHashMap[Node, mutable.Map[String, Long]] = mutable.WeakHashMap.empty[Node, mutable.Map[String, Long]] - def sendFileSystemActivity(node: Node, host: EnvironmentHost, name: String) = fileSystemAccessTimeouts.synchronized { + def sendFileSystemActivity(node: Node, host: EnvironmentHost, name: String): Unit = fileSystemAccessTimeouts.synchronized { fileSystemAccessTimeouts.get(node) match { case Some(hostTimeouts) if hostTimeouts.getOrElse(name, 0L) > System.currentTimeMillis() => // Cooldown. case _ => @@ -156,7 +156,7 @@ object PacketSender { } } - def sendNetworkActivity(node: Node, host: EnvironmentHost) = { + def sendNetworkActivity(node: Node, host: EnvironmentHost): Unit = { val event = host match { case t: net.minecraft.tileentity.TileEntity => new NetworkActivityEvent.Server(t, node) @@ -467,7 +467,7 @@ object PacketSender { pb.writeTileEntity(t) for (slot <- 0 until t.getSizeInventory) { - pb.writeBoolean(t.getStackInSlot(slot) != null) + pb.writeBoolean(!t.getStackInSlot(slot).isEmpty) } pb.sendToPlayersNearTileEntity(t) diff --git a/src/main/scala/li/cil/oc/server/agent/Inventory.scala b/src/main/scala/li/cil/oc/server/agent/Inventory.scala index cc138e6ce..a7b8c0522 100644 --- a/src/main/scala/li/cil/oc/server/agent/Inventory.scala +++ b/src/main/scala/li/cil/oc/server/agent/Inventory.scala @@ -3,7 +3,6 @@ package li.cil.oc.server.agent import li.cil.oc.api.internal import li.cil.oc.util.ExtendedInventory._ import li.cil.oc.util.InventoryUtils -import net.minecraft.block.Block import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.InventoryPlayer import net.minecraft.item.Item @@ -12,17 +11,19 @@ import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagList import net.minecraft.block.state.IBlockState +import scala.collection.immutable + class Inventory(val agent: internal.Agent) extends InventoryPlayer(null) { - def selectedItemStack = agent.mainInventory.getStackInSlot(agent.selectedSlot) + def selectedItemStack: ItemStack = agent.mainInventory.getStackInSlot(agent.selectedSlot) - def inventorySlots = (agent.selectedSlot until getSizeInventory) ++ (0 until agent.selectedSlot) + def inventorySlots: immutable.IndexedSeq[Int] = (agent.selectedSlot until getSizeInventory) ++ (0 until agent.selectedSlot) - override def getCurrentItem = agent.equipmentInventory.getStackInSlot(0) + override def getCurrentItem: ItemStack = agent.equipmentInventory.getStackInSlot(0) - override def getFirstEmptyStack = { - if (selectedItemStack == null) agent.selectedSlot - else inventorySlots.find(getStackInSlot(_) == null).getOrElse(-1) + override def getFirstEmptyStack: Int = { + if (selectedItemStack.isEmpty) agent.selectedSlot + else inventorySlots.find(getStackInSlot(_).isEmpty).getOrElse(-1) } override def changeCurrentItem(direction: Int) {} @@ -41,68 +42,68 @@ class Inventory(val agent: internal.Agent) extends InventoryPlayer(null) { } // override def consumeInventoryItem(item: Item): Boolean = { -// for ((slot, stack) <- inventorySlots.map(slot => (slot, getStackInSlot(slot))) if stack != null && stack.getItem == item && stack.stackSize > 0) { +// for ((slot, stack) <- inventorySlots.map(slot => (slot, getStackInSlot(slot))) if !stack.isEmpty && stack.getItem == item && stack.stackSize > 0) { // stack.stackSize -= 1 // if (stack.stackSize <= 0) { -// setInventorySlotContents(slot, null) +// setInventorySlotContents(slot, ItemStack.EMPTY) // } // return true // } // false // } - override def addItemStackToInventory(stack: ItemStack) = { + override def addItemStackToInventory(stack: ItemStack): Boolean = { val slots = this.indices.drop(agent.selectedSlot) ++ this.indices.take(agent.selectedSlot) InventoryUtils.insertIntoInventory(stack, InventoryUtils.asItemHandler(this), slots = Option(slots)) } - override def canHarvestBlock(state: IBlockState): Boolean = state.getMaterial.isToolNotRequired || (getCurrentItem != null && getCurrentItem.canHarvestBlock(state)) + override def canHarvestBlock(state: IBlockState): Boolean = state.getMaterial.isToolNotRequired || (!getCurrentItem.isEmpty && getCurrentItem.canHarvestBlock(state)) - override def getStrVsBlock(state: IBlockState): Float = Option(getCurrentItem).fold(1f)(_.getStrVsBlock(state)) + override def getStrVsBlock(state: IBlockState): Float = if (getCurrentItem.isEmpty) 1f else getCurrentItem.getStrVsBlock(state) - override def writeToNBT(nbt: NBTTagList) = nbt + override def writeToNBT(nbt: NBTTagList): NBTTagList = nbt override def readFromNBT(nbt: NBTTagList) {} - override def armorItemInSlot(slot: Int) = null + override def armorItemInSlot(slot: Int) = ItemStack.EMPTY override def damageArmor(damage: Float) {} - override def dropAllItems() = {} + override def dropAllItems(): Unit = {} - override def hasItemStack(stack: ItemStack) = (0 until getSizeInventory).map(getStackInSlot).filter(_ != null).exists(_.isItemEqual(stack)) + override def hasItemStack(stack: ItemStack): Boolean = (0 until getSizeInventory).map(getStackInSlot).filter(!_.isEmpty).exists(_.isItemEqual(stack)) override def copyInventory(from: InventoryPlayer) {} // IInventory - override def getSizeInventory = agent.mainInventory.getSizeInventory + override def getSizeInventory: Int = agent.mainInventory.getSizeInventory - override def getStackInSlot(slot: Int) = + override def getStackInSlot(slot: Int): ItemStack = if (slot < 0) agent.equipmentInventory.getStackInSlot(~slot) else agent.mainInventory.getStackInSlot(slot) - override def decrStackSize(slot: Int, amount: Int) = + override def decrStackSize(slot: Int, amount: Int): ItemStack = if (slot < 0) agent.equipmentInventory.decrStackSize(~slot, amount) else agent.mainInventory.decrStackSize(slot, amount) - override def removeStackFromSlot(slot: Int) = + override def removeStackFromSlot(slot: Int): ItemStack = if (slot < 0) agent.equipmentInventory.removeStackFromSlot(~slot) else agent.mainInventory.removeStackFromSlot(slot) - override def setInventorySlotContents(slot: Int, stack: ItemStack) = + override def setInventorySlotContents(slot: Int, stack: ItemStack): Unit = if (slot < 0) agent.equipmentInventory.setInventorySlotContents(~slot, stack) else agent.mainInventory.setInventorySlotContents(slot, stack) - override def getName = agent.mainInventory.getName + override def getName: String = agent.mainInventory.getName - override def getInventoryStackLimit = agent.mainInventory.getInventoryStackLimit + override def getInventoryStackLimit: Int = agent.mainInventory.getInventoryStackLimit - override def markDirty() = agent.mainInventory.markDirty() + override def markDirty(): Unit = agent.mainInventory.markDirty() - override def isUsableByPlayer(player: EntityPlayer) = agent.mainInventory.isUsableByPlayer(player) + override def isUsableByPlayer(player: EntityPlayer): Boolean = agent.mainInventory.isUsableByPlayer(player) - override def isItemValidForSlot(slot: Int, stack: ItemStack) = + override def isItemValidForSlot(slot: Int, stack: ItemStack): Boolean = if (slot < 0) agent.equipmentInventory.isItemValidForSlot(~slot, stack) else agent.mainInventory.isItemValidForSlot(slot, stack) } diff --git a/src/main/scala/li/cil/oc/server/agent/Player.scala b/src/main/scala/li/cil/oc/server/agent/Player.scala index 16993ea0f..a7f2b7239 100644 --- a/src/main/scala/li/cil/oc/server/agent/Player.scala +++ b/src/main/scala/li/cil/oc/server/agent/Player.scala @@ -1,5 +1,6 @@ package li.cil.oc.server.agent +import java.util import java.util.UUID import com.mojang.authlib.GameProfile @@ -36,6 +37,7 @@ import net.minecraft.util.math.Vec3d import net.minecraft.util.text.ITextComponent import net.minecraft.util.text.TextComponentString import net.minecraft.world.IInteractionObject +import net.minecraft.world.World import net.minecraft.world.WorldServer import net.minecraftforge.common.ForgeHooks import net.minecraftforge.common.MinecraftForge @@ -51,7 +53,7 @@ import net.minecraftforge.fml.common.eventhandler.Event import scala.collection.convert.WrapAsScala._ object Player { - def profileFor(agent: internal.Agent) = { + def profileFor(agent: internal.Agent): GameProfile = { val uuid = agent.ownerUUID val randomId = (agent.world.rand.nextInt(0xFFFFFF) + 1).toString val name = Settings.get.nameFormat. @@ -60,7 +62,7 @@ object Player { new GameProfile(uuid, name) } - def determineUUID(playerUUID: Option[UUID] = None) = { + def determineUUID(playerUUID: Option[UUID] = None): UUID = { val format = Settings.get.uuidFormat val randomUUID = UUID.randomUUID() try UUID.fromString(format. @@ -115,16 +117,16 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc // ----------------------------------------------------------------------- // - def closestEntity[Type <: Entity](clazz: Class[Type], side: EnumFacing = facing) = { + def closestEntity[Type <: Entity](clazz: Class[Type], side: EnumFacing = facing): Option[Entity] = { val bounds = BlockPosition(agent).offset(side).bounds Option(world.findNearestEntityWithinAABB(clazz, bounds, this)) } - def entitiesOnSide[Type <: Entity](clazz: Class[Type], side: EnumFacing) = { + def entitiesOnSide[Type <: Entity](clazz: Class[Type], side: EnumFacing): util.List[Type] = { entitiesInBlock(clazz, BlockPosition(agent).offset(side)) } - def entitiesInBlock[Type <: Entity](clazz: Class[Type], blockPos: BlockPosition) = { + def entitiesInBlock[Type <: Entity](clazz: Class[Type], blockPos: BlockPosition): util.List[Type] = { world.getEntitiesWithinAABB(clazz, blockPos.bounds) } @@ -166,12 +168,12 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc } if(!cancel && callUsingItemInSlot(agent.equipmentInventory, 0, stack => { val result = isItemUseAllowed(stack) && (entity.processInitialInteract(this, EnumHand.MAIN_HAND) || (entity match { - case living: EntityLivingBase if getHeldItemMainhand != null => getHeldItemMainhand.interactWithEntity(this, living, EnumHand.MAIN_HAND) + case living: EntityLivingBase if !getHeldItemMainhand.isEmpty => getHeldItemMainhand.interactWithEntity(this, living, EnumHand.MAIN_HAND) case _ => false })) - if (getHeldItemMainhand != null && getHeldItemMainhand.getCount <= 0) { + if (!getHeldItemMainhand.isEmpty && getHeldItemMainhand.getCount <= 0) { val orig = getHeldItemMainhand - this.inventory.setInventorySlotContents(this.inventory.currentItem, null) + this.inventory.setInventorySlotContents(this.inventory.currentItem, ItemStack.EMPTY) ForgeEventFactory.onPlayerDestroyItem(this, orig, EnumHand.MAIN_HAND) } result @@ -184,7 +186,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc return ActivationType.None } - val item = if (stack != null) stack.getItem else null + val item = if (!stack.isEmpty) stack.getItem else null if (item != null && item.onItemUseFirst(this, world, pos, side, hitX, hitY, hitZ, EnumHand.MAIN_HAND) == EnumActionResult.SUCCESS) { return ActivationType.ItemUsed } @@ -227,7 +229,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc event } - def useEquippedItem(duration: Double) = { + def useEquippedItem(duration: Double): Boolean = { callUsingItemInSlot(agent.equipmentInventory, 0, stack => { if (!shouldCancel(() => fireRightClickAir())) { tryUseItem(stack, duration) @@ -238,9 +240,9 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc private def tryUseItem(stack: ItemStack, duration: Double) = { stopActiveHand() - stack != null && stack.getCount > 0 && isItemUseAllowed(stack) && { + !stack.isEmpty && stack.getCount > 0 && isItemUseAllowed(stack) && { val oldSize = stack.getCount - val oldDamage = if (stack != null) stack.getItemDamage else 0 + val oldDamage = if (!stack.isEmpty) stack.getItemDamage else 0 val oldData = if (stack.hasTagCompound) stack.getTagCompound.copy() else null val heldTicks = Math.max(0, Math.min(stack.getMaxItemUseDuration, (duration * 20).toInt)) // Change the offset at which items are used, to avoid hitting @@ -264,7 +266,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc def sizeOrDamageChanged = newStack.getCount != oldSize || newStack.getItemDamage != oldDamage def tagChanged = (oldData == null && newStack.hasTagCompound) || (oldData != null && !newStack.hasTagCompound) || (oldData != null && newStack.hasTagCompound && !oldData.equals(newStack.getTagCompound)) - val stackChanged = newStack != stack || (newStack != null && (sizeOrDamageChanged || tagChanged)) + val stackChanged = newStack != stack || (!newStack.isEmpty && (sizeOrDamageChanged || tagChanged)) if (stackChanged) { agent.equipmentInventory.setInventorySlotContents(0, newStack) } @@ -350,7 +352,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc posY -= 1.62 prevPosY = posY } - val cancel = stack != null && stack.getItem.onBlockStartBreak(stack, pos, this) + val cancel = !stack.isEmpty && stack.getItem.onBlockStartBreak(stack, pos, this) if (cancel && needsSpecialPlacement) { posY += 1.62 prevPosY = posY @@ -369,7 +371,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc world.playEvent(this, 2001, pos, Block.getIdFromBlock(block) + (metadata << 12)) - if (stack != null) { + if (!stack.isEmpty) { stack.onBlockDestroyed(world, state, pos, this) } @@ -382,7 +384,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc block.harvestBlock(world, this, pos, state, te, stack) MinecraftForge.EVENT_BUS.post(new RobotBreakBlockEvent.Post(agent, breakEvent.getExpToDrop)) } - else if (stack != null) { + else if (!stack.isEmpty) { MinecraftForge.EVENT_BUS.post(new RobotBreakBlockEvent.Post(agent, 0)) } return adjustedBreakTime @@ -391,7 +393,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc }) } - private def isItemUseAllowed(stack: ItemStack) = stack == null || { + private def isItemUseAllowed(stack: ItemStack) = stack.isEmpty || { (Settings.get.allowUseItemsWithDuration || stack.getMaxItemUseDuration <= 0) && !stack.isItemEqual(new ItemStack(Items.LEAD)) } @@ -419,7 +421,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc private def callUsingItemInSlot[T](inventory: IInventory, slot: Int, f: (ItemStack) => T, repair: Boolean = true) = { val itemsBefore = adjacentItems val stack = inventory.getStackInSlot(slot) - val oldStack = if (stack != null) stack.copy() else null + val oldStack = if (!stack.isEmpty) stack.copy() else null this.inventory.currentItem = if (inventory == agent.mainInventory) slot else ~slot try { f(stack) @@ -427,9 +429,9 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc finally { this.inventory.currentItem = 0 val newStack = inventory.getStackInSlot(slot) - if (newStack != null) { + if (!newStack.isEmpty) { if (newStack.getCount <= 0) { - inventory.setInventorySlotContents(slot, null) + inventory.setInventorySlotContents(slot, ItemStack.EMPTY) } if (repair) { if (newStack.getCount > 0) tryRepair(newStack, oldStack) @@ -442,7 +444,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc private def tryRepair(stack: ItemStack, oldStack: ItemStack) { // Only if the underlying type didn't change. - if (stack != null && oldStack != null && stack.getItem == oldStack.getItem) { + if (!stack.isEmpty && !oldStack.isEmpty && stack.getItem == oldStack.getItem) { val damageRate = new RobotUsedToolEvent.ComputeDamageRate(agent, oldStack, stack, Settings.get.itemDamageRate) MinecraftForge.EVENT_BUS.post(damageRate) if (damageRate.getDamageRate < 1) { @@ -452,7 +454,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc } private def tryPlaceBlockWhileHandlingFunnySpecialCases(stack: ItemStack, pos: BlockPos, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = { - stack != null && stack.getCount > 0 && { + !stack.isEmpty && stack.getCount > 0 && { val event = new RobotPlaceBlockEvent.Pre(agent, stack, world, pos) MinecraftForge.EVENT_BUS.post(event) if (event.isCanceled) false @@ -508,7 +510,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc } } - override def canAttackPlayer(player: EntityPlayer) = Settings.get.canAttackPlayers + override def canAttackPlayer(player: EntityPlayer): Boolean = Settings.get.canAttackPlayers override def canEat(value: Boolean) = false @@ -522,7 +524,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc override def setHealth(value: Float) {} - override def setDead() = isDead = true + override def setDead(): Unit = isDead = true override def onLivingUpdate() {} @@ -562,7 +564,7 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc // ----------------------------------------------------------------------- // class DamageOverTime(val player: Player, val pos: BlockPos, val side: EnumFacing, val ticksTotal: Int) { - val world = player.world + val world: World = player.world var ticks = 0 var lastDamageSent = 0 diff --git a/src/main/scala/li/cil/oc/server/command/NonDisassemblyAgreementCommand.scala b/src/main/scala/li/cil/oc/server/command/NonDisassemblyAgreementCommand.scala index f3c904e4a..8812711dd 100644 --- a/src/main/scala/li/cil/oc/server/command/NonDisassemblyAgreementCommand.scala +++ b/src/main/scala/li/cil/oc/server/command/NonDisassemblyAgreementCommand.scala @@ -19,7 +19,7 @@ object NonDisassemblyAgreementCommand extends SimpleCommand("oc_preventDisassemb source match { case player: EntityPlayer => val stack = player.getHeldItemMainhand - if (stack != null) { + if (!stack.isEmpty) { if (!stack.hasTagCompound) { stack.setTagCompound(new NBTTagCompound()) } diff --git a/src/main/scala/li/cil/oc/server/component/Agent.scala b/src/main/scala/li/cil/oc/server/component/Agent.scala index 09554b2be..9c3db094d 100644 --- a/src/main/scala/li/cil/oc/server/component/Agent.scala +++ b/src/main/scala/li/cil/oc/server/component/Agent.scala @@ -3,6 +3,7 @@ package li.cil.oc.server.component import li.cil.oc.Settings import li.cil.oc.api.event.RobotPlaceInAirEvent import li.cil.oc.api.internal +import li.cil.oc.api.internal.MultiTank import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -16,6 +17,8 @@ import li.cil.oc.util.InventoryUtils import net.minecraft.entity.Entity import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.item.EntityMinecart +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.inventory.IInventory import net.minecraft.util.EnumActionResult import net.minecraft.util.EnumFacing import net.minecraft.util.EnumHand @@ -31,9 +34,9 @@ trait Agent extends traits.WorldControl with traits.InventoryControl with traits override def position = BlockPosition(agent) - override def fakePlayer = agent.player + override def fakePlayer: EntityPlayer = agent.player - protected def rotatedPlayer(facing: EnumFacing = agent.facing, side: EnumFacing = agent.facing) = { + protected def rotatedPlayer(facing: EnumFacing = agent.facing, side: EnumFacing = agent.facing): Player = { val player = agent.player.asInstanceOf[Player] Player.updatePositionAndRotation(player, facing, side) player @@ -41,23 +44,23 @@ trait Agent extends traits.WorldControl with traits.InventoryControl with traits // ----------------------------------------------------------------------- // - override def inventory = agent.mainInventory + override def inventory: IInventory = agent.mainInventory - override def selectedSlot = agent.selectedSlot + override def selectedSlot: Int = agent.selectedSlot override def selectedSlot_=(value: Int): Unit = agent.setSelectedSlot(value) // ----------------------------------------------------------------------- // - override def tank = agent.tank + override def tank: MultiTank = agent.tank - def selectedTank = agent.selectedTank + def selectedTank: Int = agent.selectedTank - override def selectedTank_=(value: Int) = agent.setSelectedTank(value) + override def selectedTank_=(value: Int): Unit = agent.setSelectedTank(value) // ----------------------------------------------------------------------- // - def canPlaceInAir = { + def canPlaceInAir: Boolean = { val event = new RobotPlaceInAirEvent(agent) MinecraftForge.EVENT_BUS.post(event) event.isAllowed @@ -245,7 +248,7 @@ trait Agent extends traits.WorldControl with traits.InventoryControl with traits } val sneaky = args.isBoolean(2) && args.checkBoolean(2) val stack = agent.mainInventory.getStackInSlot(agent.selectedSlot) - if (stack == null || stack.getCount == 0) { + if (stack.isEmpty) { return result(Unit, "nothing selected") } @@ -288,9 +291,9 @@ trait Agent extends traits.WorldControl with traits.InventoryControl with traits // ----------------------------------------------------------------------- // - protected def checkSideForFace(args: Arguments, n: Int, facing: EnumFacing) = agent.toGlobal(args.checkSideForFace(n, agent.toLocal(facing))) + protected def checkSideForFace(args: Arguments, n: Int, facing: EnumFacing): EnumFacing = agent.toGlobal(args.checkSideForFace(n, agent.toLocal(facing))) - protected def pick(player: Player, range: Double) = { + protected def pick(player: Player, range: Double): RayTraceResult = { val origin = new Vec3d( player.posX + player.facing.getFrontOffsetX * 0.5, player.posY + player.facing.getFrontOffsetY * 0.5, @@ -310,14 +313,14 @@ trait Agent extends traits.WorldControl with traits.InventoryControl with traits } } - protected def clickParamsFromHit(hit: RayTraceResult) = { + protected def clickParamsFromHit(hit: RayTraceResult): (BlockPos, Float, Float, Float) = { (hit.getBlockPos, (hit.hitVec.xCoord - hit.getBlockPos.getX).toFloat, (hit.hitVec.yCoord - hit.getBlockPos.getY).toFloat, (hit.hitVec.zCoord - hit.getBlockPos.getZ).toFloat) } - protected def clickParamsForItemUse(facing: EnumFacing, side: EnumFacing) = { + protected def clickParamsForItemUse(facing: EnumFacing, side: EnumFacing): (BlockPos, Float, Float, Float) = { val blockPos = position.offset(facing).offset(side) (blockPos.toBlockPos, 0.5f - side.getFrontOffsetX * 0.5f, @@ -325,7 +328,7 @@ trait Agent extends traits.WorldControl with traits.InventoryControl with traits 0.5f - side.getFrontOffsetZ * 0.5f) } - protected def clickParamsForPlace(facing: EnumFacing) = { + protected def clickParamsForPlace(facing: EnumFacing): (BlockPos, Float, Float, Float) = { (position.toBlockPos, 0.5f + facing.getFrontOffsetX * 0.5f, 0.5f + facing.getFrontOffsetY * 0.5f, diff --git a/src/main/scala/li/cil/oc/server/component/DebugCard.scala b/src/main/scala/li/cil/oc/server/component/DebugCard.scala index b7ae1f060..cce4c144a 100644 --- a/src/main/scala/li/cil/oc/server/component/DebugCard.scala +++ b/src/main/scala/li/cil/oc/server/component/DebugCard.scala @@ -7,6 +7,7 @@ import li.cil.oc.api.Network import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context +import li.cil.oc.api.network.ComponentConnector import li.cil.oc.api.network.Environment import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.network.Node @@ -37,6 +38,7 @@ import net.minecraft.util.EnumFacing import net.minecraft.util.ResourceLocation import net.minecraft.util.SoundCategory import net.minecraft.util.math.BlockPos +import net.minecraft.util.math.Vec3d import net.minecraft.util.text.ITextComponent import net.minecraft.world.GameType import net.minecraft.world.World @@ -55,7 +57,7 @@ import scala.collection.convert.WrapAsScala._ import scala.collection.mutable class DebugCard(host: EnvironmentHost) extends prefab.ManagedEnvironment with DebugNode { - override val node = Network.newNode(this, Visibility.Neighbors). + override val node: ComponentConnector = Network.newNode(this, Visibility.Neighbors). withComponent("debug"). withConnector(). create() @@ -69,7 +71,7 @@ class DebugCard(host: EnvironmentHost) extends prefab.ManagedEnvironment with De // Player this card is bound to (if any) to use for permissions. implicit var access: Option[AccessContext] = None - def player = access.map(_.player) + def player: Option[String] = access.map(_.player) private lazy val CommandSender = { def defaultFakePlayer = FakePlayerFactory.get(host.world.asInstanceOf[WorldServer], Settings.get.fakePlayerProfile) @@ -289,7 +291,7 @@ class DebugCard(host: EnvironmentHost) extends prefab.ManagedEnvironment with De } object DebugCard { - def checkAccess()(implicit ctx: Option[AccessContext]) = + def checkAccess()(implicit ctx: Option[AccessContext]): Unit = for (msg <- Settings.get.debugCardAccess.checkAccess(ctx)) throw new Exception(msg) @@ -322,7 +324,7 @@ object DebugCard { // ----------------------------------------------------------------------- // - def withPlayer(f: (EntityPlayerMP) => Array[AnyRef]) = { + def withPlayer(f: (EntityPlayerMP) => Array[AnyRef]): Array[AnyRef] = { checkAccess() FMLCommonHandler.instance.getMinecraftServerInstance.getPlayerList.getPlayerByUsername(name) match { case player: EntityPlayerMP => f(player) @@ -436,8 +438,8 @@ object DebugCard { } class ScoreboardValue(world: Option[World])(implicit var ctx: Option[AccessContext]) extends prefab.AbstractValue { - var scoreboard = world.fold(null: Scoreboard)(_.getScoreboard) - var dimension = world.fold(0)(_.provider.getDimension) + var scoreboard: Scoreboard = world.fold(null: Scoreboard)(_.getScoreboard) + var dimension: Int = world.fold(0)(_.provider.getDimension) def this() = this(None)(None) // For loading. @@ -520,7 +522,7 @@ object DebugCard { val name = args.checkString(0) val objective = scoreboard.getObjective(args.checkString(1)) val score = scoreboard.getOrCreateScore(name, objective) - result(score.getScorePoints()) + result(score.getScorePoints) } @Callback(doc = """function(playerName:string, objectiveName:string, score:int) - Increases the score of a player for a certain objective""") @@ -782,7 +784,7 @@ object DebugCard { val slot = args.checkSlot(inventory, 3) val count = args.optInteger(4, 64) val removed = inventory.extractItem(slot, count, false) - if (removed == null) result(0) + if (removed.isEmpty) result(0) else result(removed.getCount) case _ => result(Unit, "no inventory") } @@ -845,21 +847,21 @@ object DebugCard { messages = None } - override def getName = underlying.getName + override def getName: String = underlying.getName - override def getEntityWorld = host.world + override def getEntityWorld: World = host.world override def sendMessage(message: ITextComponent) { messages = Option(messages.fold("")(_ + "\n") + message.getUnformattedText) } - override def getDisplayName = underlying.getDisplayName + override def getDisplayName: ITextComponent = underlying.getDisplayName - override def setCommandStat(`type`: Type, amount: Int) = underlying.setCommandStat(`type`, amount) + override def setCommandStat(`type`: Type, amount: Int): Unit = underlying.setCommandStat(`type`, amount) - override def getPosition = underlying.getPosition + override def getPosition: BlockPos = underlying.getPosition - override def canUseCommand(level: Int, commandName: String) = { + override def canUseCommand(level: Int, commandName: String): Boolean = { val profile = underlying.getGameProfile val server = underlying.mcServer val config = server.getPlayerList @@ -869,11 +871,11 @@ object DebugCard { })) } - override def getCommandSenderEntity = underlying + override def getCommandSenderEntity: EntityPlayerMP = underlying - override def getPositionVector = underlying.getPositionVector + override def getPositionVector: Vec3d = underlying.getPositionVector - override def sendCommandFeedback() = underlying.sendCommandFeedback() + override def sendCommandFeedback(): Boolean = underlying.sendCommandFeedback() } class TestValue extends AbstractValue { diff --git a/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala b/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala index 2353af74f..e96f02907 100644 --- a/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala +++ b/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala @@ -38,7 +38,7 @@ class DiskDriveMountable(val rack: api.internal.Rack, val slot: Int) extends pre // Stored for filling data packet when queried. var lastAccess = 0L - def filesystemNode = components(0) match { + def filesystemNode: Option[Node] = components(0) match { case Some(environment) => Option(environment.node) case _ => None } @@ -58,7 +58,7 @@ class DiskDriveMountable(val rack: api.internal.Rack, val slot: Int) extends pre // ----------------------------------------------------------------------- // // Environment - override val node = api.Network.newNode(this, Visibility.Network). + override val node: Component = api.Network.newNode(this, Visibility.Network). withComponent("disk_drive"). create() @@ -71,7 +71,7 @@ class DiskDriveMountable(val rack: api.internal.Rack, val slot: Int) extends pre def eject(context: Context, args: Arguments): Array[AnyRef] = { val velocity = args.optDouble(0, 0) max 0 min 1 val ejected = decrStackSize(0, 1) - if (ejected != null && ejected.getCount > 0) { + if (!ejected.isEmpty) { val entity = InventoryUtils.spawnStackInWorld(BlockPosition(rack), ejected, Option(rack.facing)) if (entity != null) { val vx = rack.facing.getFrontOffsetX * velocity @@ -87,7 +87,7 @@ class DiskDriveMountable(val rack: api.internal.Rack, val slot: Int) extends pre // ----------------------------------------------------------------------- // // Analyzable - override def onAnalyze(player: EntityPlayer, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = filesystemNode.fold(null: Array[Node])(Array(_)) + override def onAnalyze(player: EntityPlayer, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Array[Node] = filesystemNode.fold(null: Array[Node])(Array(_)) // ----------------------------------------------------------------------- // // ItemStackInventory @@ -168,7 +168,7 @@ class DiskDriveMountable(val rack: api.internal.Rack, val slot: Int) extends pre override def onActivate(player: EntityPlayer, hand: EnumHand, heldItem: ItemStack, hitX: Float, hitY: Float): Boolean = { if (player.isSneaking) { - val isDiskInDrive = getStackInSlot(0) != null + val isDiskInDrive = !getStackInSlot(0).isEmpty val isHoldingDisk = isItemValidForSlot(0, heldItem) if (isDiskInDrive) { if (!rack.world.isRemote) { diff --git a/src/main/scala/li/cil/oc/server/component/Geolyzer.scala b/src/main/scala/li/cil/oc/server/component/Geolyzer.scala index 147523c90..f21423b19 100644 --- a/src/main/scala/li/cil/oc/server/component/Geolyzer.scala +++ b/src/main/scala/li/cil/oc/server/component/Geolyzer.scala @@ -134,7 +134,7 @@ class Geolyzer(val host: EnvironmentHost) extends prefab.ManagedEnvironment with val stack = new ItemStack(item, 1, damage) DatabaseAccess.withDatabase(node, args.checkString(1), database => { val toSlot = args.checkSlot(database.data, 2) - val nonEmpty = database.getStackInSlot(toSlot) != null + val nonEmpty = database.getStackInSlot(toSlot) != ItemStack.EMPTY // not the same as isEmpty! zero size stacks! database.setStackInSlot(toSlot, stack) result(nonEmpty) }) diff --git a/src/main/scala/li/cil/oc/server/component/Server.scala b/src/main/scala/li/cil/oc/server/component/Server.scala index 1f98099a8..6710a8695 100644 --- a/src/main/scala/li/cil/oc/server/component/Server.scala +++ b/src/main/scala/li/cil/oc/server/component/Server.scala @@ -12,6 +12,8 @@ import li.cil.oc.api.Machine import li.cil.oc.api.component.RackBusConnectable import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal +import li.cil.oc.api.internal.Rack +import li.cil.oc.api.machine import li.cil.oc.api.machine.MachineHost import li.cil.oc.api.network.Analyzable import li.cil.oc.api.network.Environment @@ -33,15 +35,16 @@ import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraft.util.EnumFacing import net.minecraft.util.EnumHand +import net.minecraft.world.World import net.minecraftforge.common.capabilities.Capability import net.minecraftforge.common.capabilities.ICapabilityProvider import scala.collection.convert.WrapAsJava._ class Server(val rack: api.internal.Rack, val slot: Int) extends Environment with MachineHost with ServerInventory with ComponentInventory with Analyzable with internal.Server with ICapabilityProvider with DeviceInfo { - lazy val machine = Machine.create(this) + lazy val machine: api.machine.Machine = Machine.create(this) - val node = if (!rack.world.isRemote) machine.node else null + val node: Node = if (!rack.world.isRemote) machine.node else null var wasRunning = false var hadErrored = false @@ -96,32 +99,32 @@ class Server(val rack: api.internal.Rack, val slot: Int) extends Environment wit // MachineHost override def internalComponents(): Iterable[ItemStack] = (0 until getSizeInventory).collect { - case i if getStackInSlot(i) != null && isComponentSlot(i, getStackInSlot(i)) => getStackInSlot(i) + case i if !getStackInSlot(i).isEmpty && isComponentSlot(i, getStackInSlot(i)) => getStackInSlot(i) } - override def componentSlot(address: String) = components.indexWhere(_.exists(env => env.node != null && env.node.address == address)) + override def componentSlot(address: String): Int = components.indexWhere(_.exists(env => env.node != null && env.node.address == address)) - override def onMachineConnect(node: Node) = onConnect(node) + override def onMachineConnect(node: Node): Unit = onConnect(node) - override def onMachineDisconnect(node: Node) = onDisconnect(node) + override def onMachineDisconnect(node: Node): Unit = onDisconnect(node) // ----------------------------------------------------------------------- // // EnvironmentHost - override def xPosition = rack.xPosition + override def xPosition: Double = rack.xPosition - override def yPosition = rack.yPosition + override def yPosition: Double = rack.yPosition - override def zPosition = rack.zPosition + override def zPosition: Double = rack.zPosition - override def world = rack.world + override def world: World = rack.world - override def markChanged() = rack.markChanged() + override def markChanged(): Unit = rack.markChanged() // ----------------------------------------------------------------------- // // ServerInventory - override def tier = Delegator.subItem(container) match { + override def tier: Int = Delegator.subItem(container) match { case Some(server: item.Server) => server.tier case _ => 0 } @@ -131,12 +134,12 @@ class Server(val rack: api.internal.Rack, val slot: Int) extends Environment wit // ----------------------------------------------------------------------- // // ItemStackInventory - override def host = rack + override def host: Rack = rack // ----------------------------------------------------------------------- // // ComponentInventory - override def container = rack.getStackInSlot(slot) + override def container: ItemStack = rack.getStackInSlot(slot) override protected def connectItemNode(node: Node) { if (node != null) { diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala b/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala index 14bca238a..25189b991 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala @@ -66,7 +66,7 @@ class UpgradeCrafting(val host: EnvironmentHost with internal.Robot) extends pre val surplus = mutable.ArrayBuffer.empty[ItemStack] for (slot <- 0 until getSizeInventory) { val stack = getStackInSlot(slot) - if (stack != null) { + if (!stack.isEmpty) { decrStackSize(slot, 1) val item = stack.getItem if (item.hasContainerItem(stack)) { @@ -74,7 +74,7 @@ class UpgradeCrafting(val host: EnvironmentHost with internal.Robot) extends pre if (container.isItemStackDamageable && container.getItemDamage > container.getMaxDamage) { MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(host.player, container, null)) } - else if (getStackInSlot(slot) != null) { + else if (!getStackInSlot(slot).isEmpty) { surplus += container } else { @@ -100,7 +100,7 @@ class UpgradeCrafting(val host: EnvironmentHost with internal.Robot) extends pre for (slot <- 0 until getSizeInventory) { val stack = inventory.getStackInSlot(toParentSlot(slot)) setInventorySlotContents(slot, stack) - if (stack != null) { + if (!stack.isEmpty) { amountPossible = math.min(amountPossible, stack.getCount) } } diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala b/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala index 38b5b7733..5598dc5ab 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala @@ -64,8 +64,8 @@ class UpgradeDatabase(val data: IInventory) extends prefab.ManagedEnvironment wi @Callback(doc = "function(slot:number):boolean -- Clears the specified slot. Returns true if there was something in the slot before.") def clear(context: Context, args: Arguments): Array[AnyRef] = { val slot = args.checkSlot(data, 0) - val nonEmpty = data.getStackInSlot(slot) != null - data.setInventorySlotContents(slot, null) + val nonEmpty = data.getStackInSlot(slot) != ItemStack.EMPTY // zero size stacks + data.setInventorySlotContents(slot, ItemStack.EMPTY) result(nonEmpty) } @@ -75,7 +75,7 @@ class UpgradeDatabase(val data: IInventory) extends prefab.ManagedEnvironment wi val entry = data.getStackInSlot(fromSlot) def set(inventory: IInventory) = { val toSlot = args.checkSlot(inventory, 1) - val nonEmpty = inventory.getStackInSlot(toSlot) != null + val nonEmpty = inventory.getStackInSlot(toSlot) != ItemStack.EMPTY // zero size stacks inventory.setInventorySlotContents(toSlot, entry.copy()) result(nonEmpty) } diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala b/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala index 299f05303..2ddf940c8 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala @@ -86,7 +86,7 @@ class UpgradeExperience(val host: EnvironmentHost with internal.Agent) extends p return result(Unit, "max level") } val stack = host.mainInventory.getStackInSlot(host.selectedSlot) - if (stack == null || stack.getCount < 1) { + if (stack.isEmpty) { return result(Unit, "no item") } var xp = 0 @@ -104,7 +104,7 @@ class UpgradeExperience(val host: EnvironmentHost with internal.Agent) extends p } } val consumed = host.mainInventory().decrStackSize(host.selectedSlot, 1) - if (consumed == null || consumed.getCount < 1) { + if (consumed.isEmpty) { return result(Unit, "could not consume item") } addExperience(xp * Settings.get.constantXpGrowth) diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala b/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala index 2f4be0ba3..f84585ba9 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala @@ -49,7 +49,7 @@ class UpgradeGenerator(val host: EnvironmentHost with internal.Agent) extends pr def insert(context: Context, args: Arguments): Array[AnyRef] = { val count = args.optInteger(0, 64) val stack = host.mainInventory.getStackInSlot(host.selectedSlot) - if (stack == null) return result(Unit, "selected slot is empty") + if (stack.isEmpty) return result(Unit, "selected slot is empty") if (!TileEntityFurnace.isItemFuel(stack)) { return result(Unit, "selected slot does not contain fuel") } @@ -70,7 +70,7 @@ class UpgradeGenerator(val host: EnvironmentHost with internal.Agent) extends pr inventory = Some(stack.splitStack(math.min(stack.getCount, count))) } if (stack.getCount > 0) host.mainInventory.setInventorySlotContents(host.selectedSlot, stack) - else host.mainInventory.setInventorySlotContents(host.selectedSlot, null) + else host.mainInventory.setInventorySlotContents(host.selectedSlot, ItemStack.EMPTY) result(true) } diff --git a/src/main/scala/li/cil/oc/server/component/traits/InventoryAnalytics.scala b/src/main/scala/li/cil/oc/server/component/traits/InventoryAnalytics.scala index bc8696af4..867ac725d 100644 --- a/src/main/scala/li/cil/oc/server/component/traits/InventoryAnalytics.scala +++ b/src/main/scala/li/cil/oc/server/component/traits/InventoryAnalytics.scala @@ -8,6 +8,7 @@ import li.cil.oc.server.component.result import li.cil.oc.util.DatabaseAccess import li.cil.oc.util.ExtendedArguments._ import li.cil.oc.util.InventoryUtils +import net.minecraft.item.ItemStack import net.minecraftforge.oredict.OreDictionary trait InventoryAnalytics extends InventoryAware with NetworkAware { @@ -35,7 +36,7 @@ trait InventoryAnalytics extends InventoryAware with NetworkAware { val localStack = inventory.getStackInSlot(localSlot) DatabaseAccess.withDatabase(node, dbAddress, database => { val dbSlot = args.checkSlot(database.data, 2) - val nonEmpty = database.getStackInSlot(dbSlot) != null + val nonEmpty = database.getStackInSlot(dbSlot) != ItemStack.EMPTY // zero size stacks! database.setStackInSlot(dbSlot, localStack.copy()) result(nonEmpty) }) diff --git a/src/main/scala/li/cil/oc/server/component/traits/InventoryAware.scala b/src/main/scala/li/cil/oc/server/component/traits/InventoryAware.scala index b8a2d2970..e977d1015 100644 --- a/src/main/scala/li/cil/oc/server/component/traits/InventoryAware.scala +++ b/src/main/scala/li/cil/oc/server/component/traits/InventoryAware.scala @@ -5,6 +5,8 @@ import li.cil.oc.util.ExtendedArguments._ import net.minecraft.entity.player.EntityPlayer import net.minecraft.inventory.IInventory +import scala.collection.immutable + trait InventoryAware { def fakePlayer: EntityPlayer @@ -14,11 +16,11 @@ trait InventoryAware { def selectedSlot_=(value: Int): Unit - def insertionSlots = (selectedSlot until inventory.getSizeInventory) ++ (0 until selectedSlot) + def insertionSlots: immutable.IndexedSeq[Int] = (selectedSlot until inventory.getSizeInventory) ++ (0 until selectedSlot) // ----------------------------------------------------------------------- // - protected def optSlot(args: Arguments, n: Int) = + protected def optSlot(args: Arguments, n: Int): Int = if (args.count > 0 && args.checkAny(0) != null) args.checkSlot(inventory, 0) else selectedSlot diff --git a/src/main/scala/li/cil/oc/server/component/traits/InventoryControl.scala b/src/main/scala/li/cil/oc/server/component/traits/InventoryControl.scala index 4831948c4..04ecbe938 100644 --- a/src/main/scala/li/cil/oc/server/component/traits/InventoryControl.scala +++ b/src/main/scala/li/cil/oc/server/component/traits/InventoryControl.scala @@ -6,6 +6,7 @@ import li.cil.oc.api.machine.Context import li.cil.oc.util.ExtendedArguments._ import li.cil.oc.util.InventoryUtils import li.cil.oc.util.ResultWrapper.result +import net.minecraft.item.ItemStack trait InventoryControl extends InventoryAware { @Callback(doc = "function():number -- The size of this device's internal inventory.") @@ -65,7 +66,7 @@ trait InventoryControl extends InventoryAware { to.grow(amount) assert(from.getCount >= 0) if (from.getCount == 0) { - inventory.setInventorySlotContents(selectedSlot, null) + inventory.setInventorySlotContents(selectedSlot, ItemStack.EMPTY) } inventory.markDirty() true diff --git a/src/main/scala/li/cil/oc/server/component/traits/InventoryWorldControl.scala b/src/main/scala/li/cil/oc/server/component/traits/InventoryWorldControl.scala index c585babd8..54c42d59f 100644 --- a/src/main/scala/li/cil/oc/server/component/traits/InventoryWorldControl.scala +++ b/src/main/scala/li/cil/oc/server/component/traits/InventoryWorldControl.scala @@ -9,6 +9,7 @@ import li.cil.oc.util.InventoryUtils import li.cil.oc.util.ResultWrapper.result import net.minecraft.entity.item.EntityItem import net.minecraft.item.ItemBlock +import net.minecraft.item.ItemStack import net.minecraft.util.EnumFacing import net.minecraftforge.common.MinecraftForge import net.minecraftforge.event.entity.item.ItemTossEvent @@ -40,7 +41,7 @@ trait InventoryWorldControl extends InventoryAware with WorldAware with SideRest val facing = checkSideForAction(args, 0) val count = args.optItemCount(1) val stack = inventory.getStackInSlot(selectedSlot) - if (stack != null && stack.getCount > 0) { + if (!stack.isEmpty && stack.getCount > 0) { val blockPos = position.offset(facing) InventoryUtils.inventoryAt(blockPos, facing.getOpposite) match { case Some(inv) if mayInteract(blockPos, facing.getOpposite, inv) => @@ -50,7 +51,7 @@ trait InventoryWorldControl extends InventoryAware with WorldAware with SideRest } else if (stack.getCount == 0) { // Dropped whole stack. - inventory.setInventorySlotContents(selectedSlot, null) + inventory.setInventorySlotContents(selectedSlot, ItemStack.EMPTY) } else { // Dropped partial stack. @@ -65,7 +66,7 @@ trait InventoryWorldControl extends InventoryAware with WorldAware with SideRest val denied = event.hasResult && event.getResult == Result.DENY !canceled && !denied } - if (dropped != null && dropped.getCount > 0) { + if (!dropped.isEmpty) { if (InventoryUtils.spawnStackInWorld(position, dropped, Some(facing), Some(validator)) == null) fakePlayer.inventory.addItemStackToInventory(dropped) } diff --git a/src/main/scala/li/cil/oc/server/component/traits/InventoryWorldControlMk2.scala b/src/main/scala/li/cil/oc/server/component/traits/InventoryWorldControlMk2.scala index b0001e3c8..40027b20e 100644 --- a/src/main/scala/li/cil/oc/server/component/traits/InventoryWorldControlMk2.scala +++ b/src/main/scala/li/cil/oc/server/component/traits/InventoryWorldControlMk2.scala @@ -8,6 +8,7 @@ import li.cil.oc.server.component.result import li.cil.oc.util.BlockPosition import li.cil.oc.util.ExtendedArguments._ import li.cil.oc.util.InventoryUtils +import net.minecraft.item.ItemStack import net.minecraft.util.EnumFacing import net.minecraftforge.items.IItemHandler @@ -18,7 +19,7 @@ trait InventoryWorldControlMk2 extends InventoryAware with WorldAware with SideR val count = args.optItemCount(2) val fromSide = args.optSideAny(3, facing.getOpposite) val stack = inventory.getStackInSlot(selectedSlot) - if (stack != null && stack.getCount > 0) { + if (!stack.isEmpty && stack.getCount > 0) { withInventory(position.offset(facing), fromSide, inventory => { val slot = args.checkSlot(inventory, 1) if (!InventoryUtils.insertIntoInventorySlot(stack, inventory, slot, count)) { @@ -27,7 +28,7 @@ trait InventoryWorldControlMk2 extends InventoryAware with WorldAware with SideR } else if (stack.getCount == 0) { // Dropped whole stack. - this.inventory.setInventorySlotContents(selectedSlot, null) + this.inventory.setInventorySlotContents(selectedSlot, ItemStack.EMPTY) } else { // Dropped partial stack. diff --git a/src/main/scala/li/cil/oc/server/component/traits/WorldInventoryAnalytics.scala b/src/main/scala/li/cil/oc/server/component/traits/WorldInventoryAnalytics.scala index 30410cbc5..f7ec2c32a 100644 --- a/src/main/scala/li/cil/oc/server/component/traits/WorldInventoryAnalytics.scala +++ b/src/main/scala/li/cil/oc/server/component/traits/WorldInventoryAnalytics.scala @@ -64,7 +64,7 @@ trait WorldInventoryAnalytics extends WorldAware with SideRestricted with Networ val stackA = inventory.getStackInSlot(args.checkSlot(inventory, 1)) val stackB = inventory.getStackInSlot(args.checkSlot(inventory, 2)) result(stackA == stackB || - (stackA != null && stackB != null && + (!stackA.isEmpty && !stackB.isEmpty && OreDictionary.getOreIDs(stackA).intersect(OreDictionary.getOreIDs(stackB)).nonEmpty)) }) } @@ -82,7 +82,7 @@ trait WorldInventoryAnalytics extends WorldAware with SideRestricted with Networ val dbAddress = args.checkString(2) def store(stack: ItemStack) = DatabaseAccess.withDatabase(node, dbAddress, database => { val dbSlot = args.checkSlot(database.data, 3) - val nonEmpty = database.getStackInSlot(dbSlot) != null + val nonEmpty = database.getStackInSlot(dbSlot) != ItemStack.EMPTY // zero size stacks database.setStackInSlot(dbSlot, stack.copy()) result(nonEmpty) }) diff --git a/src/main/scala/li/cil/oc/server/driver/CompoundBlockDriver.scala b/src/main/scala/li/cil/oc/server/driver/CompoundBlockDriver.scala index 108320b0e..ff6ac345e 100644 --- a/src/main/scala/li/cil/oc/server/driver/CompoundBlockDriver.scala +++ b/src/main/scala/li/cil/oc/server/driver/CompoundBlockDriver.scala @@ -12,28 +12,22 @@ import net.minecraft.util.EnumFacing import net.minecraft.util.math.BlockPos import net.minecraft.world.World -// TODO Remove blocks in OC 1.7. -class CompoundBlockDriver(val sidedBlocks: Array[driver.SidedBlock], val blocks: Array[driver.Block]) extends driver.SidedBlock { - override def createEnvironment(world: World, pos: BlockPos, side: EnumFacing) = { +class CompoundBlockDriver(val sidedBlocks: Array[driver.SidedBlock]) extends driver.SidedBlock { + override def createEnvironment(world: World, pos: BlockPos, side: EnumFacing): CompoundBlockEnvironment = { val list = sidedBlocks.map { driver => Option(driver.createEnvironment(world, pos, side)) match { case Some(environment) => (driver.getClass.getName, environment) case _ => null } - } ++ blocks.map { - driver => Option(driver.createEnvironment(world, pos)) match { - case Some(environment) => (driver.getClass.getName, environment) - case _ => null - } } filter (_ != null) if (list.isEmpty) null else new CompoundBlockEnvironment(cleanName(tryGetName(world, pos, list.map(_._2))), list: _*) } - override def worksWith(world: World, pos: BlockPos, side: EnumFacing) = sidedBlocks.forall(_.worksWith(world, pos, side)) && blocks.forall(_.worksWith(world, pos)) + override def worksWith(world: World, pos: BlockPos, side: EnumFacing): Boolean = sidedBlocks.forall(_.worksWith(world, pos, side)) - override def equals(obj: Any) = obj match { - case multi: CompoundBlockDriver if multi.sidedBlocks.length == sidedBlocks.length && multi.blocks.length == blocks.length => sidedBlocks.intersect(multi.sidedBlocks).length == sidedBlocks.length && blocks.intersect(multi.blocks).length == blocks.length + override def equals(obj: Any): Boolean = obj match { + case multi: CompoundBlockDriver if multi.sidedBlocks.length == sidedBlocks.length => sidedBlocks.intersect(multi.sidedBlocks).length == sidedBlocks.length case _ => false } diff --git a/src/main/scala/li/cil/oc/server/driver/Registry.scala b/src/main/scala/li/cil/oc/server/driver/Registry.scala index 8d7b64752..e08c670f9 100644 --- a/src/main/scala/li/cil/oc/server/driver/Registry.scala +++ b/src/main/scala/li/cil/oc/server/driver/Registry.scala @@ -7,10 +7,11 @@ import li.cil.oc.api import li.cil.oc.api.driver.Converter import li.cil.oc.api.driver.EnvironmentProvider import li.cil.oc.api.driver.InventoryProvider +import li.cil.oc.api.driver.Item +import li.cil.oc.api.driver.SidedBlock import li.cil.oc.api.driver.item.HostAware import li.cil.oc.api.machine.Value import li.cil.oc.api.network.EnvironmentHost -import li.cil.oc.api.network.ManagedEnvironment import li.cil.oc.util.InventoryUtils import net.minecraft.entity.player.EntityPlayer import net.minecraft.inventory.IInventory @@ -24,6 +25,7 @@ import net.minecraftforge.items.IItemHandler import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ import scala.collection.mutable +import scala.collection.mutable.ArrayBuffer import scala.math.ScalaNumber /** @@ -41,31 +43,21 @@ import scala.math.ScalaNumber * the computer, but may also provide context-free functions. */ private[oc] object Registry extends api.detail.DriverAPI { - val blocks = mutable.ArrayBuffer.empty[api.driver.Block] + val sidedBlocks: ArrayBuffer[SidedBlock] = mutable.ArrayBuffer.empty[api.driver.SidedBlock] - val sidedBlocks = mutable.ArrayBuffer.empty[api.driver.SidedBlock] + val items: ArrayBuffer[Item] = mutable.ArrayBuffer.empty[api.driver.Item] - val items = mutable.ArrayBuffer.empty[api.driver.Item] + val converters: ArrayBuffer[Converter] = mutable.ArrayBuffer.empty[api.driver.Converter] - val converters = mutable.ArrayBuffer.empty[api.driver.Converter] + val environmentProviders: ArrayBuffer[EnvironmentProvider] = mutable.ArrayBuffer.empty[api.driver.EnvironmentProvider] - val environmentProviders = mutable.ArrayBuffer.empty[api.driver.EnvironmentProvider] + val inventoryProviders: ArrayBuffer[InventoryProvider] = mutable.ArrayBuffer.empty[api.driver.InventoryProvider] - val inventoryProviders = mutable.ArrayBuffer.empty[api.driver.InventoryProvider] - - val blacklist = mutable.ArrayBuffer.empty[(ItemStack, mutable.Set[Class[_]])] + val blacklist: ArrayBuffer[(ItemStack, mutable.Set[Class[_]])] = mutable.ArrayBuffer.empty[(ItemStack, mutable.Set[Class[_]])] /** Used to keep track of whether we're past the init phase. */ var locked = false - override def add(driver: api.driver.Block) { - if (locked) throw new IllegalStateException("Please register all drivers in the init phase.") - if (!blocks.contains(driver)) { - OpenComputers.log.debug(s"Registering block driver ${driver.getClass.getName}.") - blocks += driver - } - } - override def add(driver: api.driver.SidedBlock) { if (locked) throw new IllegalStateException("Please register all drivers in the init phase.") if (!sidedBlocks.contains(driver)) { @@ -106,26 +98,14 @@ private[oc] object Registry extends api.detail.DriverAPI { } } - // TODO Remove in OC 1.7 - override def driverFor(world: World, pos: BlockPos) = { - driverFor(world, pos, null) match { - case driver: api.driver.SidedBlock => new api.driver.Block { - override def worksWith(world: World, pos: BlockPos): Boolean = driver.worksWith(world, pos, null) - - override def createEnvironment(world: World, pos: BlockPos): ManagedEnvironment = driver.createEnvironment(world, pos, null) - } - case _ => null - } - } - override def driverFor(world: World, pos: BlockPos, side: EnumFacing): api.driver.SidedBlock = - (sidedBlocks.filter(_.worksWith(world, pos, side)), blocks.filter(_.worksWith(world, pos))) match { - case (sidedDrivers, drivers) if sidedDrivers.nonEmpty || drivers.nonEmpty => new CompoundBlockDriver(sidedDrivers.toArray, drivers.toArray) + sidedBlocks.filter(_.worksWith(world, pos, side)) match { + case sidedDrivers if sidedDrivers.nonEmpty => new CompoundBlockDriver(sidedDrivers.toArray) case _ => null } - override def driverFor(stack: ItemStack, host: Class[_ <: EnvironmentHost]) = - if (stack != null) { + override def driverFor(stack: ItemStack, host: Class[_ <: EnvironmentHost]): Item = + if (!stack.isEmpty) { val hostAware = items.collect { case driver: HostAware if driver.worksWith(stack) => driver } @@ -136,8 +116,8 @@ private[oc] object Registry extends api.detail.DriverAPI { } else null - override def driverFor(stack: ItemStack) = - if (stack != null) items.find(_.worksWith(stack)).orNull + override def driverFor(stack: ItemStack): Item = + if (!stack.isEmpty) items.find(_.worksWith(stack)).orNull else null @Deprecated @@ -165,9 +145,7 @@ private[oc] object Registry extends api.detail.DriverAPI { } } - override def blockDrivers = blocks.toSeq - - override def itemDrivers = items.toSeq + override def itemDrivers: util.List[Item] = items.toSeq def blacklistHost(stack: ItemStack, host: Class[_]) { blacklist.find(_._1.isItemEqual(stack)) match { @@ -176,7 +154,7 @@ private[oc] object Registry extends api.detail.DriverAPI { } } - def convert(value: Array[AnyRef]) = if (value != null) value.map(arg => convertRecursively(arg, new util.IdentityHashMap())) else null + def convert(value: Array[AnyRef]): Array[AnyRef] = if (value != null) value.map(arg => convertRecursively(arg, new util.IdentityHashMap())) else null def convertRecursively(value: Any, memo: util.IdentityHashMap[AnyRef, AnyRef], force: Boolean = false): AnyRef = { val valueRef = value match { @@ -259,7 +237,7 @@ private[oc] object Registry extends api.detail.DriverAPI { } } - def convertList(obj: AnyRef, list: Iterator[(Any, Int)], memo: util.IdentityHashMap[AnyRef, AnyRef]) = { + def convertList(obj: AnyRef, list: Iterator[(Any, Int)], memo: util.IdentityHashMap[AnyRef, AnyRef]): Array[AnyRef] = { val converted = mutable.ArrayBuffer.empty[AnyRef] memo += obj -> converted for ((value, index) <- list) { @@ -268,7 +246,7 @@ private[oc] object Registry extends api.detail.DriverAPI { converted.toArray } - def convertMap(obj: AnyRef, map: Map[_, _], memo: util.IdentityHashMap[AnyRef, AnyRef]) = { + def convertMap(obj: AnyRef, map: Map[_, _], memo: util.IdentityHashMap[AnyRef, AnyRef]): AnyRef = { val converted = memo.getOrElseUpdate(obj, mutable.Map.empty[AnyRef, AnyRef]) match { case map: mutable.Map[AnyRef, AnyRef]@unchecked => map case map: java.util.Map[AnyRef, AnyRef]@unchecked => mapAsScalaMap(map) diff --git a/src/main/scala/li/cil/oc/server/fs/Buffered.scala b/src/main/scala/li/cil/oc/server/fs/Buffered.scala index 0c1ec256a..cacb81e5b 100644 --- a/src/main/scala/li/cil/oc/server/fs/Buffered.scala +++ b/src/main/scala/li/cil/oc/server/fs/Buffered.scala @@ -16,7 +16,7 @@ trait Buffered extends OutputStreamFileSystem { // ----------------------------------------------------------------------- // - override def delete(path: String) = { + override def delete(path: String): Boolean = { if (super.delete(path)) { deletions += path -> System.currentTimeMillis() true @@ -24,7 +24,7 @@ trait Buffered extends OutputStreamFileSystem { else false } - override def rename(from: String, to: String) = { + override def rename(from: String, to: String): Boolean = { if (super.rename(from, to)) { deletions += from -> System.currentTimeMillis() true @@ -34,7 +34,7 @@ trait Buffered extends OutputStreamFileSystem { // ----------------------------------------------------------------------- // - override def load(nbt: NBTTagCompound) = { + override def load(nbt: NBTTagCompound): Unit = { def recurse(path: String, directory: io.File) { makeDirectory(path) for (child <- directory.listFiles() if FileSystem.isValidFilename(child.getName)) { @@ -78,7 +78,7 @@ trait Buffered extends OutputStreamFileSystem { super.load(nbt) } - override def save(nbt: NBTTagCompound) = { + override def save(nbt: NBTTagCompound): Unit = { super.save(nbt) for ((path, time) <- deletions) { diff --git a/src/main/scala/li/cil/oc/server/fs/CompositeReadOnlyFileSystem.scala b/src/main/scala/li/cil/oc/server/fs/CompositeReadOnlyFileSystem.scala index ec717ebb2..d8e455353 100644 --- a/src/main/scala/li/cil/oc/server/fs/CompositeReadOnlyFileSystem.scala +++ b/src/main/scala/li/cil/oc/server/fs/CompositeReadOnlyFileSystem.scala @@ -4,6 +4,7 @@ import java.io.FileNotFoundException import java.util.concurrent.Callable import li.cil.oc.api +import li.cil.oc.api.fs.Handle import li.cil.oc.api.fs.Mode import li.cil.oc.util.ExtendedNBT._ import net.minecraft.nbt.NBTTagCompound @@ -11,7 +12,7 @@ import net.minecraft.nbt.NBTTagCompound import scala.collection.mutable class CompositeReadOnlyFileSystem(factories: mutable.LinkedHashMap[String, Callable[api.fs.FileSystem]]) extends api.fs.FileSystem { - var parts = mutable.LinkedHashMap.empty[String, api.fs.FileSystem] + var parts: mutable.LinkedHashMap[String, api.fs.FileSystem] = mutable.LinkedHashMap.empty[String, api.fs.FileSystem] for ((name, factory) <- factories) { val fs = factory.call() if (fs != null) { @@ -23,21 +24,21 @@ class CompositeReadOnlyFileSystem(factories: mutable.LinkedHashMap[String, Calla override def isReadOnly = true - override def spaceTotal = math.max(spaceUsed, parts.values.map(_.spaceTotal).sum) + override def spaceTotal: Long = math.max(spaceUsed, parts.values.map(_.spaceTotal).sum) - override def spaceUsed = parts.values.map(_.spaceUsed).sum + override def spaceUsed: Long = parts.values.map(_.spaceUsed).sum // ----------------------------------------------------------------------- // - override def exists(path: String) = findFileSystem(path).isDefined + override def exists(path: String): Boolean = findFileSystem(path).isDefined - override def size(path: String) = findFileSystem(path).fold(0L)(_.size(path)) + override def size(path: String): Long = findFileSystem(path).fold(0L)(_.size(path)) - override def isDirectory(path: String) = findFileSystem(path).fold(false)(_.isDirectory(path)) + override def isDirectory(path: String): Boolean = findFileSystem(path).fold(false)(_.isDirectory(path)) - override def lastModified(path: String) = findFileSystem(path).fold(0L)(_.lastModified(path)) + override def lastModified(path: String): Long = findFileSystem(path).fold(0L)(_.lastModified(path)) - override def list(path: String) = if (isDirectory(path)) { + override def list(path: String): Array[String] = if (isDirectory(path)) { parts.values.foldLeft(mutable.Set.empty[String])((acc, fs) => { if (fs.exists(path)) try { val l = fs.list(path) @@ -70,14 +71,14 @@ class CompositeReadOnlyFileSystem(factories: mutable.LinkedHashMap[String, Calla // ----------------------------------------------------------------------- // - override def open(path: String, mode: Mode) = findFileSystem(path) match { + override def open(path: String, mode: Mode): Int = findFileSystem(path) match { case Some(fs) => fs.open(path, mode) case _ => throw new FileNotFoundException(path) } - override def getHandle(handle: Int) = parts.valuesIterator.map(_.getHandle(handle)).find(_ != null).orNull + override def getHandle(handle: Int): Handle = parts.valuesIterator.map(_.getHandle(handle)).find(_ != null).orNull - override def close() = parts.values.foreach(_.close()) + override def close(): Unit = parts.values.foreach(_.close()) // ----------------------------------------------------------------------- // diff --git a/src/main/scala/li/cil/oc/util/FontUtils.scala b/src/main/scala/li/cil/oc/util/FontUtils.scala index 5c32324f9..006e95ab5 100644 --- a/src/main/scala/li/cil/oc/util/FontUtils.scala +++ b/src/main/scala/li/cil/oc/util/FontUtils.scala @@ -24,5 +24,5 @@ object FontUtils { ba } - def wcwidth(ch: Int) = if (ch < 0 || ch >= widths.length) -1 else widths(ch) + def wcwidth(ch: Int): Int = if (ch < 0 || ch >= widths.length) -1 else widths(ch) } diff --git a/src/main/scala/li/cil/oc/util/InventoryUtils.scala b/src/main/scala/li/cil/oc/util/InventoryUtils.scala index d1e52e867..22a1f4279 100644 --- a/src/main/scala/li/cil/oc/util/InventoryUtils.scala +++ b/src/main/scala/li/cil/oc/util/InventoryUtils.scala @@ -33,7 +33,7 @@ object InventoryUtils { * Optionally check for equality in NBT data. */ def haveSameItemType(stackA: ItemStack, stackB: ItemStack, checkNBT: Boolean = false): Boolean = - stackA != null && stackB != null && + !stackA.isEmpty && !stackB.isEmpty && stackA.getItem == stackB.getItem && (!stackA.getHasSubtypes || stackA.getItemDamage == stackB.getItemDamage) && (!checkNBT || ItemStack.areItemStackTagsEqual(stackA, stackB)) @@ -88,7 +88,7 @@ object InventoryUtils { * changes to the inventory the stack may come from, for example. */ def insertIntoInventorySlot(stack: ItemStack, inventory: IItemHandler, slot: Int, limit: Int = 64, simulate: Boolean = false): Boolean = - (stack != null && limit > 0 && stack.getCount > 0) && { + (!stack.isEmpty && limit > 0 && stack.getCount > 0) && { val amount = math.min(stack.getCount, limit) if (simulate) { val toInsert = stack.copy() @@ -139,7 +139,7 @@ object InventoryUtils { */ def extractFromInventorySlot(consumer: (ItemStack) => Unit, inventory: IItemHandler, slot: Int, limit: Int = 64): Boolean = { val stack = inventory.getStackInSlot(slot) - (stack != null && limit > 0 && stack.getCount > 0) && { + (!stack.isEmpty && limit > 0 && stack.getCount > 0) && { var amount = math.min(stack.getMaxStackSize, math.min(stack.getCount, limit)) inventory.extractItem(slot, amount, true) match { case extracted: ItemStack => @@ -177,7 +177,7 @@ object InventoryUtils { * having its size decremented accordingly. */ def insertIntoInventory(stack: ItemStack, inventory: IItemHandler, limit: Int = 64, simulate: Boolean = false, slots: Option[Iterable[Int]] = None): Boolean = - (stack != null && limit > 0 && stack.getCount > 0) && { + (!stack.isEmpty && limit > 0 && stack.getCount > 0) && { var success = false var remaining = limit val range = slots.getOrElse(0 until inventory.getSlots) @@ -341,7 +341,7 @@ object InventoryUtils { for (slot <- 0 until inventory.getSizeInventory) { Option(inventory.getStackInSlot(slot)) match { case Some(stack) if stack.getCount > 0 => - inventory.setInventorySlotContents(slot, null) + inventory.setInventorySlotContents(slot, ItemStack.EMPTY) spawnStackInWorld(position, stack) case _ => // Nothing. } @@ -352,7 +352,7 @@ object InventoryUtils { * Try inserting an item stack into a player inventory. If that fails, drop it into the world. */ def addToPlayerInventory(stack: ItemStack, player: EntityPlayer): Unit = { - if (stack != null) { + if (!stack.isEmpty) { if (player.inventory.addItemStackToInventory(stack)) { player.inventory.markDirty() if (player.openContainer != null) { @@ -369,7 +369,7 @@ object InventoryUtils { * Utility method for spawning an item stack in the world. */ def spawnStackInWorld(position: BlockPosition, stack: ItemStack, direction: Option[EnumFacing] = None, validator: Option[EntityItem => Boolean] = None): EntityItem = position.world match { - case Some(world) if stack != null && stack.getCount > 0 => + case Some(world) if !stack.isEmpty && stack.getCount > 0 => val rng = world.rand val (ox, oy, oz) = direction.fold((0, 0, 0))(d => (d.getFrontOffsetX, d.getFrontOffsetY, d.getFrontOffsetZ)) val (tx, ty, tz) = ( diff --git a/src/main/scala/li/cil/oc/util/ItemCosts.scala b/src/main/scala/li/cil/oc/util/ItemCosts.scala index 94f3acb91..2b082c67a 100644 --- a/src/main/scala/li/cil/oc/util/ItemCosts.scala +++ b/src/main/scala/li/cil/oc/util/ItemCosts.scala @@ -150,7 +150,7 @@ object ItemCosts { // for example by components being assigned an address, which will break the // equals check. private def fuzzyEquals(stack1: ItemStack, stack2: ItemStack) = - stack1 == stack2 || (stack1 != null && stack2 != null && + stack1 == stack2 || (!stack1.isEmpty && !stack2.isEmpty && stack1.getItem == stack2.getItem && (stack1.getItemDamage == stack2.getItemDamage || stack1.getItemDamage == OreDictionary.WILDCARD_VALUE || diff --git a/src/main/scala/li/cil/oc/util/ItemUtils.scala b/src/main/scala/li/cil/oc/util/ItemUtils.scala index ac154b0f8..80ed33971 100644 --- a/src/main/scala/li/cil/oc/util/ItemUtils.scala +++ b/src/main/scala/li/cil/oc/util/ItemUtils.scala @@ -43,7 +43,7 @@ object ItemUtils { nbt.getCompoundTag("display").setString("Name", name) } - def caseTier(stack: ItemStack) = { + def caseTier(stack: ItemStack): Int = { val descriptor = api.Items.get(stack) if (descriptor == api.Items.get(Constants.BlockName.CaseTier1)) Tier.One else if (descriptor == api.Items.get(Constants.BlockName.CaseTier2)) Tier.Two @@ -65,20 +65,20 @@ object ItemUtils { else Tier.None } - def caseNameWithTierSuffix(name: String, tier: Int) = name + (if (tier == Tier.Four) "Creative" else (tier + 1).toString) + def caseNameWithTierSuffix(name: String, tier: Int): String = name + (if (tier == Tier.Four) "Creative" else (tier + 1).toString) - def loadTag(data: Array[Byte]) = { + def loadTag(data: Array[Byte]): NBTTagCompound = { val bais = new ByteArrayInputStream(data) CompressedStreamTools.readCompressed(bais) } - def saveStack(stack: ItemStack) = { + def saveStack(stack: ItemStack): Array[Byte] = { val tag = new NBTTagCompound() stack.writeToNBT(tag) saveTag(tag) } - def saveTag(tag: NBTTagCompound) = { + def saveTag(tag: NBTTagCompound): Array[Byte] = { val baos = new ByteArrayOutputStream() CompressedStreamTools.writeCompressed(tag, baos) baos.toByteArray @@ -86,8 +86,7 @@ object ItemUtils { def getIngredients(stack: ItemStack): Array[ItemStack] = try { def getFilteredInputs(inputs: Iterable[ItemStack], outputSize: Int) = (inputs.filter(input => - input != null && - input.getItem != null && + !input.isEmpty && input.getCount / outputSize > 0 && // Strip out buckets, because those are returned when crafting, and // we have no way of returning the fluid only (and I can't be arsed @@ -103,7 +102,7 @@ object ItemUtils { } val (ingredients, count) = CraftingManager.getInstance.getRecipeList. - filter(recipe => recipe.getRecipeOutput != null && recipe.getRecipeOutput.isItemEqual(stack)).collect { + filter(recipe => !recipe.getRecipeOutput.isEmpty && recipe.getRecipeOutput.isItemEqual(stack)).collect { case recipe: ShapedRecipes => getFilteredInputs(recipe.recipeItems.toIterable, getOutputSize(recipe)) case recipe: ShapelessRecipes => getFilteredInputs(recipe.recipeItems, getOutputSize(recipe)) case recipe: ShapedOreRecipe => getFilteredInputs(resolveOreDictEntries(recipe.getInput), getOutputSize(recipe))