From 57fb77d7fe90a61afc7fbee007c8328e4432a13e Mon Sep 17 00:00:00 2001 From: SquidDev Date: Fri, 28 Dec 2018 11:39:59 +0000 Subject: [PATCH] Refactor common inventory code into a shared interface Many bits of IInventory (open/close, fields, etc...) are not actually needed most implementations, so we can clean things up a little with a common interface. --- .../peripheral/diskdrive/TileDiskDrive.java | 44 +-------------- .../peripheral/printer/TilePrinter.java | 56 +------------------ .../shared/turtle/blocks/TileTurtle.java | 50 +---------------- .../shared/util/DefaultInventory.java | 55 ++++++++++++++++++ .../shared/util/DefaultSidedInventory.java | 28 ++++++++++ 5 files changed, 89 insertions(+), 144 deletions(-) create mode 100644 src/main/java/dan200/computercraft/shared/util/DefaultInventory.java create mode 100644 src/main/java/dan200/computercraft/shared/util/DefaultSidedInventory.java diff --git a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/TileDiskDrive.java b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/TileDiskDrive.java index dd0d530c6..a9f817cea 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/TileDiskDrive.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/TileDiskDrive.java @@ -15,12 +15,12 @@ import dan200.computercraft.shared.peripheral.PeripheralType; import dan200.computercraft.shared.peripheral.common.BlockPeripheral; import dan200.computercraft.shared.peripheral.common.TilePeripheralBase; +import dan200.computercraft.shared.util.DefaultInventory; import dan200.computercraft.shared.util.InventoryUtil; import dan200.computercraft.shared.util.RecordUtil; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -43,8 +43,7 @@ import static net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; -public class TileDiskDrive extends TilePeripheralBase - implements IInventory +public class TileDiskDrive extends TilePeripheralBase implements DefaultInventory { private static class MountInfo { @@ -355,28 +354,6 @@ public ITextComponent getDisplayName() } } - @Override - public int getInventoryStackLimit() - { - return 64; - } - - @Override - public void openInventory( @Nonnull EntityPlayer player ) - { - } - - @Override - public void closeInventory( @Nonnull EntityPlayer player ) - { - } - - @Override - public boolean isItemValidForSlot( int i, @Nonnull ItemStack itemstack ) - { - return true; - } - @Override public boolean isUsableByPlayer( @Nonnull EntityPlayer player ) { @@ -389,23 +366,6 @@ public void clear() setInventorySlotContents( 0, ItemStack.EMPTY ); } - @Override - public int getFieldCount() - { - return 0; - } - - @Override - public int getField( int id ) - { - return 0; - } - - @Override - public void setField( int id, int value ) - { - } - // IPeripheralTile implementation @Override diff --git a/src/main/java/dan200/computercraft/shared/peripheral/printer/TilePrinter.java b/src/main/java/dan200/computercraft/shared/peripheral/printer/TilePrinter.java index 327338c6c..980d830e5 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/printer/TilePrinter.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/printer/TilePrinter.java @@ -12,12 +12,12 @@ import dan200.computercraft.shared.media.items.ItemPrintout; import dan200.computercraft.shared.peripheral.PeripheralType; import dan200.computercraft.shared.peripheral.common.TilePeripheralBase; +import dan200.computercraft.shared.util.DefaultSidedInventory; import dan200.computercraft.shared.util.InventoryUtil; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; -import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -41,8 +41,7 @@ import static net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; -public class TilePrinter extends TilePeripheralBase - implements ISidedInventory +public class TilePrinter extends TilePeripheralBase implements DefaultSidedInventory { // Statics @@ -298,51 +297,12 @@ public ITextComponent getDisplayName() } } - @Override - public int getInventoryStackLimit() - { - return 64; - } - - @Override - public void openInventory( @Nonnull EntityPlayer player ) - { - } - - @Override - public void closeInventory( @Nonnull EntityPlayer player ) - { - } - - @Override - public boolean isItemValidForSlot( int slot, @Nonnull ItemStack itemstack ) - { - return true; - } - @Override public boolean isUsableByPlayer( @Nonnull EntityPlayer player ) { return isUsable( player, false ); } - @Override - public int getFieldCount() - { - return 0; - } - - @Override - public int getField( int id ) - { - return 0; - } - - @Override - public void setField( int id, int value ) - { - } - // ISidedInventory implementation @Nonnull @@ -360,18 +320,6 @@ public int[] getSlotsForFace( @Nonnull EnumFacing side ) } } - @Override - public boolean canInsertItem( int slot, @Nonnull ItemStack itemstack, @Nonnull EnumFacing face ) - { - return isItemValidForSlot( slot, itemstack ); - } - - @Override - public boolean canExtractItem( int slot, @Nonnull ItemStack itemstack, @Nonnull EnumFacing face ) - { - return true; - } - // IPeripheralTile implementation @Override diff --git a/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java b/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java index 0f55a2a4b..4e9958d5e 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java +++ b/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java @@ -19,12 +19,12 @@ import dan200.computercraft.shared.turtle.apis.TurtleAPI; import dan200.computercraft.shared.turtle.core.TurtleBrain; import dan200.computercraft.shared.turtle.items.TurtleItemFactory; +import dan200.computercraft.shared.util.DefaultInventory; import dan200.computercraft.shared.util.InventoryUtil; import dan200.computercraft.shared.util.RedstoneUtil; import dan200.computercraft.shared.util.WorldUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; -import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -32,7 +32,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.ITextComponent; @@ -48,8 +47,7 @@ import static net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; -public class TileTurtle extends TileComputerBase - implements ITurtleTile, IInventory +public class TileTurtle extends TileComputerBase implements ITurtleTile, DefaultInventory { // Statics @@ -594,28 +592,6 @@ public ITextComponent getDisplayName() } } - @Override - public int getInventoryStackLimit() - { - return 64; - } - - @Override - public void openInventory( @Nonnull EntityPlayer player ) - { - } - - @Override - public void closeInventory( @Nonnull EntityPlayer player ) - { - } - - @Override - public boolean isItemValidForSlot( int slot, @Nonnull ItemStack stack ) - { - return true; - } - @Override public void markDirty() { @@ -642,28 +618,6 @@ public boolean isUsableByPlayer( @Nonnull EntityPlayer player ) return isUsable( player, false ); } - @Override - public int getFieldCount() - { - return 0; - } - - @Override - public int getField( int id ) - { - return 0; - } - - @Override - public void setField( int id, int value ) - { - } - - public boolean isUseableByRemote( EntityPlayer player ) - { - return isUsable( player, true ); - } - public void onInventoryDefinitelyChanged() { super.markDirty(); diff --git a/src/main/java/dan200/computercraft/shared/util/DefaultInventory.java b/src/main/java/dan200/computercraft/shared/util/DefaultInventory.java new file mode 100644 index 000000000..9d01565ff --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/util/DefaultInventory.java @@ -0,0 +1,55 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2018. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ + +package dan200.computercraft.shared.util; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +import javax.annotation.Nonnull; + +public interface DefaultInventory extends IInventory +{ + @Override + default int getInventoryStackLimit() + { + return 64; + } + + @Override + default void openInventory( @Nonnull EntityPlayer player ) + { + } + + @Override + default void closeInventory( @Nonnull EntityPlayer player ) + { + } + + @Override + default boolean isItemValidForSlot( int slot, @Nonnull ItemStack stack ) + { + return true; + } + + @Override + default int getField( int field ) + { + return 0; + } + + @Override + default void setField( int field, int value ) + { + } + + @Override + default int getFieldCount() + { + return 0; + } +} diff --git a/src/main/java/dan200/computercraft/shared/util/DefaultSidedInventory.java b/src/main/java/dan200/computercraft/shared/util/DefaultSidedInventory.java new file mode 100644 index 000000000..352bdc259 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/util/DefaultSidedInventory.java @@ -0,0 +1,28 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2018. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ + +package dan200.computercraft.shared.util; + +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +import javax.annotation.Nonnull; + +public interface DefaultSidedInventory extends DefaultInventory, ISidedInventory +{ + @Override + default boolean canInsertItem( int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side ) + { + return isItemValidForSlot( slot, stack ); + } + + @Override + default boolean canExtractItem( int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side ) + { + return true; + } +}