From 2c63a5f9a3622b8c247bb9eda6b9cd6f02693dd8 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Wed, 10 May 2017 10:48:59 +0100 Subject: [PATCH 01/42] Provide various error messages for file handles - fs.open will return an error message if the handle cannot be read - fs and http handles will error when reading from a closed file --- .../dan200/computercraft/core/apis/FSAPI.java | 21 ++++++++++++++++++- .../computercraft/core/apis/HTTPAPI.java | 4 ++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/dan200/computercraft/core/apis/FSAPI.java b/src/main/java/dan200/computercraft/core/apis/FSAPI.java index bd0968bde..acc83141b 100644 --- a/src/main/java/dan200/computercraft/core/apis/FSAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/FSAPI.java @@ -292,7 +292,7 @@ public class FSAPI implements ILuaAPI } } catch( FileSystemException e ) { - return null; + return new Object[] { null, e.getMessage() }; } } case 12: @@ -372,6 +372,8 @@ public class FSAPI implements ILuaAPI private static Object[] wrapBufferedReader( final IMountedFileNormal reader ) { return new Object[] { new ILuaObject() { + private boolean open = true; + @Nonnull @Override public String[] getMethodNames() @@ -391,6 +393,7 @@ public class FSAPI implements ILuaAPI case 0: { // readLine + if( !open ) throw new LuaException( "attempt to use a closed file" ); try { String line = reader.readLine(); if( line != null ) { @@ -405,6 +408,7 @@ public class FSAPI implements ILuaAPI case 1: { // readAll + if( !open ) throw new LuaException( "attempt to use a closed file" ); try { StringBuilder result = new StringBuilder( "" ); String line = reader.readLine(); @@ -425,6 +429,7 @@ public class FSAPI implements ILuaAPI // close try { reader.close(); + open = false; return null; } catch( IOException e ) { return null; @@ -442,6 +447,8 @@ public class FSAPI implements ILuaAPI private static Object[] wrapBufferedWriter( final IMountedFileNormal writer ) { return new Object[] { new ILuaObject() { + private boolean open = true; + @Nonnull @Override public String[] getMethodNames() @@ -462,6 +469,7 @@ public class FSAPI implements ILuaAPI case 0: { // write + if( !open ) throw new LuaException( "attempt to use a closed file" ); String text; if( args.length > 0 && args[0] != null ) { text = args[0].toString(); @@ -478,6 +486,8 @@ public class FSAPI implements ILuaAPI case 1: { // writeLine + if( !open ) throw new LuaException( "attempt to use a closed file" ); + String text; if( args.length > 0 && args[0] != null ) { text = args[0].toString(); @@ -496,6 +506,7 @@ public class FSAPI implements ILuaAPI // close try { writer.close(); + open = false; return null; } catch( IOException e ) { return null; @@ -504,6 +515,7 @@ public class FSAPI implements ILuaAPI case 3: { try { + if( !open ) throw new LuaException( "attempt to use a closed file" ); writer.flush(); return null; } catch ( IOException e ) { @@ -524,6 +536,7 @@ public class FSAPI implements ILuaAPI { return new Object[] { new ILuaObject() { + private boolean open = true; @Nonnull @Override @@ -541,6 +554,7 @@ public class FSAPI implements ILuaAPI case 0: { // read + if( !open ) throw new LuaException( "attempt to use a closed file" ); try { int b = reader.read(); if( b != -1 ) { @@ -557,6 +571,7 @@ public class FSAPI implements ILuaAPI //close try { reader.close(); + open = false; return null; } catch( IOException e ) { return null; @@ -576,6 +591,7 @@ public class FSAPI implements ILuaAPI { return new Object[] { new ILuaObject() { + private boolean open = true; @Nonnull @Override @@ -594,6 +610,7 @@ public class FSAPI implements ILuaAPI case 0: { // write + if( !open ) throw new LuaException( "attempt to use a closed file" ); try { if( args.length > 0 && args[0] instanceof Number ) { @@ -610,6 +627,7 @@ public class FSAPI implements ILuaAPI //close try { writer.close(); + open = false; return null; } catch( IOException e ) { return null; @@ -617,6 +635,7 @@ public class FSAPI implements ILuaAPI } case 2: { + if( !open ) throw new LuaException( "attempt to use a closed file" ); try { writer.flush(); return null; diff --git a/src/main/java/dan200/computercraft/core/apis/HTTPAPI.java b/src/main/java/dan200/computercraft/core/apis/HTTPAPI.java index 768afd017..8ea83332a 100644 --- a/src/main/java/dan200/computercraft/core/apis/HTTPAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/HTTPAPI.java @@ -73,6 +73,7 @@ public class HTTPAPI implements ILuaAPI private static ILuaObject wrapBufferedReader( final BufferedReader reader, final int responseCode, final Map responseHeaders ) { return new ILuaObject() { + private boolean open = true; @Nonnull @Override public String[] getMethodNames() @@ -94,6 +95,7 @@ public class HTTPAPI implements ILuaAPI case 0: { // readLine + if( !open ) throw new LuaException( "attempt to use a closed response" ); try { String line = reader.readLine(); if( line != null ) { @@ -108,6 +110,7 @@ public class HTTPAPI implements ILuaAPI case 1: { // readAll + if( !open ) throw new LuaException( "attempt to use a closed response" ); try { StringBuilder result = new StringBuilder( "" ); String line = reader.readLine(); @@ -128,6 +131,7 @@ public class HTTPAPI implements ILuaAPI // close try { reader.close(); + open = false; return null; } catch( IOException e ) { return null; From b07f28c30ce3b45649b3f7c0847095dfe3f72690 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Tue, 9 May 2017 00:41:20 +0100 Subject: [PATCH 02/42] Replace most inventory handling code with IItemHandlers - Make InventoryUtil deal with item handlers instead. This significantly simplifies the implementation, the interface now does most of the hard work. - Add InvWrapper item handlers to printers, disk drives and turtles - Add IItemHandlerModifiable accessor to ITurtleAccess - Migrate all other inventory code (mostly turtle commands) to use item handlers instead. --- .../api/turtle/ITurtleAccess.java | 13 + .../peripheral/diskdrive/TileDiskDrive.java | 35 ++- .../peripheral/printer/TilePrinter.java | 51 +++- .../shared/pocket/apis/PocketAPI.java | 5 +- .../shared/turtle/blocks/TileTurtle.java | 29 ++ .../shared/turtle/core/TurtleBrain.java | 8 + .../turtle/core/TurtleCraftCommand.java | 2 +- .../shared/turtle/core/TurtleDropCommand.java | 9 +- .../turtle/core/TurtleEquipCommand.java | 7 +- .../turtle/core/TurtlePlaceCommand.java | 2 +- .../shared/turtle/core/TurtlePlayer.java | 2 +- .../turtle/core/TurtleRefuelCommand.java | 6 +- .../shared/turtle/core/TurtleSuckCommand.java | 11 +- .../turtle/core/TurtleTransferToCommand.java | 6 +- .../shared/turtle/upgrades/TurtleTool.java | 7 +- .../shared/util/InventoryUtil.java | 280 +++++------------- 16 files changed, 230 insertions(+), 243 deletions(-) diff --git a/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java b/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java index 0b00b6945..42a51690b 100644 --- a/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java +++ b/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java @@ -15,6 +15,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import net.minecraftforge.items.IItemHandlerModifiable; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -138,10 +139,22 @@ public interface ITurtleAccess * Get the inventory of this turtle * * @return This turtle's inventory + * @see #getItemHandler() */ @Nonnull IInventory getInventory(); + /** + * Get the inventory of this turtle as an {@link IItemHandlerModifiable}. + * + * @return This turtle's inventory + * @see #getInventory() + * @see IItemHandlerModifiable + * @see net.minecraftforge.items.CapabilityItemHandler#ITEM_HANDLER_CAPABILITY + */ + @Nonnull + IItemHandlerModifiable getItemHandler(); + /** * Determine whether this turtle will require fuel when performing actions. * 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 7bad34116..093825132 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/TileDiskDrive.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/TileDiskDrive.java @@ -22,16 +22,27 @@ 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.*; -import net.minecraft.util.math.*; -import net.minecraft.util.text.*; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ITickable; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.wrapper.InvWrapper; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.HashMap; import java.util.Map; import java.util.Set; +import static net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; + public class TileDiskDrive extends TilePeripheralBase implements IInventory, ITickable { @@ -50,6 +61,7 @@ public class TileDiskDrive extends TilePeripheralBase private final Map m_computers; private ItemStack m_diskStack; + private final IItemHandlerModifiable m_itemHandler = new InvWrapper( this ); private IMount m_diskMount; private boolean m_recordQueued; @@ -681,4 +693,21 @@ public class TileDiskDrive extends TilePeripheralBase { ComputerCraft.playRecord( null, null, worldObj, getPos() ); } + + @Override + public boolean hasCapability( @Nonnull Capability capability, @Nullable EnumFacing facing ) + { + return capability == ITEM_HANDLER_CAPABILITY || super.hasCapability( capability, facing ); + } + + @Nonnull + @Override + public T getCapability( @Nonnull Capability capability, @Nullable EnumFacing facing ) + { + if( capability == ITEM_HANDLER_CAPABILITY ) + { + return ITEM_HANDLER_CAPABILITY.cast( m_itemHandler ); + } + return super.getCapability( capability, facing ); + } } 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 f54d07425..47a91a7e5 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/printer/TilePrinter.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/printer/TilePrinter.java @@ -23,13 +23,22 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.*; -import net.minecraft.util.math.*; -import net.minecraft.util.text.*; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.wrapper.InvWrapper; +import net.minecraftforge.items.wrapper.SidedInvWrapper; import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import static net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; public class TilePrinter extends TilePeripheralBase implements IInventory, ISidedInventory @@ -43,6 +52,9 @@ public class TilePrinter extends TilePeripheralBase // Members private final ItemStack[] m_inventory; + private final IItemHandlerModifiable m_itemHandlerAll = new InvWrapper( this ); + private IItemHandlerModifiable[] m_itemHandlerSides; + private final Terminal m_page; private String m_pageTitle; private boolean m_printing; @@ -532,7 +544,7 @@ public class TilePrinter extends TilePeripheralBase ItemStack stack = ItemPrintout.createSingleFromTitleAndText( m_pageTitle, lines, colours ); synchronized( m_inventory ) { - ItemStack remainder = InventoryUtil.storeItems( stack, this, 7, 6, 7 ); + ItemStack remainder = InventoryUtil.storeItems( stack, m_itemHandlerAll, 7, 6, 7 ); if( remainder == null ) { m_printing = false; @@ -596,4 +608,35 @@ public class TilePrinter extends TilePeripheralBase setAnim( anim ); } } + + @Override + public boolean hasCapability( @Nonnull Capability capability, @Nullable EnumFacing facing ) + { + return capability == ITEM_HANDLER_CAPABILITY || super.hasCapability( capability, facing ); + } + + @Nonnull + @Override + public T getCapability( @Nonnull Capability capability, @Nullable EnumFacing facing ) + { + if( capability == ITEM_HANDLER_CAPABILITY ) + { + if( facing == null ) + { + return ITEM_HANDLER_CAPABILITY.cast( m_itemHandlerAll ); + } + else + { + IItemHandlerModifiable[] handlers = m_itemHandlerSides; + if( handlers == null ) handlers = m_itemHandlerSides = new IItemHandlerModifiable[ 6 ]; + + int i = facing.ordinal(); + IItemHandlerModifiable handler = handlers[ i ]; + if( handler == null ) handler = handlers[ i ] = new SidedInvWrapper( this, facing ); + + return ITEM_HANDLER_CAPABILITY.cast( handler ); + } + } + return super.getCapability( capability, facing ); + } } diff --git a/src/main/java/dan200/computercraft/shared/pocket/apis/PocketAPI.java b/src/main/java/dan200/computercraft/shared/pocket/apis/PocketAPI.java index 6b8576db0..11b024642 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/apis/PocketAPI.java +++ b/src/main/java/dan200/computercraft/shared/pocket/apis/PocketAPI.java @@ -18,6 +18,7 @@ import dan200.computercraft.shared.util.WorldUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; +import net.minecraftforge.items.wrapper.PlayerMainInvWrapper; import javax.annotation.Nonnull; @@ -100,7 +101,7 @@ public class PocketAPI implements ILuaAPI ItemStack stack = previousUpgrade.getCraftingItem(); if( stack != null ) { - stack = InventoryUtil.storeItems( stack, inventory, 0, 36, inventory.currentItem ); + stack = InventoryUtil.storeItems( stack, new PlayerMainInvWrapper( inventory ), inventory.currentItem ); if( stack != null ) { WorldUtil.dropItemStack( stack, player.worldObj, player.posX, player.posY, player.posZ ); @@ -139,7 +140,7 @@ public class PocketAPI implements ILuaAPI ItemStack stack = previousUpgrade.getCraftingItem(); if( stack != null ) { - stack = InventoryUtil.storeItems( stack, inventory, 0, 36, inventory.currentItem ); + stack = InventoryUtil.storeItems( stack, new PlayerMainInvWrapper( inventory ), inventory.currentItem ); if( stack != null ) { WorldUtil.dropItemStack( stack, player.worldObj, player.posX, player.posY, player.posZ ); 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 09c80c0b9..15cda06af 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java +++ b/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java @@ -40,11 +40,17 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.wrapper.InvWrapper; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.List; +import static net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; + public class TileTurtle extends TileComputerBase implements ITurtleTile, IInventory, ITickable { @@ -65,6 +71,7 @@ public class TileTurtle extends TileComputerBase private ItemStack[] m_inventory; private ItemStack[] m_previousInventory; + private final IItemHandlerModifiable m_itemHandler = new InvWrapper( this ); private boolean m_inventoryChanged; private TurtleBrain m_brain; private MoveState m_moveState; @@ -714,4 +721,26 @@ public class TileTurtle extends TileComputerBase m_brain.setOwner( this ); copy.m_moveState = MoveState.MOVED; } + + public IItemHandlerModifiable getItemHandler() + { + return m_itemHandler; + } + + @Override + public boolean hasCapability( @Nonnull Capability capability, @Nullable EnumFacing facing ) + { + return capability == ITEM_HANDLER_CAPABILITY || super.hasCapability( capability, facing ); + } + + @Nonnull + @Override + public T getCapability( @Nonnull Capability capability, @Nullable EnumFacing facing ) + { + if( capability == ITEM_HANDLER_CAPABILITY ) + { + return ITEM_HANDLER_CAPABILITY.cast( m_itemHandler ); + } + return super.getCapability( capability, facing ); + } } diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java index 594a51cc3..129c6163c 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java @@ -34,6 +34,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; +import net.minecraftforge.items.IItemHandlerModifiable; import javax.annotation.Nonnull; import java.lang.ref.WeakReference; @@ -649,6 +650,13 @@ public class TurtleBrain implements ITurtleAccess return m_owner; } + @Nonnull + @Override + public IItemHandlerModifiable getItemHandler() + { + return m_owner.getItemHandler(); + } + @Override public boolean isFuelNeeded() { diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCraftCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCraftCommand.java index d358db525..846b63c3d 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCraftCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCraftCommand.java @@ -40,7 +40,7 @@ public class TurtleCraftCommand implements ITurtleCommand // Store the results for( ItemStack stack : results ) { - ItemStack remainder = InventoryUtil.storeItems( stack, turtle.getInventory(), 0, turtle.getInventory().getSizeInventory(), turtle.getSelectedSlot() ); + ItemStack remainder = InventoryUtil.storeItems( stack, turtle.getItemHandler(), turtle.getSelectedSlot() ); if( remainder != null ) { // Drop the remainder diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDropCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDropCommand.java index 892d522c1..5c47e20f0 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDropCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDropCommand.java @@ -17,6 +17,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; +import net.minecraftforge.items.IItemHandler; import javax.annotation.Nonnull; @@ -46,7 +47,7 @@ public class TurtleDropCommand implements ITurtleCommand EnumFacing direction = m_direction.toWorldDir( turtle ); // Get things to drop - ItemStack stack = InventoryUtil.takeItems( m_quantity, turtle.getInventory(), turtle.getSelectedSlot(), 1, turtle.getSelectedSlot() ); + ItemStack stack = InventoryUtil.takeItems( m_quantity, turtle.getItemHandler(), turtle.getSelectedSlot(), 1, turtle.getSelectedSlot() ); if( stack == null ) { return TurtleCommandResult.failure( "No items to drop" ); @@ -58,15 +59,15 @@ public class TurtleDropCommand implements ITurtleCommand BlockPos newPosition = oldPosition.offset( direction ); EnumFacing side = direction.getOpposite(); - IInventory inventory = InventoryUtil.getInventory( world, newPosition, side ); + IItemHandler inventory = InventoryUtil.getInventory( world, newPosition, side ); if( inventory != null ) { // Drop the item into the inventory - ItemStack remainder = InventoryUtil.storeItems( stack, inventory, side ); + ItemStack remainder = InventoryUtil.storeItems( stack, inventory ); if( remainder != null ) { // Put the remainder back in the turtle - InventoryUtil.storeItems( remainder, turtle.getInventory(), 0, turtle.getInventory().getSizeInventory(), turtle.getSelectedSlot() ); + InventoryUtil.storeItems( remainder, turtle.getItemHandler(), turtle.getSelectedSlot() ); } // Return true if we stored anything diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleEquipCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleEquipCommand.java index 966b24c56..7ecb08cbc 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleEquipCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleEquipCommand.java @@ -14,6 +14,7 @@ import dan200.computercraft.shared.util.WorldUtil; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.items.IItemHandler; import javax.annotation.Nonnull; @@ -33,7 +34,7 @@ public class TurtleEquipCommand implements ITurtleCommand // Determine the upgrade to equipLeft ITurtleUpgrade newUpgrade; ItemStack newUpgradeStack; - IInventory inventory = turtle.getInventory(); + IItemHandler inventory = turtle.getItemHandler(); ItemStack selectedStack = inventory.getStackInSlot( turtle.getSelectedSlot() ); if( selectedStack != null ) { @@ -68,19 +69,17 @@ public class TurtleEquipCommand implements ITurtleCommand { // Consume new upgrades item InventoryUtil.takeItems( 1, inventory, turtle.getSelectedSlot(), 1, turtle.getSelectedSlot() ); - inventory.markDirty(); } if( oldUpgradeStack != null ) { // Store old upgrades item - ItemStack remainder = InventoryUtil.storeItems( oldUpgradeStack, inventory, 0, inventory.getSizeInventory(), turtle.getSelectedSlot() ); + ItemStack remainder = InventoryUtil.storeItems( oldUpgradeStack, inventory, turtle.getSelectedSlot() ); if( remainder != null ) { // If there's no room for the items, drop them BlockPos position = turtle.getPosition(); WorldUtil.dropItemStack( remainder, turtle.getWorld(), position, turtle.getDirection() ); } - inventory.markDirty(); } turtle.setUpgrade( m_side, newUpgrade ); diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlaceCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlaceCommand.java index 4d02774d1..8420ca0b6 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlaceCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlaceCommand.java @@ -227,7 +227,7 @@ public class TurtlePlaceCommand implements ITurtleCommand @Override public void consumeDrop( Entity entity, ItemStack drop ) { - ItemStack remainder = InventoryUtil.storeItems( drop, turtle.getInventory(), 0, turtle.getInventory().getSizeInventory(), turtle.getSelectedSlot() ); + ItemStack remainder = InventoryUtil.storeItems( drop, turtle.getItemHandler(), turtle.getSelectedSlot() ); if( remainder != null ) { WorldUtil.dropItemStack( remainder, world, position, turtle.getDirection().getOpposite() ); diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java index 25fb5b7a1..ecbc5f095 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java @@ -54,7 +54,7 @@ public class TurtlePlayer extends FakePlayer ItemStack stack = inventory.getStackInSlot( i ); if( stack != null ) { - ItemStack remainder = InventoryUtil.storeItems( stack, turtle.getInventory(), 0, turtle.getInventory().getSizeInventory(), turtle.getSelectedSlot() ); + ItemStack remainder = InventoryUtil.storeItems( stack, turtle.getItemHandler(), turtle.getSelectedSlot() ); if( remainder != null ) { WorldUtil.dropItemStack( remainder, turtle.getWorld(), dropPosition, dropDirection ); diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleRefuelCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleRefuelCommand.java index 0ade611a2..04974f681 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleRefuelCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleRefuelCommand.java @@ -42,14 +42,14 @@ public class TurtleRefuelCommand implements ITurtleCommand { // Otherwise, refuel for real // Remove items from inventory - ItemStack stack = InventoryUtil.takeItems( m_limit, turtle.getInventory(), turtle.getSelectedSlot(), 1, turtle.getSelectedSlot() ); + ItemStack stack = InventoryUtil.takeItems( m_limit, turtle.getItemHandler(), turtle.getSelectedSlot(), 1, turtle.getSelectedSlot() ); if( stack != null ) { TurtleCommandResult result = refuel( turtle, stack, false ); if( !result.isSuccess() ) { // If the items weren't burnt, put them back - InventoryUtil.storeItems( stack, turtle.getInventory(), 0, turtle.getInventory().getSizeInventory(), turtle.getSelectedSlot() ); + InventoryUtil.storeItems( stack, turtle.getItemHandler(), turtle.getSelectedSlot() ); } return result; } @@ -83,7 +83,7 @@ public class TurtleRefuelCommand implements ITurtleCommand // Store the replacement item in the inventory if( replacementStack != null ) { - InventoryUtil.storeItems( replacementStack, turtle.getInventory(), 0, turtle.getInventory().getSizeInventory(), turtle.getSelectedSlot() ); + InventoryUtil.storeItems( replacementStack, turtle.getItemHandler(), turtle.getSelectedSlot() ); } // Animate diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSuckCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSuckCommand.java index 2d5271647..cca4e7b5f 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSuckCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSuckCommand.java @@ -20,6 +20,7 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; +import net.minecraftforge.items.IItemHandler; import javax.annotation.Nonnull; import java.util.List; @@ -55,19 +56,19 @@ public class TurtleSuckCommand implements ITurtleCommand BlockPos newPosition = WorldUtil.moveCoords( oldPosition, direction ); EnumFacing side = direction.getOpposite(); - IInventory inventory = InventoryUtil.getInventory( world, newPosition, side ); + IItemHandler inventory = InventoryUtil.getInventory( world, newPosition, side ); if( inventory != null ) { // Take from inventory of thing in front - ItemStack stack = InventoryUtil.takeItems( m_quantity, inventory, side ); + ItemStack stack = InventoryUtil.takeItems( m_quantity, inventory ); if( stack != null ) { // Try to place into the turtle - ItemStack remainder = InventoryUtil.storeItems( stack, turtle.getInventory(), 0, turtle.getInventory().getSizeInventory(), turtle.getSelectedSlot() ); + ItemStack remainder = InventoryUtil.storeItems( stack, turtle.getItemHandler(), turtle.getSelectedSlot() ); if( remainder != null ) { // Put the remainder back in the inventory - InventoryUtil.storeItems( remainder, inventory, side ); + InventoryUtil.storeItems( remainder, inventory ); } // Return true if we consumed anything @@ -115,7 +116,7 @@ public class TurtleSuckCommand implements ITurtleCommand storeStack = stack; leaveStack = null; } - ItemStack remainder = InventoryUtil.storeItems( storeStack, turtle.getInventory(), 0, turtle.getInventory().getSizeInventory(), turtle.getSelectedSlot() ); + ItemStack remainder = InventoryUtil.storeItems( storeStack, turtle.getItemHandler(), turtle.getSelectedSlot() ); if( remainder != storeStack ) { storedItems = true; diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleTransferToCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleTransferToCommand.java index 37bf17ee1..c8f658db3 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleTransferToCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleTransferToCommand.java @@ -31,7 +31,7 @@ public class TurtleTransferToCommand implements ITurtleCommand public TurtleCommandResult execute( @Nonnull ITurtleAccess turtle ) { // Take stack - ItemStack stack = InventoryUtil.takeItems( m_quantity, turtle.getInventory(), turtle.getSelectedSlot(), 1, turtle.getSelectedSlot() ); + ItemStack stack = InventoryUtil.takeItems( m_quantity, turtle.getItemHandler(), turtle.getSelectedSlot(), 1, turtle.getSelectedSlot() ); if( stack == null ) { turtle.playAnimation( TurtleAnimation.Wait ); @@ -39,11 +39,11 @@ public class TurtleTransferToCommand implements ITurtleCommand } // Store stack - ItemStack remainder = InventoryUtil.storeItems( stack, turtle.getInventory(), m_slot, 1, m_slot ); + ItemStack remainder = InventoryUtil.storeItems( stack, turtle.getItemHandler(), m_slot, 1, m_slot ); if( remainder != null ) { // Put the remainder back - InventoryUtil.storeItems( remainder, turtle.getInventory(), turtle.getSelectedSlot(), 1, turtle.getSelectedSlot() ); + InventoryUtil.storeItems( remainder, turtle.getItemHandler(), turtle.getSelectedSlot(), 1, turtle.getSelectedSlot() ); } // Return true if we moved anything diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleTool.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleTool.java index 787a8532a..7cb93394c 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleTool.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleTool.java @@ -36,6 +36,7 @@ import org.apache.commons.lang3.tuple.Pair; import javax.annotation.Nonnull; import javax.vecmath.Matrix4f; +import java.util.List; public class TurtleTool implements ITurtleUpgrade { @@ -180,7 +181,7 @@ public class TurtleTool implements ITurtleUpgrade @Override public void consumeDrop( Entity entity, ItemStack drop ) { - ItemStack remainder = InventoryUtil.storeItems( drop, turtle.getInventory(), 0, turtle.getInventory().getSizeInventory(), turtle.getSelectedSlot() ); + ItemStack remainder = InventoryUtil.storeItems( drop, turtle.getItemHandler(), turtle.getSelectedSlot() ); if( remainder != null ) { WorldUtil.dropItemStack( remainder, world, position, turtle.getDirection().getOpposite() ); @@ -261,12 +262,12 @@ public class TurtleTool implements ITurtleUpgrade // Consume the items the block drops if( canHarvestBlock( world, newPosition ) ) { - java.util.List items = getBlockDropped( world, newPosition ); + List items = getBlockDropped( world, newPosition ); if( items != null && items.size() > 0 ) { for( ItemStack stack : items ) { - ItemStack remainder = InventoryUtil.storeItems( stack, turtle.getInventory(), 0, turtle.getInventory().getSizeInventory(), turtle.getSelectedSlot() ); + ItemStack remainder = InventoryUtil.storeItems( stack, turtle.getItemHandler(), turtle.getSelectedSlot() ); if( remainder != null ) { // If there's no room for the items, drop them diff --git a/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java b/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java index 5e37ef95c..4a76ae806 100644 --- a/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java @@ -6,19 +6,20 @@ package dan200.computercraft.shared.util; -import net.minecraft.block.Block; import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; -import net.minecraft.inventory.InventoryLargeChest; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.ILockableContainer; import net.minecraft.world.World; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.items.wrapper.InvWrapper; +import net.minecraftforge.items.wrapper.SidedInvWrapper; import org.apache.commons.lang3.tuple.Pair; public class InventoryUtil @@ -27,35 +28,12 @@ public class InventoryUtil public static boolean areItemsEqual( ItemStack a, ItemStack b ) { - if( areItemsStackable( a, b ) ) - { - if( a == null || a.stackSize == b.stackSize ) - { - return true; - } - } - return false; + return a == b || ItemStack.areItemStacksEqual( a, b ); } public static boolean areItemsStackable( ItemStack a, ItemStack b ) { - if( a == b ) - { - return true; - } - - if( a != null && b != null && a.getItem() == b.getItem() ) - { - if( a.getItemDamage() == b.getItemDamage() ) - { - if( (a.getTagCompound() == null && b.getTagCompound() == null) || - (a.getTagCompound() != null && b.getTagCompound() != null && a.getTagCompound().equals( b.getTagCompound() ) ) ) - { - return true; - } - } - } - return false; + return a == b || ItemHandlerHelper.canItemStacksStack( a, b ); } public static ItemStack copyItem( ItemStack a ) @@ -69,40 +47,28 @@ public class InventoryUtil // Methods for finding inventories: - public static IInventory getInventory( World world, BlockPos pos, EnumFacing side ) + public static IItemHandler getInventory( World world, BlockPos pos, EnumFacing side ) { // Look for tile with inventory int y = pos.getY(); if( y >= 0 && y < world.getHeight() ) { TileEntity tileEntity = world.getTileEntity( pos ); - if( tileEntity != null && tileEntity instanceof IInventory ) + if( tileEntity != null ) { - // Special case code for double chests - Block block = world.getBlockState( pos ).getBlock(); - if( block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST ) + IItemHandler itemHandler = tileEntity.getCapability( CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side ); + if( itemHandler != null ) { - // Check if it's a double chest, and return a combined inventory if so - if( world.getBlockState( pos.west() ).getBlock() == block ) - { - return new InventoryLargeChest( "Large chest", (ILockableContainer)world.getTileEntity( pos.west() ), (ILockableContainer)tileEntity ); - } - if( world.getBlockState( pos.east() ).getBlock() == block ) - { - return new InventoryLargeChest( "Large chest", (ILockableContainer)tileEntity, (ILockableContainer)world.getTileEntity( pos.east() ) ); - } - if( world.getBlockState( pos.north() ).getBlock() == block ) - { - return new InventoryLargeChest( "Large chest", (ILockableContainer)world.getTileEntity( pos.north() ), (ILockableContainer)tileEntity ); - } - if( world.getBlockState( pos.south() ).getBlock() == block ) - { - return new InventoryLargeChest( "Large chest", (ILockableContainer)tileEntity, (ILockableContainer)world.getTileEntity( pos.south() ) ); - } + return itemHandler; + } + else if( side != null && tileEntity instanceof ISidedInventory ) + { + return new SidedInvWrapper( (ISidedInventory) tileEntity, side ); + } + else if( tileEntity instanceof IInventory ) + { + return new InvWrapper( (IInventory) tileEntity ); } - - // Otherwise, get tile inventory - return (IInventory)tileEntity; } } @@ -122,60 +88,52 @@ public class InventoryUtil Entity entity = hit.getKey(); if( entity instanceof IInventory ) { - return (IInventory) entity; + return new InvWrapper( (IInventory) entity ); } } return null; } - + // Methods for placing into inventories: - - public static ItemStack storeItems( ItemStack itemstack, IInventory inventory, int start, int range, int begin ) + + public static ItemStack storeItems( ItemStack itemstack, IItemHandler inventory, int start, int range, int begin ) { int[] slots = makeSlotList( start, range, begin ); - return storeItems( itemstack, inventory, slots, null ); + return storeItems( itemstack, inventory, slots ); } - public static ItemStack storeItems( ItemStack itemstack, IInventory inventory, EnumFacing side ) + public static ItemStack storeItems( ItemStack itemstack, IItemHandler inventory, int begin ) { - // Try ISidedInventory - if( inventory instanceof ISidedInventory ) - { - // Place into ISidedInventory - ISidedInventory sidedInventory = (ISidedInventory)inventory; - int[] slots = sidedInventory.getSlotsForFace( side ); - return storeItems( itemstack, inventory, slots, side ); - } - - // No ISidedInventory, store into any slot - int[] slots = makeSlotList( 0, inventory.getSizeInventory(), 0 ); // TODO: optimise this out? - return storeItems( itemstack, inventory, slots, side ); + int[] slots = makeSlotList( 0, inventory.getSlots(), begin ); + return storeItems( itemstack, inventory, slots ); } - + + public static ItemStack storeItems( ItemStack itemstack, IItemHandler inventory ) + { + int[] slots = makeSlotList( 0, inventory.getSlots(), 0 ); // TODO: optimise this out? + return storeItems( itemstack, inventory, slots ); + } + // Methods for taking out of inventories - - public static ItemStack takeItems( int count, IInventory inventory, int start, int range, int begin ) + + public static ItemStack takeItems( int count, IItemHandler inventory, int start, int range, int begin ) { int[] slots = makeSlotList( start, range, begin ); - return takeItems( count, inventory, slots, null ); + return takeItems( count, inventory, slots ); } - - public static ItemStack takeItems( int count, IInventory inventory, EnumFacing side ) - { - // Try ISidedInventory - if( inventory instanceof ISidedInventory ) - { - // Place into ISidedInventory - ISidedInventory sidedInventory = (ISidedInventory)inventory; - int[] slots = sidedInventory.getSlotsForFace( side ); - return takeItems( count, inventory, slots, side ); - } - // No ISidedInventory, store into any slot - int[] slots = makeSlotList( 0, inventory.getSizeInventory(), 0 ); - return takeItems( count, inventory, slots, side ); + public static ItemStack takeItems( int count, IItemHandler inventory, int begin ) + { + int[] slots = makeSlotList( 0, inventory.getSlots(), begin ); + return takeItems( count, inventory, slots ); } - + + public static ItemStack takeItems( int count, IItemHandler inventory ) + { + int[] slots = makeSlotList( 0, inventory.getSlots(), 0 ); + return takeItems( count, inventory, slots ); + } + // Private methods private static int[] makeSlotList( int start, int range, int begin ) @@ -184,16 +142,16 @@ public class InventoryUtil { return null; } - - int[] slots = new int[range]; - for( int n=0; n= remainder.stackSize ) - { - // Items fit completely in slot - inventory.setInventorySlotContents( slot, remainder ); - inventory.markDirty(); - return null; - } - else - { - // Items fit partially in slot - remainder = remainder.copy(); - inventory.setInventorySlotContents( slot, remainder.splitStack( space ) ); - } - } - else if( areItemsStackable( slotContents, remainder ) ) - { - // Slot is occupied, but matching - int space = Math.min( slotContents.getMaxStackSize(), inventory.getInventoryStackLimit() ) - slotContents.stackSize; - if( space >= remainder.stackSize ) - { - // Items fit completely in slot - slotContents.stackSize += remainder.stackSize; - inventory.setInventorySlotContents( slot, slotContents ); - inventory.markDirty(); - return null; - } - else if( space > 0 ) - { - // Items fit partially in slot - remainder = remainder.copy(); - remainder.stackSize -= space; - slotContents.stackSize += space; - inventory.setInventorySlotContents( slot, slotContents ); - } - } - } - } - - // If the output isn't the input, inform the change - if( remainder != stack ) - { - inventory.markDirty(); + if( remainder == null ) break; + remainder = inventory.insertItem( slot, remainder, false ); } return remainder; } - private static boolean canPlaceItemThroughFace( IInventory inventory, int slot, ItemStack itemstack, EnumFacing face ) - { - if( inventory.isItemValidForSlot( slot, itemstack ) ) - { - if( face != null && inventory instanceof ISidedInventory ) - { - ISidedInventory sided = (ISidedInventory)inventory; - return sided.canInsertItem( slot, itemstack, face ); - } - return true; - } - return false; - } - - private static ItemStack takeItems( int count, IInventory inventory, int[] slots, EnumFacing face ) + private static ItemStack takeItems( int count, IItemHandler inventory, int[] slots ) { if( slots == null ) { @@ -287,65 +184,30 @@ public class InventoryUtil int countRemaining = count; for( int slot : slots ) { - if( countRemaining > 0 ) + if( countRemaining <= 0 ) break; + + ItemStack stack = inventory.getStackInSlot( slot ); + if( stack != null ) { - ItemStack stack = inventory.getStackInSlot( slot ); - if( stack != null && canTakeItemThroughFace( inventory, slot, stack, face ) ) + if( partialStack == null || areItemsStackable( stack, partialStack ) ) { - if( partialStack == null || areItemsStackable( stack, partialStack ) ) + ItemStack extracted = inventory.extractItem( slot, countRemaining, false ); + if( extracted != null ) { - // Found a matching thing - if( countRemaining >= stack.stackSize ) + countRemaining -= extracted.stackSize; + if( partialStack == null ) { - // Eat the thing whole - inventory.setInventorySlotContents( slot, null ); - if( partialStack == null ) - { - partialStack = stack; - countRemaining = Math.min( countRemaining, partialStack.getItem().getItemStackLimit( partialStack ) ) - stack.stackSize; - } - else - { - partialStack.stackSize += stack.stackSize; - countRemaining -= stack.stackSize; - } + partialStack = extracted; } else { - // Eat part of the thing - ItemStack splitStack = stack.splitStack( countRemaining ); - if( partialStack == null ) - { - partialStack = splitStack; - countRemaining = Math.min( countRemaining, partialStack.getItem().getItemStackLimit( partialStack ) ) - splitStack.stackSize; - } - else - { - partialStack.stackSize += splitStack.stackSize; - countRemaining -= splitStack.stackSize; - } + partialStack.stackSize += extracted.stackSize; } } } } } - // Return the final stack - if( partialStack != null ) - { - inventory.markDirty(); - return partialStack; - } - return null; - } - - private static boolean canTakeItemThroughFace( IInventory inventory, int slot, ItemStack itemstack, EnumFacing face ) - { - if( face != null && inventory instanceof ISidedInventory ) - { - ISidedInventory sided = (ISidedInventory)inventory; - return sided.canExtractItem( slot, itemstack, face ); - } - return true; + return partialStack; } } From 9908f8c289fd0d93b3d10afc3a69eb836083676f Mon Sep 17 00:00:00 2001 From: SquidDev Date: Thu, 11 May 2017 21:01:23 +0100 Subject: [PATCH 03/42] Do not insert empty or duplicate entries into shell history If a string is empty or the same as the previous command then it will not be inserted into history. --- src/main/resources/assets/computercraft/lua/rom/programs/lua | 4 +++- .../resources/assets/computercraft/lua/rom/programs/shell | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/computercraft/lua/rom/programs/lua b/src/main/resources/assets/computercraft/lua/rom/programs/lua index edff066c0..2569bf69b 100644 --- a/src/main/resources/assets/computercraft/lua/rom/programs/lua +++ b/src/main/resources/assets/computercraft/lua/rom/programs/lua @@ -44,7 +44,9 @@ while bRunning do end return nil end ) - table.insert( tCommandHistory, s ) + if s:match("%S") and tCommandHistory[#tCommandHistory] ~= s then + table.insert( tCommandHistory, s ) + end local nForcePrint = 0 local func, e = load( s, "lua", "t", tEnv ) diff --git a/src/main/resources/assets/computercraft/lua/rom/programs/shell b/src/main/resources/assets/computercraft/lua/rom/programs/shell index 3bcec92df..59728ed62 100644 --- a/src/main/resources/assets/computercraft/lua/rom/programs/shell +++ b/src/main/resources/assets/computercraft/lua/rom/programs/shell @@ -363,7 +363,9 @@ else else sLine = read( nil, tCommandHistory ) end - table.insert( tCommandHistory, sLine ) + if sLine:match("%S") and tCommandHistory[#tCommandHistory] ~= sLine then + table.insert( tCommandHistory, sLine ) + end shell.run( sLine ) end end From add046cbdadf358788219911101d4a04282a2600 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Fri, 12 May 2017 13:29:56 +0100 Subject: [PATCH 04/42] Remap all blocks and items to underscore_case This makes block/model names a little mode consistent and should help with porting to 1.11.2. - Prefix all tile entities with "computercraft:". - Change all "pascalCase" and "CC-*" items to use underscore_case - Listen to the missing mappings event and gracefully convert blocks/items. --- .../dan200/computercraft/ComputerCraft.java | 9 + .../shared/proxy/CCTurtleProxyCommon.java | 59 +- .../proxy/ComputerCraftProxyCommon.java | 87 +- .../shared/proxy/ICCTurtleProxy.java | 2 + .../shared/proxy/IComputerCraftProxy.java | 2 + .../blockstates/{CC-Cable.json => cable.json} | 384 ++++---- .../{CC-Computer.json => computer.json} | 68 +- .../{CC-Peripheral.json => peripheral.json} | 900 +++++++++--------- .../{CC-TurtleExpanded.json => turtle.json} | 16 +- ...rtleAdvanced.json => turtle_advanced.json} | 16 +- .../{CC-Turtle.json => turtle_expanded.json} | 16 +- 11 files changed, 836 insertions(+), 723 deletions(-) rename src/main/resources/assets/computercraft/blockstates/{CC-Cable.json => cable.json} (96%) rename src/main/resources/assets/computercraft/blockstates/{CC-Computer.json => computer.json} (98%) rename src/main/resources/assets/computercraft/blockstates/{CC-Peripheral.json => peripheral.json} (99%) rename src/main/resources/assets/computercraft/blockstates/{CC-TurtleExpanded.json => turtle.json} (97%) rename src/main/resources/assets/computercraft/blockstates/{CC-TurtleAdvanced.json => turtle_advanced.json} (97%) rename src/main/resources/assets/computercraft/blockstates/{CC-Turtle.json => turtle_expanded.json} (97%) diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index 1e279a93b..89e40d22b 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -90,6 +90,7 @@ import java.util.Map; public class ComputerCraft { public static final String MOD_ID = "ComputerCraft"; + public static final String LOWER_ID = "computercraft"; // GUI IDs public static final int diskDriveGUIID = 100; @@ -334,6 +335,14 @@ public class ComputerCraft turtleProxy.init(); } + + @Mod.EventHandler + public void onMissingMappings( FMLMissingMappingsEvent event ) + { + proxy.remap( event ); + turtleProxy.remap( event ); + } + @Mod.EventHandler public void onServerStarting( FMLServerStartingEvent event ) { diff --git a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java index 06f5c272f..8c96d3211 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java @@ -34,10 +34,12 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.IRecipe; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import net.minecraftforge.fml.common.event.FMLMissingMappingsEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.EntityRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; @@ -329,14 +331,14 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy // Blocks // Turtle ComputerCraft.Blocks.turtle = BlockTurtle.createTurtleBlock(); - registerBlock( ComputerCraft.Blocks.turtle, new ItemTurtleLegacy(ComputerCraft.Blocks.turtle), "CC-Turtle" ); + registerBlock( ComputerCraft.Blocks.turtle, new ItemTurtleLegacy(ComputerCraft.Blocks.turtle), "turtle" ); ComputerCraft.Blocks.turtleExpanded = BlockTurtle.createTurtleBlock(); - registerBlock( ComputerCraft.Blocks.turtleExpanded, new ItemTurtleNormal( ComputerCraft.Blocks.turtleExpanded ), "CC-TurtleExpanded" ); + registerBlock( ComputerCraft.Blocks.turtleExpanded, new ItemTurtleNormal( ComputerCraft.Blocks.turtleExpanded ), "turtle_expanded" ); // Advanced Turtle ComputerCraft.Blocks.turtleAdvanced = BlockTurtle.createTurtleBlock(); - registerBlock( ComputerCraft.Blocks.turtleAdvanced, new ItemTurtleAdvanced( ComputerCraft.Blocks.turtleAdvanced ), "CC-TurtleAdvanced" ); + registerBlock( ComputerCraft.Blocks.turtleAdvanced, new ItemTurtleAdvanced( ComputerCraft.Blocks.turtleAdvanced ), "turtle_advanced" ); // Recipe types RecipeSorter.register( "computercraft:turtle", TurtleRecipe.class, RecipeSorter.Category.SHAPED, "after:minecraft:shapeless" ); @@ -406,17 +408,60 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy registerTurtleUpgradeInternal( ComputerCraft.Upgrades.advancedModem ); } - private void registerBlock( Block block, Item item, String name) { + @Override + public void remap( FMLMissingMappingsEvent mappings ) + { + // We have to use mappings.getAll() as the mod ID is upper case but the domain lower. + for( FMLMissingMappingsEvent.MissingMapping mapping : mappings.getAll() ) + { + String domain = mapping.resourceLocation.getResourceDomain(); + if( !domain.equalsIgnoreCase( ComputerCraft.MOD_ID ) ) continue; + + String key = mapping.resourceLocation.getResourcePath(); + if( key.equals( "CC-Turtle" ) ) + { + remap( mapping, ComputerCraft.Blocks.turtle ); + } + else if( key.equals( "CC-TurtleExpanded" ) ) + { + remap( mapping, ComputerCraft.Blocks.turtleExpanded ); + } + else if( key.equals( "CC-TurtleAdvanced" ) ) + { + remap( mapping, ComputerCraft.Blocks.turtleAdvanced ); + } + } + } + + private static void remap( FMLMissingMappingsEvent.MissingMapping mapping, Block block ) + { + if( mapping.type == GameRegistry.Type.BLOCK ) + { + mapping.remap( block ); + } + else + { + mapping.remap( Item.getItemFromBlock( block ) ); + } + } + + private void registerBlock( Block block, Item item, String name ) + { GameRegistry.register( block.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, name ) ) ); GameRegistry.register( item.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, name ) ) ); } + private void registerTileEntity( Class klass, String name ) + { + GameRegistry.registerTileEntityWithAlternatives( klass, ComputerCraft.LOWER_ID + " : " + name, name ); + } + private void registerTileEntities() { // TileEntities - GameRegistry.registerTileEntity( TileTurtle.class, "turtle" ); - GameRegistry.registerTileEntity( TileTurtleExpanded.class, "turtleex" ); - GameRegistry.registerTileEntity( TileTurtleAdvanced.class, "turtleadv" ); + registerTileEntity( TileTurtle.class, "turtle" ); + registerTileEntity( TileTurtleExpanded.class, "turtleex" ); + registerTileEntity( TileTurtleAdvanced.class, "turtleadv" ); } private void registerForgeHandlers() diff --git a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java index b3a780c0e..8cf5d8d02 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java @@ -9,7 +9,6 @@ package dan200.computercraft.shared.proxy; import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.pocket.IPocketUpgrade; -import dan200.computercraft.core.computer.Computer; import dan200.computercraft.core.computer.MainThread; import dan200.computercraft.shared.common.DefaultBundledRedstoneProvider; import dan200.computercraft.shared.common.TileGeneric; @@ -75,6 +74,7 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.client.event.ConfigChangedEvent; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import net.minecraftforge.fml.common.event.FMLMissingMappingsEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.network.FMLNetworkEvent; @@ -234,15 +234,15 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy // Blocks // Computer ComputerCraft.Blocks.computer = new BlockComputer(); - registerBlock( ComputerCraft.Blocks.computer, new ItemComputer( ComputerCraft.Blocks.computer ), "CC-Computer" ); + registerBlock( ComputerCraft.Blocks.computer, new ItemComputer( ComputerCraft.Blocks.computer ), "computer" ); // Peripheral ComputerCraft.Blocks.peripheral = new BlockPeripheral(); - registerBlock( ComputerCraft.Blocks.peripheral, new ItemPeripheral( ComputerCraft.Blocks.peripheral ), "CC-Peripheral" ); + registerBlock( ComputerCraft.Blocks.peripheral, new ItemPeripheral( ComputerCraft.Blocks.peripheral ), "peripheral" ); // Cable ComputerCraft.Blocks.cable = new BlockCable(); - registerBlock( ComputerCraft.Blocks.cable, new ItemCable( ComputerCraft.Blocks.cable ), "CC-Cable" ); + registerBlock( ComputerCraft.Blocks.cable, new ItemCable( ComputerCraft.Blocks.cable ), "cable" ); // Command Computer ComputerCraft.Blocks.commandComputer = new BlockCommandComputer(); @@ -258,11 +258,11 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy GameRegistry.register( ComputerCraft.Items.disk.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "disk" ) ) ); ComputerCraft.Items.diskExpanded = new ItemDiskExpanded(); - GameRegistry.register( ComputerCraft.Items.diskExpanded.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "diskExpanded" ) ) ); + GameRegistry.register( ComputerCraft.Items.diskExpanded.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "disk_expanded" ) ) ); // Treasure Disk ComputerCraft.Items.treasureDisk = new ItemTreasureDisk(); - GameRegistry.register( ComputerCraft.Items.treasureDisk.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "treasureDisk" ) ) ); + GameRegistry.register( ComputerCraft.Items.treasureDisk.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "treasure_disk" ) ) ); // Printout ComputerCraft.Items.printout = new ItemPrintout(); @@ -270,7 +270,7 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy // Pocket computer ComputerCraft.Items.pocketComputer = new ItemPocketComputer(); - GameRegistry.register( ComputerCraft.Items.pocketComputer.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "pocketComputer" ) ) ); + GameRegistry.register( ComputerCraft.Items.pocketComputer.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "pocket_computer" ) ) ); // Recipe types RecipeSorter.register( "computercraft:impostor", ImpostorRecipe.class, RecipeSorter.Category.SHAPED, "after:minecraft:shapeless" ); @@ -473,22 +473,77 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy GameRegistry.addShapelessRecipe( cloudyHead, monitor, new ItemStack( Items.SKULL, 1, 1 ) ); } - private void registerBlock( Block block, Item item, String name) { + @Override + public void remap( FMLMissingMappingsEvent mappings ) + { + // We have to use mappings.getAll() as the mod ID is upper case but the domain lower. + for( FMLMissingMappingsEvent.MissingMapping mapping : mappings.getAll() ) + { + String domain = mapping.resourceLocation.getResourceDomain(); + if( !domain.equalsIgnoreCase( ComputerCraft.MOD_ID ) ) continue; + + String key = mapping.resourceLocation.getResourcePath(); + if( key.equals( "CC-Computer" ) ) + { + remap( mapping, ComputerCraft.Blocks.computer ); + } + else if( key.equals( "CC-Peripheral" ) ) + { + remap( mapping, ComputerCraft.Blocks.peripheral ); + } + else if( key.equals( "CC-Cable" ) ) + { + remap( mapping, ComputerCraft.Blocks.cable ); + } + else if( key.equals( "diskExpanded" ) ) + { + mapping.remap( ComputerCraft.Items.diskExpanded ); + } + else if( key.equals( "treasureDisk" ) ) + { + mapping.remap( ComputerCraft.Items.treasureDisk ); + } + else if( key.equals( "pocketComputer" ) ) + { + mapping.remap( ComputerCraft.Items.pocketComputer ); + } + } + } + + private static void remap( FMLMissingMappingsEvent.MissingMapping mapping, Block block ) + { + if( mapping.type == GameRegistry.Type.BLOCK ) + { + mapping.remap( block ); + } + else + { + mapping.remap( Item.getItemFromBlock( block ) ); + } + } + + private void registerBlock( Block block, Item item, String name ) + { GameRegistry.register( block.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, name ) ) ); GameRegistry.register( item.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, name ) ) ); } + private void registerTileEntity( Class klass, String name ) + { + GameRegistry.registerTileEntityWithAlternatives( klass, ComputerCraft.LOWER_ID + " : " + name, name ); + } + private void registerTileEntities() { // Tile Entities - GameRegistry.registerTileEntity( TileComputer.class, "computer" ); - GameRegistry.registerTileEntity( TileDiskDrive.class, "diskdrive" ); - GameRegistry.registerTileEntity( TileWirelessModem.class, "wirelessmodem" ); - GameRegistry.registerTileEntity( TileMonitor.class, "monitor" ); - GameRegistry.registerTileEntity( TilePrinter.class, "ccprinter" ); - GameRegistry.registerTileEntity( TileCable.class, "wiredmodem" ); - GameRegistry.registerTileEntity( TileCommandComputer.class, "command_computer" ); - GameRegistry.registerTileEntity( TileAdvancedModem.class, "advanced_modem" ); + registerTileEntity( TileComputer.class, "computer" ); + registerTileEntity( TileDiskDrive.class, "diskdrive" ); + registerTileEntity( TileWirelessModem.class, "wirelessmodem" ); + registerTileEntity( TileMonitor.class, "monitor" ); + registerTileEntity( TilePrinter.class, "ccprinter" ); + registerTileEntity( TileCable.class, "wiredmodem" ); + registerTileEntity( TileCommandComputer.class, "command_computer" ); + registerTileEntity( TileAdvancedModem.class, "advanced_modem" ); // Register peripheral providers ComputerCraftAPI.registerPeripheralProvider( new DefaultPeripheralProvider() ); diff --git a/src/main/java/dan200/computercraft/shared/proxy/ICCTurtleProxy.java b/src/main/java/dan200/computercraft/shared/proxy/ICCTurtleProxy.java index af0b1edf8..6da3fa8b6 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ICCTurtleProxy.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ICCTurtleProxy.java @@ -10,6 +10,7 @@ import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.shared.util.IEntityDropConsumer; import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.event.FMLMissingMappingsEvent; import java.util.List; @@ -17,6 +18,7 @@ public interface ICCTurtleProxy { void preInit(); void init(); + void remap( FMLMissingMappingsEvent mappings); void registerTurtleUpgrade( ITurtleUpgrade upgrade ); ITurtleUpgrade getTurtleUpgrade( String id ); diff --git a/src/main/java/dan200/computercraft/shared/proxy/IComputerCraftProxy.java b/src/main/java/dan200/computercraft/shared/proxy/IComputerCraftProxy.java index fc07c2e01..34af21b0a 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/IComputerCraftProxy.java +++ b/src/main/java/dan200/computercraft/shared/proxy/IComputerCraftProxy.java @@ -18,6 +18,7 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.SoundEvent; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.fml.common.event.FMLMissingMappingsEvent; import java.io.File; @@ -25,6 +26,7 @@ public interface IComputerCraftProxy { void preInit(); void init(); + void remap( FMLMissingMappingsEvent mappings); boolean isClient(); boolean getGlobalCursorBlink(); diff --git a/src/main/resources/assets/computercraft/blockstates/CC-Cable.json b/src/main/resources/assets/computercraft/blockstates/cable.json similarity index 96% rename from src/main/resources/assets/computercraft/blockstates/CC-Cable.json rename to src/main/resources/assets/computercraft/blockstates/cable.json index 0d0f56f64..a4cea04e3 100644 --- a/src/main/resources/assets/computercraft/blockstates/CC-Cable.json +++ b/src/main/resources/assets/computercraft/blockstates/cable.json @@ -1,192 +1,192 @@ -{ - "forge_marker": 1, - "variants": { - "cable": { - "true": { - "submodel": { - "cable": { "model": "computercraft:cable_core" } - } - }, - "false": { - } - }, - "up": { - "true": { - "submodel": { - "up": { "model": "computercraft:cable_arm", "x": 90 } - } - }, - "false": { - } - }, - "down": { - "true": { - "submodel": { - "down": { "model": "computercraft:cable_arm", "x": 270 } - } - }, - "false": { - } - }, - "north": { - "true": { - "submodel": { - "north": { "model": "computercraft:cable_arm", "y": 180 } - } - }, - "false": { - } - }, - "south": { - "true": { - "submodel": { - "south": { "model": "computercraft:cable_arm" } - } - }, - "false": { - } - }, - "west": { - "true": { - "submodel": { - "west": { "model": "computercraft:cable_arm", "y": 90 } - } - }, - "false": { - } - }, - "east": { - "true": { - "submodel": { - "east": { "model": "computercraft:cable_arm", "y": 270 } - } - }, - "false": { - } - }, - "modem": { - "none": { - }, - "up_off": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_off", "x": 270 } - } - }, - "down_off": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_off", "x": 90 } - } - }, - "north_off": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_off" } - } - }, - "south_off": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_off", "y": 180 } - } - }, - "west_off": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_off", "y": 270 } - } - }, - "east_off": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_off", "y": 90 } - } - }, - "up_on": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_on", "x": 270 } - } - }, - "down_on": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_on", "x": 90 } - } - }, - "north_on": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_on" } - } - }, - "south_on": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_on", "y": 180 } - } - }, - "west_on": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_on", "y": 270 } - } - }, - "east_on": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_on", "y": 90 } - } - }, - "up_off_peripheral": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_off_peripheral", "x": 270 } - } - }, - "down_off_peripheral": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_off_peripheral", "x": 90 } - } - }, - "north_off_peripheral": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_off_peripheral" } - } - }, - "south_off_peripheral": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_off_peripheral", "y": 180 } - } - }, - "west_off_peripheral": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_off_peripheral", "y": 270 } - } - }, - "east_off_peripheral": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_off_peripheral", "y": 90 } - } - }, - "up_on_peripheral": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_on_peripheral", "x": 270 } - } - }, - "down_on_peripheral": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_on_peripheral", "x": 90 } - } - }, - "north_on_peripheral": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_on_peripheral" } - } - }, - "south_on_peripheral": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_on_peripheral", "y": 180 } - } - }, - "west_on_peripheral": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_on_peripheral", "y": 270 } - } - }, - "east_on_peripheral": { - "submodel": { - "modem": { "model": "computercraft:wired_modem_on_peripheral", "y": 90 } - } - } - } - } -} +{ + "forge_marker": 1, + "variants": { + "cable": { + "true": { + "submodel": { + "cable": { "model": "computercraft:cable_core" } + } + }, + "false": { + } + }, + "up": { + "true": { + "submodel": { + "up": { "model": "computercraft:cable_arm", "x": 90 } + } + }, + "false": { + } + }, + "down": { + "true": { + "submodel": { + "down": { "model": "computercraft:cable_arm", "x": 270 } + } + }, + "false": { + } + }, + "north": { + "true": { + "submodel": { + "north": { "model": "computercraft:cable_arm", "y": 180 } + } + }, + "false": { + } + }, + "south": { + "true": { + "submodel": { + "south": { "model": "computercraft:cable_arm" } + } + }, + "false": { + } + }, + "west": { + "true": { + "submodel": { + "west": { "model": "computercraft:cable_arm", "y": 90 } + } + }, + "false": { + } + }, + "east": { + "true": { + "submodel": { + "east": { "model": "computercraft:cable_arm", "y": 270 } + } + }, + "false": { + } + }, + "modem": { + "none": { + }, + "up_off": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_off", "x": 270 } + } + }, + "down_off": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_off", "x": 90 } + } + }, + "north_off": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_off" } + } + }, + "south_off": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_off", "y": 180 } + } + }, + "west_off": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_off", "y": 270 } + } + }, + "east_off": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_off", "y": 90 } + } + }, + "up_on": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_on", "x": 270 } + } + }, + "down_on": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_on", "x": 90 } + } + }, + "north_on": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_on" } + } + }, + "south_on": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_on", "y": 180 } + } + }, + "west_on": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_on", "y": 270 } + } + }, + "east_on": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_on", "y": 90 } + } + }, + "up_off_peripheral": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_off_peripheral", "x": 270 } + } + }, + "down_off_peripheral": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_off_peripheral", "x": 90 } + } + }, + "north_off_peripheral": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_off_peripheral" } + } + }, + "south_off_peripheral": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_off_peripheral", "y": 180 } + } + }, + "west_off_peripheral": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_off_peripheral", "y": 270 } + } + }, + "east_off_peripheral": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_off_peripheral", "y": 90 } + } + }, + "up_on_peripheral": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_on_peripheral", "x": 270 } + } + }, + "down_on_peripheral": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_on_peripheral", "x": 90 } + } + }, + "north_on_peripheral": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_on_peripheral" } + } + }, + "south_on_peripheral": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_on_peripheral", "y": 180 } + } + }, + "west_on_peripheral": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_on_peripheral", "y": 270 } + } + }, + "east_on_peripheral": { + "submodel": { + "modem": { "model": "computercraft:wired_modem_on_peripheral", "y": 90 } + } + } + } + } +} diff --git a/src/main/resources/assets/computercraft/blockstates/CC-Computer.json b/src/main/resources/assets/computercraft/blockstates/computer.json similarity index 98% rename from src/main/resources/assets/computercraft/blockstates/CC-Computer.json rename to src/main/resources/assets/computercraft/blockstates/computer.json index 8c36ba08d..6358c1123 100644 --- a/src/main/resources/assets/computercraft/blockstates/CC-Computer.json +++ b/src/main/resources/assets/computercraft/blockstates/computer.json @@ -1,34 +1,34 @@ -{ - "variants": { - - "advanced=false,facing=north,state=off": { "model": "computercraft:computer_off" }, - "advanced=false,facing=south,state=off": { "model": "computercraft:computer_off", "y": 180 }, - "advanced=false,facing=west,state=off": { "model": "computercraft:computer_off", "y": 270 }, - "advanced=false,facing=east,state=off": { "model": "computercraft:computer_off", "y": 90 }, - - "advanced=false,facing=north,state=on": { "model": "computercraft:computer_on" }, - "advanced=false,facing=south,state=on": { "model": "computercraft:computer_on", "y": 180 }, - "advanced=false,facing=west,state=on": { "model": "computercraft:computer_on", "y": 270 }, - "advanced=false,facing=east,state=on": { "model": "computercraft:computer_on", "y": 90 }, - - "advanced=false,facing=north,state=blinking": { "model": "computercraft:computer_blinking" }, - "advanced=false,facing=south,state=blinking": { "model": "computercraft:computer_blinking", "y": 180 }, - "advanced=false,facing=west,state=blinking": { "model": "computercraft:computer_blinking", "y": 270 }, - "advanced=false,facing=east,state=blinking": { "model": "computercraft:computer_blinking", "y": 90 }, - - "advanced=true,facing=north,state=off": { "model": "computercraft:advanced_computer_off" }, - "advanced=true,facing=south,state=off": { "model": "computercraft:advanced_computer_off", "y": 180 }, - "advanced=true,facing=west,state=off": { "model": "computercraft:advanced_computer_off", "y": 270 }, - "advanced=true,facing=east,state=off": { "model": "computercraft:advanced_computer_off", "y": 90 }, - - "advanced=true,facing=north,state=on": { "model": "computercraft:advanced_computer_on" }, - "advanced=true,facing=south,state=on": { "model": "computercraft:advanced_computer_on", "y": 180 }, - "advanced=true,facing=west,state=on": { "model": "computercraft:advanced_computer_on", "y": 270 }, - "advanced=true,facing=east,state=on": { "model": "computercraft:advanced_computer_on", "y": 90 }, - - "advanced=true,facing=north,state=blinking": { "model": "computercraft:advanced_computer_blinking" }, - "advanced=true,facing=south,state=blinking": { "model": "computercraft:advanced_computer_blinking", "y": 180 }, - "advanced=true,facing=west,state=blinking": { "model": "computercraft:advanced_computer_blinking", "y": 270 }, - "advanced=true,facing=east,state=blinking": { "model": "computercraft:advanced_computer_blinking", "y": 90 } - } -} +{ + "variants": { + + "advanced=false,facing=north,state=off": { "model": "computercraft:computer_off" }, + "advanced=false,facing=south,state=off": { "model": "computercraft:computer_off", "y": 180 }, + "advanced=false,facing=west,state=off": { "model": "computercraft:computer_off", "y": 270 }, + "advanced=false,facing=east,state=off": { "model": "computercraft:computer_off", "y": 90 }, + + "advanced=false,facing=north,state=on": { "model": "computercraft:computer_on" }, + "advanced=false,facing=south,state=on": { "model": "computercraft:computer_on", "y": 180 }, + "advanced=false,facing=west,state=on": { "model": "computercraft:computer_on", "y": 270 }, + "advanced=false,facing=east,state=on": { "model": "computercraft:computer_on", "y": 90 }, + + "advanced=false,facing=north,state=blinking": { "model": "computercraft:computer_blinking" }, + "advanced=false,facing=south,state=blinking": { "model": "computercraft:computer_blinking", "y": 180 }, + "advanced=false,facing=west,state=blinking": { "model": "computercraft:computer_blinking", "y": 270 }, + "advanced=false,facing=east,state=blinking": { "model": "computercraft:computer_blinking", "y": 90 }, + + "advanced=true,facing=north,state=off": { "model": "computercraft:advanced_computer_off" }, + "advanced=true,facing=south,state=off": { "model": "computercraft:advanced_computer_off", "y": 180 }, + "advanced=true,facing=west,state=off": { "model": "computercraft:advanced_computer_off", "y": 270 }, + "advanced=true,facing=east,state=off": { "model": "computercraft:advanced_computer_off", "y": 90 }, + + "advanced=true,facing=north,state=on": { "model": "computercraft:advanced_computer_on" }, + "advanced=true,facing=south,state=on": { "model": "computercraft:advanced_computer_on", "y": 180 }, + "advanced=true,facing=west,state=on": { "model": "computercraft:advanced_computer_on", "y": 270 }, + "advanced=true,facing=east,state=on": { "model": "computercraft:advanced_computer_on", "y": 90 }, + + "advanced=true,facing=north,state=blinking": { "model": "computercraft:advanced_computer_blinking" }, + "advanced=true,facing=south,state=blinking": { "model": "computercraft:advanced_computer_blinking", "y": 180 }, + "advanced=true,facing=west,state=blinking": { "model": "computercraft:advanced_computer_blinking", "y": 270 }, + "advanced=true,facing=east,state=blinking": { "model": "computercraft:advanced_computer_blinking", "y": 90 } + } +} diff --git a/src/main/resources/assets/computercraft/blockstates/CC-Peripheral.json b/src/main/resources/assets/computercraft/blockstates/peripheral.json similarity index 99% rename from src/main/resources/assets/computercraft/blockstates/CC-Peripheral.json rename to src/main/resources/assets/computercraft/blockstates/peripheral.json index 1dbbafa3c..929c554eb 100644 --- a/src/main/resources/assets/computercraft/blockstates/CC-Peripheral.json +++ b/src/main/resources/assets/computercraft/blockstates/peripheral.json @@ -1,450 +1,450 @@ -{ - "variants": { - "facing=north,variant=disk_drive_empty": { "model": "computercraft:disk_drive_empty" }, - "facing=south,variant=disk_drive_empty": { "model": "computercraft:disk_drive_empty", "y": 180 }, - "facing=west,variant=disk_drive_empty": { "model": "computercraft:disk_drive_empty", "y": 270 }, - "facing=east,variant=disk_drive_empty": { "model": "computercraft:disk_drive_empty", "y": 90 }, - "facing=north,variant=disk_drive_full": { "model": "computercraft:disk_drive_full" }, - "facing=south,variant=disk_drive_full": { "model": "computercraft:disk_drive_full", "y": 180 }, - "facing=west,variant=disk_drive_full": { "model": "computercraft:disk_drive_full", "y": 270 }, - "facing=east,variant=disk_drive_full": { "model": "computercraft:disk_drive_full", "y": 90 }, - "facing=north,variant=disk_drive_invalid": { "model": "computercraft:disk_drive_invalid" }, - "facing=south,variant=disk_drive_invalid": { "model": "computercraft:disk_drive_invalid", "y": 180 }, - "facing=west,variant=disk_drive_invalid": { "model": "computercraft:disk_drive_invalid", "y": 270 }, - "facing=east,variant=disk_drive_invalid": { "model": "computercraft:disk_drive_invalid", "y": 90 }, - - "facing=north,variant=printer_empty": { "model": "computercraft:printer_empty" }, - "facing=south,variant=printer_empty": { "model": "computercraft:printer_empty", "y": 180 }, - "facing=west,variant=printer_empty": { "model": "computercraft:printer_empty", "y": 270 }, - "facing=east,variant=printer_empty": { "model": "computercraft:printer_empty", "y": 90 }, - "facing=north,variant=printer_top_full": { "model": "computercraft:printer_top_full" }, - "facing=south,variant=printer_top_full": { "model": "computercraft:printer_top_full", "y": 180 }, - "facing=west,variant=printer_top_full": { "model": "computercraft:printer_top_full", "y": 270 }, - "facing=east,variant=printer_top_full": { "model": "computercraft:printer_top_full", "y": 90 }, - "facing=north,variant=printer_bottom_full": { "model": "computercraft:printer_bottom_full" }, - "facing=south,variant=printer_bottom_full": { "model": "computercraft:printer_bottom_full", "y": 180 }, - "facing=west,variant=printer_bottom_full": { "model": "computercraft:printer_bottom_full", "y": 270 }, - "facing=east,variant=printer_bottom_full": { "model": "computercraft:printer_bottom_full", "y": 90 }, - "facing=north,variant=printer_both_full": { "model": "computercraft:printer_both_full" }, - "facing=south,variant=printer_both_full": { "model": "computercraft:printer_both_full", "y": 180 }, - "facing=west,variant=printer_both_full": { "model": "computercraft:printer_both_full", "y": 270 }, - "facing=east,variant=printer_both_full": { "model": "computercraft:printer_both_full", "y": 90 }, - - "facing=north,variant=wireless_modem_off": { "model": "computercraft:wireless_modem_off" }, - "facing=south,variant=wireless_modem_off": { "model": "computercraft:wireless_modem_off", "y": 180 }, - "facing=west,variant=wireless_modem_off": { "model": "computercraft:wireless_modem_off", "y": 270 }, - "facing=east,variant=wireless_modem_off": { "model": "computercraft:wireless_modem_off", "y": 90 }, - "facing=north,variant=wireless_modem_on": { "model": "computercraft:wireless_modem_on" }, - "facing=south,variant=wireless_modem_on": { "model": "computercraft:wireless_modem_on", "y": 180 }, - "facing=west,variant=wireless_modem_on": { "model": "computercraft:wireless_modem_on", "y": 270 }, - "facing=east,variant=wireless_modem_on": { "model": "computercraft:wireless_modem_on", "y": 90 }, - - "facing=north,variant=wireless_modem_up_off": { "model": "computercraft:wireless_modem_off", "x": 270 }, - "facing=south,variant=wireless_modem_up_off": { "model": "computercraft:wireless_modem_off", "x": 270 }, - "facing=west,variant=wireless_modem_up_off": { "model": "computercraft:wireless_modem_off", "x": 270 }, - "facing=east,variant=wireless_modem_up_off": { "model": "computercraft:wireless_modem_off", "x": 270 }, - "facing=north,variant=wireless_modem_up_on": { "model": "computercraft:wireless_modem_on", "x": 270 }, - "facing=south,variant=wireless_modem_up_on": { "model": "computercraft:wireless_modem_on", "x": 270 }, - "facing=west,variant=wireless_modem_up_on": { "model": "computercraft:wireless_modem_on", "x": 270 }, - "facing=east,variant=wireless_modem_up_on": { "model": "computercraft:wireless_modem_on", "x": 270 }, - - "facing=north,variant=wireless_modem_down_off": { "model": "computercraft:wireless_modem_off", "x": 90 }, - "facing=south,variant=wireless_modem_down_off": { "model": "computercraft:wireless_modem_off", "x": 90 }, - "facing=west,variant=wireless_modem_down_off": { "model": "computercraft:wireless_modem_off", "x": 90 }, - "facing=east,variant=wireless_modem_down_off": { "model": "computercraft:wireless_modem_off", "x": 90 }, - "facing=north,variant=wireless_modem_down_on": { "model": "computercraft:wireless_modem_on", "x": 90 }, - "facing=south,variant=wireless_modem_down_on": { "model": "computercraft:wireless_modem_on", "x": 90 }, - "facing=west,variant=wireless_modem_down_on": { "model": "computercraft:wireless_modem_on", "x": 90 }, - "facing=east,variant=wireless_modem_down_on": { "model": "computercraft:wireless_modem_on", "x": 90 }, - - "facing=north,variant=monitor": { "model": "computercraft:monitor" }, - "facing=south,variant=monitor": { "model": "computercraft:monitor", "y": 180 }, - "facing=west,variant=monitor": { "model": "computercraft:monitor", "y": 270 }, - "facing=east,variant=monitor": { "model": "computercraft:monitor", "y": 90 }, - "facing=north,variant=monitor_r": { "model": "computercraft:monitor_r" }, - "facing=south,variant=monitor_r": { "model": "computercraft:monitor_r", "y": 180 }, - "facing=west,variant=monitor_r": { "model": "computercraft:monitor_r", "y": 270 }, - "facing=east,variant=monitor_r": { "model": "computercraft:monitor_r", "y": 90 }, - "facing=north,variant=monitor_lr": { "model": "computercraft:monitor_lr" }, - "facing=south,variant=monitor_lr": { "model": "computercraft:monitor_lr", "y": 180 }, - "facing=west,variant=monitor_lr": { "model": "computercraft:monitor_lr", "y": 270 }, - "facing=east,variant=monitor_lr": { "model": "computercraft:monitor_lr", "y": 90 }, - "facing=north,variant=monitor_l": { "model": "computercraft:monitor_l" }, - "facing=south,variant=monitor_l": { "model": "computercraft:monitor_l", "y": 180 }, - "facing=west,variant=monitor_l": { "model": "computercraft:monitor_l", "y": 270 }, - "facing=east,variant=monitor_l": { "model": "computercraft:monitor_l", "y": 90 }, - "facing=north,variant=monitor_d": { "model": "computercraft:monitor_d" }, - "facing=south,variant=monitor_d": { "model": "computercraft:monitor_d", "y": 180 }, - "facing=west,variant=monitor_d": { "model": "computercraft:monitor_d", "y": 270 }, - "facing=east,variant=monitor_d": { "model": "computercraft:monitor_d", "y": 90 }, - "facing=north,variant=monitor_ud": { "model": "computercraft:monitor_ud" }, - "facing=south,variant=monitor_ud": { "model": "computercraft:monitor_ud", "y": 180 }, - "facing=west,variant=monitor_ud": { "model": "computercraft:monitor_ud", "y": 270 }, - "facing=east,variant=monitor_ud": { "model": "computercraft:monitor_ud", "y": 90 }, - "facing=north,variant=monitor_u": { "model": "computercraft:monitor_u" }, - "facing=south,variant=monitor_u": { "model": "computercraft:monitor_u", "y": 180 }, - "facing=west,variant=monitor_u": { "model": "computercraft:monitor_u", "y": 270 }, - "facing=east,variant=monitor_u": { "model": "computercraft:monitor_u", "y": 90 }, - "facing=north,variant=monitor_rd": { "model": "computercraft:monitor_rd" }, - "facing=south,variant=monitor_rd": { "model": "computercraft:monitor_rd", "y": 180 }, - "facing=west,variant=monitor_rd": { "model": "computercraft:monitor_rd", "y": 270 }, - "facing=east,variant=monitor_rd": { "model": "computercraft:monitor_rd", "y": 90 }, - "facing=north,variant=monitor_lrd": { "model": "computercraft:monitor_lrd" }, - "facing=south,variant=monitor_lrd": { "model": "computercraft:monitor_lrd", "y": 180 }, - "facing=west,variant=monitor_lrd": { "model": "computercraft:monitor_lrd", "y": 270 }, - "facing=east,variant=monitor_lrd": { "model": "computercraft:monitor_lrd", "y": 90 }, - "facing=north,variant=monitor_ld": { "model": "computercraft:monitor_ld" }, - "facing=south,variant=monitor_ld": { "model": "computercraft:monitor_ld", "y": 180 }, - "facing=west,variant=monitor_ld": { "model": "computercraft:monitor_ld", "y": 270 }, - "facing=east,variant=monitor_ld": { "model": "computercraft:monitor_ld", "y": 90 }, - "facing=north,variant=monitor_rud": { "model": "computercraft:monitor_rud" }, - "facing=south,variant=monitor_rud": { "model": "computercraft:monitor_rud", "y": 180 }, - "facing=west,variant=monitor_rud": { "model": "computercraft:monitor_rud", "y": 270 }, - "facing=east,variant=monitor_rud": { "model": "computercraft:monitor_rud", "y": 90 }, - "facing=north,variant=monitor_lrud": { "model": "computercraft:monitor_lrud" }, - "facing=south,variant=monitor_lrud": { "model": "computercraft:monitor_lrud", "y": 180 }, - "facing=west,variant=monitor_lrud": { "model": "computercraft:monitor_lrud", "y": 270 }, - "facing=east,variant=monitor_lrud": { "model": "computercraft:monitor_lrud", "y": 90 }, - "facing=north,variant=monitor_lud": { "model": "computercraft:monitor_lud" }, - "facing=south,variant=monitor_lud": { "model": "computercraft:monitor_lud", "y": 180 }, - "facing=west,variant=monitor_lud": { "model": "computercraft:monitor_lud", "y": 270 }, - "facing=east,variant=monitor_lud": { "model": "computercraft:monitor_lud", "y": 90 }, - "facing=north,variant=monitor_ru": { "model": "computercraft:monitor_ru" }, - "facing=south,variant=monitor_ru": { "model": "computercraft:monitor_ru", "y": 180 }, - "facing=west,variant=monitor_ru": { "model": "computercraft:monitor_ru", "y": 270 }, - "facing=east,variant=monitor_ru": { "model": "computercraft:monitor_ru", "y": 90 }, - "facing=north,variant=monitor_lru": { "model": "computercraft:monitor_lru" }, - "facing=south,variant=monitor_lru": { "model": "computercraft:monitor_lru", "y": 180 }, - "facing=west,variant=monitor_lru": { "model": "computercraft:monitor_lru", "y": 270 }, - "facing=east,variant=monitor_lru": { "model": "computercraft:monitor_lru", "y": 90 }, - "facing=north,variant=monitor_lu": { "model": "computercraft:monitor_lu" }, - "facing=south,variant=monitor_lu": { "model": "computercraft:monitor_lu", "y": 180 }, - "facing=west,variant=monitor_lu": { "model": "computercraft:monitor_lu", "y": 270 }, - "facing=east,variant=monitor_lu": { "model": "computercraft:monitor_lu", "y": 90 }, - - "facing=north,variant=monitor_up": { "model": "computercraft:monitor", "x": 270 }, - "facing=south,variant=monitor_up": { "model": "computercraft:monitor", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up": { "model": "computercraft:monitor", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up": { "model": "computercraft:monitor", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_r": { "model": "computercraft:monitor_r", "x": 270 }, - "facing=south,variant=monitor_up_r": { "model": "computercraft:monitor_r", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_r": { "model": "computercraft:monitor_r", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_r": { "model": "computercraft:monitor_r", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_lr": { "model": "computercraft:monitor_lr", "x": 270 }, - "facing=south,variant=monitor_up_lr": { "model": "computercraft:monitor_lr", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_lr": { "model": "computercraft:monitor_lr", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_lr": { "model": "computercraft:monitor_lr", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_l": { "model": "computercraft:monitor_l", "x": 270 }, - "facing=south,variant=monitor_up_l": { "model": "computercraft:monitor_l", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_l": { "model": "computercraft:monitor_l", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_l": { "model": "computercraft:monitor_l", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_d": { "model": "computercraft:monitor_d", "x": 270 }, - "facing=south,variant=monitor_up_d": { "model": "computercraft:monitor_d", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_d": { "model": "computercraft:monitor_d", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_d": { "model": "computercraft:monitor_d", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_ud": { "model": "computercraft:monitor_ud", "x": 270 }, - "facing=south,variant=monitor_up_ud": { "model": "computercraft:monitor_ud", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_ud": { "model": "computercraft:monitor_ud", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_ud": { "model": "computercraft:monitor_ud", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_u": { "model": "computercraft:monitor_u", "x": 270 }, - "facing=south,variant=monitor_up_u": { "model": "computercraft:monitor_u", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_u": { "model": "computercraft:monitor_u", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_u": { "model": "computercraft:monitor_u", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_rd": { "model": "computercraft:monitor_rd", "x": 270 }, - "facing=south,variant=monitor_up_rd": { "model": "computercraft:monitor_rd", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_rd": { "model": "computercraft:monitor_rd", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_rd": { "model": "computercraft:monitor_rd", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_lrd": { "model": "computercraft:monitor_lrd", "x": 270 }, - "facing=south,variant=monitor_up_lrd": { "model": "computercraft:monitor_lrd", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_lrd": { "model": "computercraft:monitor_lrd", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_lrd": { "model": "computercraft:monitor_lrd", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_ld": { "model": "computercraft:monitor_ld", "x": 270 }, - "facing=south,variant=monitor_up_ld": { "model": "computercraft:monitor_ld", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_ld": { "model": "computercraft:monitor_ld", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_ld": { "model": "computercraft:monitor_ld", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_rud": { "model": "computercraft:monitor_rud", "x": 270 }, - "facing=south,variant=monitor_up_rud": { "model": "computercraft:monitor_rud", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_rud": { "model": "computercraft:monitor_rud", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_rud": { "model": "computercraft:monitor_rud", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_lrud": { "model": "computercraft:monitor_lrud", "x": 270 }, - "facing=south,variant=monitor_up_lrud": { "model": "computercraft:monitor_lrud", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_lrud": { "model": "computercraft:monitor_lrud", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_lrud": { "model": "computercraft:monitor_lrud", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_lud": { "model": "computercraft:monitor_lud", "x": 270 }, - "facing=south,variant=monitor_up_lud": { "model": "computercraft:monitor_lud", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_lud": { "model": "computercraft:monitor_lud", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_lud": { "model": "computercraft:monitor_lud", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_ru": { "model": "computercraft:monitor_ru", "x": 270 }, - "facing=south,variant=monitor_up_ru": { "model": "computercraft:monitor_ru", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_ru": { "model": "computercraft:monitor_ru", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_ru": { "model": "computercraft:monitor_ru", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_lru": { "model": "computercraft:monitor_lru", "x": 270 }, - "facing=south,variant=monitor_up_lru": { "model": "computercraft:monitor_lru", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_lru": { "model": "computercraft:monitor_lru", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_lru": { "model": "computercraft:monitor_lru", "y": 90, "x": 270 }, - "facing=north,variant=monitor_up_lu": { "model": "computercraft:monitor_lu", "x": 270 }, - "facing=south,variant=monitor_up_lu": { "model": "computercraft:monitor_lu", "y": 180, "x": 270 }, - "facing=west,variant=monitor_up_lu": { "model": "computercraft:monitor_lu", "y": 270, "x": 270 }, - "facing=east,variant=monitor_up_lu": { "model": "computercraft:monitor_lu", "y": 90, "x": 270 }, - - "facing=north,variant=monitor_down": { "model": "computercraft:monitor", "x": 90 }, - "facing=south,variant=monitor_down": { "model": "computercraft:monitor", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down": { "model": "computercraft:monitor", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down": { "model": "computercraft:monitor", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_r": { "model": "computercraft:monitor_r", "x": 90 }, - "facing=south,variant=monitor_down_r": { "model": "computercraft:monitor_r", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_r": { "model": "computercraft:monitor_r", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_r": { "model": "computercraft:monitor_r", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_lr": { "model": "computercraft:monitor_lr", "x": 90 }, - "facing=south,variant=monitor_down_lr": { "model": "computercraft:monitor_lr", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_lr": { "model": "computercraft:monitor_lr", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_lr": { "model": "computercraft:monitor_lr", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_l": { "model": "computercraft:monitor_l", "x": 90 }, - "facing=south,variant=monitor_down_l": { "model": "computercraft:monitor_l", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_l": { "model": "computercraft:monitor_l", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_l": { "model": "computercraft:monitor_l", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_d": { "model": "computercraft:monitor_d", "x": 90 }, - "facing=south,variant=monitor_down_d": { "model": "computercraft:monitor_d", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_d": { "model": "computercraft:monitor_d", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_d": { "model": "computercraft:monitor_d", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_ud": { "model": "computercraft:monitor_ud", "x": 90 }, - "facing=south,variant=monitor_down_ud": { "model": "computercraft:monitor_ud", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_ud": { "model": "computercraft:monitor_ud", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_ud": { "model": "computercraft:monitor_ud", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_u": { "model": "computercraft:monitor_u", "x": 90 }, - "facing=south,variant=monitor_down_u": { "model": "computercraft:monitor_u", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_u": { "model": "computercraft:monitor_u", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_u": { "model": "computercraft:monitor_u", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_rd": { "model": "computercraft:monitor_rd", "x": 90 }, - "facing=south,variant=monitor_down_rd": { "model": "computercraft:monitor_rd", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_rd": { "model": "computercraft:monitor_rd", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_rd": { "model": "computercraft:monitor_rd", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_lrd": { "model": "computercraft:monitor_lrd", "x": 90 }, - "facing=south,variant=monitor_down_lrd": { "model": "computercraft:monitor_lrd", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_lrd": { "model": "computercraft:monitor_lrd", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_lrd": { "model": "computercraft:monitor_lrd", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_ld": { "model": "computercraft:monitor_ld", "x": 90 }, - "facing=south,variant=monitor_down_ld": { "model": "computercraft:monitor_ld", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_ld": { "model": "computercraft:monitor_ld", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_ld": { "model": "computercraft:monitor_ld", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_rud": { "model": "computercraft:monitor_rud", "x": 90 }, - "facing=south,variant=monitor_down_rud": { "model": "computercraft:monitor_rud", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_rud": { "model": "computercraft:monitor_rud", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_rud": { "model": "computercraft:monitor_rud", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_lrud": { "model": "computercraft:monitor_lrud", "x": 90 }, - "facing=south,variant=monitor_down_lrud": { "model": "computercraft:monitor_lrud", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_lrud": { "model": "computercraft:monitor_lrud", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_lrud": { "model": "computercraft:monitor_lrud", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_lud": { "model": "computercraft:monitor_lud", "x": 90 }, - "facing=south,variant=monitor_down_lud": { "model": "computercraft:monitor_lud", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_lud": { "model": "computercraft:monitor_lud", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_lud": { "model": "computercraft:monitor_lud", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_ru": { "model": "computercraft:monitor_ru", "x": 90 }, - "facing=south,variant=monitor_down_ru": { "model": "computercraft:monitor_ru", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_ru": { "model": "computercraft:monitor_ru", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_ru": { "model": "computercraft:monitor_ru", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_lru": { "model": "computercraft:monitor_lru", "x": 90 }, - "facing=south,variant=monitor_down_lru": { "model": "computercraft:monitor_lru", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_lru": { "model": "computercraft:monitor_lru", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_lru": { "model": "computercraft:monitor_lru", "y": 90, "x": 90 }, - "facing=north,variant=monitor_down_lu": { "model": "computercraft:monitor_lu", "x": 90 }, - "facing=south,variant=monitor_down_lu": { "model": "computercraft:monitor_lu", "y": 180, "x": 90 }, - "facing=west,variant=monitor_down_lu": { "model": "computercraft:monitor_lu", "y": 270, "x": 90 }, - "facing=east,variant=monitor_down_lu": { "model": "computercraft:monitor_lu", "y": 90, "x": 90 }, - - "facing=north,variant=advanced_monitor": { "model": "computercraft:advanced_monitor" }, - "facing=south,variant=advanced_monitor": { "model": "computercraft:advanced_monitor", "y": 180 }, - "facing=west,variant=advanced_monitor": { "model": "computercraft:advanced_monitor", "y": 270 }, - "facing=east,variant=advanced_monitor": { "model": "computercraft:advanced_monitor", "y": 90 }, - "facing=north,variant=advanced_monitor_r": { "model": "computercraft:advanced_monitor_r" }, - "facing=south,variant=advanced_monitor_r": { "model": "computercraft:advanced_monitor_r", "y": 180 }, - "facing=west,variant=advanced_monitor_r": { "model": "computercraft:advanced_monitor_r", "y": 270 }, - "facing=east,variant=advanced_monitor_r": { "model": "computercraft:advanced_monitor_r", "y": 90 }, - "facing=north,variant=advanced_monitor_lr": { "model": "computercraft:advanced_monitor_lr" }, - "facing=south,variant=advanced_monitor_lr": { "model": "computercraft:advanced_monitor_lr", "y": 180 }, - "facing=west,variant=advanced_monitor_lr": { "model": "computercraft:advanced_monitor_lr", "y": 270 }, - "facing=east,variant=advanced_monitor_lr": { "model": "computercraft:advanced_monitor_lr", "y": 90 }, - "facing=north,variant=advanced_monitor_l": { "model": "computercraft:advanced_monitor_l" }, - "facing=south,variant=advanced_monitor_l": { "model": "computercraft:advanced_monitor_l", "y": 180 }, - "facing=west,variant=advanced_monitor_l": { "model": "computercraft:advanced_monitor_l", "y": 270 }, - "facing=east,variant=advanced_monitor_l": { "model": "computercraft:advanced_monitor_l", "y": 90 }, - "facing=north,variant=advanced_monitor_d": { "model": "computercraft:advanced_monitor_d" }, - "facing=south,variant=advanced_monitor_d": { "model": "computercraft:advanced_monitor_d", "y": 180 }, - "facing=west,variant=advanced_monitor_d": { "model": "computercraft:advanced_monitor_d", "y": 270 }, - "facing=east,variant=advanced_monitor_d": { "model": "computercraft:advanced_monitor_d", "y": 90 }, - "facing=north,variant=advanced_monitor_ud": { "model": "computercraft:advanced_monitor_ud" }, - "facing=south,variant=advanced_monitor_ud": { "model": "computercraft:advanced_monitor_ud", "y": 180 }, - "facing=west,variant=advanced_monitor_ud": { "model": "computercraft:advanced_monitor_ud", "y": 270 }, - "facing=east,variant=advanced_monitor_ud": { "model": "computercraft:advanced_monitor_ud", "y": 90 }, - "facing=north,variant=advanced_monitor_u": { "model": "computercraft:advanced_monitor_u" }, - "facing=south,variant=advanced_monitor_u": { "model": "computercraft:advanced_monitor_u", "y": 180 }, - "facing=west,variant=advanced_monitor_u": { "model": "computercraft:advanced_monitor_u", "y": 270 }, - "facing=east,variant=advanced_monitor_u": { "model": "computercraft:advanced_monitor_u", "y": 90 }, - "facing=north,variant=advanced_monitor_rd": { "model": "computercraft:advanced_monitor_rd" }, - "facing=south,variant=advanced_monitor_rd": { "model": "computercraft:advanced_monitor_rd", "y": 180 }, - "facing=west,variant=advanced_monitor_rd": { "model": "computercraft:advanced_monitor_rd", "y": 270 }, - "facing=east,variant=advanced_monitor_rd": { "model": "computercraft:advanced_monitor_rd", "y": 90 }, - "facing=north,variant=advanced_monitor_lrd": { "model": "computercraft:advanced_monitor_lrd" }, - "facing=south,variant=advanced_monitor_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 180 }, - "facing=west,variant=advanced_monitor_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 270 }, - "facing=east,variant=advanced_monitor_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 90 }, - "facing=north,variant=advanced_monitor_ld": { "model": "computercraft:advanced_monitor_ld" }, - "facing=south,variant=advanced_monitor_ld": { "model": "computercraft:advanced_monitor_ld", "y": 180 }, - "facing=west,variant=advanced_monitor_ld": { "model": "computercraft:advanced_monitor_ld", "y": 270 }, - "facing=east,variant=advanced_monitor_ld": { "model": "computercraft:advanced_monitor_ld", "y": 90 }, - "facing=north,variant=advanced_monitor_rud": { "model": "computercraft:advanced_monitor_rud" }, - "facing=south,variant=advanced_monitor_rud": { "model": "computercraft:advanced_monitor_rud", "y": 180 }, - "facing=west,variant=advanced_monitor_rud": { "model": "computercraft:advanced_monitor_rud", "y": 270 }, - "facing=east,variant=advanced_monitor_rud": { "model": "computercraft:advanced_monitor_rud", "y": 90 }, - "facing=north,variant=advanced_monitor_lrud": { "model": "computercraft:advanced_monitor_lrud" }, - "facing=south,variant=advanced_monitor_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 180 }, - "facing=west,variant=advanced_monitor_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 270 }, - "facing=east,variant=advanced_monitor_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 90 }, - "facing=north,variant=advanced_monitor_lud": { "model": "computercraft:advanced_monitor_lud" }, - "facing=south,variant=advanced_monitor_lud": { "model": "computercraft:advanced_monitor_lud", "y": 180 }, - "facing=west,variant=advanced_monitor_lud": { "model": "computercraft:advanced_monitor_lud", "y": 270 }, - "facing=east,variant=advanced_monitor_lud": { "model": "computercraft:advanced_monitor_lud", "y": 90 }, - "facing=north,variant=advanced_monitor_ru": { "model": "computercraft:advanced_monitor_ru" }, - "facing=south,variant=advanced_monitor_ru": { "model": "computercraft:advanced_monitor_ru", "y": 180 }, - "facing=west,variant=advanced_monitor_ru": { "model": "computercraft:advanced_monitor_ru", "y": 270 }, - "facing=east,variant=advanced_monitor_ru": { "model": "computercraft:advanced_monitor_ru", "y": 90 }, - "facing=north,variant=advanced_monitor_lru": { "model": "computercraft:advanced_monitor_lru" }, - "facing=south,variant=advanced_monitor_lru": { "model": "computercraft:advanced_monitor_lru", "y": 180 }, - "facing=west,variant=advanced_monitor_lru": { "model": "computercraft:advanced_monitor_lru", "y": 270 }, - "facing=east,variant=advanced_monitor_lru": { "model": "computercraft:advanced_monitor_lru", "y": 90 }, - "facing=north,variant=advanced_monitor_lu": { "model": "computercraft:advanced_monitor_lu" }, - "facing=south,variant=advanced_monitor_lu": { "model": "computercraft:advanced_monitor_lu", "y": 180 }, - "facing=west,variant=advanced_monitor_lu": { "model": "computercraft:advanced_monitor_lu", "y": 270 }, - "facing=east,variant=advanced_monitor_lu": { "model": "computercraft:advanced_monitor_lu", "y": 90 }, - - "facing=north,variant=advanced_monitor_up": { "model": "computercraft:advanced_monitor", "x": 270 }, - "facing=south,variant=advanced_monitor_up": { "model": "computercraft:advanced_monitor", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up": { "model": "computercraft:advanced_monitor", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up": { "model": "computercraft:advanced_monitor", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_r": { "model": "computercraft:advanced_monitor_r", "x": 270 }, - "facing=south,variant=advanced_monitor_up_r": { "model": "computercraft:advanced_monitor_r", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_r": { "model": "computercraft:advanced_monitor_r", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_r": { "model": "computercraft:advanced_monitor_r", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_lr": { "model": "computercraft:advanced_monitor_lr", "x": 270 }, - "facing=south,variant=advanced_monitor_up_lr": { "model": "computercraft:advanced_monitor_lr", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_lr": { "model": "computercraft:advanced_monitor_lr", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_lr": { "model": "computercraft:advanced_monitor_lr", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_l": { "model": "computercraft:advanced_monitor_l", "x": 270 }, - "facing=south,variant=advanced_monitor_up_l": { "model": "computercraft:advanced_monitor_l", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_l": { "model": "computercraft:advanced_monitor_l", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_l": { "model": "computercraft:advanced_monitor_l", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_d": { "model": "computercraft:advanced_monitor_d", "x": 270 }, - "facing=south,variant=advanced_monitor_up_d": { "model": "computercraft:advanced_monitor_d", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_d": { "model": "computercraft:advanced_monitor_d", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_d": { "model": "computercraft:advanced_monitor_d", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_ud": { "model": "computercraft:advanced_monitor_ud", "x": 270 }, - "facing=south,variant=advanced_monitor_up_ud": { "model": "computercraft:advanced_monitor_ud", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_ud": { "model": "computercraft:advanced_monitor_ud", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_ud": { "model": "computercraft:advanced_monitor_ud", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_u": { "model": "computercraft:advanced_monitor_u", "x": 270 }, - "facing=south,variant=advanced_monitor_up_u": { "model": "computercraft:advanced_monitor_u", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_u": { "model": "computercraft:advanced_monitor_u", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_u": { "model": "computercraft:advanced_monitor_u", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_rd": { "model": "computercraft:advanced_monitor_rd", "x": 270 }, - "facing=south,variant=advanced_monitor_up_rd": { "model": "computercraft:advanced_monitor_rd", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_rd": { "model": "computercraft:advanced_monitor_rd", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_rd": { "model": "computercraft:advanced_monitor_rd", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_lrd": { "model": "computercraft:advanced_monitor_lrd", "x": 270 }, - "facing=south,variant=advanced_monitor_up_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_ld": { "model": "computercraft:advanced_monitor_ld", "x": 270 }, - "facing=south,variant=advanced_monitor_up_ld": { "model": "computercraft:advanced_monitor_ld", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_ld": { "model": "computercraft:advanced_monitor_ld", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_ld": { "model": "computercraft:advanced_monitor_ld", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_rud": { "model": "computercraft:advanced_monitor_rud", "x": 270 }, - "facing=south,variant=advanced_monitor_up_rud": { "model": "computercraft:advanced_monitor_rud", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_rud": { "model": "computercraft:advanced_monitor_rud", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_rud": { "model": "computercraft:advanced_monitor_rud", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_lrud": { "model": "computercraft:advanced_monitor_lrud", "x": 270 }, - "facing=south,variant=advanced_monitor_up_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_lud": { "model": "computercraft:advanced_monitor_lud", "x": 270 }, - "facing=south,variant=advanced_monitor_up_lud": { "model": "computercraft:advanced_monitor_lud", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_lud": { "model": "computercraft:advanced_monitor_lud", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_lud": { "model": "computercraft:advanced_monitor_lud", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_ru": { "model": "computercraft:advanced_monitor_ru", "x": 270 }, - "facing=south,variant=advanced_monitor_up_ru": { "model": "computercraft:advanced_monitor_ru", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_ru": { "model": "computercraft:advanced_monitor_ru", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_ru": { "model": "computercraft:advanced_monitor_ru", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_lru": { "model": "computercraft:advanced_monitor_lru", "x": 270 }, - "facing=south,variant=advanced_monitor_up_lru": { "model": "computercraft:advanced_monitor_lru", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_lru": { "model": "computercraft:advanced_monitor_lru", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_lru": { "model": "computercraft:advanced_monitor_lru", "y": 90, "x": 270 }, - "facing=north,variant=advanced_monitor_up_lu": { "model": "computercraft:advanced_monitor_lu", "x": 270 }, - "facing=south,variant=advanced_monitor_up_lu": { "model": "computercraft:advanced_monitor_lu", "y": 180, "x": 270 }, - "facing=west,variant=advanced_monitor_up_lu": { "model": "computercraft:advanced_monitor_lu", "y": 270, "x": 270 }, - "facing=east,variant=advanced_monitor_up_lu": { "model": "computercraft:advanced_monitor_lu", "y": 90, "x": 270 }, - - "facing=north,variant=advanced_monitor_down": { "model": "computercraft:advanced_monitor", "x": 90 }, - "facing=south,variant=advanced_monitor_down": { "model": "computercraft:advanced_monitor", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down": { "model": "computercraft:advanced_monitor", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down": { "model": "computercraft:advanced_monitor", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_r": { "model": "computercraft:advanced_monitor_r", "x": 90 }, - "facing=south,variant=advanced_monitor_down_r": { "model": "computercraft:advanced_monitor_r", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_r": { "model": "computercraft:advanced_monitor_r", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_r": { "model": "computercraft:advanced_monitor_r", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_lr": { "model": "computercraft:advanced_monitor_lr", "x": 90 }, - "facing=south,variant=advanced_monitor_down_lr": { "model": "computercraft:advanced_monitor_lr", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_lr": { "model": "computercraft:advanced_monitor_lr", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_lr": { "model": "computercraft:advanced_monitor_lr", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_l": { "model": "computercraft:advanced_monitor_l", "x": 90 }, - "facing=south,variant=advanced_monitor_down_l": { "model": "computercraft:advanced_monitor_l", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_l": { "model": "computercraft:advanced_monitor_l", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_l": { "model": "computercraft:advanced_monitor_l", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_d": { "model": "computercraft:advanced_monitor_d", "x": 90 }, - "facing=south,variant=advanced_monitor_down_d": { "model": "computercraft:advanced_monitor_d", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_d": { "model": "computercraft:advanced_monitor_d", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_d": { "model": "computercraft:advanced_monitor_d", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_ud": { "model": "computercraft:advanced_monitor_ud", "x": 90 }, - "facing=south,variant=advanced_monitor_down_ud": { "model": "computercraft:advanced_monitor_ud", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_ud": { "model": "computercraft:advanced_monitor_ud", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_ud": { "model": "computercraft:advanced_monitor_ud", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_u": { "model": "computercraft:advanced_monitor_u", "x": 90 }, - "facing=south,variant=advanced_monitor_down_u": { "model": "computercraft:advanced_monitor_u", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_u": { "model": "computercraft:advanced_monitor_u", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_u": { "model": "computercraft:advanced_monitor_u", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_rd": { "model": "computercraft:advanced_monitor_rd", "x": 90 }, - "facing=south,variant=advanced_monitor_down_rd": { "model": "computercraft:advanced_monitor_rd", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_rd": { "model": "computercraft:advanced_monitor_rd", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_rd": { "model": "computercraft:advanced_monitor_rd", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_lrd": { "model": "computercraft:advanced_monitor_lrd", "x": 90 }, - "facing=south,variant=advanced_monitor_down_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_ld": { "model": "computercraft:advanced_monitor_ld", "x": 90 }, - "facing=south,variant=advanced_monitor_down_ld": { "model": "computercraft:advanced_monitor_ld", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_ld": { "model": "computercraft:advanced_monitor_ld", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_ld": { "model": "computercraft:advanced_monitor_ld", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_rud": { "model": "computercraft:advanced_monitor_rud", "x": 90 }, - "facing=south,variant=advanced_monitor_down_rud": { "model": "computercraft:advanced_monitor_rud", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_rud": { "model": "computercraft:advanced_monitor_rud", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_rud": { "model": "computercraft:advanced_monitor_rud", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_lrud": { "model": "computercraft:advanced_monitor_lrud", "x": 90 }, - "facing=south,variant=advanced_monitor_down_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_lud": { "model": "computercraft:advanced_monitor_lud", "x": 90 }, - "facing=south,variant=advanced_monitor_down_lud": { "model": "computercraft:advanced_monitor_lud", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_lud": { "model": "computercraft:advanced_monitor_lud", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_lud": { "model": "computercraft:advanced_monitor_lud", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_ru": { "model": "computercraft:advanced_monitor_ru", "x": 90 }, - "facing=south,variant=advanced_monitor_down_ru": { "model": "computercraft:advanced_monitor_ru", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_ru": { "model": "computercraft:advanced_monitor_ru", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_ru": { "model": "computercraft:advanced_monitor_ru", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_lru": { "model": "computercraft:advanced_monitor_lru", "x": 90 }, - "facing=south,variant=advanced_monitor_down_lru": { "model": "computercraft:advanced_monitor_lru", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_lru": { "model": "computercraft:advanced_monitor_lru", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_lru": { "model": "computercraft:advanced_monitor_lru", "y": 90, "x": 90 }, - "facing=north,variant=advanced_monitor_down_lu": { "model": "computercraft:advanced_monitor_lu", "x": 90 }, - "facing=south,variant=advanced_monitor_down_lu": { "model": "computercraft:advanced_monitor_lu", "y": 180, "x": 90 }, - "facing=west,variant=advanced_monitor_down_lu": { "model": "computercraft:advanced_monitor_lu", "y": 270, "x": 90 }, - "facing=east,variant=advanced_monitor_down_lu": { "model": "computercraft:advanced_monitor_lu", "y": 90, "x": 90 } - } -} +{ + "variants": { + "facing=north,variant=disk_drive_empty": { "model": "computercraft:disk_drive_empty" }, + "facing=south,variant=disk_drive_empty": { "model": "computercraft:disk_drive_empty", "y": 180 }, + "facing=west,variant=disk_drive_empty": { "model": "computercraft:disk_drive_empty", "y": 270 }, + "facing=east,variant=disk_drive_empty": { "model": "computercraft:disk_drive_empty", "y": 90 }, + "facing=north,variant=disk_drive_full": { "model": "computercraft:disk_drive_full" }, + "facing=south,variant=disk_drive_full": { "model": "computercraft:disk_drive_full", "y": 180 }, + "facing=west,variant=disk_drive_full": { "model": "computercraft:disk_drive_full", "y": 270 }, + "facing=east,variant=disk_drive_full": { "model": "computercraft:disk_drive_full", "y": 90 }, + "facing=north,variant=disk_drive_invalid": { "model": "computercraft:disk_drive_invalid" }, + "facing=south,variant=disk_drive_invalid": { "model": "computercraft:disk_drive_invalid", "y": 180 }, + "facing=west,variant=disk_drive_invalid": { "model": "computercraft:disk_drive_invalid", "y": 270 }, + "facing=east,variant=disk_drive_invalid": { "model": "computercraft:disk_drive_invalid", "y": 90 }, + + "facing=north,variant=printer_empty": { "model": "computercraft:printer_empty" }, + "facing=south,variant=printer_empty": { "model": "computercraft:printer_empty", "y": 180 }, + "facing=west,variant=printer_empty": { "model": "computercraft:printer_empty", "y": 270 }, + "facing=east,variant=printer_empty": { "model": "computercraft:printer_empty", "y": 90 }, + "facing=north,variant=printer_top_full": { "model": "computercraft:printer_top_full" }, + "facing=south,variant=printer_top_full": { "model": "computercraft:printer_top_full", "y": 180 }, + "facing=west,variant=printer_top_full": { "model": "computercraft:printer_top_full", "y": 270 }, + "facing=east,variant=printer_top_full": { "model": "computercraft:printer_top_full", "y": 90 }, + "facing=north,variant=printer_bottom_full": { "model": "computercraft:printer_bottom_full" }, + "facing=south,variant=printer_bottom_full": { "model": "computercraft:printer_bottom_full", "y": 180 }, + "facing=west,variant=printer_bottom_full": { "model": "computercraft:printer_bottom_full", "y": 270 }, + "facing=east,variant=printer_bottom_full": { "model": "computercraft:printer_bottom_full", "y": 90 }, + "facing=north,variant=printer_both_full": { "model": "computercraft:printer_both_full" }, + "facing=south,variant=printer_both_full": { "model": "computercraft:printer_both_full", "y": 180 }, + "facing=west,variant=printer_both_full": { "model": "computercraft:printer_both_full", "y": 270 }, + "facing=east,variant=printer_both_full": { "model": "computercraft:printer_both_full", "y": 90 }, + + "facing=north,variant=wireless_modem_off": { "model": "computercraft:wireless_modem_off" }, + "facing=south,variant=wireless_modem_off": { "model": "computercraft:wireless_modem_off", "y": 180 }, + "facing=west,variant=wireless_modem_off": { "model": "computercraft:wireless_modem_off", "y": 270 }, + "facing=east,variant=wireless_modem_off": { "model": "computercraft:wireless_modem_off", "y": 90 }, + "facing=north,variant=wireless_modem_on": { "model": "computercraft:wireless_modem_on" }, + "facing=south,variant=wireless_modem_on": { "model": "computercraft:wireless_modem_on", "y": 180 }, + "facing=west,variant=wireless_modem_on": { "model": "computercraft:wireless_modem_on", "y": 270 }, + "facing=east,variant=wireless_modem_on": { "model": "computercraft:wireless_modem_on", "y": 90 }, + + "facing=north,variant=wireless_modem_up_off": { "model": "computercraft:wireless_modem_off", "x": 270 }, + "facing=south,variant=wireless_modem_up_off": { "model": "computercraft:wireless_modem_off", "x": 270 }, + "facing=west,variant=wireless_modem_up_off": { "model": "computercraft:wireless_modem_off", "x": 270 }, + "facing=east,variant=wireless_modem_up_off": { "model": "computercraft:wireless_modem_off", "x": 270 }, + "facing=north,variant=wireless_modem_up_on": { "model": "computercraft:wireless_modem_on", "x": 270 }, + "facing=south,variant=wireless_modem_up_on": { "model": "computercraft:wireless_modem_on", "x": 270 }, + "facing=west,variant=wireless_modem_up_on": { "model": "computercraft:wireless_modem_on", "x": 270 }, + "facing=east,variant=wireless_modem_up_on": { "model": "computercraft:wireless_modem_on", "x": 270 }, + + "facing=north,variant=wireless_modem_down_off": { "model": "computercraft:wireless_modem_off", "x": 90 }, + "facing=south,variant=wireless_modem_down_off": { "model": "computercraft:wireless_modem_off", "x": 90 }, + "facing=west,variant=wireless_modem_down_off": { "model": "computercraft:wireless_modem_off", "x": 90 }, + "facing=east,variant=wireless_modem_down_off": { "model": "computercraft:wireless_modem_off", "x": 90 }, + "facing=north,variant=wireless_modem_down_on": { "model": "computercraft:wireless_modem_on", "x": 90 }, + "facing=south,variant=wireless_modem_down_on": { "model": "computercraft:wireless_modem_on", "x": 90 }, + "facing=west,variant=wireless_modem_down_on": { "model": "computercraft:wireless_modem_on", "x": 90 }, + "facing=east,variant=wireless_modem_down_on": { "model": "computercraft:wireless_modem_on", "x": 90 }, + + "facing=north,variant=monitor": { "model": "computercraft:monitor" }, + "facing=south,variant=monitor": { "model": "computercraft:monitor", "y": 180 }, + "facing=west,variant=monitor": { "model": "computercraft:monitor", "y": 270 }, + "facing=east,variant=monitor": { "model": "computercraft:monitor", "y": 90 }, + "facing=north,variant=monitor_r": { "model": "computercraft:monitor_r" }, + "facing=south,variant=monitor_r": { "model": "computercraft:monitor_r", "y": 180 }, + "facing=west,variant=monitor_r": { "model": "computercraft:monitor_r", "y": 270 }, + "facing=east,variant=monitor_r": { "model": "computercraft:monitor_r", "y": 90 }, + "facing=north,variant=monitor_lr": { "model": "computercraft:monitor_lr" }, + "facing=south,variant=monitor_lr": { "model": "computercraft:monitor_lr", "y": 180 }, + "facing=west,variant=monitor_lr": { "model": "computercraft:monitor_lr", "y": 270 }, + "facing=east,variant=monitor_lr": { "model": "computercraft:monitor_lr", "y": 90 }, + "facing=north,variant=monitor_l": { "model": "computercraft:monitor_l" }, + "facing=south,variant=monitor_l": { "model": "computercraft:monitor_l", "y": 180 }, + "facing=west,variant=monitor_l": { "model": "computercraft:monitor_l", "y": 270 }, + "facing=east,variant=monitor_l": { "model": "computercraft:monitor_l", "y": 90 }, + "facing=north,variant=monitor_d": { "model": "computercraft:monitor_d" }, + "facing=south,variant=monitor_d": { "model": "computercraft:monitor_d", "y": 180 }, + "facing=west,variant=monitor_d": { "model": "computercraft:monitor_d", "y": 270 }, + "facing=east,variant=monitor_d": { "model": "computercraft:monitor_d", "y": 90 }, + "facing=north,variant=monitor_ud": { "model": "computercraft:monitor_ud" }, + "facing=south,variant=monitor_ud": { "model": "computercraft:monitor_ud", "y": 180 }, + "facing=west,variant=monitor_ud": { "model": "computercraft:monitor_ud", "y": 270 }, + "facing=east,variant=monitor_ud": { "model": "computercraft:monitor_ud", "y": 90 }, + "facing=north,variant=monitor_u": { "model": "computercraft:monitor_u" }, + "facing=south,variant=monitor_u": { "model": "computercraft:monitor_u", "y": 180 }, + "facing=west,variant=monitor_u": { "model": "computercraft:monitor_u", "y": 270 }, + "facing=east,variant=monitor_u": { "model": "computercraft:monitor_u", "y": 90 }, + "facing=north,variant=monitor_rd": { "model": "computercraft:monitor_rd" }, + "facing=south,variant=monitor_rd": { "model": "computercraft:monitor_rd", "y": 180 }, + "facing=west,variant=monitor_rd": { "model": "computercraft:monitor_rd", "y": 270 }, + "facing=east,variant=monitor_rd": { "model": "computercraft:monitor_rd", "y": 90 }, + "facing=north,variant=monitor_lrd": { "model": "computercraft:monitor_lrd" }, + "facing=south,variant=monitor_lrd": { "model": "computercraft:monitor_lrd", "y": 180 }, + "facing=west,variant=monitor_lrd": { "model": "computercraft:monitor_lrd", "y": 270 }, + "facing=east,variant=monitor_lrd": { "model": "computercraft:monitor_lrd", "y": 90 }, + "facing=north,variant=monitor_ld": { "model": "computercraft:monitor_ld" }, + "facing=south,variant=monitor_ld": { "model": "computercraft:monitor_ld", "y": 180 }, + "facing=west,variant=monitor_ld": { "model": "computercraft:monitor_ld", "y": 270 }, + "facing=east,variant=monitor_ld": { "model": "computercraft:monitor_ld", "y": 90 }, + "facing=north,variant=monitor_rud": { "model": "computercraft:monitor_rud" }, + "facing=south,variant=monitor_rud": { "model": "computercraft:monitor_rud", "y": 180 }, + "facing=west,variant=monitor_rud": { "model": "computercraft:monitor_rud", "y": 270 }, + "facing=east,variant=monitor_rud": { "model": "computercraft:monitor_rud", "y": 90 }, + "facing=north,variant=monitor_lrud": { "model": "computercraft:monitor_lrud" }, + "facing=south,variant=monitor_lrud": { "model": "computercraft:monitor_lrud", "y": 180 }, + "facing=west,variant=monitor_lrud": { "model": "computercraft:monitor_lrud", "y": 270 }, + "facing=east,variant=monitor_lrud": { "model": "computercraft:monitor_lrud", "y": 90 }, + "facing=north,variant=monitor_lud": { "model": "computercraft:monitor_lud" }, + "facing=south,variant=monitor_lud": { "model": "computercraft:monitor_lud", "y": 180 }, + "facing=west,variant=monitor_lud": { "model": "computercraft:monitor_lud", "y": 270 }, + "facing=east,variant=monitor_lud": { "model": "computercraft:monitor_lud", "y": 90 }, + "facing=north,variant=monitor_ru": { "model": "computercraft:monitor_ru" }, + "facing=south,variant=monitor_ru": { "model": "computercraft:monitor_ru", "y": 180 }, + "facing=west,variant=monitor_ru": { "model": "computercraft:monitor_ru", "y": 270 }, + "facing=east,variant=monitor_ru": { "model": "computercraft:monitor_ru", "y": 90 }, + "facing=north,variant=monitor_lru": { "model": "computercraft:monitor_lru" }, + "facing=south,variant=monitor_lru": { "model": "computercraft:monitor_lru", "y": 180 }, + "facing=west,variant=monitor_lru": { "model": "computercraft:monitor_lru", "y": 270 }, + "facing=east,variant=monitor_lru": { "model": "computercraft:monitor_lru", "y": 90 }, + "facing=north,variant=monitor_lu": { "model": "computercraft:monitor_lu" }, + "facing=south,variant=monitor_lu": { "model": "computercraft:monitor_lu", "y": 180 }, + "facing=west,variant=monitor_lu": { "model": "computercraft:monitor_lu", "y": 270 }, + "facing=east,variant=monitor_lu": { "model": "computercraft:monitor_lu", "y": 90 }, + + "facing=north,variant=monitor_up": { "model": "computercraft:monitor", "x": 270 }, + "facing=south,variant=monitor_up": { "model": "computercraft:monitor", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up": { "model": "computercraft:monitor", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up": { "model": "computercraft:monitor", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_r": { "model": "computercraft:monitor_r", "x": 270 }, + "facing=south,variant=monitor_up_r": { "model": "computercraft:monitor_r", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_r": { "model": "computercraft:monitor_r", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_r": { "model": "computercraft:monitor_r", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_lr": { "model": "computercraft:monitor_lr", "x": 270 }, + "facing=south,variant=monitor_up_lr": { "model": "computercraft:monitor_lr", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_lr": { "model": "computercraft:monitor_lr", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_lr": { "model": "computercraft:monitor_lr", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_l": { "model": "computercraft:monitor_l", "x": 270 }, + "facing=south,variant=monitor_up_l": { "model": "computercraft:monitor_l", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_l": { "model": "computercraft:monitor_l", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_l": { "model": "computercraft:monitor_l", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_d": { "model": "computercraft:monitor_d", "x": 270 }, + "facing=south,variant=monitor_up_d": { "model": "computercraft:monitor_d", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_d": { "model": "computercraft:monitor_d", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_d": { "model": "computercraft:monitor_d", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_ud": { "model": "computercraft:monitor_ud", "x": 270 }, + "facing=south,variant=monitor_up_ud": { "model": "computercraft:monitor_ud", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_ud": { "model": "computercraft:monitor_ud", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_ud": { "model": "computercraft:monitor_ud", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_u": { "model": "computercraft:monitor_u", "x": 270 }, + "facing=south,variant=monitor_up_u": { "model": "computercraft:monitor_u", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_u": { "model": "computercraft:monitor_u", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_u": { "model": "computercraft:monitor_u", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_rd": { "model": "computercraft:monitor_rd", "x": 270 }, + "facing=south,variant=monitor_up_rd": { "model": "computercraft:monitor_rd", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_rd": { "model": "computercraft:monitor_rd", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_rd": { "model": "computercraft:monitor_rd", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_lrd": { "model": "computercraft:monitor_lrd", "x": 270 }, + "facing=south,variant=monitor_up_lrd": { "model": "computercraft:monitor_lrd", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_lrd": { "model": "computercraft:monitor_lrd", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_lrd": { "model": "computercraft:monitor_lrd", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_ld": { "model": "computercraft:monitor_ld", "x": 270 }, + "facing=south,variant=monitor_up_ld": { "model": "computercraft:monitor_ld", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_ld": { "model": "computercraft:monitor_ld", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_ld": { "model": "computercraft:monitor_ld", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_rud": { "model": "computercraft:monitor_rud", "x": 270 }, + "facing=south,variant=monitor_up_rud": { "model": "computercraft:monitor_rud", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_rud": { "model": "computercraft:monitor_rud", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_rud": { "model": "computercraft:monitor_rud", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_lrud": { "model": "computercraft:monitor_lrud", "x": 270 }, + "facing=south,variant=monitor_up_lrud": { "model": "computercraft:monitor_lrud", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_lrud": { "model": "computercraft:monitor_lrud", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_lrud": { "model": "computercraft:monitor_lrud", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_lud": { "model": "computercraft:monitor_lud", "x": 270 }, + "facing=south,variant=monitor_up_lud": { "model": "computercraft:monitor_lud", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_lud": { "model": "computercraft:monitor_lud", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_lud": { "model": "computercraft:monitor_lud", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_ru": { "model": "computercraft:monitor_ru", "x": 270 }, + "facing=south,variant=monitor_up_ru": { "model": "computercraft:monitor_ru", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_ru": { "model": "computercraft:monitor_ru", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_ru": { "model": "computercraft:monitor_ru", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_lru": { "model": "computercraft:monitor_lru", "x": 270 }, + "facing=south,variant=monitor_up_lru": { "model": "computercraft:monitor_lru", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_lru": { "model": "computercraft:monitor_lru", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_lru": { "model": "computercraft:monitor_lru", "y": 90, "x": 270 }, + "facing=north,variant=monitor_up_lu": { "model": "computercraft:monitor_lu", "x": 270 }, + "facing=south,variant=monitor_up_lu": { "model": "computercraft:monitor_lu", "y": 180, "x": 270 }, + "facing=west,variant=monitor_up_lu": { "model": "computercraft:monitor_lu", "y": 270, "x": 270 }, + "facing=east,variant=monitor_up_lu": { "model": "computercraft:monitor_lu", "y": 90, "x": 270 }, + + "facing=north,variant=monitor_down": { "model": "computercraft:monitor", "x": 90 }, + "facing=south,variant=monitor_down": { "model": "computercraft:monitor", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down": { "model": "computercraft:monitor", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down": { "model": "computercraft:monitor", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_r": { "model": "computercraft:monitor_r", "x": 90 }, + "facing=south,variant=monitor_down_r": { "model": "computercraft:monitor_r", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_r": { "model": "computercraft:monitor_r", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_r": { "model": "computercraft:monitor_r", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_lr": { "model": "computercraft:monitor_lr", "x": 90 }, + "facing=south,variant=monitor_down_lr": { "model": "computercraft:monitor_lr", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_lr": { "model": "computercraft:monitor_lr", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_lr": { "model": "computercraft:monitor_lr", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_l": { "model": "computercraft:monitor_l", "x": 90 }, + "facing=south,variant=monitor_down_l": { "model": "computercraft:monitor_l", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_l": { "model": "computercraft:monitor_l", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_l": { "model": "computercraft:monitor_l", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_d": { "model": "computercraft:monitor_d", "x": 90 }, + "facing=south,variant=monitor_down_d": { "model": "computercraft:monitor_d", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_d": { "model": "computercraft:monitor_d", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_d": { "model": "computercraft:monitor_d", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_ud": { "model": "computercraft:monitor_ud", "x": 90 }, + "facing=south,variant=monitor_down_ud": { "model": "computercraft:monitor_ud", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_ud": { "model": "computercraft:monitor_ud", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_ud": { "model": "computercraft:monitor_ud", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_u": { "model": "computercraft:monitor_u", "x": 90 }, + "facing=south,variant=monitor_down_u": { "model": "computercraft:monitor_u", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_u": { "model": "computercraft:monitor_u", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_u": { "model": "computercraft:monitor_u", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_rd": { "model": "computercraft:monitor_rd", "x": 90 }, + "facing=south,variant=monitor_down_rd": { "model": "computercraft:monitor_rd", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_rd": { "model": "computercraft:monitor_rd", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_rd": { "model": "computercraft:monitor_rd", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_lrd": { "model": "computercraft:monitor_lrd", "x": 90 }, + "facing=south,variant=monitor_down_lrd": { "model": "computercraft:monitor_lrd", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_lrd": { "model": "computercraft:monitor_lrd", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_lrd": { "model": "computercraft:monitor_lrd", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_ld": { "model": "computercraft:monitor_ld", "x": 90 }, + "facing=south,variant=monitor_down_ld": { "model": "computercraft:monitor_ld", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_ld": { "model": "computercraft:monitor_ld", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_ld": { "model": "computercraft:monitor_ld", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_rud": { "model": "computercraft:monitor_rud", "x": 90 }, + "facing=south,variant=monitor_down_rud": { "model": "computercraft:monitor_rud", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_rud": { "model": "computercraft:monitor_rud", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_rud": { "model": "computercraft:monitor_rud", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_lrud": { "model": "computercraft:monitor_lrud", "x": 90 }, + "facing=south,variant=monitor_down_lrud": { "model": "computercraft:monitor_lrud", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_lrud": { "model": "computercraft:monitor_lrud", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_lrud": { "model": "computercraft:monitor_lrud", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_lud": { "model": "computercraft:monitor_lud", "x": 90 }, + "facing=south,variant=monitor_down_lud": { "model": "computercraft:monitor_lud", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_lud": { "model": "computercraft:monitor_lud", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_lud": { "model": "computercraft:monitor_lud", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_ru": { "model": "computercraft:monitor_ru", "x": 90 }, + "facing=south,variant=monitor_down_ru": { "model": "computercraft:monitor_ru", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_ru": { "model": "computercraft:monitor_ru", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_ru": { "model": "computercraft:monitor_ru", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_lru": { "model": "computercraft:monitor_lru", "x": 90 }, + "facing=south,variant=monitor_down_lru": { "model": "computercraft:monitor_lru", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_lru": { "model": "computercraft:monitor_lru", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_lru": { "model": "computercraft:monitor_lru", "y": 90, "x": 90 }, + "facing=north,variant=monitor_down_lu": { "model": "computercraft:monitor_lu", "x": 90 }, + "facing=south,variant=monitor_down_lu": { "model": "computercraft:monitor_lu", "y": 180, "x": 90 }, + "facing=west,variant=monitor_down_lu": { "model": "computercraft:monitor_lu", "y": 270, "x": 90 }, + "facing=east,variant=monitor_down_lu": { "model": "computercraft:monitor_lu", "y": 90, "x": 90 }, + + "facing=north,variant=advanced_monitor": { "model": "computercraft:advanced_monitor" }, + "facing=south,variant=advanced_monitor": { "model": "computercraft:advanced_monitor", "y": 180 }, + "facing=west,variant=advanced_monitor": { "model": "computercraft:advanced_monitor", "y": 270 }, + "facing=east,variant=advanced_monitor": { "model": "computercraft:advanced_monitor", "y": 90 }, + "facing=north,variant=advanced_monitor_r": { "model": "computercraft:advanced_monitor_r" }, + "facing=south,variant=advanced_monitor_r": { "model": "computercraft:advanced_monitor_r", "y": 180 }, + "facing=west,variant=advanced_monitor_r": { "model": "computercraft:advanced_monitor_r", "y": 270 }, + "facing=east,variant=advanced_monitor_r": { "model": "computercraft:advanced_monitor_r", "y": 90 }, + "facing=north,variant=advanced_monitor_lr": { "model": "computercraft:advanced_monitor_lr" }, + "facing=south,variant=advanced_monitor_lr": { "model": "computercraft:advanced_monitor_lr", "y": 180 }, + "facing=west,variant=advanced_monitor_lr": { "model": "computercraft:advanced_monitor_lr", "y": 270 }, + "facing=east,variant=advanced_monitor_lr": { "model": "computercraft:advanced_monitor_lr", "y": 90 }, + "facing=north,variant=advanced_monitor_l": { "model": "computercraft:advanced_monitor_l" }, + "facing=south,variant=advanced_monitor_l": { "model": "computercraft:advanced_monitor_l", "y": 180 }, + "facing=west,variant=advanced_monitor_l": { "model": "computercraft:advanced_monitor_l", "y": 270 }, + "facing=east,variant=advanced_monitor_l": { "model": "computercraft:advanced_monitor_l", "y": 90 }, + "facing=north,variant=advanced_monitor_d": { "model": "computercraft:advanced_monitor_d" }, + "facing=south,variant=advanced_monitor_d": { "model": "computercraft:advanced_monitor_d", "y": 180 }, + "facing=west,variant=advanced_monitor_d": { "model": "computercraft:advanced_monitor_d", "y": 270 }, + "facing=east,variant=advanced_monitor_d": { "model": "computercraft:advanced_monitor_d", "y": 90 }, + "facing=north,variant=advanced_monitor_ud": { "model": "computercraft:advanced_monitor_ud" }, + "facing=south,variant=advanced_monitor_ud": { "model": "computercraft:advanced_monitor_ud", "y": 180 }, + "facing=west,variant=advanced_monitor_ud": { "model": "computercraft:advanced_monitor_ud", "y": 270 }, + "facing=east,variant=advanced_monitor_ud": { "model": "computercraft:advanced_monitor_ud", "y": 90 }, + "facing=north,variant=advanced_monitor_u": { "model": "computercraft:advanced_monitor_u" }, + "facing=south,variant=advanced_monitor_u": { "model": "computercraft:advanced_monitor_u", "y": 180 }, + "facing=west,variant=advanced_monitor_u": { "model": "computercraft:advanced_monitor_u", "y": 270 }, + "facing=east,variant=advanced_monitor_u": { "model": "computercraft:advanced_monitor_u", "y": 90 }, + "facing=north,variant=advanced_monitor_rd": { "model": "computercraft:advanced_monitor_rd" }, + "facing=south,variant=advanced_monitor_rd": { "model": "computercraft:advanced_monitor_rd", "y": 180 }, + "facing=west,variant=advanced_monitor_rd": { "model": "computercraft:advanced_monitor_rd", "y": 270 }, + "facing=east,variant=advanced_monitor_rd": { "model": "computercraft:advanced_monitor_rd", "y": 90 }, + "facing=north,variant=advanced_monitor_lrd": { "model": "computercraft:advanced_monitor_lrd" }, + "facing=south,variant=advanced_monitor_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 180 }, + "facing=west,variant=advanced_monitor_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 270 }, + "facing=east,variant=advanced_monitor_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 90 }, + "facing=north,variant=advanced_monitor_ld": { "model": "computercraft:advanced_monitor_ld" }, + "facing=south,variant=advanced_monitor_ld": { "model": "computercraft:advanced_monitor_ld", "y": 180 }, + "facing=west,variant=advanced_monitor_ld": { "model": "computercraft:advanced_monitor_ld", "y": 270 }, + "facing=east,variant=advanced_monitor_ld": { "model": "computercraft:advanced_monitor_ld", "y": 90 }, + "facing=north,variant=advanced_monitor_rud": { "model": "computercraft:advanced_monitor_rud" }, + "facing=south,variant=advanced_monitor_rud": { "model": "computercraft:advanced_monitor_rud", "y": 180 }, + "facing=west,variant=advanced_monitor_rud": { "model": "computercraft:advanced_monitor_rud", "y": 270 }, + "facing=east,variant=advanced_monitor_rud": { "model": "computercraft:advanced_monitor_rud", "y": 90 }, + "facing=north,variant=advanced_monitor_lrud": { "model": "computercraft:advanced_monitor_lrud" }, + "facing=south,variant=advanced_monitor_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 180 }, + "facing=west,variant=advanced_monitor_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 270 }, + "facing=east,variant=advanced_monitor_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 90 }, + "facing=north,variant=advanced_monitor_lud": { "model": "computercraft:advanced_monitor_lud" }, + "facing=south,variant=advanced_monitor_lud": { "model": "computercraft:advanced_monitor_lud", "y": 180 }, + "facing=west,variant=advanced_monitor_lud": { "model": "computercraft:advanced_monitor_lud", "y": 270 }, + "facing=east,variant=advanced_monitor_lud": { "model": "computercraft:advanced_monitor_lud", "y": 90 }, + "facing=north,variant=advanced_monitor_ru": { "model": "computercraft:advanced_monitor_ru" }, + "facing=south,variant=advanced_monitor_ru": { "model": "computercraft:advanced_monitor_ru", "y": 180 }, + "facing=west,variant=advanced_monitor_ru": { "model": "computercraft:advanced_monitor_ru", "y": 270 }, + "facing=east,variant=advanced_monitor_ru": { "model": "computercraft:advanced_monitor_ru", "y": 90 }, + "facing=north,variant=advanced_monitor_lru": { "model": "computercraft:advanced_monitor_lru" }, + "facing=south,variant=advanced_monitor_lru": { "model": "computercraft:advanced_monitor_lru", "y": 180 }, + "facing=west,variant=advanced_monitor_lru": { "model": "computercraft:advanced_monitor_lru", "y": 270 }, + "facing=east,variant=advanced_monitor_lru": { "model": "computercraft:advanced_monitor_lru", "y": 90 }, + "facing=north,variant=advanced_monitor_lu": { "model": "computercraft:advanced_monitor_lu" }, + "facing=south,variant=advanced_monitor_lu": { "model": "computercraft:advanced_monitor_lu", "y": 180 }, + "facing=west,variant=advanced_monitor_lu": { "model": "computercraft:advanced_monitor_lu", "y": 270 }, + "facing=east,variant=advanced_monitor_lu": { "model": "computercraft:advanced_monitor_lu", "y": 90 }, + + "facing=north,variant=advanced_monitor_up": { "model": "computercraft:advanced_monitor", "x": 270 }, + "facing=south,variant=advanced_monitor_up": { "model": "computercraft:advanced_monitor", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up": { "model": "computercraft:advanced_monitor", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up": { "model": "computercraft:advanced_monitor", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_r": { "model": "computercraft:advanced_monitor_r", "x": 270 }, + "facing=south,variant=advanced_monitor_up_r": { "model": "computercraft:advanced_monitor_r", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_r": { "model": "computercraft:advanced_monitor_r", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_r": { "model": "computercraft:advanced_monitor_r", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_lr": { "model": "computercraft:advanced_monitor_lr", "x": 270 }, + "facing=south,variant=advanced_monitor_up_lr": { "model": "computercraft:advanced_monitor_lr", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_lr": { "model": "computercraft:advanced_monitor_lr", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_lr": { "model": "computercraft:advanced_monitor_lr", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_l": { "model": "computercraft:advanced_monitor_l", "x": 270 }, + "facing=south,variant=advanced_monitor_up_l": { "model": "computercraft:advanced_monitor_l", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_l": { "model": "computercraft:advanced_monitor_l", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_l": { "model": "computercraft:advanced_monitor_l", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_d": { "model": "computercraft:advanced_monitor_d", "x": 270 }, + "facing=south,variant=advanced_monitor_up_d": { "model": "computercraft:advanced_monitor_d", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_d": { "model": "computercraft:advanced_monitor_d", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_d": { "model": "computercraft:advanced_monitor_d", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_ud": { "model": "computercraft:advanced_monitor_ud", "x": 270 }, + "facing=south,variant=advanced_monitor_up_ud": { "model": "computercraft:advanced_monitor_ud", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_ud": { "model": "computercraft:advanced_monitor_ud", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_ud": { "model": "computercraft:advanced_monitor_ud", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_u": { "model": "computercraft:advanced_monitor_u", "x": 270 }, + "facing=south,variant=advanced_monitor_up_u": { "model": "computercraft:advanced_monitor_u", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_u": { "model": "computercraft:advanced_monitor_u", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_u": { "model": "computercraft:advanced_monitor_u", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_rd": { "model": "computercraft:advanced_monitor_rd", "x": 270 }, + "facing=south,variant=advanced_monitor_up_rd": { "model": "computercraft:advanced_monitor_rd", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_rd": { "model": "computercraft:advanced_monitor_rd", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_rd": { "model": "computercraft:advanced_monitor_rd", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_lrd": { "model": "computercraft:advanced_monitor_lrd", "x": 270 }, + "facing=south,variant=advanced_monitor_up_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_ld": { "model": "computercraft:advanced_monitor_ld", "x": 270 }, + "facing=south,variant=advanced_monitor_up_ld": { "model": "computercraft:advanced_monitor_ld", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_ld": { "model": "computercraft:advanced_monitor_ld", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_ld": { "model": "computercraft:advanced_monitor_ld", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_rud": { "model": "computercraft:advanced_monitor_rud", "x": 270 }, + "facing=south,variant=advanced_monitor_up_rud": { "model": "computercraft:advanced_monitor_rud", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_rud": { "model": "computercraft:advanced_monitor_rud", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_rud": { "model": "computercraft:advanced_monitor_rud", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_lrud": { "model": "computercraft:advanced_monitor_lrud", "x": 270 }, + "facing=south,variant=advanced_monitor_up_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_lud": { "model": "computercraft:advanced_monitor_lud", "x": 270 }, + "facing=south,variant=advanced_monitor_up_lud": { "model": "computercraft:advanced_monitor_lud", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_lud": { "model": "computercraft:advanced_monitor_lud", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_lud": { "model": "computercraft:advanced_monitor_lud", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_ru": { "model": "computercraft:advanced_monitor_ru", "x": 270 }, + "facing=south,variant=advanced_monitor_up_ru": { "model": "computercraft:advanced_monitor_ru", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_ru": { "model": "computercraft:advanced_monitor_ru", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_ru": { "model": "computercraft:advanced_monitor_ru", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_lru": { "model": "computercraft:advanced_monitor_lru", "x": 270 }, + "facing=south,variant=advanced_monitor_up_lru": { "model": "computercraft:advanced_monitor_lru", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_lru": { "model": "computercraft:advanced_monitor_lru", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_lru": { "model": "computercraft:advanced_monitor_lru", "y": 90, "x": 270 }, + "facing=north,variant=advanced_monitor_up_lu": { "model": "computercraft:advanced_monitor_lu", "x": 270 }, + "facing=south,variant=advanced_monitor_up_lu": { "model": "computercraft:advanced_monitor_lu", "y": 180, "x": 270 }, + "facing=west,variant=advanced_monitor_up_lu": { "model": "computercraft:advanced_monitor_lu", "y": 270, "x": 270 }, + "facing=east,variant=advanced_monitor_up_lu": { "model": "computercraft:advanced_monitor_lu", "y": 90, "x": 270 }, + + "facing=north,variant=advanced_monitor_down": { "model": "computercraft:advanced_monitor", "x": 90 }, + "facing=south,variant=advanced_monitor_down": { "model": "computercraft:advanced_monitor", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down": { "model": "computercraft:advanced_monitor", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down": { "model": "computercraft:advanced_monitor", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_r": { "model": "computercraft:advanced_monitor_r", "x": 90 }, + "facing=south,variant=advanced_monitor_down_r": { "model": "computercraft:advanced_monitor_r", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_r": { "model": "computercraft:advanced_monitor_r", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_r": { "model": "computercraft:advanced_monitor_r", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_lr": { "model": "computercraft:advanced_monitor_lr", "x": 90 }, + "facing=south,variant=advanced_monitor_down_lr": { "model": "computercraft:advanced_monitor_lr", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_lr": { "model": "computercraft:advanced_monitor_lr", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_lr": { "model": "computercraft:advanced_monitor_lr", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_l": { "model": "computercraft:advanced_monitor_l", "x": 90 }, + "facing=south,variant=advanced_monitor_down_l": { "model": "computercraft:advanced_monitor_l", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_l": { "model": "computercraft:advanced_monitor_l", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_l": { "model": "computercraft:advanced_monitor_l", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_d": { "model": "computercraft:advanced_monitor_d", "x": 90 }, + "facing=south,variant=advanced_monitor_down_d": { "model": "computercraft:advanced_monitor_d", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_d": { "model": "computercraft:advanced_monitor_d", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_d": { "model": "computercraft:advanced_monitor_d", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_ud": { "model": "computercraft:advanced_monitor_ud", "x": 90 }, + "facing=south,variant=advanced_monitor_down_ud": { "model": "computercraft:advanced_monitor_ud", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_ud": { "model": "computercraft:advanced_monitor_ud", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_ud": { "model": "computercraft:advanced_monitor_ud", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_u": { "model": "computercraft:advanced_monitor_u", "x": 90 }, + "facing=south,variant=advanced_monitor_down_u": { "model": "computercraft:advanced_monitor_u", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_u": { "model": "computercraft:advanced_monitor_u", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_u": { "model": "computercraft:advanced_monitor_u", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_rd": { "model": "computercraft:advanced_monitor_rd", "x": 90 }, + "facing=south,variant=advanced_monitor_down_rd": { "model": "computercraft:advanced_monitor_rd", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_rd": { "model": "computercraft:advanced_monitor_rd", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_rd": { "model": "computercraft:advanced_monitor_rd", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_lrd": { "model": "computercraft:advanced_monitor_lrd", "x": 90 }, + "facing=south,variant=advanced_monitor_down_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_lrd": { "model": "computercraft:advanced_monitor_lrd", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_ld": { "model": "computercraft:advanced_monitor_ld", "x": 90 }, + "facing=south,variant=advanced_monitor_down_ld": { "model": "computercraft:advanced_monitor_ld", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_ld": { "model": "computercraft:advanced_monitor_ld", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_ld": { "model": "computercraft:advanced_monitor_ld", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_rud": { "model": "computercraft:advanced_monitor_rud", "x": 90 }, + "facing=south,variant=advanced_monitor_down_rud": { "model": "computercraft:advanced_monitor_rud", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_rud": { "model": "computercraft:advanced_monitor_rud", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_rud": { "model": "computercraft:advanced_monitor_rud", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_lrud": { "model": "computercraft:advanced_monitor_lrud", "x": 90 }, + "facing=south,variant=advanced_monitor_down_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_lrud": { "model": "computercraft:advanced_monitor_lrud", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_lud": { "model": "computercraft:advanced_monitor_lud", "x": 90 }, + "facing=south,variant=advanced_monitor_down_lud": { "model": "computercraft:advanced_monitor_lud", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_lud": { "model": "computercraft:advanced_monitor_lud", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_lud": { "model": "computercraft:advanced_monitor_lud", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_ru": { "model": "computercraft:advanced_monitor_ru", "x": 90 }, + "facing=south,variant=advanced_monitor_down_ru": { "model": "computercraft:advanced_monitor_ru", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_ru": { "model": "computercraft:advanced_monitor_ru", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_ru": { "model": "computercraft:advanced_monitor_ru", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_lru": { "model": "computercraft:advanced_monitor_lru", "x": 90 }, + "facing=south,variant=advanced_monitor_down_lru": { "model": "computercraft:advanced_monitor_lru", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_lru": { "model": "computercraft:advanced_monitor_lru", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_lru": { "model": "computercraft:advanced_monitor_lru", "y": 90, "x": 90 }, + "facing=north,variant=advanced_monitor_down_lu": { "model": "computercraft:advanced_monitor_lu", "x": 90 }, + "facing=south,variant=advanced_monitor_down_lu": { "model": "computercraft:advanced_monitor_lu", "y": 180, "x": 90 }, + "facing=west,variant=advanced_monitor_down_lu": { "model": "computercraft:advanced_monitor_lu", "y": 270, "x": 90 }, + "facing=east,variant=advanced_monitor_down_lu": { "model": "computercraft:advanced_monitor_lu", "y": 90, "x": 90 } + } +} diff --git a/src/main/resources/assets/computercraft/blockstates/CC-TurtleExpanded.json b/src/main/resources/assets/computercraft/blockstates/turtle.json similarity index 97% rename from src/main/resources/assets/computercraft/blockstates/CC-TurtleExpanded.json rename to src/main/resources/assets/computercraft/blockstates/turtle.json index 01cbbcb22..3eac3d2fb 100644 --- a/src/main/resources/assets/computercraft/blockstates/CC-TurtleExpanded.json +++ b/src/main/resources/assets/computercraft/blockstates/turtle.json @@ -1,8 +1,8 @@ -{ - "variants": { - "facing=north": { "model": "computercraft:turtle" }, - "facing=south": { "model": "computercraft:turtle", "y": 180 }, - "facing=west": { "model": "computercraft:turtle", "y": 270 }, - "facing=east": { "model": "computercraft:turtle", "y": 90 } - } -} +{ + "variants": { + "facing=north": { "model": "computercraft:turtle" }, + "facing=south": { "model": "computercraft:turtle", "y": 180 }, + "facing=west": { "model": "computercraft:turtle", "y": 270 }, + "facing=east": { "model": "computercraft:turtle", "y": 90 } + } +} diff --git a/src/main/resources/assets/computercraft/blockstates/CC-TurtleAdvanced.json b/src/main/resources/assets/computercraft/blockstates/turtle_advanced.json similarity index 97% rename from src/main/resources/assets/computercraft/blockstates/CC-TurtleAdvanced.json rename to src/main/resources/assets/computercraft/blockstates/turtle_advanced.json index 1fbebc10c..90e1ecb52 100644 --- a/src/main/resources/assets/computercraft/blockstates/CC-TurtleAdvanced.json +++ b/src/main/resources/assets/computercraft/blockstates/turtle_advanced.json @@ -1,8 +1,8 @@ -{ - "variants": { - "facing=north": { "model": "computercraft:advanced_turtle" }, - "facing=south": { "model": "computercraft:advanced_turtle", "y": 180 }, - "facing=west": { "model": "computercraft:advanced_turtle", "y": 270 }, - "facing=east": { "model": "computercraft:advanced_turtle", "y": 90 } - } -} +{ + "variants": { + "facing=north": { "model": "computercraft:advanced_turtle" }, + "facing=south": { "model": "computercraft:advanced_turtle", "y": 180 }, + "facing=west": { "model": "computercraft:advanced_turtle", "y": 270 }, + "facing=east": { "model": "computercraft:advanced_turtle", "y": 90 } + } +} diff --git a/src/main/resources/assets/computercraft/blockstates/CC-Turtle.json b/src/main/resources/assets/computercraft/blockstates/turtle_expanded.json similarity index 97% rename from src/main/resources/assets/computercraft/blockstates/CC-Turtle.json rename to src/main/resources/assets/computercraft/blockstates/turtle_expanded.json index 01cbbcb22..3eac3d2fb 100644 --- a/src/main/resources/assets/computercraft/blockstates/CC-Turtle.json +++ b/src/main/resources/assets/computercraft/blockstates/turtle_expanded.json @@ -1,8 +1,8 @@ -{ - "variants": { - "facing=north": { "model": "computercraft:turtle" }, - "facing=south": { "model": "computercraft:turtle", "y": 180 }, - "facing=west": { "model": "computercraft:turtle", "y": 270 }, - "facing=east": { "model": "computercraft:turtle", "y": 90 } - } -} +{ + "variants": { + "facing=north": { "model": "computercraft:turtle" }, + "facing=south": { "model": "computercraft:turtle", "y": 180 }, + "facing=west": { "model": "computercraft:turtle", "y": 270 }, + "facing=east": { "model": "computercraft:turtle", "y": 90 } + } +} From 7f754f33bbad98bbb57fbc5cec33d53bef6087a3 Mon Sep 17 00:00:00 2001 From: ObloxCC Date: Sat, 13 May 2017 13:20:39 -0500 Subject: [PATCH 05/42] Updated (C) from 2016 to 2017 (#229) * Updated (C) * Fixed Whitespace bugs, bugs, and more bugs * Fixed Whitespaces 1/2 * Fixed Whitespaces 2/2 * Fixed Whitespaces 3/2 --- src/main/java/dan200/computercraft/ComputerCraft.java | 2 +- src/main/java/dan200/computercraft/api/ComputerCraftAPI.java | 2 +- src/main/java/dan200/computercraft/api/filesystem/IMount.java | 2 +- .../dan200/computercraft/api/filesystem/IWritableMount.java | 2 +- .../java/dan200/computercraft/api/filesystem/package-info.java | 2 +- src/main/java/dan200/computercraft/api/lua/ILuaContext.java | 2 +- src/main/java/dan200/computercraft/api/lua/ILuaObject.java | 2 +- src/main/java/dan200/computercraft/api/lua/ILuaTask.java | 2 +- src/main/java/dan200/computercraft/api/lua/LuaException.java | 2 +- src/main/java/dan200/computercraft/api/lua/package-info.java | 2 +- src/main/java/dan200/computercraft/api/media/IMedia.java | 2 +- .../java/dan200/computercraft/api/media/IMediaProvider.java | 2 +- src/main/java/dan200/computercraft/api/media/package-info.java | 2 +- src/main/java/dan200/computercraft/api/package-info.java | 2 +- .../dan200/computercraft/api/peripheral/IComputerAccess.java | 2 +- .../java/dan200/computercraft/api/peripheral/IPeripheral.java | 2 +- .../computercraft/api/peripheral/IPeripheralProvider.java | 2 +- .../java/dan200/computercraft/api/peripheral/package-info.java | 2 +- .../api/permissions/ITurtlePermissionProvider.java | 2 +- .../java/dan200/computercraft/api/permissions/package-info.java | 2 +- .../computercraft/api/redstone/IBundledRedstoneProvider.java | 2 +- .../java/dan200/computercraft/api/redstone/package-info.java | 2 +- .../java/dan200/computercraft/api/turtle/ITurtleAccess.java | 2 +- .../java/dan200/computercraft/api/turtle/ITurtleCommand.java | 2 +- .../java/dan200/computercraft/api/turtle/ITurtleUpgrade.java | 2 +- .../java/dan200/computercraft/api/turtle/TurtleAnimation.java | 2 +- .../dan200/computercraft/api/turtle/TurtleCommandResult.java | 2 +- src/main/java/dan200/computercraft/api/turtle/TurtleSide.java | 2 +- .../java/dan200/computercraft/api/turtle/TurtleUpgradeType.java | 2 +- src/main/java/dan200/computercraft/api/turtle/TurtleVerb.java | 2 +- src/main/java/dan200/computercraft/api/turtle/package-info.java | 2 +- .../dan200/computercraft/client/gui/FixedWidthFontRenderer.java | 2 +- src/main/java/dan200/computercraft/client/gui/GuiComputer.java | 2 +- src/main/java/dan200/computercraft/client/gui/GuiDiskDrive.java | 2 +- .../java/dan200/computercraft/client/gui/GuiPocketComputer.java | 2 +- src/main/java/dan200/computercraft/client/gui/GuiPrinter.java | 2 +- src/main/java/dan200/computercraft/client/gui/GuiPrintout.java | 2 +- src/main/java/dan200/computercraft/client/gui/GuiTurtle.java | 2 +- .../java/dan200/computercraft/client/gui/widgets/MousePos.java | 2 +- .../java/dan200/computercraft/client/gui/widgets/Widget.java | 2 +- .../computercraft/client/gui/widgets/WidgetContainer.java | 2 +- .../dan200/computercraft/client/gui/widgets/WidgetTerminal.java | 2 +- .../dan200/computercraft/client/proxy/CCTurtleProxyClient.java | 2 +- .../computercraft/client/proxy/ComputerCraftProxyClient.java | 2 +- .../computercraft/client/render/TileEntityMonitorRenderer.java | 2 +- .../computercraft/client/render/TileEntityTurtleRenderer.java | 2 +- .../computercraft/client/render/TurtleSmartItemModel.java | 2 +- src/main/java/dan200/computercraft/core/apis/BitAPI.java | 2 +- src/main/java/dan200/computercraft/core/apis/BufferAPI.java | 2 +- src/main/java/dan200/computercraft/core/apis/FSAPI.java | 2 +- src/main/java/dan200/computercraft/core/apis/HTTPAPI.java | 2 +- src/main/java/dan200/computercraft/core/apis/HTTPRequest.java | 2 +- .../java/dan200/computercraft/core/apis/IAPIEnvironment.java | 2 +- src/main/java/dan200/computercraft/core/apis/ILuaAPI.java | 2 +- src/main/java/dan200/computercraft/core/apis/OSAPI.java | 2 +- src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java | 2 +- src/main/java/dan200/computercraft/core/apis/RedstoneAPI.java | 2 +- src/main/java/dan200/computercraft/core/apis/TermAPI.java | 2 +- src/main/java/dan200/computercraft/core/computer/Computer.java | 2 +- .../java/dan200/computercraft/core/computer/ComputerThread.java | 2 +- .../computercraft/core/computer/IComputerEnvironment.java | 2 +- src/main/java/dan200/computercraft/core/computer/ITask.java | 2 +- .../java/dan200/computercraft/core/computer/MainThread.java | 2 +- .../java/dan200/computercraft/core/filesystem/ComboMount.java | 2 +- .../java/dan200/computercraft/core/filesystem/EmptyMount.java | 2 +- .../java/dan200/computercraft/core/filesystem/FileMount.java | 2 +- .../java/dan200/computercraft/core/filesystem/FileSystem.java | 2 +- .../computercraft/core/filesystem/FileSystemException.java | 2 +- .../java/dan200/computercraft/core/filesystem/IMountedFile.java | 2 +- .../computercraft/core/filesystem/IMountedFileBinary.java | 2 +- .../computercraft/core/filesystem/IMountedFileNormal.java | 2 +- .../java/dan200/computercraft/core/filesystem/JarMount.java | 2 +- .../java/dan200/computercraft/core/filesystem/SubMount.java | 2 +- src/main/java/dan200/computercraft/core/lua/ILuaMachine.java | 2 +- src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java | 2 +- src/main/java/dan200/computercraft/core/terminal/Terminal.java | 2 +- .../java/dan200/computercraft/core/terminal/TextBuffer.java | 2 +- .../dan200/computercraft/server/proxy/CCTurtleProxyServer.java | 2 +- .../computercraft/server/proxy/ComputerCraftProxyServer.java | 2 +- .../dan200/computercraft/shared/common/BlockDirectional.java | 2 +- .../java/dan200/computercraft/shared/common/BlockGeneric.java | 2 +- .../java/dan200/computercraft/shared/common/ClientTerminal.java | 2 +- .../shared/common/DefaultBundledRedstoneProvider.java | 2 +- .../dan200/computercraft/shared/common/IDirectionalTile.java | 2 +- src/main/java/dan200/computercraft/shared/common/ITerminal.java | 2 +- .../java/dan200/computercraft/shared/common/ITerminalTile.java | 2 +- .../java/dan200/computercraft/shared/common/ServerTerminal.java | 2 +- .../java/dan200/computercraft/shared/common/TileGeneric.java | 2 +- .../dan200/computercraft/shared/computer/apis/CommandAPI.java | 2 +- .../shared/computer/blocks/BlockCommandComputer.java | 2 +- .../computercraft/shared/computer/blocks/BlockComputer.java | 2 +- .../computercraft/shared/computer/blocks/BlockComputerBase.java | 2 +- .../shared/computer/blocks/ComputerPeripheral.java | 2 +- .../computercraft/shared/computer/blocks/ComputerState.java | 2 +- .../computercraft/shared/computer/blocks/IComputerTile.java | 2 +- .../shared/computer/blocks/TileCommandComputer.java | 2 +- .../computercraft/shared/computer/blocks/TileComputer.java | 2 +- .../computercraft/shared/computer/blocks/TileComputerBase.java | 2 +- .../computercraft/shared/computer/core/ClientComputer.java | 2 +- .../shared/computer/core/ClientComputerRegistry.java | 2 +- .../computercraft/shared/computer/core/ComputerFamily.java | 2 +- .../computercraft/shared/computer/core/ComputerRegistry.java | 2 +- .../dan200/computercraft/shared/computer/core/IComputer.java | 2 +- .../computercraft/shared/computer/core/IComputerContainer.java | 2 +- .../computercraft/shared/computer/core/ServerComputer.java | 2 +- .../shared/computer/core/ServerComputerRegistry.java | 2 +- .../shared/computer/inventory/ContainerComputer.java | 2 +- .../shared/computer/items/ComputerItemFactory.java | 2 +- .../computercraft/shared/computer/items/IComputerItem.java | 2 +- .../shared/computer/items/ItemCommandComputer.java | 2 +- .../computercraft/shared/computer/items/ItemComputer.java | 2 +- .../computercraft/shared/computer/items/ItemComputerBase.java | 2 +- .../computercraft/shared/media/inventory/ContainerHeldItem.java | 2 +- .../computercraft/shared/media/items/ItemDiskExpanded.java | 2 +- .../dan200/computercraft/shared/media/items/ItemDiskLegacy.java | 2 +- .../dan200/computercraft/shared/media/items/ItemPrintout.java | 2 +- .../computercraft/shared/media/items/ItemTreasureDisk.java | 2 +- .../dan200/computercraft/shared/media/items/RecordMedia.java | 2 +- .../dan200/computercraft/shared/media/recipes/DiskRecipe.java | 2 +- .../computercraft/shared/media/recipes/PrintoutRecipe.java | 2 +- .../computercraft/shared/network/ComputerCraftPacket.java | 2 +- .../dan200/computercraft/shared/network/INetworkedThing.java | 2 +- .../java/dan200/computercraft/shared/network/PacketHandler.java | 2 +- .../dan200/computercraft/shared/peripheral/PeripheralType.java | 2 +- .../shared/peripheral/commandblock/CommandBlockPeripheral.java | 2 +- .../peripheral/commandblock/CommandBlockPeripheralProvider.java | 2 +- .../computercraft/shared/peripheral/common/BlockCable.java | 2 +- .../shared/peripheral/common/BlockCableModemVariant.java | 2 +- .../computercraft/shared/peripheral/common/BlockPeripheral.java | 2 +- .../shared/peripheral/common/BlockPeripheralBase.java | 2 +- .../shared/peripheral/common/BlockPeripheralVariant.java | 2 +- .../shared/peripheral/common/DefaultPeripheralProvider.java | 2 +- .../computercraft/shared/peripheral/common/IPeripheralItem.java | 2 +- .../computercraft/shared/peripheral/common/IPeripheralTile.java | 2 +- .../shared/peripheral/common/ItemAdvancedModem.java | 2 +- .../computercraft/shared/peripheral/common/ItemCable.java | 2 +- .../computercraft/shared/peripheral/common/ItemPeripheral.java | 2 +- .../shared/peripheral/common/ItemPeripheralBase.java | 2 +- .../shared/peripheral/common/PeripheralItemFactory.java | 2 +- .../shared/peripheral/common/TilePeripheralBase.java | 2 +- .../shared/peripheral/diskdrive/ContainerDiskDrive.java | 2 +- .../shared/peripheral/diskdrive/DiskDrivePeripheral.java | 2 +- .../shared/peripheral/diskdrive/TileDiskDrive.java | 2 +- .../shared/peripheral/modem/BlockAdvancedModem.java | 2 +- .../dan200/computercraft/shared/peripheral/modem/INetwork.java | 2 +- .../dan200/computercraft/shared/peripheral/modem/IReceiver.java | 2 +- .../computercraft/shared/peripheral/modem/ModemPeripheral.java | 2 +- .../shared/peripheral/modem/TileAdvancedModem.java | 2 +- .../dan200/computercraft/shared/peripheral/modem/TileCable.java | 2 +- .../computercraft/shared/peripheral/modem/TileModemBase.java | 2 +- .../shared/peripheral/modem/TileWirelessModem.java | 2 +- .../shared/peripheral/modem/WirelessModemPeripheral.java | 2 +- .../computercraft/shared/peripheral/modem/WirelessNetwork.java | 2 +- .../shared/peripheral/monitor/MonitorPeripheral.java | 2 +- .../computercraft/shared/peripheral/monitor/TileMonitor.java | 2 +- .../shared/peripheral/printer/ContainerPrinter.java | 2 +- .../shared/peripheral/printer/PrinterPeripheral.java | 2 +- .../computercraft/shared/peripheral/printer/TilePrinter.java | 2 +- .../java/dan200/computercraft/shared/pocket/apis/PocketAPI.java | 2 +- .../computercraft/shared/pocket/items/ItemPocketComputer.java | 2 +- .../shared/pocket/items/PocketComputerItemFactory.java | 2 +- .../shared/pocket/peripherals/PocketModemPeripheral.java | 2 +- .../shared/pocket/recipes/PocketComputerUpgradeRecipe.java | 2 +- .../dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java | 2 +- .../computercraft/shared/proxy/ComputerCraftProxyCommon.java | 2 +- .../java/dan200/computercraft/shared/proxy/ICCTurtleProxy.java | 2 +- .../dan200/computercraft/shared/proxy/IComputerCraftProxy.java | 2 +- .../java/dan200/computercraft/shared/turtle/apis/TurtleAPI.java | 2 +- .../dan200/computercraft/shared/turtle/blocks/BlockTurtle.java | 2 +- .../dan200/computercraft/shared/turtle/blocks/ITurtleTile.java | 2 +- .../dan200/computercraft/shared/turtle/blocks/TileTurtle.java | 2 +- .../computercraft/shared/turtle/blocks/TileTurtleAdvanced.java | 2 +- .../computercraft/shared/turtle/blocks/TileTurtleExpanded.java | 2 +- .../computercraft/shared/turtle/core/InteractDirection.java | 2 +- .../dan200/computercraft/shared/turtle/core/MoveDirection.java | 2 +- .../dan200/computercraft/shared/turtle/core/TurnDirection.java | 2 +- .../computercraft/shared/turtle/core/TurtleAttackCommand.java | 2 +- .../dan200/computercraft/shared/turtle/core/TurtleBrain.java | 2 +- .../shared/turtle/core/TurtleCheckRedstoneCommand.java | 2 +- .../shared/turtle/core/TurtleCommandQueueEntry.java | 2 +- .../computercraft/shared/turtle/core/TurtleCompareCommand.java | 2 +- .../shared/turtle/core/TurtleCompareToCommand.java | 2 +- .../computercraft/shared/turtle/core/TurtleCraftCommand.java | 2 +- .../computercraft/shared/turtle/core/TurtleDetectCommand.java | 2 +- .../computercraft/shared/turtle/core/TurtleDigCommand.java | 2 +- .../computercraft/shared/turtle/core/TurtleDropCommand.java | 2 +- .../computercraft/shared/turtle/core/TurtleEquipCommand.java | 2 +- .../computercraft/shared/turtle/core/TurtleInspectCommand.java | 2 +- .../computercraft/shared/turtle/core/TurtleMoveCommand.java | 2 +- .../computercraft/shared/turtle/core/TurtlePlaceCommand.java | 2 +- .../dan200/computercraft/shared/turtle/core/TurtlePlayer.java | 2 +- .../computercraft/shared/turtle/core/TurtleRefuelCommand.java | 2 +- .../computercraft/shared/turtle/core/TurtleSelectCommand.java | 2 +- .../shared/turtle/core/TurtleSetRedstoneCommand.java | 2 +- .../computercraft/shared/turtle/core/TurtleSuckCommand.java | 2 +- .../computercraft/shared/turtle/core/TurtleToolCommand.java | 2 +- .../shared/turtle/core/TurtleTransferToCommand.java | 2 +- .../computercraft/shared/turtle/core/TurtleTurnCommand.java | 2 +- .../computercraft/shared/turtle/entity/TurtleVisionCamera.java | 2 +- .../computercraft/shared/turtle/inventory/ContainerTurtle.java | 2 +- .../dan200/computercraft/shared/turtle/items/ITurtleItem.java | 2 +- .../computercraft/shared/turtle/items/ItemTurtleAdvanced.java | 2 +- .../computercraft/shared/turtle/items/ItemTurtleBase.java | 2 +- .../computercraft/shared/turtle/items/ItemTurtleLegacy.java | 2 +- .../computercraft/shared/turtle/items/ItemTurtleNormal.java | 2 +- .../computercraft/shared/turtle/items/TurtleItemFactory.java | 2 +- .../computercraft/shared/turtle/recipes/TurtleRecipe.java | 2 +- .../shared/turtle/recipes/TurtleUpgradeRecipe.java | 2 +- .../shared/turtle/upgrades/CraftingTablePeripheral.java | 2 +- .../dan200/computercraft/shared/turtle/upgrades/TurtleAxe.java | 2 +- .../shared/turtle/upgrades/TurtleCraftingTable.java | 2 +- .../dan200/computercraft/shared/turtle/upgrades/TurtleHoe.java | 2 +- .../shared/turtle/upgrades/TurtleInventoryCrafting.java | 2 +- .../computercraft/shared/turtle/upgrades/TurtleModem.java | 2 +- .../computercraft/shared/turtle/upgrades/TurtleShovel.java | 2 +- .../computercraft/shared/turtle/upgrades/TurtleSword.java | 2 +- .../dan200/computercraft/shared/turtle/upgrades/TurtleTool.java | 2 +- src/main/java/dan200/computercraft/shared/util/Colour.java | 2 +- .../java/dan200/computercraft/shared/util/CreativeTabMain.java | 2 +- .../dan200/computercraft/shared/util/CreativeTabTreasure.java | 2 +- .../java/dan200/computercraft/shared/util/DirectionUtil.java | 2 +- src/main/java/dan200/computercraft/shared/util/Holiday.java | 2 +- src/main/java/dan200/computercraft/shared/util/HolidayUtil.java | 2 +- .../dan200/computercraft/shared/util/IEntityDropConsumer.java | 2 +- .../java/dan200/computercraft/shared/util/ImpostorRecipe.java | 2 +- .../computercraft/shared/util/ImpostorShapelessRecipe.java | 2 +- .../java/dan200/computercraft/shared/util/InventoryUtil.java | 2 +- src/main/java/dan200/computercraft/shared/util/NBTUtil.java | 2 +- .../java/dan200/computercraft/shared/util/RedstoneUtil.java | 2 +- .../java/dan200/computercraft/shared/util/ReflectionUtil.java | 2 +- src/main/java/dan200/computercraft/shared/util/WorldUtil.java | 2 +- 231 files changed, 231 insertions(+), 231 deletions(-) diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index 1e279a93b..405408117 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/api/ComputerCraftAPI.java b/src/main/java/dan200/computercraft/api/ComputerCraftAPI.java index 84747f644..c32b00085 100644 --- a/src/main/java/dan200/computercraft/api/ComputerCraftAPI.java +++ b/src/main/java/dan200/computercraft/api/ComputerCraftAPI.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/filesystem/IMount.java b/src/main/java/dan200/computercraft/api/filesystem/IMount.java index 32e063743..082472b64 100644 --- a/src/main/java/dan200/computercraft/api/filesystem/IMount.java +++ b/src/main/java/dan200/computercraft/api/filesystem/IMount.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/filesystem/IWritableMount.java b/src/main/java/dan200/computercraft/api/filesystem/IWritableMount.java index 3f4bc68e3..adaad1694 100644 --- a/src/main/java/dan200/computercraft/api/filesystem/IWritableMount.java +++ b/src/main/java/dan200/computercraft/api/filesystem/IWritableMount.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/filesystem/package-info.java b/src/main/java/dan200/computercraft/api/filesystem/package-info.java index 92011b7ff..e29255b2a 100644 --- a/src/main/java/dan200/computercraft/api/filesystem/package-info.java +++ b/src/main/java/dan200/computercraft/api/filesystem/package-info.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/lua/ILuaContext.java b/src/main/java/dan200/computercraft/api/lua/ILuaContext.java index 5f4c74218..b3e49246e 100644 --- a/src/main/java/dan200/computercraft/api/lua/ILuaContext.java +++ b/src/main/java/dan200/computercraft/api/lua/ILuaContext.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/lua/ILuaObject.java b/src/main/java/dan200/computercraft/api/lua/ILuaObject.java index 8e40d75a7..fefc5e8a5 100644 --- a/src/main/java/dan200/computercraft/api/lua/ILuaObject.java +++ b/src/main/java/dan200/computercraft/api/lua/ILuaObject.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/lua/ILuaTask.java b/src/main/java/dan200/computercraft/api/lua/ILuaTask.java index 0b31fb428..07f468df0 100644 --- a/src/main/java/dan200/computercraft/api/lua/ILuaTask.java +++ b/src/main/java/dan200/computercraft/api/lua/ILuaTask.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/lua/LuaException.java b/src/main/java/dan200/computercraft/api/lua/LuaException.java index 4f07e6e64..480f7df6d 100644 --- a/src/main/java/dan200/computercraft/api/lua/LuaException.java +++ b/src/main/java/dan200/computercraft/api/lua/LuaException.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/lua/package-info.java b/src/main/java/dan200/computercraft/api/lua/package-info.java index 1b5c4168e..8998d0f28 100644 --- a/src/main/java/dan200/computercraft/api/lua/package-info.java +++ b/src/main/java/dan200/computercraft/api/lua/package-info.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/media/IMedia.java b/src/main/java/dan200/computercraft/api/media/IMedia.java index e35cffc9b..4d812304c 100644 --- a/src/main/java/dan200/computercraft/api/media/IMedia.java +++ b/src/main/java/dan200/computercraft/api/media/IMedia.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/media/IMediaProvider.java b/src/main/java/dan200/computercraft/api/media/IMediaProvider.java index 0a9cdcaa5..65ec96e94 100644 --- a/src/main/java/dan200/computercraft/api/media/IMediaProvider.java +++ b/src/main/java/dan200/computercraft/api/media/IMediaProvider.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/media/package-info.java b/src/main/java/dan200/computercraft/api/media/package-info.java index 89811800c..777e08096 100644 --- a/src/main/java/dan200/computercraft/api/media/package-info.java +++ b/src/main/java/dan200/computercraft/api/media/package-info.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/package-info.java b/src/main/java/dan200/computercraft/api/package-info.java index b8ac2bcdf..7b0d1b96d 100644 --- a/src/main/java/dan200/computercraft/api/package-info.java +++ b/src/main/java/dan200/computercraft/api/package-info.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/peripheral/IComputerAccess.java b/src/main/java/dan200/computercraft/api/peripheral/IComputerAccess.java index 1caab9033..306250936 100644 --- a/src/main/java/dan200/computercraft/api/peripheral/IComputerAccess.java +++ b/src/main/java/dan200/computercraft/api/peripheral/IComputerAccess.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/peripheral/IPeripheral.java b/src/main/java/dan200/computercraft/api/peripheral/IPeripheral.java index 8dc11655d..a9c5de4e6 100644 --- a/src/main/java/dan200/computercraft/api/peripheral/IPeripheral.java +++ b/src/main/java/dan200/computercraft/api/peripheral/IPeripheral.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/peripheral/IPeripheralProvider.java b/src/main/java/dan200/computercraft/api/peripheral/IPeripheralProvider.java index 8df256961..1a0cb372e 100644 --- a/src/main/java/dan200/computercraft/api/peripheral/IPeripheralProvider.java +++ b/src/main/java/dan200/computercraft/api/peripheral/IPeripheralProvider.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/peripheral/package-info.java b/src/main/java/dan200/computercraft/api/peripheral/package-info.java index 46862eeaf..9391488ad 100644 --- a/src/main/java/dan200/computercraft/api/peripheral/package-info.java +++ b/src/main/java/dan200/computercraft/api/peripheral/package-info.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/permissions/ITurtlePermissionProvider.java b/src/main/java/dan200/computercraft/api/permissions/ITurtlePermissionProvider.java index ee2373819..d37fe82e3 100644 --- a/src/main/java/dan200/computercraft/api/permissions/ITurtlePermissionProvider.java +++ b/src/main/java/dan200/computercraft/api/permissions/ITurtlePermissionProvider.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/permissions/package-info.java b/src/main/java/dan200/computercraft/api/permissions/package-info.java index 1c26a5962..e6143fa63 100755 --- a/src/main/java/dan200/computercraft/api/permissions/package-info.java +++ b/src/main/java/dan200/computercraft/api/permissions/package-info.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/redstone/IBundledRedstoneProvider.java b/src/main/java/dan200/computercraft/api/redstone/IBundledRedstoneProvider.java index 8a940c4b1..577ae85a3 100644 --- a/src/main/java/dan200/computercraft/api/redstone/IBundledRedstoneProvider.java +++ b/src/main/java/dan200/computercraft/api/redstone/IBundledRedstoneProvider.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/redstone/package-info.java b/src/main/java/dan200/computercraft/api/redstone/package-info.java index dac464a2e..2cec72413 100644 --- a/src/main/java/dan200/computercraft/api/redstone/package-info.java +++ b/src/main/java/dan200/computercraft/api/redstone/package-info.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java b/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java index 0b00b6945..2a8f1dd15 100644 --- a/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java +++ b/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/turtle/ITurtleCommand.java b/src/main/java/dan200/computercraft/api/turtle/ITurtleCommand.java index e873900bb..773e84ddd 100644 --- a/src/main/java/dan200/computercraft/api/turtle/ITurtleCommand.java +++ b/src/main/java/dan200/computercraft/api/turtle/ITurtleCommand.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java b/src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java index b1b3fb5b9..f380e41d5 100644 --- a/src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java +++ b/src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/turtle/TurtleAnimation.java b/src/main/java/dan200/computercraft/api/turtle/TurtleAnimation.java index 201e81195..0ba561875 100644 --- a/src/main/java/dan200/computercraft/api/turtle/TurtleAnimation.java +++ b/src/main/java/dan200/computercraft/api/turtle/TurtleAnimation.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/turtle/TurtleCommandResult.java b/src/main/java/dan200/computercraft/api/turtle/TurtleCommandResult.java index e89d8b993..bf2d10728 100644 --- a/src/main/java/dan200/computercraft/api/turtle/TurtleCommandResult.java +++ b/src/main/java/dan200/computercraft/api/turtle/TurtleCommandResult.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/turtle/TurtleSide.java b/src/main/java/dan200/computercraft/api/turtle/TurtleSide.java index b66029452..416c632e1 100644 --- a/src/main/java/dan200/computercraft/api/turtle/TurtleSide.java +++ b/src/main/java/dan200/computercraft/api/turtle/TurtleSide.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeType.java b/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeType.java index 6958298c7..2a3b4ff4e 100644 --- a/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeType.java +++ b/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeType.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/turtle/TurtleVerb.java b/src/main/java/dan200/computercraft/api/turtle/TurtleVerb.java index 03c2c88c2..a6a5def33 100644 --- a/src/main/java/dan200/computercraft/api/turtle/TurtleVerb.java +++ b/src/main/java/dan200/computercraft/api/turtle/TurtleVerb.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/api/turtle/package-info.java b/src/main/java/dan200/computercraft/api/turtle/package-info.java index 178e7168f..808fad48a 100644 --- a/src/main/java/dan200/computercraft/api/turtle/package-info.java +++ b/src/main/java/dan200/computercraft/api/turtle/package-info.java @@ -1,6 +1,6 @@ /* * This file is part of the public ComputerCraft API - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. This API may be redistributed unmodified and in full only. + * Copyright Daniel Ratcliffe, 2011-2017. This API may be redistributed unmodified and in full only. * For help using the API, and posting your mods, visit the forums at computercraft.info. */ diff --git a/src/main/java/dan200/computercraft/client/gui/FixedWidthFontRenderer.java b/src/main/java/dan200/computercraft/client/gui/FixedWidthFontRenderer.java index 943acb090..c3aa06805 100644 --- a/src/main/java/dan200/computercraft/client/gui/FixedWidthFontRenderer.java +++ b/src/main/java/dan200/computercraft/client/gui/FixedWidthFontRenderer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/gui/GuiComputer.java b/src/main/java/dan200/computercraft/client/gui/GuiComputer.java index 33d8ea274..0e369c9b9 100644 --- a/src/main/java/dan200/computercraft/client/gui/GuiComputer.java +++ b/src/main/java/dan200/computercraft/client/gui/GuiComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/gui/GuiDiskDrive.java b/src/main/java/dan200/computercraft/client/gui/GuiDiskDrive.java index f2089553e..a73324d42 100644 --- a/src/main/java/dan200/computercraft/client/gui/GuiDiskDrive.java +++ b/src/main/java/dan200/computercraft/client/gui/GuiDiskDrive.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/gui/GuiPocketComputer.java b/src/main/java/dan200/computercraft/client/gui/GuiPocketComputer.java index 54cdb382c..4767c2847 100644 --- a/src/main/java/dan200/computercraft/client/gui/GuiPocketComputer.java +++ b/src/main/java/dan200/computercraft/client/gui/GuiPocketComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/gui/GuiPrinter.java b/src/main/java/dan200/computercraft/client/gui/GuiPrinter.java index db9d9a422..7f7347448 100644 --- a/src/main/java/dan200/computercraft/client/gui/GuiPrinter.java +++ b/src/main/java/dan200/computercraft/client/gui/GuiPrinter.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/gui/GuiPrintout.java b/src/main/java/dan200/computercraft/client/gui/GuiPrintout.java index af571ab6e..06d994150 100644 --- a/src/main/java/dan200/computercraft/client/gui/GuiPrintout.java +++ b/src/main/java/dan200/computercraft/client/gui/GuiPrintout.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/gui/GuiTurtle.java b/src/main/java/dan200/computercraft/client/gui/GuiTurtle.java index 77160bbad..77e1412c8 100644 --- a/src/main/java/dan200/computercraft/client/gui/GuiTurtle.java +++ b/src/main/java/dan200/computercraft/client/gui/GuiTurtle.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/gui/widgets/MousePos.java b/src/main/java/dan200/computercraft/client/gui/widgets/MousePos.java index 746c6cf7e..4994e7c3f 100644 --- a/src/main/java/dan200/computercraft/client/gui/widgets/MousePos.java +++ b/src/main/java/dan200/computercraft/client/gui/widgets/MousePos.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/gui/widgets/Widget.java b/src/main/java/dan200/computercraft/client/gui/widgets/Widget.java index 3c5a76cc1..f8f61fbe7 100644 --- a/src/main/java/dan200/computercraft/client/gui/widgets/Widget.java +++ b/src/main/java/dan200/computercraft/client/gui/widgets/Widget.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/gui/widgets/WidgetContainer.java b/src/main/java/dan200/computercraft/client/gui/widgets/WidgetContainer.java index 3995c534a..670f70317 100644 --- a/src/main/java/dan200/computercraft/client/gui/widgets/WidgetContainer.java +++ b/src/main/java/dan200/computercraft/client/gui/widgets/WidgetContainer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/gui/widgets/WidgetTerminal.java b/src/main/java/dan200/computercraft/client/gui/widgets/WidgetTerminal.java index 5fdb2b43b..22c67f541 100644 --- a/src/main/java/dan200/computercraft/client/gui/widgets/WidgetTerminal.java +++ b/src/main/java/dan200/computercraft/client/gui/widgets/WidgetTerminal.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java index 88c047527..acf37c6d2 100644 --- a/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java index 75bbe05fb..7adb8e3ff 100644 --- a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/render/TileEntityMonitorRenderer.java b/src/main/java/dan200/computercraft/client/render/TileEntityMonitorRenderer.java index 6af4bbf4d..11411664b 100644 --- a/src/main/java/dan200/computercraft/client/render/TileEntityMonitorRenderer.java +++ b/src/main/java/dan200/computercraft/client/render/TileEntityMonitorRenderer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/render/TileEntityTurtleRenderer.java b/src/main/java/dan200/computercraft/client/render/TileEntityTurtleRenderer.java index d6901c251..424f6328e 100644 --- a/src/main/java/dan200/computercraft/client/render/TileEntityTurtleRenderer.java +++ b/src/main/java/dan200/computercraft/client/render/TileEntityTurtleRenderer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/client/render/TurtleSmartItemModel.java b/src/main/java/dan200/computercraft/client/render/TurtleSmartItemModel.java index 017bfc91e..d4af067df 100644 --- a/src/main/java/dan200/computercraft/client/render/TurtleSmartItemModel.java +++ b/src/main/java/dan200/computercraft/client/render/TurtleSmartItemModel.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/apis/BitAPI.java b/src/main/java/dan200/computercraft/core/apis/BitAPI.java index bbf8148c2..682e3a3ec 100644 --- a/src/main/java/dan200/computercraft/core/apis/BitAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/BitAPI.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/apis/BufferAPI.java b/src/main/java/dan200/computercraft/core/apis/BufferAPI.java index e7cf9acb8..e03fdf212 100644 --- a/src/main/java/dan200/computercraft/core/apis/BufferAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/BufferAPI.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/apis/FSAPI.java b/src/main/java/dan200/computercraft/core/apis/FSAPI.java index bd0968bde..c758534ab 100644 --- a/src/main/java/dan200/computercraft/core/apis/FSAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/FSAPI.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/apis/HTTPAPI.java b/src/main/java/dan200/computercraft/core/apis/HTTPAPI.java index 768afd017..4b9c24331 100644 --- a/src/main/java/dan200/computercraft/core/apis/HTTPAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/HTTPAPI.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/apis/HTTPRequest.java b/src/main/java/dan200/computercraft/core/apis/HTTPRequest.java index b7f816ad7..d4d36dabd 100644 --- a/src/main/java/dan200/computercraft/core/apis/HTTPRequest.java +++ b/src/main/java/dan200/computercraft/core/apis/HTTPRequest.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/apis/IAPIEnvironment.java b/src/main/java/dan200/computercraft/core/apis/IAPIEnvironment.java index 49d1ac4d3..541e34ba8 100644 --- a/src/main/java/dan200/computercraft/core/apis/IAPIEnvironment.java +++ b/src/main/java/dan200/computercraft/core/apis/IAPIEnvironment.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/apis/ILuaAPI.java b/src/main/java/dan200/computercraft/core/apis/ILuaAPI.java index d1761cade..f8d491544 100644 --- a/src/main/java/dan200/computercraft/core/apis/ILuaAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/ILuaAPI.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/apis/OSAPI.java b/src/main/java/dan200/computercraft/core/apis/OSAPI.java index cdf349cfa..1c28b6b75 100644 --- a/src/main/java/dan200/computercraft/core/apis/OSAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/OSAPI.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java b/src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java index 64a39c801..3465ad5e0 100644 --- a/src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/apis/RedstoneAPI.java b/src/main/java/dan200/computercraft/core/apis/RedstoneAPI.java index adb68a2d1..dfc5576ff 100644 --- a/src/main/java/dan200/computercraft/core/apis/RedstoneAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/RedstoneAPI.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/apis/TermAPI.java b/src/main/java/dan200/computercraft/core/apis/TermAPI.java index 1d3f2ada6..a1deceb98 100644 --- a/src/main/java/dan200/computercraft/core/apis/TermAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/TermAPI.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/computer/Computer.java b/src/main/java/dan200/computercraft/core/computer/Computer.java index 9c84e71f2..712979521 100644 --- a/src/main/java/dan200/computercraft/core/computer/Computer.java +++ b/src/main/java/dan200/computercraft/core/computer/Computer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/computer/ComputerThread.java b/src/main/java/dan200/computercraft/core/computer/ComputerThread.java index 49d739c95..1915c5afb 100644 --- a/src/main/java/dan200/computercraft/core/computer/ComputerThread.java +++ b/src/main/java/dan200/computercraft/core/computer/ComputerThread.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/computer/IComputerEnvironment.java b/src/main/java/dan200/computercraft/core/computer/IComputerEnvironment.java index 2451ca140..54760f539 100644 --- a/src/main/java/dan200/computercraft/core/computer/IComputerEnvironment.java +++ b/src/main/java/dan200/computercraft/core/computer/IComputerEnvironment.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/computer/ITask.java b/src/main/java/dan200/computercraft/core/computer/ITask.java index 76dfcc17d..8e7e48c12 100644 --- a/src/main/java/dan200/computercraft/core/computer/ITask.java +++ b/src/main/java/dan200/computercraft/core/computer/ITask.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/computer/MainThread.java b/src/main/java/dan200/computercraft/core/computer/MainThread.java index 7868f150c..77ad950d8 100644 --- a/src/main/java/dan200/computercraft/core/computer/MainThread.java +++ b/src/main/java/dan200/computercraft/core/computer/MainThread.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/filesystem/ComboMount.java b/src/main/java/dan200/computercraft/core/filesystem/ComboMount.java index d80fd9c75..287ea53a6 100644 --- a/src/main/java/dan200/computercraft/core/filesystem/ComboMount.java +++ b/src/main/java/dan200/computercraft/core/filesystem/ComboMount.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/filesystem/EmptyMount.java b/src/main/java/dan200/computercraft/core/filesystem/EmptyMount.java index 1b5cd5664..c10d17fde 100644 --- a/src/main/java/dan200/computercraft/core/filesystem/EmptyMount.java +++ b/src/main/java/dan200/computercraft/core/filesystem/EmptyMount.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/filesystem/FileMount.java b/src/main/java/dan200/computercraft/core/filesystem/FileMount.java index 3852cb000..b201ff862 100644 --- a/src/main/java/dan200/computercraft/core/filesystem/FileMount.java +++ b/src/main/java/dan200/computercraft/core/filesystem/FileMount.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/filesystem/FileSystem.java b/src/main/java/dan200/computercraft/core/filesystem/FileSystem.java index 671047fc9..5b9e8693d 100644 --- a/src/main/java/dan200/computercraft/core/filesystem/FileSystem.java +++ b/src/main/java/dan200/computercraft/core/filesystem/FileSystem.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/filesystem/FileSystemException.java b/src/main/java/dan200/computercraft/core/filesystem/FileSystemException.java index 5f75b64f1..883f0da1a 100644 --- a/src/main/java/dan200/computercraft/core/filesystem/FileSystemException.java +++ b/src/main/java/dan200/computercraft/core/filesystem/FileSystemException.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/filesystem/IMountedFile.java b/src/main/java/dan200/computercraft/core/filesystem/IMountedFile.java index 1d01febc8..b04389eb2 100644 --- a/src/main/java/dan200/computercraft/core/filesystem/IMountedFile.java +++ b/src/main/java/dan200/computercraft/core/filesystem/IMountedFile.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/filesystem/IMountedFileBinary.java b/src/main/java/dan200/computercraft/core/filesystem/IMountedFileBinary.java index f6581e881..a028c9656 100644 --- a/src/main/java/dan200/computercraft/core/filesystem/IMountedFileBinary.java +++ b/src/main/java/dan200/computercraft/core/filesystem/IMountedFileBinary.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/filesystem/IMountedFileNormal.java b/src/main/java/dan200/computercraft/core/filesystem/IMountedFileNormal.java index c8b956b0d..0435bdaf9 100644 --- a/src/main/java/dan200/computercraft/core/filesystem/IMountedFileNormal.java +++ b/src/main/java/dan200/computercraft/core/filesystem/IMountedFileNormal.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/filesystem/JarMount.java b/src/main/java/dan200/computercraft/core/filesystem/JarMount.java index a7a77e03a..3bc4988e7 100644 --- a/src/main/java/dan200/computercraft/core/filesystem/JarMount.java +++ b/src/main/java/dan200/computercraft/core/filesystem/JarMount.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/filesystem/SubMount.java b/src/main/java/dan200/computercraft/core/filesystem/SubMount.java index 8da2836ea..16923a045 100644 --- a/src/main/java/dan200/computercraft/core/filesystem/SubMount.java +++ b/src/main/java/dan200/computercraft/core/filesystem/SubMount.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/lua/ILuaMachine.java b/src/main/java/dan200/computercraft/core/lua/ILuaMachine.java index 798884678..4ebba572b 100644 --- a/src/main/java/dan200/computercraft/core/lua/ILuaMachine.java +++ b/src/main/java/dan200/computercraft/core/lua/ILuaMachine.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java index ccc9d3d20..933ca3291 100644 --- a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java +++ b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/terminal/Terminal.java b/src/main/java/dan200/computercraft/core/terminal/Terminal.java index 9a6643534..c0ce17c6f 100644 --- a/src/main/java/dan200/computercraft/core/terminal/Terminal.java +++ b/src/main/java/dan200/computercraft/core/terminal/Terminal.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/core/terminal/TextBuffer.java b/src/main/java/dan200/computercraft/core/terminal/TextBuffer.java index 135bab194..7e0ec5fbc 100644 --- a/src/main/java/dan200/computercraft/core/terminal/TextBuffer.java +++ b/src/main/java/dan200/computercraft/core/terminal/TextBuffer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/server/proxy/CCTurtleProxyServer.java b/src/main/java/dan200/computercraft/server/proxy/CCTurtleProxyServer.java index caaf61400..7f24e99dc 100644 --- a/src/main/java/dan200/computercraft/server/proxy/CCTurtleProxyServer.java +++ b/src/main/java/dan200/computercraft/server/proxy/CCTurtleProxyServer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/server/proxy/ComputerCraftProxyServer.java b/src/main/java/dan200/computercraft/server/proxy/ComputerCraftProxyServer.java index d9b4c9f00..6605178e1 100644 --- a/src/main/java/dan200/computercraft/server/proxy/ComputerCraftProxyServer.java +++ b/src/main/java/dan200/computercraft/server/proxy/ComputerCraftProxyServer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/common/BlockDirectional.java b/src/main/java/dan200/computercraft/shared/common/BlockDirectional.java index 025115f22..e2830f7e4 100644 --- a/src/main/java/dan200/computercraft/shared/common/BlockDirectional.java +++ b/src/main/java/dan200/computercraft/shared/common/BlockDirectional.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/common/BlockGeneric.java b/src/main/java/dan200/computercraft/shared/common/BlockGeneric.java index d9d379151..dabbe3c81 100644 --- a/src/main/java/dan200/computercraft/shared/common/BlockGeneric.java +++ b/src/main/java/dan200/computercraft/shared/common/BlockGeneric.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/common/ClientTerminal.java b/src/main/java/dan200/computercraft/shared/common/ClientTerminal.java index b5c8a2a83..f4d049302 100644 --- a/src/main/java/dan200/computercraft/shared/common/ClientTerminal.java +++ b/src/main/java/dan200/computercraft/shared/common/ClientTerminal.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/common/DefaultBundledRedstoneProvider.java b/src/main/java/dan200/computercraft/shared/common/DefaultBundledRedstoneProvider.java index 1b433c204..feb2f6095 100644 --- a/src/main/java/dan200/computercraft/shared/common/DefaultBundledRedstoneProvider.java +++ b/src/main/java/dan200/computercraft/shared/common/DefaultBundledRedstoneProvider.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/common/IDirectionalTile.java b/src/main/java/dan200/computercraft/shared/common/IDirectionalTile.java index 1f5c18f7b..e0b1190af 100644 --- a/src/main/java/dan200/computercraft/shared/common/IDirectionalTile.java +++ b/src/main/java/dan200/computercraft/shared/common/IDirectionalTile.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/common/ITerminal.java b/src/main/java/dan200/computercraft/shared/common/ITerminal.java index e3b295146..ac3c05a6d 100644 --- a/src/main/java/dan200/computercraft/shared/common/ITerminal.java +++ b/src/main/java/dan200/computercraft/shared/common/ITerminal.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/common/ITerminalTile.java b/src/main/java/dan200/computercraft/shared/common/ITerminalTile.java index 47d3e16bb..2441ccf17 100644 --- a/src/main/java/dan200/computercraft/shared/common/ITerminalTile.java +++ b/src/main/java/dan200/computercraft/shared/common/ITerminalTile.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/common/ServerTerminal.java b/src/main/java/dan200/computercraft/shared/common/ServerTerminal.java index e4838bf3f..873e09813 100644 --- a/src/main/java/dan200/computercraft/shared/common/ServerTerminal.java +++ b/src/main/java/dan200/computercraft/shared/common/ServerTerminal.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/common/TileGeneric.java b/src/main/java/dan200/computercraft/shared/common/TileGeneric.java index 09fcef63e..7cdf3d43c 100644 --- a/src/main/java/dan200/computercraft/shared/common/TileGeneric.java +++ b/src/main/java/dan200/computercraft/shared/common/TileGeneric.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java index 692353b83..ce7f23e48 100644 --- a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java +++ b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/BlockCommandComputer.java b/src/main/java/dan200/computercraft/shared/computer/blocks/BlockCommandComputer.java index ab0aaf7ab..a6a19a2e9 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/BlockCommandComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/BlockCommandComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputer.java b/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputer.java index 9db8a672c..def190aab 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputerBase.java b/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputerBase.java index 93cd938c0..4f9123903 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputerBase.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputerBase.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/ComputerPeripheral.java b/src/main/java/dan200/computercraft/shared/computer/blocks/ComputerPeripheral.java index d2ef39602..27852ed60 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/ComputerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/ComputerPeripheral.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/ComputerState.java b/src/main/java/dan200/computercraft/shared/computer/blocks/ComputerState.java index 6683053cf..296d00a25 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/ComputerState.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/ComputerState.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/IComputerTile.java b/src/main/java/dan200/computercraft/shared/computer/blocks/IComputerTile.java index dc0917c8e..d40010099 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/IComputerTile.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/IComputerTile.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/TileCommandComputer.java b/src/main/java/dan200/computercraft/shared/computer/blocks/TileCommandComputer.java index 1c1e90fe0..a662cfd65 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/TileCommandComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/TileCommandComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java b/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java index acb1c7f0c..b645f719f 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputerBase.java b/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputerBase.java index 143d65df0..23cd74e95 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputerBase.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputerBase.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/core/ClientComputer.java b/src/main/java/dan200/computercraft/shared/computer/core/ClientComputer.java index eca8eadc9..a6be2ed25 100644 --- a/src/main/java/dan200/computercraft/shared/computer/core/ClientComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/core/ClientComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/core/ClientComputerRegistry.java b/src/main/java/dan200/computercraft/shared/computer/core/ClientComputerRegistry.java index c5bfd4c3b..85541f41d 100644 --- a/src/main/java/dan200/computercraft/shared/computer/core/ClientComputerRegistry.java +++ b/src/main/java/dan200/computercraft/shared/computer/core/ClientComputerRegistry.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/core/ComputerFamily.java b/src/main/java/dan200/computercraft/shared/computer/core/ComputerFamily.java index 7317ef02e..7627d0380 100644 --- a/src/main/java/dan200/computercraft/shared/computer/core/ComputerFamily.java +++ b/src/main/java/dan200/computercraft/shared/computer/core/ComputerFamily.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/core/ComputerRegistry.java b/src/main/java/dan200/computercraft/shared/computer/core/ComputerRegistry.java index 164e150b4..58e91c7a6 100644 --- a/src/main/java/dan200/computercraft/shared/computer/core/ComputerRegistry.java +++ b/src/main/java/dan200/computercraft/shared/computer/core/ComputerRegistry.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/core/IComputer.java b/src/main/java/dan200/computercraft/shared/computer/core/IComputer.java index fdcb5548d..05e4efc6c 100644 --- a/src/main/java/dan200/computercraft/shared/computer/core/IComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/core/IComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/core/IComputerContainer.java b/src/main/java/dan200/computercraft/shared/computer/core/IComputerContainer.java index 68c19bfbb..b2e236d1c 100644 --- a/src/main/java/dan200/computercraft/shared/computer/core/IComputerContainer.java +++ b/src/main/java/dan200/computercraft/shared/computer/core/IComputerContainer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/core/ServerComputer.java b/src/main/java/dan200/computercraft/shared/computer/core/ServerComputer.java index c1cf5312f..60a2d9772 100644 --- a/src/main/java/dan200/computercraft/shared/computer/core/ServerComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/core/ServerComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/core/ServerComputerRegistry.java b/src/main/java/dan200/computercraft/shared/computer/core/ServerComputerRegistry.java index 932b63352..e0ee7e690 100644 --- a/src/main/java/dan200/computercraft/shared/computer/core/ServerComputerRegistry.java +++ b/src/main/java/dan200/computercraft/shared/computer/core/ServerComputerRegistry.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputer.java b/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputer.java index bf3952aac..40fa5f9f6 100644 --- a/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/items/ComputerItemFactory.java b/src/main/java/dan200/computercraft/shared/computer/items/ComputerItemFactory.java index 27b23c3ea..12e9f9438 100644 --- a/src/main/java/dan200/computercraft/shared/computer/items/ComputerItemFactory.java +++ b/src/main/java/dan200/computercraft/shared/computer/items/ComputerItemFactory.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/items/IComputerItem.java b/src/main/java/dan200/computercraft/shared/computer/items/IComputerItem.java index c30e76012..6335e06cd 100644 --- a/src/main/java/dan200/computercraft/shared/computer/items/IComputerItem.java +++ b/src/main/java/dan200/computercraft/shared/computer/items/IComputerItem.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/items/ItemCommandComputer.java b/src/main/java/dan200/computercraft/shared/computer/items/ItemCommandComputer.java index 9acb74102..21cd28f14 100644 --- a/src/main/java/dan200/computercraft/shared/computer/items/ItemCommandComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/items/ItemCommandComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/items/ItemComputer.java b/src/main/java/dan200/computercraft/shared/computer/items/ItemComputer.java index 4c9650b3e..1e94103fb 100644 --- a/src/main/java/dan200/computercraft/shared/computer/items/ItemComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/items/ItemComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/computer/items/ItemComputerBase.java b/src/main/java/dan200/computercraft/shared/computer/items/ItemComputerBase.java index 4656a4a5d..aa2046279 100644 --- a/src/main/java/dan200/computercraft/shared/computer/items/ItemComputerBase.java +++ b/src/main/java/dan200/computercraft/shared/computer/items/ItemComputerBase.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/media/inventory/ContainerHeldItem.java b/src/main/java/dan200/computercraft/shared/media/inventory/ContainerHeldItem.java index a5d84b317..db617865e 100644 --- a/src/main/java/dan200/computercraft/shared/media/inventory/ContainerHeldItem.java +++ b/src/main/java/dan200/computercraft/shared/media/inventory/ContainerHeldItem.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/media/items/ItemDiskExpanded.java b/src/main/java/dan200/computercraft/shared/media/items/ItemDiskExpanded.java index c6624ad64..02df3b622 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/ItemDiskExpanded.java +++ b/src/main/java/dan200/computercraft/shared/media/items/ItemDiskExpanded.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/media/items/ItemDiskLegacy.java b/src/main/java/dan200/computercraft/shared/media/items/ItemDiskLegacy.java index 76d703f2f..6b5c3f0f5 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/ItemDiskLegacy.java +++ b/src/main/java/dan200/computercraft/shared/media/items/ItemDiskLegacy.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/media/items/ItemPrintout.java b/src/main/java/dan200/computercraft/shared/media/items/ItemPrintout.java index 0014dc2f1..482920422 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/ItemPrintout.java +++ b/src/main/java/dan200/computercraft/shared/media/items/ItemPrintout.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/media/items/ItemTreasureDisk.java b/src/main/java/dan200/computercraft/shared/media/items/ItemTreasureDisk.java index f7407f084..333c27bf4 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/ItemTreasureDisk.java +++ b/src/main/java/dan200/computercraft/shared/media/items/ItemTreasureDisk.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java b/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java index b01c1c458..a458bc6c1 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java +++ b/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java b/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java index 4c9a59468..6a9191fd7 100644 --- a/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java +++ b/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/media/recipes/PrintoutRecipe.java b/src/main/java/dan200/computercraft/shared/media/recipes/PrintoutRecipe.java index f3c703695..4f2f08c77 100644 --- a/src/main/java/dan200/computercraft/shared/media/recipes/PrintoutRecipe.java +++ b/src/main/java/dan200/computercraft/shared/media/recipes/PrintoutRecipe.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/network/ComputerCraftPacket.java b/src/main/java/dan200/computercraft/shared/network/ComputerCraftPacket.java index f20368895..a6ac9b709 100644 --- a/src/main/java/dan200/computercraft/shared/network/ComputerCraftPacket.java +++ b/src/main/java/dan200/computercraft/shared/network/ComputerCraftPacket.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/network/INetworkedThing.java b/src/main/java/dan200/computercraft/shared/network/INetworkedThing.java index 56e6f4f9f..9de56c0c3 100644 --- a/src/main/java/dan200/computercraft/shared/network/INetworkedThing.java +++ b/src/main/java/dan200/computercraft/shared/network/INetworkedThing.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/network/PacketHandler.java b/src/main/java/dan200/computercraft/shared/network/PacketHandler.java index ad64d6757..9db6d7717 100644 --- a/src/main/java/dan200/computercraft/shared/network/PacketHandler.java +++ b/src/main/java/dan200/computercraft/shared/network/PacketHandler.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/PeripheralType.java b/src/main/java/dan200/computercraft/shared/peripheral/PeripheralType.java index 455937f96..ed8510a7d 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/PeripheralType.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/PeripheralType.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/commandblock/CommandBlockPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/commandblock/CommandBlockPeripheral.java index 29b99708d..39960ded9 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/commandblock/CommandBlockPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/commandblock/CommandBlockPeripheral.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/commandblock/CommandBlockPeripheralProvider.java b/src/main/java/dan200/computercraft/shared/peripheral/commandblock/CommandBlockPeripheralProvider.java index 3800ceee1..d5e8999d6 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/commandblock/CommandBlockPeripheralProvider.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/commandblock/CommandBlockPeripheralProvider.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockCable.java b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockCable.java index bcedb4024..36c400b3d 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockCable.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockCable.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockCableModemVariant.java b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockCableModemVariant.java index f76ad2002..c49701348 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockCableModemVariant.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockCableModemVariant.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java index 9c31ab39f..9f6758758 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheralBase.java b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheralBase.java index 2da659042..39aa5089c 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheralBase.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheralBase.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheralVariant.java b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheralVariant.java index fc2b44efa..c98f90a5d 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheralVariant.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheralVariant.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/DefaultPeripheralProvider.java b/src/main/java/dan200/computercraft/shared/peripheral/common/DefaultPeripheralProvider.java index 5564b1ecd..d69a5ca55 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/DefaultPeripheralProvider.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/DefaultPeripheralProvider.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/IPeripheralItem.java b/src/main/java/dan200/computercraft/shared/peripheral/common/IPeripheralItem.java index cacbf304b..fbbe0b6f8 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/IPeripheralItem.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/IPeripheralItem.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/IPeripheralTile.java b/src/main/java/dan200/computercraft/shared/peripheral/common/IPeripheralTile.java index 5970845bf..6430c642b 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/IPeripheralTile.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/IPeripheralTile.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/ItemAdvancedModem.java b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemAdvancedModem.java index 623bbc9ad..a48bc0dfc 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/ItemAdvancedModem.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemAdvancedModem.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/ItemCable.java b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemCable.java index 68b07f958..d45e93564 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/ItemCable.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemCable.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheral.java index 024400abb..afcf44269 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheral.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheralBase.java b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheralBase.java index d5841e62e..a7e3b1189 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheralBase.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheralBase.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/PeripheralItemFactory.java b/src/main/java/dan200/computercraft/shared/peripheral/common/PeripheralItemFactory.java index d0fe8ffb3..739ae34ee 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/PeripheralItemFactory.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/PeripheralItemFactory.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/TilePeripheralBase.java b/src/main/java/dan200/computercraft/shared/peripheral/common/TilePeripheralBase.java index 1a33d54c0..edd38a31c 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/TilePeripheralBase.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/TilePeripheralBase.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/ContainerDiskDrive.java b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/ContainerDiskDrive.java index 115325889..119b90f69 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/ContainerDiskDrive.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/ContainerDiskDrive.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/DiskDrivePeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/DiskDrivePeripheral.java index 92a813f3d..d2854b88b 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/DiskDrivePeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/DiskDrivePeripheral.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ 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 7bad34116..fbcf140d1 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/TileDiskDrive.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/TileDiskDrive.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/BlockAdvancedModem.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/BlockAdvancedModem.java index 4482e5ce2..100caf7e1 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/BlockAdvancedModem.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/BlockAdvancedModem.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/INetwork.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/INetwork.java index 976037517..133324d3e 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/INetwork.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/INetwork.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/IReceiver.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/IReceiver.java index 1de273ee0..0849ab6d3 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/IReceiver.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/IReceiver.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/ModemPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/ModemPeripheral.java index f3033e5f8..ebef94f8c 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/ModemPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/ModemPeripheral.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/TileAdvancedModem.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/TileAdvancedModem.java index bf2eb5613..5529b5896 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/TileAdvancedModem.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/TileAdvancedModem.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/TileCable.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/TileCable.java index 19d3bba12..9a6c57e5d 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/TileCable.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/TileCable.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/TileModemBase.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/TileModemBase.java index a865f383a..4cdc4b163 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/TileModemBase.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/TileModemBase.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/TileWirelessModem.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/TileWirelessModem.java index e20c0f228..0acefa378 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/TileWirelessModem.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/TileWirelessModem.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/WirelessModemPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/WirelessModemPeripheral.java index ac61fa6d8..81d45c773 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/WirelessModemPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/WirelessModemPeripheral.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/WirelessNetwork.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/WirelessNetwork.java index 95417a8e0..6f420bc25 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/WirelessNetwork.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/WirelessNetwork.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/monitor/MonitorPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/monitor/MonitorPeripheral.java index 1fec5c424..98d64c915 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/monitor/MonitorPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/monitor/MonitorPeripheral.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/monitor/TileMonitor.java b/src/main/java/dan200/computercraft/shared/peripheral/monitor/TileMonitor.java index 6f228da88..19ab13cd0 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/monitor/TileMonitor.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/monitor/TileMonitor.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/printer/ContainerPrinter.java b/src/main/java/dan200/computercraft/shared/peripheral/printer/ContainerPrinter.java index c64f5abdb..486355c6b 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/printer/ContainerPrinter.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/printer/ContainerPrinter.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/peripheral/printer/PrinterPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/printer/PrinterPeripheral.java index c258018a1..8269e205a 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/printer/PrinterPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/printer/PrinterPeripheral.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ 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 f54d07425..82ffeff4e 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/printer/TilePrinter.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/printer/TilePrinter.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/pocket/apis/PocketAPI.java b/src/main/java/dan200/computercraft/shared/pocket/apis/PocketAPI.java index 6b8576db0..eda64b20e 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/apis/PocketAPI.java +++ b/src/main/java/dan200/computercraft/shared/pocket/apis/PocketAPI.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java index 29afeebaf..55d9a3982 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java +++ b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItemFactory.java b/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItemFactory.java index 1f7424b14..80e7ca2c5 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItemFactory.java +++ b/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItemFactory.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketModemPeripheral.java b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketModemPeripheral.java index 69f100edc..6a6483da0 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketModemPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketModemPeripheral.java @@ -7,7 +7,7 @@ import net.minecraft.world.World; /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java b/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java index 5f2faa764..0f6eb0370 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java +++ b/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java index 06f5c272f..3da255bd9 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java index b3a780c0e..4b8043287 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/proxy/ICCTurtleProxy.java b/src/main/java/dan200/computercraft/shared/proxy/ICCTurtleProxy.java index af0b1edf8..aabb108bd 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ICCTurtleProxy.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ICCTurtleProxy.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/proxy/IComputerCraftProxy.java b/src/main/java/dan200/computercraft/shared/proxy/IComputerCraftProxy.java index fc07c2e01..49755f8fe 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/IComputerCraftProxy.java +++ b/src/main/java/dan200/computercraft/shared/proxy/IComputerCraftProxy.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/apis/TurtleAPI.java b/src/main/java/dan200/computercraft/shared/turtle/apis/TurtleAPI.java index 0af561f25..70b7aefd4 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/apis/TurtleAPI.java +++ b/src/main/java/dan200/computercraft/shared/turtle/apis/TurtleAPI.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/blocks/BlockTurtle.java b/src/main/java/dan200/computercraft/shared/turtle/blocks/BlockTurtle.java index ac1a68cb9..7e274f11c 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/blocks/BlockTurtle.java +++ b/src/main/java/dan200/computercraft/shared/turtle/blocks/BlockTurtle.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/blocks/ITurtleTile.java b/src/main/java/dan200/computercraft/shared/turtle/blocks/ITurtleTile.java index e3add1579..00e96f398 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/blocks/ITurtleTile.java +++ b/src/main/java/dan200/computercraft/shared/turtle/blocks/ITurtleTile.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ 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 09c80c0b9..6dfe23503 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java +++ b/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtleAdvanced.java b/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtleAdvanced.java index 9fba1cdbd..e5245a6c1 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtleAdvanced.java +++ b/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtleAdvanced.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtleExpanded.java b/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtleExpanded.java index 0a83052f4..442f60675 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtleExpanded.java +++ b/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtleExpanded.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/InteractDirection.java b/src/main/java/dan200/computercraft/shared/turtle/core/InteractDirection.java index da7b21363..71297e2d9 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/InteractDirection.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/InteractDirection.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/MoveDirection.java b/src/main/java/dan200/computercraft/shared/turtle/core/MoveDirection.java index aaf6a1601..9ff1d48ee 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/MoveDirection.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/MoveDirection.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurnDirection.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurnDirection.java index edf8e4b6b..2e53a8a5e 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurnDirection.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurnDirection.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleAttackCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleAttackCommand.java index 94e0329eb..d33bb691e 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleAttackCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleAttackCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java index 594a51cc3..7b859fa7c 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCheckRedstoneCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCheckRedstoneCommand.java index c864f4307..782805035 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCheckRedstoneCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCheckRedstoneCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCommandQueueEntry.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCommandQueueEntry.java index 35ece2f6b..c8702189b 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCommandQueueEntry.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCommandQueueEntry.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java index ef7309697..f075a8354 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareToCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareToCommand.java index fe93a0db4..667f2d634 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareToCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareToCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCraftCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCraftCommand.java index d358db525..fabfa509e 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCraftCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCraftCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDetectCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDetectCommand.java index ac4eaae2a..913c8fb10 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDetectCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDetectCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDigCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDigCommand.java index 84328310d..df4c73922 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDigCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDigCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDropCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDropCommand.java index 892d522c1..8d730f5cf 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDropCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleDropCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleEquipCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleEquipCommand.java index 966b24c56..4f0a8884b 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleEquipCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleEquipCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleInspectCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleInspectCommand.java index 5320b3f5c..903d6c8f7 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleInspectCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleInspectCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleMoveCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleMoveCommand.java index fd68a8818..9c9b9d807 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleMoveCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleMoveCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlaceCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlaceCommand.java index 4d02774d1..3e6070770 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlaceCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlaceCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java index 25fb5b7a1..85f019f3b 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleRefuelCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleRefuelCommand.java index 0ade611a2..9e4a19c14 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleRefuelCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleRefuelCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSelectCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSelectCommand.java index 6fec07da7..1ba602c76 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSelectCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSelectCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSetRedstoneCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSetRedstoneCommand.java index 310ddef80..98a16039f 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSetRedstoneCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSetRedstoneCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSuckCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSuckCommand.java index 2d5271647..6a3c37d07 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSuckCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleSuckCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleToolCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleToolCommand.java index 832bbc3dc..aef0220a8 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleToolCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleToolCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleTransferToCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleTransferToCommand.java index 37bf17ee1..464fc6bc9 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleTransferToCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleTransferToCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleTurnCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleTurnCommand.java index 2618b0753..5b253d7d0 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleTurnCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleTurnCommand.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/entity/TurtleVisionCamera.java b/src/main/java/dan200/computercraft/shared/turtle/entity/TurtleVisionCamera.java index 31bae6bff..b587fe5d0 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/entity/TurtleVisionCamera.java +++ b/src/main/java/dan200/computercraft/shared/turtle/entity/TurtleVisionCamera.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/inventory/ContainerTurtle.java b/src/main/java/dan200/computercraft/shared/turtle/inventory/ContainerTurtle.java index 99a20c0f1..beda1b31a 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/inventory/ContainerTurtle.java +++ b/src/main/java/dan200/computercraft/shared/turtle/inventory/ContainerTurtle.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/ITurtleItem.java b/src/main/java/dan200/computercraft/shared/turtle/items/ITurtleItem.java index 2565cb717..ace66cecc 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/ITurtleItem.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/ITurtleItem.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleAdvanced.java b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleAdvanced.java index d0247a013..4b4c18bd0 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleAdvanced.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleAdvanced.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleBase.java b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleBase.java index a8aa9d1a1..9a0cbc0da 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleBase.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleBase.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleLegacy.java b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleLegacy.java index c514a9e24..aa389b524 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleLegacy.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleLegacy.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleNormal.java b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleNormal.java index 4496b4046..c08a00810 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleNormal.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleNormal.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItemFactory.java b/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItemFactory.java index 2a72a1685..85064dc15 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItemFactory.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItemFactory.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleRecipe.java b/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleRecipe.java index cba296587..4d1209f1b 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleRecipe.java +++ b/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleRecipe.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleUpgradeRecipe.java b/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleUpgradeRecipe.java index f49054585..f41c777cf 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleUpgradeRecipe.java +++ b/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleUpgradeRecipe.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/CraftingTablePeripheral.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/CraftingTablePeripheral.java index 69bf92302..6ef5dbb9b 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/CraftingTablePeripheral.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/CraftingTablePeripheral.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleAxe.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleAxe.java index e0abeb674..8a90ebaa5 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleAxe.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleAxe.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleCraftingTable.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleCraftingTable.java index 25f08a10b..4438ed0db 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleCraftingTable.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleCraftingTable.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleHoe.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleHoe.java index 4bf30bb97..9acd6545d 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleHoe.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleHoe.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleInventoryCrafting.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleInventoryCrafting.java index 7d94267e2..a829046ae 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleInventoryCrafting.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleInventoryCrafting.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleModem.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleModem.java index ff0ad8251..0b3d2f932 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleModem.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleModem.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleShovel.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleShovel.java index 551420713..d74a1fbdb 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleShovel.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleShovel.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSword.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSword.java index 6eef57226..8164fedab 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSword.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSword.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleTool.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleTool.java index 787a8532a..e448b04d0 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleTool.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleTool.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/Colour.java b/src/main/java/dan200/computercraft/shared/util/Colour.java index fe43bc915..d72dcabae 100644 --- a/src/main/java/dan200/computercraft/shared/util/Colour.java +++ b/src/main/java/dan200/computercraft/shared/util/Colour.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/CreativeTabMain.java b/src/main/java/dan200/computercraft/shared/util/CreativeTabMain.java index 2ec9fcd7b..7328b0506 100644 --- a/src/main/java/dan200/computercraft/shared/util/CreativeTabMain.java +++ b/src/main/java/dan200/computercraft/shared/util/CreativeTabMain.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/CreativeTabTreasure.java b/src/main/java/dan200/computercraft/shared/util/CreativeTabTreasure.java index f30197f6e..3396594a9 100644 --- a/src/main/java/dan200/computercraft/shared/util/CreativeTabTreasure.java +++ b/src/main/java/dan200/computercraft/shared/util/CreativeTabTreasure.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/DirectionUtil.java b/src/main/java/dan200/computercraft/shared/util/DirectionUtil.java index cf727a1ab..1acc2d17a 100644 --- a/src/main/java/dan200/computercraft/shared/util/DirectionUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/DirectionUtil.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/Holiday.java b/src/main/java/dan200/computercraft/shared/util/Holiday.java index 83ee42566..25a56a507 100644 --- a/src/main/java/dan200/computercraft/shared/util/Holiday.java +++ b/src/main/java/dan200/computercraft/shared/util/Holiday.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/HolidayUtil.java b/src/main/java/dan200/computercraft/shared/util/HolidayUtil.java index 376cf9e73..b62acfb61 100644 --- a/src/main/java/dan200/computercraft/shared/util/HolidayUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/HolidayUtil.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/IEntityDropConsumer.java b/src/main/java/dan200/computercraft/shared/util/IEntityDropConsumer.java index aed7ae3f5..3d02c002b 100644 --- a/src/main/java/dan200/computercraft/shared/util/IEntityDropConsumer.java +++ b/src/main/java/dan200/computercraft/shared/util/IEntityDropConsumer.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/ImpostorRecipe.java b/src/main/java/dan200/computercraft/shared/util/ImpostorRecipe.java index 20aef655a..654c082b1 100644 --- a/src/main/java/dan200/computercraft/shared/util/ImpostorRecipe.java +++ b/src/main/java/dan200/computercraft/shared/util/ImpostorRecipe.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/ImpostorShapelessRecipe.java b/src/main/java/dan200/computercraft/shared/util/ImpostorShapelessRecipe.java index ed8df7993..16274f92e 100644 --- a/src/main/java/dan200/computercraft/shared/util/ImpostorShapelessRecipe.java +++ b/src/main/java/dan200/computercraft/shared/util/ImpostorShapelessRecipe.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java b/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java index 5e37ef95c..4c6f1915e 100644 --- a/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/NBTUtil.java b/src/main/java/dan200/computercraft/shared/util/NBTUtil.java index 9ef46a315..14f65f61c 100644 --- a/src/main/java/dan200/computercraft/shared/util/NBTUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/NBTUtil.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/RedstoneUtil.java b/src/main/java/dan200/computercraft/shared/util/RedstoneUtil.java index 85129cc8d..470fcbda7 100644 --- a/src/main/java/dan200/computercraft/shared/util/RedstoneUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/RedstoneUtil.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/ReflectionUtil.java b/src/main/java/dan200/computercraft/shared/util/ReflectionUtil.java index ef7cd7071..826c8e7c8 100644 --- a/src/main/java/dan200/computercraft/shared/util/ReflectionUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/ReflectionUtil.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ diff --git a/src/main/java/dan200/computercraft/shared/util/WorldUtil.java b/src/main/java/dan200/computercraft/shared/util/WorldUtil.java index 096f8f32a..9834d44f5 100644 --- a/src/main/java/dan200/computercraft/shared/util/WorldUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/WorldUtil.java @@ -1,6 +1,6 @@ /* * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ From 6ccffe9742b7891598860475206fcb8caecdaa75 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Fri, 12 May 2017 22:49:44 +0100 Subject: [PATCH 06/42] Refactor the filesystem and HTTP code - Move the encoding/decoding from the Filesystem implementation to the individual handles. - Move each handle into an core.apis.handles package from the main fs API. - Move the HTTP response to inherit from these handles. - Allow binary handles' read function to accept a number, specifying how many characters to read - these will be returned as a Lua string. - Add readAll to binary handles - Allow binary handles' write function to accept a string which is decoded into the individual bytes. - Add "binary" argument to http.request and friends in order to return a binary handle. - Ensure file handles are open when reading from/writing to them. - Return the error message when opening a file fails. --- .../dan200/computercraft/core/apis/FSAPI.java | 318 +----------------- .../computercraft/core/apis/HTTPAPI.java | 108 +++--- .../computercraft/core/apis/HTTPRequest.java | 80 ++--- .../core/apis/handles/BinaryInputHandle.java | 93 +++++ .../core/apis/handles/BinaryOutputHandle.java | 82 +++++ .../core/apis/handles/EncodedInputHandle.java | 105 ++++++ .../apis/handles/EncodedOutputHandle.java | 124 +++++++ .../core/apis/handles/HandleGeneric.java | 35 ++ .../core/filesystem/FileSystem.java | 210 +++--------- .../core/filesystem/IMountedFile.java | 13 - .../core/filesystem/IMountedFileBinary.java | 16 - .../core/filesystem/IMountedFileNormal.java | 16 - .../core/lua/LuaJLuaMachine.java | 6 + .../computercraft/shared/util/StringUtil.java | 13 + .../assets/computercraft/lua/bios.lua | 16 +- 15 files changed, 593 insertions(+), 642 deletions(-) create mode 100644 src/main/java/dan200/computercraft/core/apis/handles/BinaryInputHandle.java create mode 100644 src/main/java/dan200/computercraft/core/apis/handles/BinaryOutputHandle.java create mode 100644 src/main/java/dan200/computercraft/core/apis/handles/EncodedInputHandle.java create mode 100644 src/main/java/dan200/computercraft/core/apis/handles/EncodedOutputHandle.java create mode 100644 src/main/java/dan200/computercraft/core/apis/handles/HandleGeneric.java delete mode 100644 src/main/java/dan200/computercraft/core/filesystem/IMountedFile.java delete mode 100644 src/main/java/dan200/computercraft/core/filesystem/IMountedFileBinary.java delete mode 100644 src/main/java/dan200/computercraft/core/filesystem/IMountedFileNormal.java diff --git a/src/main/java/dan200/computercraft/core/apis/FSAPI.java b/src/main/java/dan200/computercraft/core/apis/FSAPI.java index 9ba39144a..d4d38a1d9 100644 --- a/src/main/java/dan200/computercraft/core/apis/FSAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/FSAPI.java @@ -7,15 +7,17 @@ package dan200.computercraft.core.apis; import dan200.computercraft.api.lua.ILuaContext; -import dan200.computercraft.api.lua.ILuaObject; import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.core.apis.handles.BinaryInputHandle; +import dan200.computercraft.core.apis.handles.BinaryOutputHandle; +import dan200.computercraft.core.apis.handles.EncodedInputHandle; +import dan200.computercraft.core.apis.handles.EncodedOutputHandle; import dan200.computercraft.core.filesystem.FileSystem; import dan200.computercraft.core.filesystem.FileSystemException; -import dan200.computercraft.core.filesystem.IMountedFileBinary; -import dan200.computercraft.core.filesystem.IMountedFileNormal; import javax.annotation.Nonnull; -import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.HashMap; import java.util.Map; @@ -259,33 +261,33 @@ public class FSAPI implements ILuaAPI try { if( mode.equals( "r" ) ) { // Open the file for reading, then create a wrapper around the reader - IMountedFileNormal reader = m_fileSystem.openForRead( path ); - return wrapBufferedReader( reader ); + InputStream reader = m_fileSystem.openForRead( path ); + return new Object[] { new EncodedInputHandle( reader ) }; } else if( mode.equals( "w" ) ) { // Open the file for writing, then create a wrapper around the writer - IMountedFileNormal writer = m_fileSystem.openForWrite( path, false ); - return wrapBufferedWriter( writer ); + OutputStream writer = m_fileSystem.openForWrite( path, false ); + return new Object[] { new EncodedOutputHandle( writer ) }; } else if( mode.equals( "a" ) ) { // Open the file for appending, then create a wrapper around the writer - IMountedFileNormal writer = m_fileSystem.openForWrite( path, true ); - return wrapBufferedWriter( writer ); + OutputStream writer = m_fileSystem.openForWrite( path, true ); + return new Object[] { new EncodedOutputHandle( writer ) }; } else if( mode.equals( "rb" ) ) { // Open the file for binary reading, then create a wrapper around the reader - IMountedFileBinary reader = m_fileSystem.openForBinaryRead( path ); - return wrapInputStream( reader ); + InputStream reader = m_fileSystem.openForRead( path ); + return new Object[] { new BinaryInputHandle( reader ) }; } else if( mode.equals( "wb" ) ) { // Open the file for binary writing, then create a wrapper around the writer - IMountedFileBinary writer = m_fileSystem.openForBinaryWrite( path, false ); - return wrapOutputStream( writer ); + OutputStream writer = m_fileSystem.openForWrite( path, false ); + return new Object[] { new BinaryOutputHandle( writer ) }; } else if( mode.equals( "ab" ) ) { // Open the file for binary appending, then create a wrapper around the reader - IMountedFileBinary writer = m_fileSystem.openForBinaryWrite( path, true ); - return wrapOutputStream( writer ); + OutputStream writer = m_fileSystem.openForWrite( path, true ); + return new Object[] { new BinaryOutputHandle( writer ) }; } else { throw new LuaException( "Unsupported mode" ); @@ -368,288 +370,4 @@ public class FSAPI implements ILuaAPI } } } - - private static Object[] wrapBufferedReader( final IMountedFileNormal reader ) - { - return new Object[] { new ILuaObject() { - private boolean open = true; - - @Nonnull - @Override - public String[] getMethodNames() - { - return new String[] { - "readLine", - "readAll", - "close" - }; - } - - @Override - public Object[] callMethod( @Nonnull ILuaContext context, int method, @Nonnull Object[] args ) throws LuaException - { - switch( method ) - { - case 0: - { - // readLine - if( !open ) throw new LuaException( "attempt to use a closed file" ); - try { - String line = reader.readLine(); - if( line != null ) { - return new Object[] { line }; - } else { - return null; - } - } catch( IOException e ) { - return null; - } - } - case 1: - { - // readAll - if( !open ) throw new LuaException( "attempt to use a closed file" ); - try { - StringBuilder result = new StringBuilder( "" ); - String line = reader.readLine(); - while( line != null ) { - result.append( line ); - line = reader.readLine(); - if( line != null ) { - result.append( "\n" ); - } - } - return new Object[] { result.toString() }; - } catch( IOException e ) { - return null; - } - } - case 2: - { - // close - try { - reader.close(); - open = false; - return null; - } catch( IOException e ) { - return null; - } - } - default: - { - return null; - } - } - } - } }; - } - - private static Object[] wrapBufferedWriter( final IMountedFileNormal writer ) - { - return new Object[] { new ILuaObject() { - private boolean open = true; - - @Nonnull - @Override - public String[] getMethodNames() - { - return new String[] { - "write", - "writeLine", - "close", - "flush" - }; - } - - @Override - public Object[] callMethod( @Nonnull ILuaContext context, int method, @Nonnull Object[] args ) throws LuaException - { - switch( method ) - { - case 0: - { - // write - if( !open ) throw new LuaException( "attempt to use a closed file" ); - String text; - if( args.length > 0 && args[0] != null ) { - text = args[0].toString(); - } else { - text = ""; - } - try { - writer.write( text, 0, text.length(), false ); - return null; - } catch( IOException e ) { - throw new LuaException( e.getMessage() ); - } - } - case 1: - { - // writeLine - if( !open ) throw new LuaException( "attempt to use a closed file" ); - - String text; - if( args.length > 0 && args[0] != null ) { - text = args[0].toString(); - } else { - text = ""; - } - try { - writer.write( text, 0, text.length(), true ); - return null; - } catch( IOException e ) { - throw new LuaException( e.getMessage() ); - } - } - case 2: - { - // close - try { - writer.close(); - open = false; - return null; - } catch( IOException e ) { - return null; - } - } - case 3: - { - try { - if( !open ) throw new LuaException( "attempt to use a closed file" ); - writer.flush(); - return null; - } catch ( IOException e ) { - return null; - } - } - default: - { - assert( false ); - return null; - } - } - } - } }; - } - - private static Object[] wrapInputStream( final IMountedFileBinary reader ) - { - - return new Object[] { new ILuaObject() { - private boolean open = true; - - @Nonnull - @Override - public String[] getMethodNames() { - return new String[] { - "read", - "close" - }; - } - - @Override - public Object[] callMethod( @Nonnull ILuaContext context, int method, @Nonnull Object[] args) throws LuaException { - switch( method ) - { - case 0: - { - // read - if( !open ) throw new LuaException( "attempt to use a closed file" ); - try { - int b = reader.read(); - if( b != -1 ) { - return new Object[] { b }; - } else { - return null; - } - } catch( IOException e ) { - return null; - } - } - case 1: - { - //close - try { - reader.close(); - open = false; - return null; - } catch( IOException e ) { - return null; - } - } - default: - { - assert( false ); - return null; - } - } - } - }}; - } - - private static Object[] wrapOutputStream( final IMountedFileBinary writer ) - { - - return new Object[] { new ILuaObject() { - private boolean open = true; - - @Nonnull - @Override - public String[] getMethodNames() { - return new String[] { - "write", - "close", - "flush" - }; - } - - @Override - public Object[] callMethod( @Nonnull ILuaContext context, int method, @Nonnull Object[] args) throws LuaException { - switch( method ) - { - case 0: - { - // write - if( !open ) throw new LuaException( "attempt to use a closed file" ); - try { - if( args.length > 0 && args[0] instanceof Number ) - { - int number = ((Number)args[0]).intValue(); - writer.write( number ); - } - return null; - } catch( IOException e ) { - throw new LuaException(e.getMessage()); - } - } - case 1: - { - //close - try { - writer.close(); - open = false; - return null; - } catch( IOException e ) { - return null; - } - } - case 2: - { - if( !open ) throw new LuaException( "attempt to use a closed file" ); - try { - writer.flush(); - return null; - } catch ( IOException e ) { - return null; - } - } - default: - { - assert( false ); - return null; - } - } - } - }}; - } } diff --git a/src/main/java/dan200/computercraft/core/apis/HTTPAPI.java b/src/main/java/dan200/computercraft/core/apis/HTTPAPI.java index ccb4da866..71b6119f1 100644 --- a/src/main/java/dan200/computercraft/core/apis/HTTPAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/HTTPAPI.java @@ -9,10 +9,11 @@ package dan200.computercraft.core.apis; import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.ILuaObject; import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.core.apis.handles.BinaryInputHandle; +import dan200.computercraft.core.apis.handles.EncodedInputHandle; import javax.annotation.Nonnull; -import java.io.BufferedReader; -import java.io.IOException; +import java.io.InputStream; import java.util.*; public class HTTPAPI implements ILuaAPI @@ -52,15 +53,21 @@ public class HTTPAPI implements ILuaAPI final String url = h.getURL(); if( h.wasSuccessful() ) { // Queue the "http_success" event - final BufferedReader contents = h.getContents(); - final Object result = wrapBufferedReader( contents, h.getResponseCode(), h.getResponseHeaders() ); + InputStream contents = h.getContents(); + Object result = wrapStream( + h.isBinary() ? new BinaryInputHandle( contents ) : new EncodedInputHandle( contents, h.getEncoding() ), + h.getResponseCode(), h.getResponseHeaders() + ); m_apiEnvironment.queueEvent( "http_success", new Object[] { url, result } ); } else { // Queue the "http_failure" event - BufferedReader contents = h.getContents(); + InputStream contents = h.getContents(); Object result = null; if( contents != null ) { - result = wrapBufferedReader( contents, h.getResponseCode(), h.getResponseHeaders() ); + result = wrapStream( + h.isBinary() ? new BinaryInputHandle( contents ) : new EncodedInputHandle( contents, h.getEncoding() ), + h.getResponseCode(), h.getResponseHeaders() + ); } m_apiEnvironment.queueEvent( "http_failure", new Object[]{ url, "Could not connect", result } ); } @@ -69,80 +76,40 @@ public class HTTPAPI implements ILuaAPI } } } - - private static ILuaObject wrapBufferedReader( final BufferedReader reader, final int responseCode, final Map responseHeaders ) + + private static ILuaObject wrapStream( final ILuaObject reader, final int responseCode, final Map responseHeaders ) { - return new ILuaObject() { - private boolean open = true; + String[] oldMethods = reader.getMethodNames(); + final int methodOffset = oldMethods.length; + + final String[] newMethods = Arrays.copyOf( oldMethods, oldMethods.length + 2 ); + newMethods[ methodOffset + 0 ] = "getResponseCode"; + newMethods[ methodOffset + 1 ] = "getResponseHeaders"; + + return new ILuaObject() + { @Nonnull @Override public String[] getMethodNames() { - return new String[] { - "readLine", - "readAll", - "close", - "getResponseCode", - "getResponseHeaders", - }; + return newMethods; } - + @Override - public Object[] callMethod( @Nonnull ILuaContext context, int method, @Nonnull Object[] args ) throws LuaException + public Object[] callMethod( @Nonnull ILuaContext context, int method, @Nonnull Object[] args ) throws LuaException, InterruptedException { - switch( method ) + if( method < methodOffset ) + { + return reader.callMethod( context, method, args ); + } + switch( method - methodOffset ) { case 0: - { - // readLine - if( !open ) throw new LuaException( "attempt to use a closed response" ); - try { - String line = reader.readLine(); - if( line != null ) { - return new Object[] { line }; - } else { - return null; - } - } catch( IOException e ) { - return null; - } - } - case 1: - { - // readAll - if( !open ) throw new LuaException( "attempt to use a closed response" ); - try { - StringBuilder result = new StringBuilder( "" ); - String line = reader.readLine(); - while( line != null ) { - result.append( line ); - line = reader.readLine(); - if( line != null ) { - result.append( "\n" ); - } - } - return new Object[] { result.toString() }; - } catch( IOException e ) { - return null; - } - } - case 2: - { - // close - try { - reader.close(); - open = false; - return null; - } catch( IOException e ) { - return null; - } - } - case 3: { // getResponseCode return new Object[] { responseCode }; } - case 4: + case 1: { // getResponseHeaders return new Object[] { responseHeaders }; @@ -216,11 +183,18 @@ public class HTTPAPI implements ILuaAPI } } } + + // Get binary + boolean binary = false; + if( args.length >= 4 ) + { + binary = args[ 3 ] != null && !args[ 3 ].equals( Boolean.FALSE ); + } // Make the request try { - HTTPRequest request = new HTTPRequest( urlString, postString, headers ); + HTTPRequest request = new HTTPRequest( urlString, postString, headers, binary ); synchronized( m_httpRequests ) { m_httpRequests.add( request ); diff --git a/src/main/java/dan200/computercraft/core/apis/HTTPRequest.java b/src/main/java/dan200/computercraft/core/apis/HTTPRequest.java index d4d36dabd..9a7182b63 100644 --- a/src/main/java/dan200/computercraft/core/apis/HTTPRequest.java +++ b/src/main/java/dan200/computercraft/core/apis/HTTPRequest.java @@ -7,6 +7,7 @@ package dan200.computercraft.core.apis; import com.google.common.base.Joiner; +import com.google.common.io.ByteStreams; import dan200.computercraft.ComputerCraft; import java.io.*; @@ -60,11 +61,12 @@ public class HTTPRequest return url; } - public HTTPRequest( String url, final String postText, final Map headers ) throws HTTPRequestException + public HTTPRequest( String url, final String postText, final Map headers, boolean binary ) throws HTTPRequestException { // Parse the URL m_urlString = url; m_url = checkURL( m_urlString ); + m_binary = binary; // Start the thread m_cancelled = false; @@ -136,54 +138,10 @@ public class HTTPRequest is = connection.getErrorStream(); responseSuccess = false; } - InputStreamReader isr; - try - { - String contentEncoding = connection.getContentEncoding(); - if( contentEncoding != null ) - { - try - { - isr = new InputStreamReader( is, contentEncoding ); - } - catch( UnsupportedEncodingException e ) - { - isr = new InputStreamReader( is, "UTF-8" ); - } - } - else - { - isr = new InputStreamReader( is, "UTF-8" ); - } - } - catch( UnsupportedEncodingException e ) - { - isr = new InputStreamReader( is ); - } - - // Download the contents - BufferedReader reader = new BufferedReader( isr ); - StringBuilder result = new StringBuilder(); - while( true ) - { - synchronized( m_lock ) - { - if( m_cancelled ) - { - break; - } - } - - String line = reader.readLine(); - if( line == null ) - { - break; - } - result.append( line ); - result.append( '\n' ); - } - reader.close(); - + + byte[] result = ByteStreams.toByteArray( is ); + is.close(); + synchronized( m_lock ) { if( m_cancelled ) @@ -198,8 +156,9 @@ public class HTTPRequest // We completed m_complete = true; m_success = responseSuccess; - m_result = result.toString(); + m_result = result; m_responseCode = connection.getResponseCode(); + m_encoding = connection.getContentEncoding(); Joiner joiner = Joiner.on( ',' ); Map headers = m_responseHeaders = new HashMap(); @@ -264,20 +223,29 @@ public class HTTPRequest return m_success; } } - - public BufferedReader getContents() + + public boolean isBinary() { - String result; + return m_binary; + } + + public InputStream getContents() + { + byte[] result; synchronized(m_lock) { result = m_result; } if( result != null ) { - return new BufferedReader( new StringReader( result ) ); + return new ByteArrayInputStream( result ); } return null; } + public String getEncoding() { + return m_encoding; + } + private final Object m_lock = new Object(); private final URL m_url; private final String m_urlString; @@ -285,7 +253,9 @@ public class HTTPRequest private boolean m_complete; private boolean m_cancelled; private boolean m_success; - private String m_result; + private String m_encoding; + private byte[] m_result; + private boolean m_binary; private int m_responseCode; private Map m_responseHeaders; } diff --git a/src/main/java/dan200/computercraft/core/apis/handles/BinaryInputHandle.java b/src/main/java/dan200/computercraft/core/apis/handles/BinaryInputHandle.java new file mode 100644 index 000000000..3ad196c06 --- /dev/null +++ b/src/main/java/dan200/computercraft/core/apis/handles/BinaryInputHandle.java @@ -0,0 +1,93 @@ +package dan200.computercraft.core.apis.handles; + +import com.google.common.io.ByteStreams; +import dan200.computercraft.api.lua.ILuaContext; +import dan200.computercraft.api.lua.LuaException; + +import javax.annotation.Nonnull; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; + +public class BinaryInputHandle extends HandleGeneric +{ + private final InputStream m_stream; + + public BinaryInputHandle( InputStream reader ) + { + super( reader ); + this.m_stream = reader; + } + + @Nonnull + @Override + public String[] getMethodNames() + { + return new String[] { + "read", + "readAll", + "close", + }; + } + + @Override + public Object[] callMethod( @Nonnull ILuaContext context, int method, @Nonnull Object[] args ) throws LuaException + { + switch( method ) + { + case 0: + // read + checkOpen(); + try + { + if( args.length > 0 && args[ 0 ] != null ) + { + if( !(args[ 0 ] instanceof Number) ) + { + throw new LuaException( "Expected number" ); + } + + int count = ((Number) args[ 0 ]).intValue(); + + if( count <= 0 || count >= 1024 * 16 ) + { + throw new LuaException( "Count out of range" ); + } + + byte[] bytes = new byte[ count ]; + count = m_stream.read( bytes ); + if( count < 0 ) return null; + if( count < bytes.length ) bytes = Arrays.copyOf( bytes, count ); + return new Object[] { bytes }; + } + else + { + int b = m_stream.read(); + return b == -1 ? null : new Object[] { b }; + } + } + catch( IOException e ) + { + return null; + } + case 1: + // readAll + checkOpen(); + try + { + byte[] out = ByteStreams.toByteArray( m_stream ); + return out == null ? null : new Object[] { out }; + } + catch( IOException e ) + { + return null; + } + case 2: + //close + close(); + return null; + default: + return null; + } + } +} diff --git a/src/main/java/dan200/computercraft/core/apis/handles/BinaryOutputHandle.java b/src/main/java/dan200/computercraft/core/apis/handles/BinaryOutputHandle.java new file mode 100644 index 000000000..63c148718 --- /dev/null +++ b/src/main/java/dan200/computercraft/core/apis/handles/BinaryOutputHandle.java @@ -0,0 +1,82 @@ +package dan200.computercraft.core.apis.handles; + +import dan200.computercraft.api.lua.ILuaContext; +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.shared.util.StringUtil; + +import javax.annotation.Nonnull; +import java.io.IOException; +import java.io.OutputStream; + +public class BinaryOutputHandle extends HandleGeneric +{ + private final OutputStream m_writer; + + public BinaryOutputHandle( OutputStream writer ) + { + super( writer ); + this.m_writer = writer; + } + + @Nonnull + @Override + public String[] getMethodNames() + { + return new String[] { + "write", + "flush", + "close", + }; + } + + @Override + public Object[] callMethod( @Nonnull ILuaContext context, int method, @Nonnull Object[] args ) throws LuaException + { + switch( method ) + { + case 0: + // write + checkOpen(); + try + { + if( args.length > 0 && args[ 0 ] instanceof Number ) + { + int number = ((Number) args[ 0 ]).intValue(); + m_writer.write( number ); + } + else if( args.length > 0 && args[ 0 ] instanceof String ) + { + String value = (String) args[ 0 ]; + m_writer.write( StringUtil.encodeString( value ) ); + } + else + { + throw new LuaException( "Expected number" ); + } + return null; + } + catch( IOException e ) + { + throw new LuaException( e.getMessage() ); + } + case 1: + // flush + checkOpen(); + try + { + m_writer.flush(); + return null; + } + catch( IOException e ) + { + return null; + } + case 2: + //close + close(); + return null; + default: + return null; + } + } +} diff --git a/src/main/java/dan200/computercraft/core/apis/handles/EncodedInputHandle.java b/src/main/java/dan200/computercraft/core/apis/handles/EncodedInputHandle.java new file mode 100644 index 000000000..09c4cd498 --- /dev/null +++ b/src/main/java/dan200/computercraft/core/apis/handles/EncodedInputHandle.java @@ -0,0 +1,105 @@ +package dan200.computercraft.core.apis.handles; + +import dan200.computercraft.api.lua.ILuaContext; +import dan200.computercraft.api.lua.LuaException; + +import javax.annotation.Nonnull; +import java.io.*; + +public class EncodedInputHandle extends HandleGeneric +{ + private final BufferedReader m_reader; + + public EncodedInputHandle( BufferedReader reader ) + { + super( reader ); + this.m_reader = reader; + } + + public EncodedInputHandle( InputStream stream ) + { + this( stream, "UTF-8" ); + } + + public EncodedInputHandle( InputStream stream, String encoding ) + { + super( stream ); + if( encoding == null ) encoding = "UTF-8"; + InputStreamReader streamReader; + try + { + streamReader = new InputStreamReader( stream, encoding ); + } + catch( UnsupportedEncodingException e ) + { + streamReader = new InputStreamReader( stream ); + } + this.m_reader = new BufferedReader( streamReader ); + } + + @Nonnull + @Override + public String[] getMethodNames() + { + return new String[] { + "readLine", + "readAll", + "close", + }; + } + + @Override + public Object[] callMethod( @Nonnull ILuaContext context, int method, @Nonnull Object[] args ) throws LuaException + { + switch( method ) + { + case 0: + // readLine + checkOpen(); + try + { + String line = m_reader.readLine(); + if( line != null ) + { + return new Object[] { line }; + } + else + { + return null; + } + } + catch( IOException e ) + { + return null; + } + case 1: + // readAll + checkOpen(); + try + { + StringBuilder result = new StringBuilder( "" ); + String line = m_reader.readLine(); + while( line != null ) + { + result.append( line ); + line = m_reader.readLine(); + if( line != null ) + { + result.append( "\n" ); + } + } + return new Object[] { result.toString() }; + } + catch( IOException e ) + { + return null; + } + case 2: + // close + close(); + return null; + default: + return null; + } + } +} diff --git a/src/main/java/dan200/computercraft/core/apis/handles/EncodedOutputHandle.java b/src/main/java/dan200/computercraft/core/apis/handles/EncodedOutputHandle.java new file mode 100644 index 000000000..61db07fa4 --- /dev/null +++ b/src/main/java/dan200/computercraft/core/apis/handles/EncodedOutputHandle.java @@ -0,0 +1,124 @@ +package dan200.computercraft.core.apis.handles; + +import dan200.computercraft.api.lua.ILuaContext; +import dan200.computercraft.api.lua.LuaException; + +import javax.annotation.Nonnull; +import java.io.*; + +public class EncodedOutputHandle extends HandleGeneric +{ + private final BufferedWriter m_writer; + + public EncodedOutputHandle( BufferedWriter writer ) + { + super( writer ); + this.m_writer = writer; + } + + public EncodedOutputHandle( OutputStream stream ) + { + this( stream, "UTF-8" ); + } + + public EncodedOutputHandle( OutputStream stream, String encoding ) + { + super( stream ); + if( encoding == null ) encoding = "UTF-8"; + OutputStreamWriter streamWriter; + try + { + streamWriter = new OutputStreamWriter( stream, encoding ); + } + catch( UnsupportedEncodingException e ) + { + streamWriter = new OutputStreamWriter( stream ); + } + this.m_writer = new BufferedWriter( streamWriter ); + } + + @Nonnull + @Override + public String[] getMethodNames() + { + return new String[] { + "write", + "writeLine", + "flush", + "close", + }; + } + + @Override + public Object[] callMethod( @Nonnull ILuaContext context, int method, @Nonnull Object[] args ) throws LuaException + { + switch( method ) + { + case 0: + { + // write + checkOpen(); + String text; + if( args.length > 0 && args[ 0 ] != null ) + { + text = args[ 0 ].toString(); + } + else + { + text = ""; + } + try + { + m_writer.write( text, 0, text.length() ); + return null; + } + catch( IOException e ) + { + throw new LuaException( e.getMessage() ); + } + } + case 1: + { + // writeLine + checkOpen(); + String text; + if( args.length > 0 && args[ 0 ] != null ) + { + text = args[ 0 ].toString(); + } + else + { + text = ""; + } + try + { + m_writer.write( text, 0, text.length() ); + m_writer.newLine(); + return null; + } + catch( IOException e ) + { + throw new LuaException( e.getMessage() ); + } + } + case 2: + // flush + checkOpen(); + try + { + m_writer.flush(); + return null; + } + catch( IOException e ) + { + return null; + } + case 3: + // close + close(); + return null; + default: + return null; + } + } +} diff --git a/src/main/java/dan200/computercraft/core/apis/handles/HandleGeneric.java b/src/main/java/dan200/computercraft/core/apis/handles/HandleGeneric.java new file mode 100644 index 000000000..c1cbc68e7 --- /dev/null +++ b/src/main/java/dan200/computercraft/core/apis/handles/HandleGeneric.java @@ -0,0 +1,35 @@ +package dan200.computercraft.core.apis.handles; + +import dan200.computercraft.api.lua.ILuaObject; +import dan200.computercraft.api.lua.LuaException; + +import java.io.Closeable; +import java.io.IOException; + +public abstract class HandleGeneric implements ILuaObject +{ + protected final Closeable m_closable; + protected boolean m_open = true; + + public HandleGeneric( Closeable m_closable ) + { + this.m_closable = m_closable; + } + + protected void checkOpen() throws LuaException + { + if( !m_open ) throw new LuaException( "attempt to use a closed file" ); + } + + protected void close() + { + try + { + m_closable.close(); + m_open = false; + } + catch( IOException ignored ) + { + } + } +} diff --git a/src/main/java/dan200/computercraft/core/filesystem/FileSystem.java b/src/main/java/dan200/computercraft/core/filesystem/FileSystem.java index 5b9e8693d..b6a6d870b 100644 --- a/src/main/java/dan200/computercraft/core/filesystem/FileSystem.java +++ b/src/main/java/dan200/computercraft/core/filesystem/FileSystem.java @@ -9,6 +9,7 @@ package dan200.computercraft.core.filesystem; import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.filesystem.IMount; import dan200.computercraft.api.filesystem.IWritableMount; +import net.minecraftforge.fml.common.FMLLog; import java.io.*; import java.util.*; @@ -291,7 +292,7 @@ public class FileSystem } private final Map m_mounts = new HashMap(); - private final Set m_openFiles = Collections.newSetFromMap( new WeakHashMap() ); + private final Set m_openFiles = Collections.newSetFromMap( new WeakHashMap() ); public FileSystem( String rootLabel, IMount rootMount ) throws FileSystemException { @@ -308,7 +309,7 @@ public class FileSystem // Close all dangling open files synchronized( m_openFiles ) { - for(IMountedFile file : m_openFiles) + for( Closeable file : m_openFiles ) { try { file.close(); @@ -647,7 +648,7 @@ public class FileSystem } } - private synchronized T openFile(T file, Closeable handle) throws FileSystemException + private synchronized T openFile( T file, Closeable handle ) throws FileSystemException { synchronized( m_openFiles ) { @@ -665,199 +666,44 @@ public class FileSystem throw new FileSystemException("Too many files already open"); } - m_openFiles.add( file ); + m_openFiles.add( handle ); return file; } } - private synchronized void closeFile( IMountedFile file, Closeable handle ) throws IOException + private synchronized void closeFile( Closeable handle ) throws IOException { synchronized( m_openFiles ) { - m_openFiles.remove( file ); - if( handle != null ) - { - handle.close(); - } + m_openFiles.remove( handle ); + handle.close(); } } - public synchronized IMountedFileNormal openForRead( String path ) throws FileSystemException + public synchronized InputStream openForRead( String path ) throws FileSystemException { path = sanitizePath ( path ); MountWrapper mount = getMount( path ); InputStream stream = mount.openForRead( path ); if( stream != null ) { - InputStreamReader isr; - try - { - isr = new InputStreamReader( stream, "UTF-8" ); - } - catch( UnsupportedEncodingException e ) - { - isr = new InputStreamReader( stream ); - } - final BufferedReader reader = new BufferedReader( isr ); - IMountedFileNormal file = new IMountedFileNormal() - { - @Override - public String readLine() throws IOException - { - return reader.readLine(); - } - - @Override - public void write(String s, int off, int len, boolean newLine) throws IOException - { - throw new UnsupportedOperationException(); - } - - @Override - public void close() throws IOException - { - closeFile( this, reader ); - } - - @Override - public void flush() throws IOException - { - throw new UnsupportedOperationException(); - } - }; - return openFile( file, reader ); + return openFile( new ClosingInputStream( stream ), stream ); } return null; } - - public synchronized IMountedFileNormal openForWrite( String path, boolean append ) throws FileSystemException + + public synchronized OutputStream openForWrite( String path, boolean append ) throws FileSystemException { path = sanitizePath ( path ); MountWrapper mount = getMount( path ); OutputStream stream = append ? mount.openForAppend( path ) : mount.openForWrite( path ); if( stream != null ) { - OutputStreamWriter osw; - try - { - osw = new OutputStreamWriter( stream, "UTF-8" ); - } - catch( UnsupportedEncodingException e ) - { - osw = new OutputStreamWriter( stream ); - } - final BufferedWriter writer = new BufferedWriter( osw ); - IMountedFileNormal file = new IMountedFileNormal() - { - @Override - public String readLine() throws IOException - { - throw new UnsupportedOperationException(); - } - - @Override - public void write( String s, int off, int len, boolean newLine ) throws IOException - { - writer.write( s, off, len ); - if( newLine ) - { - writer.newLine(); - } - } - - @Override - public void close() throws IOException - { - closeFile( this, writer ); - } - - @Override - public void flush() throws IOException - { - writer.flush(); - } - }; - return openFile( file, writer ); + return openFile( new ClosingOutputStream( stream ), stream ); } return null; } - public synchronized IMountedFileBinary openForBinaryRead( String path ) throws FileSystemException - { - path = sanitizePath ( path ); - MountWrapper mount = getMount( path ); - final InputStream stream = mount.openForRead( path ); - if( stream != null ) - { - IMountedFileBinary file = new IMountedFileBinary() - { - @Override - public int read() throws IOException - { - return stream.read(); - } - - @Override - public void write(int i) throws IOException - { - throw new UnsupportedOperationException(); - } - - @Override - public void close() throws IOException - { - closeFile( this, stream ); - } - - @Override - public void flush() throws IOException - { - throw new UnsupportedOperationException(); - } - }; - return openFile( file, stream ); - } - return null; - } - - public synchronized IMountedFileBinary openForBinaryWrite( String path, boolean append ) throws FileSystemException - { - path = sanitizePath ( path ); - MountWrapper mount = getMount( path ); - final OutputStream stream = append ? mount.openForAppend( path ) : mount.openForWrite( path ); - if( stream != null ) - { - IMountedFileBinary file = new IMountedFileBinary() - { - @Override - public int read() throws IOException - { - throw new UnsupportedOperationException(); - } - - @Override - public void write(int i) throws IOException - { - stream.write(i); - } - - @Override - public void close() throws IOException - { - closeFile( this, stream ); - } - - @Override - public void flush() throws IOException - { - stream.flush(); - } - }; - return openFile( file, stream ); - } - return null; - } - public long getFreeSpace( String path ) throws FileSystemException { path = sanitizePath( path ); @@ -1010,4 +856,34 @@ public class FileSystem return local; } } + + private class ClosingInputStream extends FilterInputStream + { + protected ClosingInputStream( InputStream in ) + { + super( in ); + } + + @Override + public void close() throws IOException + { + super.close(); + closeFile( in ); + } + } + + private class ClosingOutputStream extends FilterOutputStream + { + protected ClosingOutputStream( OutputStream out ) + { + super( out ); + } + + @Override + public void close() throws IOException + { + super.close(); + closeFile( out ); + } + } } diff --git a/src/main/java/dan200/computercraft/core/filesystem/IMountedFile.java b/src/main/java/dan200/computercraft/core/filesystem/IMountedFile.java deleted file mode 100644 index b04389eb2..000000000 --- a/src/main/java/dan200/computercraft/core/filesystem/IMountedFile.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. - * Send enquiries to dratcliffe@gmail.com - */ - -package dan200.computercraft.core.filesystem; - -import java.io.IOException; - -public interface IMountedFile { - void close() throws IOException; -} diff --git a/src/main/java/dan200/computercraft/core/filesystem/IMountedFileBinary.java b/src/main/java/dan200/computercraft/core/filesystem/IMountedFileBinary.java deleted file mode 100644 index a028c9656..000000000 --- a/src/main/java/dan200/computercraft/core/filesystem/IMountedFileBinary.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. - * Send enquiries to dratcliffe@gmail.com - */ - -package dan200.computercraft.core.filesystem; - -import java.io.IOException; - -public interface IMountedFileBinary extends IMountedFile { - int read() throws IOException; - void write( int i ) throws IOException; - void close() throws IOException; - void flush() throws IOException; -} diff --git a/src/main/java/dan200/computercraft/core/filesystem/IMountedFileNormal.java b/src/main/java/dan200/computercraft/core/filesystem/IMountedFileNormal.java deleted file mode 100644 index 0435bdaf9..000000000 --- a/src/main/java/dan200/computercraft/core/filesystem/IMountedFileNormal.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2017. Do not distribute without permission. - * Send enquiries to dratcliffe@gmail.com - */ - -package dan200.computercraft.core.filesystem; - -import java.io.IOException; - -public interface IMountedFileNormal extends IMountedFile { - String readLine() throws IOException; - void write( String s, int off, int len, boolean newLine ) throws IOException; - void close() throws IOException; - void flush() throws IOException; -} diff --git a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java index 933ca3291..c5592c103 100644 --- a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java +++ b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java @@ -23,6 +23,7 @@ import org.luaj.vm2.lib.jse.JsePlatform; import javax.annotation.Nonnull; import java.io.*; +import java.util.Arrays; import java.util.HashMap; import java.util.IdentityHashMap; import java.util.Map; @@ -509,6 +510,11 @@ public class LuaJLuaMachine implements ILuaMachine String s = object.toString(); return LuaValue.valueOf( s ); } + else if( object instanceof byte[] ) + { + byte[] b = (byte[]) object; + return LuaValue.valueOf( Arrays.copyOf( b, b.length ) ); + } else if( object instanceof Map ) { // Table: diff --git a/src/main/java/dan200/computercraft/shared/util/StringUtil.java b/src/main/java/dan200/computercraft/shared/util/StringUtil.java index 66e66a5c1..01b1d964c 100644 --- a/src/main/java/dan200/computercraft/shared/util/StringUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/StringUtil.java @@ -41,4 +41,17 @@ public class StringUtil { return net.minecraft.util.text.translation.I18n.translateToLocalFormatted( key, format ); } + + public static byte[] encodeString( String string ) + { + byte[] chars = new byte[ string.length() ]; + + for( int i = 0; i < chars.length; ++i ) + { + char c = string.charAt( i ); + chars[ i ] = c < 256 ? (byte) c : 63; + } + + return chars; + } } diff --git a/src/main/resources/assets/computercraft/lua/bios.lua b/src/main/resources/assets/computercraft/lua/bios.lua index 60b1eaf18..1a89c952e 100644 --- a/src/main/resources/assets/computercraft/lua/bios.lua +++ b/src/main/resources/assets/computercraft/lua/bios.lua @@ -639,8 +639,8 @@ end if http then local nativeHTTPRequest = http.request - local function wrapRequest( _url, _post, _headers ) - local ok, err = nativeHTTPRequest( _url, _post, _headers ) + local function wrapRequest( _url, _post, _headers, _binary ) + local ok, err = nativeHTTPRequest( _url, _post, _headers, _binary ) if ok then while true do local event, param1, param2, param3 = os.pullEvent() @@ -654,16 +654,16 @@ if http then return nil, err end - http.get = function( _url, _headers ) - return wrapRequest( _url, nil, _headers ) + http.get = function( _url, _headers, _binary) + return wrapRequest( _url, nil, _headers, _binary) end - http.post = function( _url, _post, _headers ) - return wrapRequest( _url, _post or "", _headers ) + http.post = function( _url, _post, _headers, _binary) + return wrapRequest( _url, _post or "", _headers, _binary) end - http.request = function( _url, _post, _headers ) - local ok, err = nativeHTTPRequest( _url, _post, _headers ) + http.request = function( _url, _post, _headers, _binary ) + local ok, err = nativeHTTPRequest( _url, _post, _headers, _binary ) if not ok then os.queueEvent( "http_failure", _url, err ) end From 88de097c1c506c2f6df9676dc6148d0fbf1ba3cd Mon Sep 17 00:00:00 2001 From: SquidDev Date: Thu, 11 May 2017 18:19:34 +0100 Subject: [PATCH 07/42] Add more general item colouring system This allows for other items, such as turtles, to be dyed in the future. This also adds support for the ore dictionary, meaning you can use other mod's dyes to colour items. --- .../proxy/ComputerCraftProxyClient.java | 29 ++-- .../shared/common/ColourableRecipe.java | 106 ++++++++++++++ .../shared/common/IColouredItem.java | 10 ++ .../shared/media/items/ItemDiskExpanded.java | 16 ++- .../shared/media/items/ItemDiskLegacy.java | 12 +- .../shared/media/recipes/DiskRecipe.java | 131 +++++------------- .../proxy/ComputerCraftProxyCommon.java | 5 + .../shared/util/ColourTracker.java | 48 +++++++ .../shared/util/ColourUtils.java | 37 +++++ 9 files changed, 274 insertions(+), 120 deletions(-) create mode 100644 src/main/java/dan200/computercraft/shared/common/ColourableRecipe.java create mode 100644 src/main/java/dan200/computercraft/shared/common/IColouredItem.java create mode 100644 src/main/java/dan200/computercraft/shared/util/ColourTracker.java create mode 100644 src/main/java/dan200/computercraft/shared/util/ColourUtils.java diff --git a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java index 7adb8e3ff..faa65bb6a 100644 --- a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java @@ -47,7 +47,6 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderHandEvent; import net.minecraftforge.client.event.RenderPlayerEvent; import net.minecraftforge.client.model.ModelLoader; -import net.minecraftforge.client.model.ModelLoaderRegistry; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraftforge.fml.client.registry.ClientRegistry; @@ -515,20 +514,20 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon } } - @SideOnly(Side.CLIENT) - private static class DiskColorHandler implements IItemColor - { - private final ItemDiskLegacy disk; + @SideOnly(Side.CLIENT) + private static class DiskColorHandler implements IItemColor + { + private final ItemDiskLegacy disk; - private DiskColorHandler(ItemDiskLegacy disk) - { - this.disk = disk; - } + private DiskColorHandler( ItemDiskLegacy disk ) + { + this.disk = disk; + } - @Override - public int getColorFromItemstack( @Nonnull ItemStack stack, int layer) - { - return layer == 0 ? 0xFFFFFF : disk.getColor(stack); - } - } + @Override + public int getColorFromItemstack( @Nonnull ItemStack stack, int layer ) + { + return layer == 0 ? 0xFFFFFF : disk.getColour( stack ); + } + } } diff --git a/src/main/java/dan200/computercraft/shared/common/ColourableRecipe.java b/src/main/java/dan200/computercraft/shared/common/ColourableRecipe.java new file mode 100644 index 000000000..ce59b7fc5 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/common/ColourableRecipe.java @@ -0,0 +1,106 @@ +package dan200.computercraft.shared.common; + +import dan200.computercraft.shared.util.Colour; +import dan200.computercraft.shared.util.ColourTracker; +import dan200.computercraft.shared.util.ColourUtils; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class ColourableRecipe implements IRecipe +{ + @Override + public boolean matches( @Nonnull InventoryCrafting inv, @Nonnull World worldIn ) + { + boolean hasColourable = false; + boolean hasDye = false; + for( int i = 0; i < inv.getSizeInventory(); i++ ) + { + ItemStack stack = inv.getStackInSlot( i ); + if( stack == null ) continue; + + if( stack.getItem() instanceof IColouredItem ) + { + if( hasColourable ) return false; + hasColourable = true; + } + else if( ColourUtils.getStackColour( stack ) >= 0 ) + { + hasDye = true; + } + else + { + return false; + } + } + + return hasColourable && hasDye; + } + + @Nullable + @Override + public ItemStack getCraftingResult( @Nonnull InventoryCrafting inv ) + { + ItemStack colourable = null; + + ColourTracker tracker = new ColourTracker(); + + for( int i = 0; i < inv.getSizeInventory(); ++i ) + { + ItemStack stack = inv.getStackInSlot( i ); + + if( stack == null ) continue; + + if( stack.getItem() instanceof IColouredItem ) + { + colourable = stack; + } + else + { + int index = ColourUtils.getStackColour( stack ); + if( index < 0 ) continue; + + Colour colour = Colour.values()[ index ]; + tracker.addColour( colour.getR(), colour.getG(), colour.getB() ); + } + } + + if( colourable == null ) + { + return null; + } + + return ((IColouredItem) colourable.getItem()).setColour( colourable, tracker.getColour() ); + } + + @Override + public int getRecipeSize() + { + return 2; + } + + @Nullable + @Override + public ItemStack getRecipeOutput() + { + return null; + } + + @Nonnull + @Override + public ItemStack[] getRemainingItems( @Nonnull InventoryCrafting inv ) + { + ItemStack[] results = new ItemStack[ inv.getSizeInventory() ]; + for( int i = 0; i < results.length; ++i ) + { + ItemStack stack = inv.getStackInSlot( i ); + results[ i ] = ForgeHooks.getContainerItem( stack ); + } + return results; + } +} diff --git a/src/main/java/dan200/computercraft/shared/common/IColouredItem.java b/src/main/java/dan200/computercraft/shared/common/IColouredItem.java new file mode 100644 index 000000000..fb28403bd --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/common/IColouredItem.java @@ -0,0 +1,10 @@ +package dan200.computercraft.shared.common; + +import net.minecraft.item.ItemStack; + +public interface IColouredItem +{ + int getColour( ItemStack stack ); + + ItemStack setColour( ItemStack stack, int colour ); +} diff --git a/src/main/java/dan200/computercraft/shared/media/items/ItemDiskExpanded.java b/src/main/java/dan200/computercraft/shared/media/items/ItemDiskExpanded.java index 02df3b622..ab3c10330 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/ItemDiskExpanded.java +++ b/src/main/java/dan200/computercraft/shared/media/items/ItemDiskExpanded.java @@ -44,7 +44,7 @@ public class ItemDiskExpanded extends ItemDiskLegacy return -1; } - @Override + @Override protected void setDiskID( ItemStack stack, int id ) { if( id >= 0 ) @@ -58,10 +58,18 @@ public class ItemDiskExpanded extends ItemDiskLegacy nbt.setInteger( "diskID", id ); } } - - public int getColor( ItemStack stack ) + + @Override + public int getColour( ItemStack stack ) { NBTTagCompound nbt = stack.getTagCompound(); - return nbt != null && nbt.hasKey("color") ? nbt.getInteger("color") : Colour.values()[ Math.min(15, stack.getItemDamage()) ].getHex(); + if( nbt != null && nbt.hasKey( "color" ) ) + { + return nbt.getInteger( "color" ); + } + else + { + return Colour.values()[ Math.min( 15, stack.getItemDamage() ) ].getHex(); + } } } diff --git a/src/main/java/dan200/computercraft/shared/media/items/ItemDiskLegacy.java b/src/main/java/dan200/computercraft/shared/media/items/ItemDiskLegacy.java index 6b5c3f0f5..05581bf54 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/ItemDiskLegacy.java +++ b/src/main/java/dan200/computercraft/shared/media/items/ItemDiskLegacy.java @@ -10,6 +10,7 @@ import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.filesystem.IMount; import dan200.computercraft.api.media.IMedia; +import dan200.computercraft.shared.common.IColouredItem; import dan200.computercraft.shared.util.Colour; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; @@ -24,7 +25,7 @@ import javax.annotation.Nonnull; import java.util.List; public class ItemDiskLegacy extends Item - implements IMedia + implements IMedia, IColouredItem { public ItemDiskLegacy() { @@ -142,7 +143,8 @@ public class ItemDiskLegacy extends Item return ComputerCraftAPI.createSaveDirMount( world, "computer/disk/" + diskID, ComputerCraft.floppySpaceLimit ); } - public int getColor( ItemStack stack ) + @Override + public int getColour( ItemStack stack ) { return Colour.Blue.getHex(); } @@ -152,4 +154,10 @@ public class ItemDiskLegacy extends Item { return true; } + + @Override + public ItemStack setColour( ItemStack stack, int colour ) + { + return ItemDiskExpanded.createFromIDAndColour( getDiskID( stack ), getLabel( stack ), colour ); + } } diff --git a/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java b/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java index 6a9191fd7..35bffc4f4 100644 --- a/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java +++ b/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java @@ -8,6 +8,8 @@ package dan200.computercraft.shared.media.recipes; import dan200.computercraft.shared.media.items.ItemDiskLegacy; import dan200.computercraft.shared.util.Colour; +import dan200.computercraft.shared.util.ColourTracker; +import dan200.computercraft.shared.util.ColourUtils; import net.minecraft.init.Items; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; @@ -18,129 +20,60 @@ import javax.annotation.Nonnull; public class DiskRecipe implements IRecipe { - public DiskRecipe() - { - } - @Override - public boolean matches( @Nonnull InventoryCrafting inventory, @Nonnull World world ) + public boolean matches( @Nonnull InventoryCrafting inv, @Nonnull World world ) { - boolean diskFound = false; boolean paperFound = false; boolean redstoneFound = false; - boolean dyeFound = false; - for (int var5 = 0; var5 < inventory.getSizeInventory(); ++var5) + for( int i = 0; i < inv.getSizeInventory(); ++i ) { - ItemStack var6 = inventory.getStackInSlot(var5); + ItemStack stack = inv.getStackInSlot( i ); - if (var6 != null) + if( stack != null ) { - if (var6.getItem() instanceof ItemDiskLegacy ) + if( stack.getItem() == Items.PAPER ) { - if (diskFound || redstoneFound || paperFound) // make sure no redstone or paper already accepted if disk there - { - return false; - } - - diskFound = true; - } - else if( var6.getItem() == Items.DYE ) - { - dyeFound = true; - } - else if( var6.getItem() == Items.PAPER ) - { - if(paperFound || diskFound) - { - return false; - } + if( paperFound ) return false; paperFound = true; } - else if (var6.getItem() == Items.REDSTONE) + else if( stack.getItem() == Items.REDSTONE ) { - if (redstoneFound || diskFound) - { - return false; - } - + if( redstoneFound ) return false; redstoneFound = true; } - else + else if( ColourUtils.getStackColour( stack ) < 0 ) { return false; } } } - - return (redstoneFound && paperFound) || (diskFound && dyeFound); + + return redstoneFound && paperFound; } @Override - public ItemStack getCraftingResult( @Nonnull InventoryCrafting par1InventoryCrafting) + public ItemStack getCraftingResult( @Nonnull InventoryCrafting inv ) { - int diskID = -1; - String diskLabel = null; + ColourTracker tracker = new ColourTracker(); - int[] var3 = new int[3]; - int var4 = 0; - int var5 = 0; - ItemDiskLegacy var6; - int var7; - int var9; - float var10; - float var11; - int var17; - boolean dyeFound = false; - - for (var7 = 0; var7 < par1InventoryCrafting.getSizeInventory(); ++var7) + for( int i = 0; i < inv.getSizeInventory(); ++i ) { - ItemStack var8 = par1InventoryCrafting.getStackInSlot(var7); + ItemStack stack = inv.getStackInSlot( i ); - if (var8 != null) + if( stack == null ) continue; + + if( stack.getItem() != Items.PAPER && stack.getItem() != Items.REDSTONE ) { - if (var8.getItem() instanceof ItemDiskLegacy ) - { - var6 = (ItemDiskLegacy)var8.getItem(); - diskID = var6.getDiskID( var8 ); - diskLabel = var6.getLabel( var8 ); - } - else if (var8.getItem() == Items.DYE) - { - dyeFound = true; - float[] var14 = Colour.values()[ var8.getItemDamage() & 0xf ].getRGB(); - int var16 = (int)(var14[0] * 255.0F); - int var15 = (int)(var14[1] * 255.0F); - var17 = (int)(var14[2] * 255.0F); - var4 += Math.max(var16, Math.max(var15, var17)); - var3[0] += var16; - var3[1] += var15; - var3[2] += var17; - ++var5; - } - else if (!(var8.getItem() != Items.PAPER || var8.getItem() != Items.REDSTONE)) - { - return null; - } + int index = ColourUtils.getStackColour( stack ); + if( index < 0 ) continue; + + Colour colour = Colour.values()[ index ]; + tracker.addColour( colour.getR(), colour.getG(), colour.getB() ); } } - - if( !dyeFound ) - { - return ItemDiskLegacy.createFromIDAndColour( diskID, diskLabel, Colour.Blue.getHex() ); - } - - var7 = var3[0] / var5; - int var13 = var3[1] / var5; - var9 = var3[2] / var5; - var10 = (float)var4 / (float)var5; - var11 = (float)Math.max(var7, Math.max(var13, var9)); - var7 = (int)((float)var7 * var10 / var11); - var13 = (int)((float)var13 * var10 / var11); - var9 = (int)((float)var9 * var10 / var11); - var17 = (var7 << 8) + var13; - var17 = (var17 << 8) + var9; - return ItemDiskLegacy.createFromIDAndColour( diskID, diskLabel, var17 ); + + return ItemDiskLegacy.createFromIDAndColour( -1, null, tracker.hasColour() ? tracker.getColour() : Colour.Blue.getHex() ); } @Override @@ -157,13 +90,13 @@ public class DiskRecipe implements IRecipe @Nonnull @Override - public ItemStack[] getRemainingItems( @Nonnull InventoryCrafting inventoryCrafting ) + public ItemStack[] getRemainingItems( @Nonnull InventoryCrafting inv ) { - ItemStack[] results = new ItemStack[ inventoryCrafting.getSizeInventory() ]; - for (int i = 0; i < results.length; ++i) + ItemStack[] results = new ItemStack[ inv.getSizeInventory() ]; + for( int i = 0; i < results.length; ++i ) { - ItemStack stack = inventoryCrafting.getStackInSlot(i); - results[i] = net.minecraftforge.common.ForgeHooks.getContainerItem(stack); + ItemStack stack = inv.getStackInSlot( i ); + results[ i ] = net.minecraftforge.common.ForgeHooks.getContainerItem( stack ); } return results; } diff --git a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java index 749abf8e8..a4eb6cdf3 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java @@ -10,6 +10,7 @@ import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.pocket.IPocketUpgrade; import dan200.computercraft.core.computer.MainThread; +import dan200.computercraft.shared.common.ColourableRecipe; import dan200.computercraft.shared.common.DefaultBundledRedstoneProvider; import dan200.computercraft.shared.common.TileGeneric; import dan200.computercraft.shared.computer.blocks.BlockCommandComputer; @@ -276,6 +277,7 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy RecipeSorter.register( "computercraft:impostor", ImpostorRecipe.class, RecipeSorter.Category.SHAPED, "after:minecraft:shapeless" ); RecipeSorter.register( "computercraft:impostor_shapeless", ImpostorShapelessRecipe.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless" ); RecipeSorter.register( "computercraft:disk", DiskRecipe.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless" ); + RecipeSorter.register( "computercraft:colour", ColourableRecipe.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless" ); RecipeSorter.register( "computercraft:printout", PrintoutRecipe.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless" ); RecipeSorter.register( "computercraft:pocket_computer_upgrade", PocketComputerUpgradeRecipe.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless" ); @@ -375,6 +377,9 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy // Disk GameRegistry.addRecipe( new DiskRecipe() ); + // Colourable items (turtles, disks) + GameRegistry.addRecipe( new ColourableRecipe() ); + // Impostor Disk recipes (to fool NEI) ItemStack paper = new ItemStack( Items.PAPER, 1 ); ItemStack redstone = new ItemStack( Items.REDSTONE, 1 ); diff --git a/src/main/java/dan200/computercraft/shared/util/ColourTracker.java b/src/main/java/dan200/computercraft/shared/util/ColourTracker.java new file mode 100644 index 000000000..7be0ad300 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/util/ColourTracker.java @@ -0,0 +1,48 @@ +package dan200.computercraft.shared.util; + +/** + * A reimplementation of the colour system in {@link net.minecraft.item.crafting.RecipesArmorDyes}, but + * bundled together as an object. + */ +public class ColourTracker +{ + private int total; + private int totalR; + private int totalG; + private int totalB; + private int count; + + public void addColour( int r, int g, int b ) + { + total += Math.max( r, Math.max( g, b ) ); + totalR += r; + totalG += g; + totalB += b; + count++; + } + + public void addColour( float r, float g, float b ) + { + addColour( (int) (r * 255), (int) (g * 255), (int) (b * 255) ); + } + + public boolean hasColour() + { + return count > 0; + } + + public int getColour() + { + int avgR = totalR / count; + int avgG = totalG / count; + int avgB = totalB / count; + + float avgTotal = (float) total / (float) count; + float avgMax = (float) Math.max( avgR, Math.max( avgG, avgB ) ); + avgR = (int) (avgR * avgTotal / avgMax); + avgG = (int) (avgG * avgTotal / avgMax); + avgB = (int) (avgB * avgTotal / avgMax); + + return (avgR << 16) | (avgG << 8) | avgB; + } +} diff --git a/src/main/java/dan200/computercraft/shared/util/ColourUtils.java b/src/main/java/dan200/computercraft/shared/util/ColourUtils.java new file mode 100644 index 000000000..020a37724 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/util/ColourUtils.java @@ -0,0 +1,37 @@ +package dan200.computercraft.shared.util; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; +import org.apache.commons.lang3.ArrayUtils; + +public class ColourUtils +{ + private static final String[] DYES = new String[] { + "dyeBlack", "dyeRed", "dyeGreen", "dyeBrown", + "dyeBlue", "dyePurple", "dyeCyan", "dyeLightGray", + "dyeGray", "dyePink", "dyeLime", "dyeYellow", + "dyeLightBlue", "dyeMagenta", "dyeOrange", "dyeWhite" + }; + + private static int[] ids; + + public static int getStackColour( ItemStack stack ) + { + if( ids == null ) + { + int ids[] = ColourUtils.ids = new int[ DYES.length ]; + for( int i = 0; i < DYES.length; i++ ) + { + ids[ i ] = OreDictionary.getOreID( DYES[ i ] ); + } + } + + for( int id : OreDictionary.getOreIDs( stack ) ) + { + int index = ArrayUtils.indexOf( ids, id ); + if( index >= 0 ) return index; + } + + return -1; + } +} From 8c36eccfef7448252cdb4573a646439d7d895b4f Mon Sep 17 00:00:00 2001 From: SquidDev Date: Thu, 11 May 2017 18:44:02 +0100 Subject: [PATCH 08/42] Allow dying turtles arbitrary colours - Makes ITurtleItem implement IColourableItem - Only cache one turtle item model for all colours, rather than one for each colour. - Allow ITurtleAccess to set an arbitrary colour. --- .../api/turtle/ITurtleAccess.java | 22 ++++++- .../client/proxy/CCTurtleProxyClient.java | 5 +- .../render/TileEntityTurtleRenderer.java | 34 +++------- .../client/render/TurtleSmartItemModel.java | 13 ++-- .../shared/proxy/CCTurtleProxyCommon.java | 22 +++---- .../shared/turtle/blocks/ITurtleTile.java | 3 +- .../shared/turtle/blocks/TileTurtle.java | 16 ++--- .../shared/turtle/core/TurtleBrain.java | 64 +++++++++++++------ .../shared/turtle/items/ITurtleItem.java | 5 +- .../shared/turtle/items/ItemTurtleBase.java | 29 ++++----- .../shared/turtle/items/ItemTurtleLegacy.java | 9 ++- .../shared/turtle/items/ItemTurtleNormal.java | 25 +++----- .../turtle/items/TurtleItemFactory.java | 2 +- .../shared/turtle/recipes/TurtleRecipe.java | 6 +- .../turtle/recipes/TurtleUpgradeRecipe.java | 4 +- .../computercraft/shared/util/Colour.java | 17 ++++- .../shared/util/ColourUtils.java | 39 ++++++++++- 17 files changed, 181 insertions(+), 134 deletions(-) diff --git a/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java b/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java index b18ba839e..0e207f076 100644 --- a/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java +++ b/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java @@ -123,6 +123,7 @@ public interface ITurtleAccess * @param dyeColour 0-15 to dye the turtle one of the 16 standard Minecraft dye colours, or -1 to remove * the dye from the turtle. * @see #getDyeColour() + * @see #setColour(int) */ void setDyeColour( int dyeColour ); @@ -130,11 +131,28 @@ public interface ITurtleAccess * Gets the colour the turtle has been dyed. * * @return 0-15 if the turtle has been dyed one of the 16 standard Minecraft dye colours, -1 if the turtle - * is clean. - * @see #getDyeColour() + * is clean or has no corresponding dye. + * @see #setDyeColour(int) + * @see #getColour() */ int getDyeColour(); + /** + * Set the colour of the turtle to a RGB number. + * + * @param colour The colour this turtle should be changed to. This should be a RGB colour between {@code 0x000000} + * and {@code 0xFFFFFF} or -1 to reset to the default colour. + */ + void setColour( int colour ); + + /** + * Set the colour of the turtle to a RGB number. + * + * @return The colour this turtle is. This will be a RGB colour between {@code 0x000000} and {@code 0xFFFFFF} or + * -1 if it has no colour. + */ + int getColour(); + /** * Get the inventory of this turtle * diff --git a/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java index acf37c6d2..790eb8b99 100644 --- a/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java @@ -14,7 +14,6 @@ import dan200.computercraft.shared.proxy.CCTurtleProxyCommon; import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.core.TurtleBrain; import dan200.computercraft.shared.turtle.items.ItemTurtleBase; -import dan200.computercraft.shared.util.Colour; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ItemMeshDefinition; @@ -199,8 +198,8 @@ public class CCTurtleProxyClient extends CCTurtleProxyCommon if( tintIndex == 0 ) { ItemTurtleBase turtle = (ItemTurtleBase) stack.getItem(); - Colour colour = turtle.getColour( stack ); - if( colour != null ) return colour.getHex(); + int colour = turtle.getColour( stack ); + if( colour != -1 ) return colour; } return 0xFFFFFF; diff --git a/src/main/java/dan200/computercraft/client/render/TileEntityTurtleRenderer.java b/src/main/java/dan200/computercraft/client/render/TileEntityTurtleRenderer.java index 424f6328e..fc78a2e85 100644 --- a/src/main/java/dan200/computercraft/client/render/TileEntityTurtleRenderer.java +++ b/src/main/java/dan200/computercraft/client/render/TileEntityTurtleRenderer.java @@ -12,7 +12,6 @@ import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.core.IComputer; import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.entity.TurtleVisionCamera; -import dan200.computercraft.shared.util.Colour; import dan200.computercraft.shared.util.Holiday; import dan200.computercraft.shared.util.HolidayUtil; import net.minecraft.block.state.IBlockState; @@ -51,24 +50,7 @@ public class TileEntityTurtleRenderer extends TileEntitySpecialRenderer(); m_overrides = new ItemOverrideList( new ArrayList() ) { @@ -108,12 +107,12 @@ public class TurtleSmartItemModel implements IBakedModel, IResourceManagerReload { ItemTurtleBase turtle = (ItemTurtleBase) stack.getItem(); ComputerFamily family = turtle.getFamily( stack ); - Colour colour = turtle.getColour( stack ); + int colour = turtle.getColour( stack ); ITurtleUpgrade leftUpgrade = turtle.getUpgrade( stack, TurtleSide.Left ); ITurtleUpgrade rightUpgrade = turtle.getUpgrade( stack, TurtleSide.Right ); ResourceLocation overlay = turtle.getOverlay( stack ); boolean christmas = HolidayUtil.getCurrentHoliday() == Holiday.Christmas; - TurtleModelCombination combo = new TurtleModelCombination( family, colour, leftUpgrade, rightUpgrade, overlay, christmas ); + TurtleModelCombination combo = new TurtleModelCombination( family, colour != -1, leftUpgrade, rightUpgrade, overlay, christmas ); if( m_cachedModels.containsKey( combo ) ) { return m_cachedModels.get( combo ); diff --git a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java index a2661d834..784633e16 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java @@ -141,7 +141,7 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy private void addAllUpgradedTurtles( ComputerFamily family, List list ) { - ItemStack basicStack = TurtleItemFactory.create( -1, null, null, family, null, null, 0, null ); + ItemStack basicStack = TurtleItemFactory.create( -1, null, -1, family, null, null, 0, null ); if( basicStack != null ) { list.add( basicStack ); @@ -160,7 +160,7 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy { if ( isUpgradeSuitableForFamily( family, upgrade ) ) { - ItemStack stack = TurtleItemFactory.create( -1, null, null, family, upgrade, null, 0, null ); + ItemStack stack = TurtleItemFactory.create( -1, null, -1, family, upgrade, null, 0, null ); if( stack != null ) { list.add( stack ); @@ -292,11 +292,11 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy continue; } - ItemStack baseTurtle = TurtleItemFactory.create( -1, null, null, family, null, null, 0, null ); + ItemStack baseTurtle = TurtleItemFactory.create( -1, null, -1, family, null, null, 0, null ); if( baseTurtle != null ) { - ItemStack craftedTurtle = TurtleItemFactory.create( -1, null, null, family, upgrade, null, 0, null ); - ItemStack craftedTurtleFlipped = TurtleItemFactory.create( -1, null, null, family, null, upgrade, 0, null ); + ItemStack craftedTurtle = TurtleItemFactory.create( -1, null, -1, family, upgrade, null, 0, null ); + ItemStack craftedTurtleFlipped = TurtleItemFactory.create( -1, null, -1, family, null, upgrade, 0, null ); recipeList.add( new ImpostorRecipe( 2, 1, new ItemStack[] { baseTurtle, craftingItem }, craftedTurtle ) ); recipeList.add( new ImpostorRecipe( 2, 1, new ItemStack[] { craftingItem, baseTurtle }, craftedTurtleFlipped ) ); @@ -307,11 +307,11 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy { ItemStack otherCraftingItem = otherUpgrade.getCraftingItem(); - ItemStack otherCraftedTurtle = TurtleItemFactory.create( -1, null, null, family, null, otherUpgrade, 0, null ); - ItemStack comboCraftedTurtle = TurtleItemFactory.create( -1, null, null, family, upgrade, otherUpgrade, 0, null ); + ItemStack otherCraftedTurtle = TurtleItemFactory.create( -1, null, -1, family, null, otherUpgrade, 0, null ); + ItemStack comboCraftedTurtle = TurtleItemFactory.create( -1, null, -1, family, upgrade, otherUpgrade, 0, null ); - ItemStack otherCraftedTurtleFlipped = TurtleItemFactory.create( -1, null, null, family, otherUpgrade, null, 0, null ); - ItemStack comboCraftedTurtleFlipped = TurtleItemFactory.create( -1, null, null, family, otherUpgrade, upgrade, 0, null ); + ItemStack otherCraftedTurtleFlipped = TurtleItemFactory.create( -1, null, -1, family, otherUpgrade, null, 0, null ); + ItemStack comboCraftedTurtleFlipped = TurtleItemFactory.create( -1, null, -1, family, otherUpgrade, upgrade, 0, null ); recipeList.add( new ImpostorRecipe( 2, 1, new ItemStack[] { otherCraftingItem, craftedTurtle }, comboCraftedTurtle ) ); recipeList.add( new ImpostorRecipe( 2, 1, new ItemStack[] { otherCraftedTurtle, craftingItem }, comboCraftedTurtle ) ); @@ -361,7 +361,7 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy iron, ComputerItemFactory.create( -1, null, ComputerFamily.Normal ), iron, iron, new ItemStack( Blocks.CHEST, 1 ), iron, }, - TurtleItemFactory.create( -1, null, null, ComputerFamily.Normal, null, null, 0, null ) + TurtleItemFactory.create( -1, null, -1, ComputerFamily.Normal, null, null, 0, null ) ) ); // Advanced Turtle @@ -379,7 +379,7 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy gold, ComputerItemFactory.create( -1, null, ComputerFamily.Advanced ), gold, gold, new ItemStack( Blocks.CHEST, 1 ), gold, }, - TurtleItemFactory.create( -1, null, null, ComputerFamily.Advanced, null, null, 0, null ) + TurtleItemFactory.create( -1, null, -1, ComputerFamily.Advanced, null, null, 0, null ) ) ); // Upgrades diff --git a/src/main/java/dan200/computercraft/shared/turtle/blocks/ITurtleTile.java b/src/main/java/dan200/computercraft/shared/turtle/blocks/ITurtleTile.java index 00e96f398..f2c19266e 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/blocks/ITurtleTile.java +++ b/src/main/java/dan200/computercraft/shared/turtle/blocks/ITurtleTile.java @@ -11,13 +11,12 @@ import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.api.turtle.TurtleSide; import dan200.computercraft.shared.common.IDirectionalTile; import dan200.computercraft.shared.computer.blocks.IComputerTile; -import dan200.computercraft.shared.util.Colour; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.Vec3d; public interface ITurtleTile extends IComputerTile, IDirectionalTile { - Colour getColour(); + int getColour(); ResourceLocation getOverlay(); ITurtleUpgrade getUpgrade( TurtleSide side ); ITurtleAccess getAccess(); 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 77b98d32e..d12349d87 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java +++ b/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java @@ -17,7 +17,6 @@ import dan200.computercraft.shared.computer.core.ServerComputer; 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.Colour; import dan200.computercraft.shared.util.InventoryUtil; import dan200.computercraft.shared.util.RedstoneUtil; import dan200.computercraft.shared.util.WorldUtil; @@ -202,14 +201,14 @@ public class TileTurtle extends TileComputerBase } return true; } - else if( currentItem.getItem() == Items.WATER_BUCKET && m_brain.getDyeColour() != -1 ) + else if( currentItem.getItem() == Items.WATER_BUCKET && m_brain.getColour() != -1 ) { // Water to remove turtle colour if( !worldObj.isRemote ) { - if( m_brain.getDyeColour() != -1 ) + if( m_brain.getColour() != -1 ) { - m_brain.setDyeColour( -1 ); + m_brain.setColour( -1 ); if( !player.capabilities.isCreativeMode ) { player.setHeldItem( EnumHand.MAIN_HAND, new ItemStack( Items.BUCKET ) ); @@ -417,14 +416,9 @@ public class TileTurtle extends TileComputerBase } @Override - public Colour getColour() + public int getColour() { - int dye = m_brain.getDyeColour(); - if( dye >= 0 ) - { - return Colour.values()[ dye ]; - } - return null; + return m_brain.getColour(); } @Override diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java index b82b8f7de..66059d782 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java @@ -16,10 +16,7 @@ import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.core.IComputer; import dan200.computercraft.shared.computer.core.ServerComputer; import dan200.computercraft.shared.turtle.blocks.TileTurtle; -import dan200.computercraft.shared.util.Colour; -import dan200.computercraft.shared.util.DirectionUtil; -import dan200.computercraft.shared.util.Holiday; -import dan200.computercraft.shared.util.HolidayUtil; +import dan200.computercraft.shared.util.*; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; @@ -117,6 +114,7 @@ public class TurtleBrain implements ITurtleAccess private int m_selectedSlot; private int m_fuelLevel; private Colour m_colour; + private int m_colourHex; private ResourceLocation m_overlay; private int m_instanceID; @@ -139,6 +137,7 @@ public class TurtleBrain implements ITurtleAccess m_selectedSlot = 0; m_fuelLevel = 0; m_colour = null; + m_colourHex = -1; m_overlay = null; m_instanceID = -1; @@ -218,14 +217,8 @@ public class TurtleBrain implements ITurtleAccess } // Read colour - if( nbttagcompound.hasKey( "colourIndex" ) ) - { - m_colour = Colour.values()[ nbttagcompound.getInteger( "colourIndex" ) ]; - } - else - { - m_colour = null; - } + m_colour = ColourUtils.getColour( nbttagcompound ); + m_colourHex = ColourUtils.getHexColour( nbttagcompound ); // Read overlay if( nbttagcompound.hasKey( "overlay_mod" ) ) @@ -328,6 +321,10 @@ public class TurtleBrain implements ITurtleAccess { nbttagcompound.setInteger( "colourIndex", m_colour.ordinal() ); } + else if( m_colourHex != -1 ) + { + nbttagcompound.setInteger( "colour", m_colourHex ); + } // Write overlay if( m_overlay != null ) @@ -387,6 +384,10 @@ public class TurtleBrain implements ITurtleAccess { nbttagcompound.setInteger( "colourIndex", m_colour.ordinal() ); } + else if( m_colourHex != -1 ) + { + nbttagcompound.setInteger( "colour", m_colourHex ); + } // Overlay if( m_overlay != null ) @@ -438,14 +439,8 @@ public class TurtleBrain implements ITurtleAccess } // Colour - if( nbttagcompound.hasKey( "colourIndex" ) ) - { - m_colour = Colour.values()[ nbttagcompound.getInteger( "colourIndex" ) ]; - } - else - { - m_colour = null; - } + m_colourHex = ColourUtils.getHexColour( nbttagcompound ); + m_colour = ColourUtils.getColour( nbttagcompound ); // Overlay if( nbttagcompound.hasKey( "overlay_mod" ) && nbttagcompound.hasKey( "overlay_path" ) ) @@ -779,7 +774,7 @@ public class TurtleBrain implements ITurtleAccess @Override public int getDyeColour() { - return (m_colour != null) ? m_colour.ordinal() : -1; + return m_colour != null ? m_colour.ordinal() : -1; } public ResourceLocation getOverlay() @@ -807,10 +802,37 @@ public class TurtleBrain implements ITurtleAccess if( m_colour != newColour ) { m_colour = newColour; + m_colourHex = newColour == null ? -1 : newColour.getHex(); m_owner.updateBlock(); } } + @Override + public void setColour( int colour ) + { + if( colour >= 0 && colour <= 0xFFFFFF ) + { + if( m_colourHex != colour ) + { + m_colourHex = colour; + m_colour = Colour.fromHex( colour ); + m_owner.updateBlock(); + } + } + else if( m_colourHex != -1 ) + { + m_colourHex = -1; + m_colour = null; + m_owner.updateBlock(); + } + } + + @Override + public int getColour() + { + return m_colourHex; + } + @Override public ITurtleUpgrade getUpgrade( @Nonnull TurtleSide side ) { diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/ITurtleItem.java b/src/main/java/dan200/computercraft/shared/turtle/items/ITurtleItem.java index ace66cecc..dc97bf8f3 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/ITurtleItem.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/ITurtleItem.java @@ -8,15 +8,14 @@ package dan200.computercraft.shared.turtle.items; import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.api.turtle.TurtleSide; +import dan200.computercraft.shared.common.IColouredItem; import dan200.computercraft.shared.computer.items.IComputerItem; -import dan200.computercraft.shared.util.Colour; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -public interface ITurtleItem extends IComputerItem +public interface ITurtleItem extends IComputerItem, IColouredItem { ITurtleUpgrade getUpgrade( ItemStack stack, TurtleSide side ); int getFuelLevel( ItemStack stack ); - Colour getColour( ItemStack stack ); ResourceLocation getOverlay( ItemStack stack ); } diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleBase.java b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleBase.java index 9a0cbc0da..65f31bf3b 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleBase.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleBase.java @@ -13,7 +13,6 @@ import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.items.ItemComputerBase; import dan200.computercraft.shared.turtle.blocks.ITurtleTile; import dan200.computercraft.shared.turtle.core.TurtleBrain; -import dan200.computercraft.shared.util.Colour; import dan200.computercraft.shared.util.StringUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -41,7 +40,7 @@ public abstract class ItemTurtleBase extends ItemComputerBase implements ITurtle setHasSubtypes( true ); } - public abstract ItemStack create( int id, String label, Colour colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay ); + public abstract ItemStack create( int id, String label, int colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay ); @Override public void getSubItems( @Nonnull Item itemID, @Nullable CreativeTabs tabs, @Nonnull List list ) @@ -100,10 +99,10 @@ public abstract class ItemTurtleBase extends ItemComputerBase implements ITurtle turtle.getAccess().setFuelLevel( fuelLevel ); // Set colour - Colour colour = getColour( stack ); - if( colour != null ) + int colour = getColour( stack ); + if( colour != -1 ) { - turtle.getAccess().setDyeColour( colour.ordinal() ); + turtle.getAccess().setColour( colour ); } // Set overlay @@ -172,17 +171,13 @@ public abstract class ItemTurtleBase extends ItemComputerBase implements ITurtle } } - // ITurtleItem implementation - @Override - public abstract ITurtleUpgrade getUpgrade( ItemStack stack, TurtleSide side ); - - @Override - public abstract Colour getColour( ItemStack stack ); - - @Override - public abstract ResourceLocation getOverlay( ItemStack stack ); - - @Override - public abstract int getFuelLevel( ItemStack stack ); + public ItemStack setColour( ItemStack stack, int colour ) + { + return TurtleItemFactory.create( + getComputerID( stack ), getLabel( stack ), colour, getFamily( stack ), + getUpgrade( stack, TurtleSide.Left ), getUpgrade( stack, TurtleSide.Right ), + getFuelLevel( stack ), getOverlay( stack ) + ); + } } diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleLegacy.java b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleLegacy.java index aa389b524..0781223f6 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleLegacy.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleLegacy.java @@ -11,7 +11,6 @@ import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.api.turtle.TurtleSide; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.items.ItemComputer; -import dan200.computercraft.shared.util.Colour; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -27,12 +26,12 @@ public class ItemTurtleLegacy extends ItemTurtleBase } @Override - public ItemStack create( int id, String label, Colour colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay ) + public ItemStack create( int id, String label, int colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay ) { // Legacy turtles only support pickaxes and modems if( (leftUpgrade != null && leftUpgrade != ComputerCraft.Upgrades.diamondPickaxe ) || (rightUpgrade != null && rightUpgrade != ComputerCraft.Upgrades.wirelessModem) || - (colour != null) || (overlay != null) ) + (colour != -1) || (overlay != null) ) { return null; } @@ -130,9 +129,9 @@ public class ItemTurtleLegacy extends ItemTurtleBase } @Override - public Colour getColour( ItemStack stack ) + public int getColour( ItemStack stack ) { - return null; + return -1; } @Override diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleNormal.java b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleNormal.java index c08a00810..92e5b664e 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleNormal.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleNormal.java @@ -9,15 +9,16 @@ package dan200.computercraft.shared.turtle.items; import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.api.turtle.TurtleSide; +import dan200.computercraft.shared.common.IColouredItem; import dan200.computercraft.shared.computer.core.ComputerFamily; -import dan200.computercraft.shared.util.Colour; +import dan200.computercraft.shared.util.ColourUtils; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.Constants; -public class ItemTurtleNormal extends ItemTurtleBase +public class ItemTurtleNormal extends ItemTurtleBase implements IColouredItem { public ItemTurtleNormal( Block block ) { @@ -27,7 +28,7 @@ public class ItemTurtleNormal extends ItemTurtleBase } @Override - public ItemStack create( int id, String label, Colour colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay ) + public ItemStack create( int id, String label, int colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay ) { // Build the stack ItemStack stack = new ItemStack( this, 1, 0 ); @@ -64,9 +65,9 @@ public class ItemTurtleNormal extends ItemTurtleBase { nbt.setInteger( "fuelLevel", fuelLevel ); } - if( colour != null ) + if( colour != -1 ) { - nbt.setInteger( "colourIndex", colour.ordinal() ); + nbt.setInteger( "colour", colour ); } if( overlay != null ) { @@ -151,18 +152,10 @@ public class ItemTurtleNormal extends ItemTurtleBase } @Override - public Colour getColour( ItemStack stack ) + public int getColour( ItemStack stack ) { - if( stack.hasTagCompound() ) - { - NBTTagCompound nbt = stack.getTagCompound(); - if( nbt.hasKey( "colourIndex" ) ) - { - int index = nbt.getInteger( "colourIndex" ) & 0xf; - return Colour.values()[ index ]; - } - } - return null; + NBTTagCompound tag = stack.getTagCompound(); + return tag == null ? -1 : ColourUtils.getHexColour( tag ); } @Override diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItemFactory.java b/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItemFactory.java index 85064dc15..abac8477f 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItemFactory.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItemFactory.java @@ -47,7 +47,7 @@ public class TurtleItemFactory return create( -1, null, turtle.getColour(), turtle.getFamily(), leftUpgrade, rightUpgrade, 0, turtle.getOverlay() ); } - public static ItemStack create( int id, String label, Colour colour, ComputerFamily family, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay ) + public static ItemStack create( int id, String label, int colour, ComputerFamily family, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay ) { switch( family ) { diff --git a/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleRecipe.java b/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleRecipe.java index 4d1209f1b..2a7775ace 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleRecipe.java +++ b/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleRecipe.java @@ -37,7 +37,7 @@ public class TurtleRecipe implements IRecipe @Override public ItemStack getRecipeOutput() { - return TurtleItemFactory.create( -1, null, null, m_family, null, null, 0, null ); + return TurtleItemFactory.create( -1, null, -1, m_family, null, null, 0, null ); } @Override @@ -84,11 +84,11 @@ public class TurtleRecipe implements IRecipe // Construct the new stack if( m_family != ComputerFamily.Beginners ) { - return TurtleItemFactory.create( computerID, label, null, m_family, null, null, 0, null ); + return TurtleItemFactory.create( computerID, label, -1, m_family, null, null, 0, null ); } else { - return TurtleItemFactory.create( -1, label, null, m_family, null, null, 0, null ); + return TurtleItemFactory.create( -1, label, -1, m_family, null, null, 0, null ); } } diff --git a/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleUpgradeRecipe.java b/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleUpgradeRecipe.java index f41c777cf..a423d1e47 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleUpgradeRecipe.java +++ b/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleUpgradeRecipe.java @@ -37,7 +37,7 @@ public class TurtleUpgradeRecipe implements IRecipe @Override public ItemStack getRecipeOutput() { - return TurtleItemFactory.create( -1, null, null, ComputerFamily.Normal, null, null, 0, null ); + return TurtleItemFactory.create( -1, null, -1, ComputerFamily.Normal, null, null, 0, null ); } @Override @@ -154,7 +154,7 @@ public class TurtleUpgradeRecipe implements IRecipe int computerID = itemTurtle.getComputerID( turtle ); String label = itemTurtle.getLabel( turtle ); int fuelLevel = itemTurtle.getFuelLevel( turtle ); - Colour colour = itemTurtle.getColour( turtle ); + int colour = itemTurtle.getColour( turtle ); ResourceLocation overlay = itemTurtle.getOverlay( turtle ); return TurtleItemFactory.create( computerID, label, colour, family, upgrades[0], upgrades[1], fuelLevel, overlay ); } diff --git a/src/main/java/dan200/computercraft/shared/util/Colour.java b/src/main/java/dan200/computercraft/shared/util/Colour.java index d72dcabae..069617714 100644 --- a/src/main/java/dan200/computercraft/shared/util/Colour.java +++ b/src/main/java/dan200/computercraft/shared/util/Colour.java @@ -25,14 +25,25 @@ public enum Colour Orange( 0xf2b233 ), White( 0xf0f0f0 ); + public static final Colour[] VALUES = values(); + public static Colour fromInt( int colour ) { if( colour >= 0 && colour < 16 ) { - return Colour.values()[ colour ]; + return Colour.VALUES[ colour ]; } return null; } + + public static Colour fromHex(int colour) { + for( Colour entry : VALUES ) + { + if( entry.getHex() == colour ) return entry; + } + + return null; + } private int m_hex; private float[] m_rgb; @@ -49,12 +60,12 @@ public enum Colour public Colour getNext() { - return Colour.values()[ (ordinal() + 1) % 16 ]; + return Colour.VALUES[ (ordinal() + 1) % 16 ]; } public Colour getPrevious() { - return Colour.values()[ (ordinal() + 15) % 16 ]; + return Colour.VALUES[ (ordinal() + 15) % 16 ]; } public int getHex() diff --git a/src/main/java/dan200/computercraft/shared/util/ColourUtils.java b/src/main/java/dan200/computercraft/shared/util/ColourUtils.java index 020a37724..6831230fa 100644 --- a/src/main/java/dan200/computercraft/shared/util/ColourUtils.java +++ b/src/main/java/dan200/computercraft/shared/util/ColourUtils.java @@ -1,10 +1,14 @@ package dan200.computercraft.shared.util; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.Constants; import net.minecraftforge.oredict.OreDictionary; import org.apache.commons.lang3.ArrayUtils; -public class ColourUtils +import javax.annotation.Nonnull; + +public final class ColourUtils { private static final String[] DYES = new String[] { "dyeBlack", "dyeRed", "dyeGreen", "dyeBrown", @@ -34,4 +38,37 @@ public class ColourUtils return -1; } + + public static int getHexColour( @Nonnull NBTTagCompound tag ) + { + if( tag.hasKey( "colourIndex", Constants.NBT.TAG_ANY_NUMERIC ) ) + { + return Colour.VALUES[ tag.getInteger( "colourIndex" ) & 0xF ].getHex(); + } + else if( tag.hasKey( "colour", Constants.NBT.TAG_ANY_NUMERIC ) ) + { + return tag.getInteger( "colour" ); + } + else if( tag.hasKey( "color", Constants.NBT.TAG_ANY_NUMERIC ) ) + { + return tag.getInteger( "color" ); + } + else + { + return -1; + } + } + + public static Colour getColour( @Nonnull NBTTagCompound tag ) + { + if( tag.hasKey( "colourIndex", Constants.NBT.TAG_ANY_NUMERIC ) ) + { + return Colour.fromInt( tag.getInteger( "colourIndex" ) & 0xF ); + } + else + { + return null; + } + } + } From 6426255bd4b5f21b4a1d1821422a8386a14807d6 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Sat, 13 May 2017 22:42:31 +0100 Subject: [PATCH 09/42] Remove getColour and setColour methods from ITurtleAccess This allows us to remove the m_Colour field from TurtleBrain --- .../api/turtle/ITurtleAccess.java | 22 +--------- .../shared/turtle/core/TurtleBrain.java | 41 ++++++------------- 2 files changed, 15 insertions(+), 48 deletions(-) diff --git a/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java b/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java index 0e207f076..c6019a916 100644 --- a/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java +++ b/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java @@ -117,31 +117,12 @@ public interface ITurtleAccess */ void setSelectedSlot( int slot ); - /** - * Sets the colour of the turtle, as if the player had dyed it with a dye item. - * - * @param dyeColour 0-15 to dye the turtle one of the 16 standard Minecraft dye colours, or -1 to remove - * the dye from the turtle. - * @see #getDyeColour() - * @see #setColour(int) - */ - void setDyeColour( int dyeColour ); - - /** - * Gets the colour the turtle has been dyed. - * - * @return 0-15 if the turtle has been dyed one of the 16 standard Minecraft dye colours, -1 if the turtle - * is clean or has no corresponding dye. - * @see #setDyeColour(int) - * @see #getColour() - */ - int getDyeColour(); - /** * Set the colour of the turtle to a RGB number. * * @param colour The colour this turtle should be changed to. This should be a RGB colour between {@code 0x000000} * and {@code 0xFFFFFF} or -1 to reset to the default colour. + * @see #getColour() */ void setColour( int colour ); @@ -150,6 +131,7 @@ public interface ITurtleAccess * * @return The colour this turtle is. This will be a RGB colour between {@code 0x000000} and {@code 0xFFFFFF} or * -1 if it has no colour. + * @see #setColour(int) */ int getColour(); diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java index 66059d782..05a31b2ea 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java @@ -113,7 +113,6 @@ public class TurtleBrain implements ITurtleAccess private int m_selectedSlot; private int m_fuelLevel; - private Colour m_colour; private int m_colourHex; private ResourceLocation m_overlay; @@ -136,7 +135,6 @@ public class TurtleBrain implements ITurtleAccess m_selectedSlot = 0; m_fuelLevel = 0; - m_colour = null; m_colourHex = -1; m_overlay = null; @@ -217,7 +215,6 @@ public class TurtleBrain implements ITurtleAccess } // Read colour - m_colour = ColourUtils.getColour( nbttagcompound ); m_colourHex = ColourUtils.getHexColour( nbttagcompound ); // Read overlay @@ -317,11 +314,7 @@ public class TurtleBrain implements ITurtleAccess } // Write colour - if( m_colour != null ) - { - nbttagcompound.setInteger( "colourIndex", m_colour.ordinal() ); - } - else if( m_colourHex != -1 ) + if( m_colourHex != -1 ) { nbttagcompound.setInteger( "colour", m_colourHex ); } @@ -380,11 +373,7 @@ public class TurtleBrain implements ITurtleAccess } // Colour - if( m_colour != null ) - { - nbttagcompound.setInteger( "colourIndex", m_colour.ordinal() ); - } - else if( m_colourHex != -1 ) + if( m_colourHex != -1 ) { nbttagcompound.setInteger( "colour", m_colourHex ); } @@ -440,7 +429,6 @@ public class TurtleBrain implements ITurtleAccess // Colour m_colourHex = ColourUtils.getHexColour( nbttagcompound ); - m_colour = ColourUtils.getColour( nbttagcompound ); // Overlay if( nbttagcompound.hasKey( "overlay_mod" ) && nbttagcompound.hasKey( "overlay_path" ) ) @@ -771,12 +759,6 @@ public class TurtleBrain implements ITurtleAccess m_owner.updateBlock(); } - @Override - public int getDyeColour() - { - return m_colour != null ? m_colour.ordinal() : -1; - } - public ResourceLocation getOverlay() { return m_overlay; @@ -791,18 +773,23 @@ public class TurtleBrain implements ITurtleAccess } } - @Override + public int getDyeColour() + { + if( m_colourHex == -1 ) return -1; + Colour colour = Colour.fromHex( m_colourHex ); + return colour == null ? -1 : colour.ordinal(); + } + public void setDyeColour( int dyeColour ) { - Colour newColour = null; + int newColour = -1; if( dyeColour >= 0 && dyeColour < 16 ) { - newColour = Colour.values()[ dyeColour ]; + newColour = Colour.values()[ dyeColour ].getHex(); } - if( m_colour != newColour ) + if( m_colourHex != newColour ) { - m_colour = newColour; - m_colourHex = newColour == null ? -1 : newColour.getHex(); + m_colourHex = newColour; m_owner.updateBlock(); } } @@ -815,14 +802,12 @@ public class TurtleBrain implements ITurtleAccess if( m_colourHex != colour ) { m_colourHex = colour; - m_colour = Colour.fromHex( colour ); m_owner.updateBlock(); } } else if( m_colourHex != -1 ) { m_colourHex = -1; - m_colour = null; m_owner.updateBlock(); } } From a6b870dfbb31ced1a0b42081a496727fce0436fc Mon Sep 17 00:00:00 2001 From: SquidDev Date: Sun, 14 May 2017 14:22:20 +0100 Subject: [PATCH 10/42] Expand IPocketAccess.getLight/setLight to use RGB colours This allows us to restore the modem light to its original colour. --- .../api/pocket/IPocketAccess.java | 18 +++++------- .../api/turtle/ITurtleAccess.java | 2 +- .../proxy/ComputerCraftProxyClient.java | 4 +-- .../pocket/core/PocketServerComputer.java | 28 ++++++++++++++----- .../pocket/items/ItemPocketComputer.java | 4 +-- .../pocket/peripherals/PocketModem.java | 3 +- 6 files changed, 34 insertions(+), 25 deletions(-) diff --git a/src/main/java/dan200/computercraft/api/pocket/IPocketAccess.java b/src/main/java/dan200/computercraft/api/pocket/IPocketAccess.java index 2485cacf3..8ae2bd277 100644 --- a/src/main/java/dan200/computercraft/api/pocket/IPocketAccess.java +++ b/src/main/java/dan200/computercraft/api/pocket/IPocketAccess.java @@ -23,26 +23,22 @@ public interface IPocketAccess Entity getEntity(); /** - * Get the colour of the pocket computer's light. + * Get the colour of this pocket computer's light as a RGB number. * - * See {@link #setLight(int)} for the values this may return. - * - * @return The colour of the pocket computer's light. + * @return The colour this light is. This will be a RGB colour between {@code 0x000000} and {@code 0xFFFFFF} or + * -1 if it has no colour. * @see #setLight(int) */ int getLight(); /** - * Set the colour of the pocket computer's light. Use {@link 0} to turn it off. + * Set the colour of the pocket computer's light to a RGB number. * - * Colours take the form of an integer between 0 and 15, using the opposite order to those in - * {@link The colors API} - so 0 being black, - * 1 representing red, 2 representing green all the way up to 15 for white. - * - * @param value The colour the light should have. + * @param colour The colour this modem's light will be changed to. This should be a RGB colour between + * {@code 0x000000} and {@code 0xFFFFFF} or -1 to reset to the default colour. * @see #getLight() */ - void setLight( int value ); + void setLight( int colour ); /** * Get the upgrade-specific NBT. diff --git a/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java b/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java index c6019a916..940adb89a 100644 --- a/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java +++ b/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java @@ -127,7 +127,7 @@ public interface ITurtleAccess void setColour( int colour ); /** - * Set the colour of the turtle to a RGB number. + * Get the colour of this turtle as a RGB number. * * @return The colour this turtle is. This will be a RGB colour between {@code 0x000000} and {@code 0xFFFFFF} or * -1 if it has no colour. diff --git a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java index faa65bb6a..1ad1640a3 100644 --- a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java @@ -192,8 +192,8 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon { if( layout != 1 ) return 0xFFFFFF; - Colour colour = Colour.fromInt( ComputerCraft.Items.pocketComputer.getLightState( stack ) ); - return colour == null ? Colour.Black.getHex() : colour.getHex(); + int colour = ComputerCraft.Items.pocketComputer.getLightState( stack ); + return colour == -1 ? Colour.Black.getHex() : colour; } }, ComputerCraft.Items.pocketComputer ); diff --git a/src/main/java/dan200/computercraft/shared/pocket/core/PocketServerComputer.java b/src/main/java/dan200/computercraft/shared/pocket/core/PocketServerComputer.java index bd0d9470c..f4ee78007 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/core/PocketServerComputer.java +++ b/src/main/java/dan200/computercraft/shared/pocket/core/PocketServerComputer.java @@ -13,6 +13,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -40,19 +41,32 @@ public class PocketServerComputer extends ServerComputer implements IPocketAcces @Override public int getLight() { - int value = getUserData().getInteger( "modemLight" ); - return value >= 0 && value <= 15 ? value : 0; + NBTTagCompound tag = getUserData(); + if( tag.hasKey( "modemLight", Constants.NBT.TAG_ANY_NUMERIC ) ) + { + return tag.getInteger( "modemLight" ); + } + else + { + return -1; + } } @Override - public void setLight( int value ) + public void setLight( int colour ) { - if( value < 0 || value > 15 ) throw new IllegalArgumentException( "Colour out of bounds" ); - NBTTagCompound tag = getUserData(); - if( tag.getInteger( "modemLight" ) != value ) + if( colour >= 0 && colour <= 0xFFFFFF ) { - tag.setInteger( "modemLight", value ); + if( !tag.hasKey( "modemLight", Constants.NBT.TAG_ANY_NUMERIC ) || tag.getInteger( "modemLight" ) != colour ) + { + tag.setInteger( "modemLight", colour ); + updateUserData(); + } + } + else if( tag.hasKey( "modemLight", Constants.NBT.TAG_ANY_NUMERIC ) ) + { + tag.removeTag( "modemLight" ); updateUserData(); } } diff --git a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java index 55d9a3982..d7a1923b2 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java +++ b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java @@ -457,12 +457,12 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia if( computer != null && computer.isOn() ) { NBTTagCompound computerNBT = computer.getUserData(); - if( computerNBT != null ) + if( computerNBT != null && computerNBT.hasKey( "modemLight", Constants.NBT.TAG_ANY_NUMERIC ) ) { return computerNBT.getInteger( "modemLight" ); } } - return 0; + return -1; } public IPocketUpgrade getUpgrade( ItemStack stack ) diff --git a/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketModem.java b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketModem.java index 8d58a8365..73e37b1bd 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketModem.java +++ b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketModem.java @@ -5,7 +5,6 @@ import dan200.computercraft.api.pocket.IPocketAccess; import dan200.computercraft.api.pocket.IPocketUpgrade; import dan200.computercraft.shared.peripheral.PeripheralType; import dan200.computercraft.shared.peripheral.common.PeripheralItemFactory; -import dan200.computercraft.shared.util.Colour; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; @@ -77,7 +76,7 @@ public class PocketModem implements IPocketUpgrade modem.setLocation( entity.getEntityWorld(), entity.posX, entity.posY, entity.posZ ); } - access.setLight( modem.isActive() ? Colour.Red.ordinal() : Colour.Black.ordinal() ); + access.setLight( modem.isActive() ? 0xBA0000 : -1 ); } } From b37dbbd0aff98a9d8025b77ac101bbcb6d2505a7 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Sun, 14 May 2017 15:02:56 +0100 Subject: [PATCH 11/42] Allow dying pocket computers too This splits up the pocket computer textures and models into the frame (off, on, blinking), colour layer (normal, advanced, custom) and modem light. --- .../api/pocket/IPocketAccess.java | 18 ++++ .../proxy/ComputerCraftProxyClient.java | 100 +++++++++++------- .../pocket/core/PocketServerComputer.java | 13 +++ .../pocket/items/ItemPocketComputer.java | 46 +++++++- .../items/PocketComputerItemFactory.java | 4 +- .../recipes/PocketComputerUpgradeRecipe.java | 5 +- .../proxy/ComputerCraftProxyCommon.java | 8 +- .../models/item/advanced_pocket_computer.json | 7 ++ .../advanced_pocket_computer_blinking.json | 5 +- .../item/advanced_pocket_computer_off.json | 6 -- .../item/advanced_pocket_computer_on.json | 5 +- .../models/item/pocket_computer.json | 3 +- .../models/item/pocket_computer_blinking.json | 3 +- .../models/item/pocket_computer_colour.json | 7 ++ .../item/pocket_computer_colour_blinking.json | 8 ++ .../item/pocket_computer_colour_on.json | 8 ++ .../models/item/pocket_computer_on.json | 3 +- .../textures/items/pocket_computer.png | Bin 216 -> 211 bytes .../items/pocket_computer_advanced.png | Bin 219 -> 235 bytes .../textures/items/pocket_computer_blink.png | Bin 264 -> 299 bytes .../items/pocket_computer_blink_advanced.png | Bin 266 -> 0 bytes .../pocket_computer_blink_advanced.png.mcmeta | 6 -- .../textures/items/pocket_computer_colour.png | Bin 0 -> 212 bytes .../textures/items/pocket_computer_frame.png | Bin 0 -> 225 bytes .../textures/items/pocket_computer_on.png | Bin 240 -> 245 bytes .../items/pocket_computer_on_advanced.png | Bin 243 -> 0 bytes 26 files changed, 184 insertions(+), 71 deletions(-) create mode 100644 src/main/resources/assets/computercraft/models/item/advanced_pocket_computer.json delete mode 100644 src/main/resources/assets/computercraft/models/item/advanced_pocket_computer_off.json create mode 100644 src/main/resources/assets/computercraft/models/item/pocket_computer_colour.json create mode 100644 src/main/resources/assets/computercraft/models/item/pocket_computer_colour_blinking.json create mode 100644 src/main/resources/assets/computercraft/models/item/pocket_computer_colour_on.json delete mode 100644 src/main/resources/assets/computercraft/textures/items/pocket_computer_blink_advanced.png delete mode 100644 src/main/resources/assets/computercraft/textures/items/pocket_computer_blink_advanced.png.mcmeta create mode 100644 src/main/resources/assets/computercraft/textures/items/pocket_computer_colour.png create mode 100644 src/main/resources/assets/computercraft/textures/items/pocket_computer_frame.png delete mode 100644 src/main/resources/assets/computercraft/textures/items/pocket_computer_on_advanced.png diff --git a/src/main/java/dan200/computercraft/api/pocket/IPocketAccess.java b/src/main/java/dan200/computercraft/api/pocket/IPocketAccess.java index 8ae2bd277..a84c2de62 100644 --- a/src/main/java/dan200/computercraft/api/pocket/IPocketAccess.java +++ b/src/main/java/dan200/computercraft/api/pocket/IPocketAccess.java @@ -22,6 +22,24 @@ public interface IPocketAccess @Nullable Entity getEntity(); + /** + * Get the colour of this pocket computer as a RGB number. + * + * @return The colour this pocket computer is. This will be a RGB colour between {@code 0x000000} and + * {@code 0xFFFFFF} or -1 if it has no colour. + * @see #setColour(int) + */ + int getColour(); + + /** + * Set the colour of the pocket computer to a RGB number. + * + * @param colour The colour this pocket computer should be changed to. This should be a RGB colour between + * {@code 0x000000} and {@code 0xFFFFFF} or -1 to reset to the default colour. + * @see #getColour() + */ + void setColour( int colour ); + /** * Get the colour of this pocket computer's light as a RGB number. * diff --git a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java index 1ad1640a3..d3c165767 100644 --- a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java @@ -9,6 +9,7 @@ package dan200.computercraft.client.proxy; import dan200.computercraft.ComputerCraft; import dan200.computercraft.client.gui.*; import dan200.computercraft.client.render.TileEntityMonitorRenderer; +import dan200.computercraft.shared.computer.blocks.ComputerState; import dan200.computercraft.shared.computer.blocks.TileComputer; import dan200.computercraft.shared.computer.core.ClientComputer; import dan200.computercraft.shared.computer.core.ComputerFamily; @@ -111,61 +112,66 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon private ModelResourceLocation pocket_computer_off = new ModelResourceLocation( "computercraft:pocket_computer", "inventory" ); private ModelResourceLocation pocket_computer_on = new ModelResourceLocation( "computercraft:pocket_computer_on", "inventory" ); private ModelResourceLocation pocket_computer_blinking = new ModelResourceLocation( "computercraft:pocket_computer_blinking", "inventory" ); - private ModelResourceLocation advanced_pocket_computer_off = new ModelResourceLocation( "computercraft:advanced_pocket_computer_off", "inventory" ); + private ModelResourceLocation advanced_pocket_computer_off = new ModelResourceLocation( "computercraft:advanced_pocket_computer", "inventory" ); private ModelResourceLocation advanced_pocket_computer_on = new ModelResourceLocation( "computercraft:advanced_pocket_computer_on", "inventory" ); private ModelResourceLocation advanced_pocket_computer_blinking = new ModelResourceLocation( "computercraft:advanced_pocket_computer_blinking", "inventory" ); + private ModelResourceLocation colour_pocket_computer_off = new ModelResourceLocation( "computercraft:pocket_computer_colour", "inventory" ); + private ModelResourceLocation colour_pocket_computer_on = new ModelResourceLocation( "computercraft:pocket_computer_colour_on", "inventory" ); + private ModelResourceLocation colour_pocket_computer_blinking = new ModelResourceLocation( "computercraft:pocket_computer_colour_blinking", "inventory" ); @Nonnull @Override public ModelResourceLocation getModelLocation( @Nonnull ItemStack stack ) { - ItemPocketComputer itemPocketComputer = (ItemPocketComputer)stack.getItem(); - switch( itemPocketComputer.getFamily( stack ) ) + ItemPocketComputer itemPocketComputer = (ItemPocketComputer) stack.getItem(); + ComputerState state = itemPocketComputer.getState( stack ); + if( itemPocketComputer.getColour( stack ) == -1 ) { - case Advanced: + switch( itemPocketComputer.getFamily( stack ) ) { - switch( itemPocketComputer.getState( stack ) ) - { - case Off: - default: + case Advanced: + switch( state ) { - return advanced_pocket_computer_off; + case Off: + default: + return advanced_pocket_computer_off; + case On: + return advanced_pocket_computer_on; + case Blinking: + return advanced_pocket_computer_blinking; } - case On: + case Normal: + default: + switch( state ) { - return advanced_pocket_computer_on; + case Off: + default: + return pocket_computer_off; + case On: + return pocket_computer_on; + case Blinking: + return pocket_computer_blinking; } - case Blinking: - { - return advanced_pocket_computer_blinking; - } - } } - case Normal: - default: + } + else + { + switch( state ) { - switch( itemPocketComputer.getState( stack ) ) - { - case Off: - default: - { - return pocket_computer_off; - } - case On: - { - return pocket_computer_on; - } - case Blinking: - { - return pocket_computer_blinking; - } - } + case Off: + default: + return colour_pocket_computer_off; + case On: + return colour_pocket_computer_on; + case Blinking: + return colour_pocket_computer_blinking; } } } }, new String[] { "pocket_computer", "pocket_computer_on", "pocket_computer_blinking", - "advanced_pocket_computer_off", "advanced_pocket_computer_on", "advanced_pocket_computer_blinking", + "advanced_pocket_computer", "advanced_pocket_computer_on", "advanced_pocket_computer_blinking", + "pocket_computer_colour", "pocket_computer_colour_on", "pocket_computer_colour_blinking", } ); // Setup client forge handlers @@ -188,12 +194,26 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon mc.getItemColors().registerItemColorHandler( new IItemColor() { @Override - public int getColorFromItemstack( @Nonnull ItemStack stack, int layout ) + public int getColorFromItemstack( @Nonnull ItemStack stack, int layer ) { - if( layout != 1 ) return 0xFFFFFF; - - int colour = ComputerCraft.Items.pocketComputer.getLightState( stack ); - return colour == -1 ? Colour.Black.getHex() : colour; + switch( layer ) + { + case 0: + default: + return 0xFFFFFF; + case 1: + { + // Frame colour + int colour = ComputerCraft.Items.pocketComputer.getColour( stack ); + return colour == -1 ? 0xFFFFFF : colour; + } + case 2: + { + // Light colour + int colour = ComputerCraft.Items.pocketComputer.getLightState( stack ); + return colour == -1 ? Colour.Black.getHex() : colour; + } + } } }, ComputerCraft.Items.pocketComputer ); diff --git a/src/main/java/dan200/computercraft/shared/pocket/core/PocketServerComputer.java b/src/main/java/dan200/computercraft/shared/pocket/core/PocketServerComputer.java index f4ee78007..f6bb6dd1d 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/core/PocketServerComputer.java +++ b/src/main/java/dan200/computercraft/shared/pocket/core/PocketServerComputer.java @@ -38,6 +38,19 @@ public class PocketServerComputer extends ServerComputer implements IPocketAcces return m_entity; } + @Override + public int getColour() + { + return ComputerCraft.Items.pocketComputer.getColour( m_stack ); + } + + @Override + public void setColour( int colour ) + { + ComputerCraft.Items.pocketComputer.setColourDirect( m_stack, colour ); + updateUpgradeNBTData(); + } + @Override public int getLight() { diff --git a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java index d7a1923b2..df4f89854 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java +++ b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java @@ -11,6 +11,7 @@ import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.filesystem.IMount; import dan200.computercraft.api.media.IMedia; import dan200.computercraft.api.pocket.IPocketUpgrade; +import dan200.computercraft.shared.common.IColouredItem; import dan200.computercraft.shared.computer.blocks.ComputerState; import dan200.computercraft.shared.computer.core.ClientComputer; import dan200.computercraft.shared.computer.core.ComputerFamily; @@ -38,7 +39,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nonnull; import java.util.List; -public class ItemPocketComputer extends Item implements IComputerItem, IMedia +public class ItemPocketComputer extends Item implements IComputerItem, IMedia, IColouredItem { public ItemPocketComputer() { @@ -48,7 +49,7 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia setCreativeTab( ComputerCraft.mainCreativeTab ); } - public ItemStack create( int id, String label, ComputerFamily family, IPocketUpgrade upgrade ) + public ItemStack create( int id, String label, int colour, ComputerFamily family, IPocketUpgrade upgrade ) { // Ignore types we can't handle if( family != ComputerFamily.Normal && family != ComputerFamily.Advanced ) @@ -76,6 +77,14 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia { result.setStackDisplayName( label ); } + + if( colour != -1 ) + { + NBTTagCompound tag = result.getTagCompound(); + if( tag == null ) result.setTagCompound( tag = new NBTTagCompound() ); + tag.setInteger( "colour", colour ); + } + return result; } @@ -88,10 +97,10 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia private void getSubItems( List list, ComputerFamily family ) { - list.add( PocketComputerItemFactory.create( -1, null, family, null ) ); + list.add( PocketComputerItemFactory.create( -1, null, -1, family, null ) ); for (IPocketUpgrade upgrade : ComputerCraft.getVanillaPocketUpgrades()) { - list.add( PocketComputerItemFactory.create( -1, null, family, upgrade ) ); + list.add( PocketComputerItemFactory.create( -1, null, -1, family, upgrade ) ); } } @@ -525,4 +534,33 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia return sub; } } + + @Override + public int getColour( ItemStack stack ) + { + NBTTagCompound tag = stack.getTagCompound(); + return tag != null && tag.hasKey( "colour", Constants.NBT.TAG_ANY_NUMERIC ) ? tag.getInteger( "colour" ) : -1; + } + + @Override + public ItemStack setColour( ItemStack stack, int colour ) + { + ItemStack copy = stack.copy(); + setColourDirect( copy, colour ); + return copy; + } + + public void setColourDirect( ItemStack stack, int colour ) + { + NBTTagCompound tag = stack.getTagCompound(); + if( colour == -1 ) + { + if( tag != null ) tag.removeTag( "colour" ); + } + else + { + if( tag == null ) stack.setTagCompound( tag = new NBTTagCompound() ); + tag.setInteger( "colour", colour ); + } + } } diff --git a/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItemFactory.java b/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItemFactory.java index 80e7ca2c5..ad36d15da 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItemFactory.java +++ b/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItemFactory.java @@ -13,7 +13,7 @@ import net.minecraft.item.ItemStack; public class PocketComputerItemFactory { - public static ItemStack create( int id, String label, ComputerFamily family, IPocketUpgrade upgrade ) + public static ItemStack create( int id, String label, int colour, ComputerFamily family, IPocketUpgrade upgrade ) { ItemPocketComputer computer = ComputerCraft.Items.pocketComputer; switch( family ) @@ -21,7 +21,7 @@ public class PocketComputerItemFactory case Normal: case Advanced: { - return computer.create( id, label, family, upgrade ); + return computer.create( id, label, colour, family, upgrade ); } } return null; diff --git a/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java b/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java index 0f6eb0370..0fade6195 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java +++ b/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java @@ -33,7 +33,7 @@ public class PocketComputerUpgradeRecipe implements IRecipe @Override public ItemStack getRecipeOutput() { - return PocketComputerItemFactory.create( -1, null, ComputerFamily.Normal, null ); + return PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Normal, null ); } @Override @@ -111,7 +111,8 @@ public class PocketComputerUpgradeRecipe implements IRecipe ComputerFamily family = itemComputer.getFamily( computer ); int computerID = itemComputer.getComputerID( computer ); String label = itemComputer.getLabel( computer ); - return PocketComputerItemFactory.create( computerID, label, family, upgrade ); + int colour = itemComputer.getColour( computer ); + return PocketComputerItemFactory.create( computerID, label, colour, family, upgrade ); } @Nonnull diff --git a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java index a4eb6cdf3..251fd9809 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java @@ -420,7 +420,7 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy GameRegistry.addRecipe( new ImpostorShapelessRecipe( bookPrintout, new ItemStack[]{leather, singlePrintout, string} ) ); // Pocket Computer - ItemStack pocketComputer = PocketComputerItemFactory.create( -1, null, ComputerFamily.Normal, null ); + ItemStack pocketComputer = PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Normal, null ); GameRegistry.addRecipe( pocketComputer, "XXX", "XYX", "XZX", 'X', Blocks.STONE, @@ -429,7 +429,7 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy ); // Advanced Pocket Computer - ItemStack advancedPocketComputer = PocketComputerItemFactory.create( -1, null, ComputerFamily.Advanced, null ); + ItemStack advancedPocketComputer = PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Advanced, null ); GameRegistry.addRecipe( advancedPocketComputer, "XXX", "XYX", "XZX", 'X', Items.GOLD_INGOT, @@ -452,13 +452,13 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy GameRegistry.addRecipe( new ImpostorRecipe( 1, 2, new ItemStack[]{ upgrade.getCraftingItem(), pocketComputer }, - PocketComputerItemFactory.create( -1, null, ComputerFamily.Normal, upgrade ) + PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Normal, upgrade ) ) ); GameRegistry.addRecipe( new ImpostorRecipe( 1, 2, new ItemStack[]{ upgrade.getCraftingItem(), advancedPocketComputer }, - PocketComputerItemFactory.create( -1, null, ComputerFamily.Advanced, upgrade ) + PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Advanced, upgrade ) ) ); } diff --git a/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer.json b/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer.json new file mode 100644 index 000000000..73f3e3894 --- /dev/null +++ b/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "computercraft:items/pocket_computer_frame", + "layer1": "computercraft:items/pocket_computer_advanced" + } +} diff --git a/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer_blinking.json b/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer_blinking.json index 917745152..e9827fc84 100644 --- a/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer_blinking.json +++ b/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer_blinking.json @@ -1,7 +1,8 @@ { "parent": "item/generated", "textures": { - "layer0": "computercraft:items/pocket_computer_blink_advanced", - "layer1": "computercraft:items/pocket_computer_light" + "layer0": "computercraft:items/pocket_computer_blink", + "layer1": "computercraft:items/pocket_computer_advanced", + "layer2": "computercraft:items/pocket_computer_light" } } diff --git a/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer_off.json b/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer_off.json deleted file mode 100644 index c42373229..000000000 --- a/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer_off.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "computercraft:items/pocket_computer_advanced" - } -} diff --git a/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer_on.json b/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer_on.json index 6c00a583f..581fe4c20 100644 --- a/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer_on.json +++ b/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer_on.json @@ -1,7 +1,8 @@ { "parent": "item/generated", "textures": { - "layer0": "computercraft:items/pocket_computer_on_advanced", - "layer1": "computercraft:items/pocket_computer_light" + "layer0": "computercraft:items/pocket_computer_on", + "layer1": "computercraft:items/pocket_computer_advanced", + "layer2": "computercraft:items/pocket_computer_light" } } diff --git a/src/main/resources/assets/computercraft/models/item/pocket_computer.json b/src/main/resources/assets/computercraft/models/item/pocket_computer.json index 222b878b1..cdd234b0d 100644 --- a/src/main/resources/assets/computercraft/models/item/pocket_computer.json +++ b/src/main/resources/assets/computercraft/models/item/pocket_computer.json @@ -1,6 +1,7 @@ { "parent": "item/generated", "textures": { - "layer0": "computercraft:items/pocket_computer" + "layer0": "computercraft:items/pocket_computer_frame", + "layer1": "computercraft:items/pocket_computer" } } diff --git a/src/main/resources/assets/computercraft/models/item/pocket_computer_blinking.json b/src/main/resources/assets/computercraft/models/item/pocket_computer_blinking.json index d794bc3a8..fe3eb8ec7 100644 --- a/src/main/resources/assets/computercraft/models/item/pocket_computer_blinking.json +++ b/src/main/resources/assets/computercraft/models/item/pocket_computer_blinking.json @@ -2,6 +2,7 @@ "parent": "item/generated", "textures": { "layer0": "computercraft:items/pocket_computer_blink", - "layer1": "computercraft:items/pocket_computer_light" + "layer1": "computercraft:items/pocket_computer", + "layer2": "computercraft:items/pocket_computer_light" } } diff --git a/src/main/resources/assets/computercraft/models/item/pocket_computer_colour.json b/src/main/resources/assets/computercraft/models/item/pocket_computer_colour.json new file mode 100644 index 000000000..82d9b31b0 --- /dev/null +++ b/src/main/resources/assets/computercraft/models/item/pocket_computer_colour.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "computercraft:items/pocket_computer_frame", + "layer1": "computercraft:items/pocket_computer_colour" + } +} diff --git a/src/main/resources/assets/computercraft/models/item/pocket_computer_colour_blinking.json b/src/main/resources/assets/computercraft/models/item/pocket_computer_colour_blinking.json new file mode 100644 index 000000000..776ed5a1b --- /dev/null +++ b/src/main/resources/assets/computercraft/models/item/pocket_computer_colour_blinking.json @@ -0,0 +1,8 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "computercraft:items/pocket_computer_blink", + "layer1": "computercraft:items/pocket_computer_colour", + "layer2": "computercraft:items/pocket_computer_light" + } +} diff --git a/src/main/resources/assets/computercraft/models/item/pocket_computer_colour_on.json b/src/main/resources/assets/computercraft/models/item/pocket_computer_colour_on.json new file mode 100644 index 000000000..086378b4f --- /dev/null +++ b/src/main/resources/assets/computercraft/models/item/pocket_computer_colour_on.json @@ -0,0 +1,8 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "computercraft:items/pocket_computer_on", + "layer1": "computercraft:items/pocket_computer_colour", + "layer2": "computercraft:items/pocket_computer_light" + } +} diff --git a/src/main/resources/assets/computercraft/models/item/pocket_computer_on.json b/src/main/resources/assets/computercraft/models/item/pocket_computer_on.json index 5e1723b62..10a845d54 100644 --- a/src/main/resources/assets/computercraft/models/item/pocket_computer_on.json +++ b/src/main/resources/assets/computercraft/models/item/pocket_computer_on.json @@ -2,6 +2,7 @@ "parent": "item/generated", "textures": { "layer0": "computercraft:items/pocket_computer_on", - "layer1": "computercraft:items/pocket_computer_light" + "layer1": "computercraft:items/pocket_computer", + "layer2": "computercraft:items/pocket_computer_light" } } diff --git a/src/main/resources/assets/computercraft/textures/items/pocket_computer.png b/src/main/resources/assets/computercraft/textures/items/pocket_computer.png index f066cc2f4f34f67a914f335010da2f97833bc3dc..16757c61ee42bcf73dde50efebe643d260e70a7e 100644 GIT binary patch delta 183 zcmcb?c$sm6NhT|5}cn_ zQl40p%21G)nOCBhms+A=qGzCIXy%f+{wq*XfTxRNh=u>#9!DVt0UqYsJ^in^o0*$t zY3lLuS(h2)%4@dDGDfjpiru(i(`nz>Ewh30tSa9w6wJTdtR(~eooen4G6?i4xTvSvB*R}exJ;_ zG{@<4j8eJc&RSYpYSgHC9ZtBykR_dvl;jj(%DhXer({FIL8e<33wP|80mKr{b6O*q htE#IrC(qPiW3b#WIwf{Nq6yGO22WQ%mvv4FO#q&AK&$`& diff --git a/src/main/resources/assets/computercraft/textures/items/pocket_computer_advanced.png b/src/main/resources/assets/computercraft/textures/items/pocket_computer_advanced.png index d262102d8b87e63ece0a2227b74ef4b793a15fff..c81c88e236cd03c9c68f7daa8e7341c463d12f07 100644 GIT binary patch delta 207 zcmcc3_?mHoNGZx^prw85kH?(j9#r85lP9bN@+X1@buyJR*x37`TN%nDNrx zx<5cc_7YEDSN4ajEMh9wd~9nU0EHw=Tq84D<}m zTr$^x1uF9Jba4!^@K0VK_2d74drt}G2A1`)9zH+(d5&c>bR27U=au-vwx=SHdD@Zo z#4G~_pGguv(-;*hXGjV3GA2wqk}!vDLeokX2?>VwKnCSwLg#h^4Q23j^>bP0l+XkK De_=tm delta 191 zcmaFOc$;y8NEwh30tSa9w6wJTdtR(~eooen4G6?i4*F*2c3gTRUc+)O z&2jpcvKt-YpD!~1)2LDNI-GEYAxm08MbA0Ff_axzPf5YwDzn@@3CWwA4jxNmZL{Fs m$R=Yc)EGL4^{&`1W`?4AA;rJk`k$lZxy-8q?;3=9k`>5jgR3=A9lx&I`x0{NT;9+AZi4BSE>%y{W; z-5;PJdx@v7EBixM7BLm2tXx(FppayVYeY$Kep*R+Vo@qXL1JcJiC$i6iGqoqfu5n6 zOXm8oKt&y%E{-7{-cKi8yH-5g$*rQT;C}Gn#l}eg~JOR~6*4 z9sZgexufas`Nf=^6Sit3sFyG<>dyLikyT8cLum?2#q_z89Fn<=3f^XR=$Rj{|E_c) SH5TY7P6kg`KbLh*2~7Yg<6f=+ delta 236 zcmZ3@)WI}CrJgOx+ueoXKL{?^yL>VO0|RG)M`SSr1Gg{;GcwGYBLNg-FY)wsWq-)Z zBBr90mCLFC6q@Sk;uzv_JUL;3fWaXNEiJA8o);^gpObZC0|K#>gC|aSEHcrL-zRe} z&2jo1qg1ZAvzC^Y8Z~M;UHA4@yKf2KAf=#^s^YRm(IQqsMTI5(v2hRUbnXosJIfd~ z8+NhHm@z}(O2axfWgan|2nT6>5pi*2AQl$qzTuFcub*pl`9SlbP0l+XkKj=N5} diff --git a/src/main/resources/assets/computercraft/textures/items/pocket_computer_blink_advanced.png b/src/main/resources/assets/computercraft/textures/items/pocket_computer_blink_advanced.png deleted file mode 100644 index d360e8ce10c5e2b4d32529a326b4d27e7b4ec7dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qfx`y?k)`fL2$v|<&%LToCO|{ z#S9GG!XV7ZFl&wkP>{XE)7O>#AuEfRiowh)B^f}W>7Fi*As)w*6BY;<9Fow|()#at zvEunTSvNKy5KB4eo1NQn>5X^|%egei>08QfbcBDt$ox;EMlGl7-rj2WE#Vua6jW4P zwkTS}0%?}?$HqOZ)44Zn>?~u{Y}m!d(Ro_nO2axfWuA5M=a==0=j4PL+_gTe~DWM4f DuuoWF diff --git a/src/main/resources/assets/computercraft/textures/items/pocket_computer_blink_advanced.png.mcmeta b/src/main/resources/assets/computercraft/textures/items/pocket_computer_blink_advanced.png.mcmeta deleted file mode 100644 index e962dcee6..000000000 --- a/src/main/resources/assets/computercraft/textures/items/pocket_computer_blink_advanced.png.mcmeta +++ /dev/null @@ -1,6 +0,0 @@ -{ - "animation": { - "frametime": 8, - "frames": [ 0, 1 ] - } -} diff --git a/src/main/resources/assets/computercraft/textures/items/pocket_computer_colour.png b/src/main/resources/assets/computercraft/textures/items/pocket_computer_colour.png new file mode 100644 index 0000000000000000000000000000000000000000..8055d0c7cd86cfa4fa4ac434ac20e90f0b312aff GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXK3bQK$!8;-MT+OLG}_)Usv{rtSn+GlDE^|umFW5OI#yLg7ec# z$`gxH8440J^GfvcQcDy}^bGV2&0I3qe+4SC^K@|xvG7k`AQcc8_|u=OEz6lFVdQ&MBb@03@hAO8@`> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/computercraft/textures/items/pocket_computer_on.png b/src/main/resources/assets/computercraft/textures/items/pocket_computer_on.png index 4addbc205325a7f68acdc4d66ace3938856f30ca..c0d3956bb8b664371d4f1b268e390c64bd2e7153 100644 GIT binary patch delta 217 zcmeys_?2;jNGZx^prw85kH?(j9#r85lP9bN@+X1@buyJR*x37`TN%nDNrx zx<5cc_7YEDSN4ajEMh9AFZVS(2MS4+xJHx&=ckpFCl;kL6eMQmmFVTAmMEC$8R!|B zxn!>Y3RD#2>Eak-;h(%fDj+cMr$1L)mNUbIAO!&ff##1=3K|+eavr8WrC?v=jD^EJ3e?AG)VYNV^pY|A+?Fe;g|)l0;}`ZKrRUh2B&AXMj<;^$pDRK N@O1TaS?83{1ON!nLg@ei delta 212 zcmey$_owc;I)TmL*>AJVK+I>s-1}OyJY5_^EKVmUED$g_B%!6H_22Vi z#q)ErZfrmxmU7THJGbM~8}S;Jb7_v#x0K!J2>*PM`JYCOT29x!z18kp!Z%1MsHnJX zQM8B!(KER|*2SJS}jgVI7;YY|Q?7zS8 Date: Sun, 14 May 2017 16:02:15 +0100 Subject: [PATCH 12/42] Fix holes appearing in coloured turtles There was a very small gap between the turtle frame and the top of the turtle body. This increases the height of the body by one pixel, adding a little bit of overlap and ensuring the frame renders on top fixes this issue. --- .../models/block/turtle_white.json | 46 +++++++++--------- .../textures/blocks/turtle_white.png | Bin 2606 -> 2606 bytes 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/main/resources/assets/computercraft/models/block/turtle_white.json b/src/main/resources/assets/computercraft/models/block/turtle_white.json index 9feec113d..29d1477b2 100644 --- a/src/main/resources/assets/computercraft/models/block/turtle_white.json +++ b/src/main/resources/assets/computercraft/models/block/turtle_white.json @@ -4,29 +4,6 @@ "texture": "computercraft:blocks/turtle_white" }, "elements": [ - { - "from": [ 2, 2, 2 ], - "to": [ 14, 14, 13 ], - "faces": { - "down": { "uv": [ 2.75, 0, 5.75, 2.75 ], "texture": "#texture" }, - "up": { "uv": [ 5.75, 0, 8.75, 2.75 ], "texture": "#texture" }, - "north": { "uv": [ 8.5, 5.75, 11.5, 2.75 ], "texture": "#texture" }, - "south": { "uv": [ 2.75, 5.75, 5.75, 2.75 ], "texture": "#texture" }, - "west": { "uv": [ 0, 5.75, 2.75, 2.75 ], "texture": "#texture" }, - "east": { "uv": [ 5.75, 5.75, 8.5, 2.75 ], "texture": "#texture" } - } - }, - { - "from": [ 3, 6, 13 ], - "to": [ 13, 13, 15 ], - "faces": { - "down": { "uv": [ 9.25, 0, 11.75, 0.5 ], "texture": "#texture" }, - "up": { "uv": [ 11.75, 0, 14.25, 0.5 ], "texture": "#texture" }, - "south": { "uv": [ 9.25, 2.25, 11.75, 0.5 ], "texture": "#texture" }, - "west": { "uv": [ 8.75, 2.25, 9.25, 0.5 ], "texture": "#texture" }, - "east": { "uv": [ 11.75, 2.25, 12.25, 0.5 ], "texture": "#texture" } - } - }, { "from": [ 2, 2, 2 ], "to": [ 14, 14, 13 ], @@ -49,6 +26,29 @@ "west": { "uv": [ 8.75, 8, 9.25, 6.25 ], "texture": "#texture", "tintindex":0 }, "east": { "uv": [ 11.75, 8, 12.25, 6.25 ], "texture": "#texture", "tintindex":0 } } + }, + { + "from": [ 2, 2, 2 ], + "to": [ 14, 14, 13 ], + "faces": { + "down": { "uv": [ 2.75, 0, 5.75, 2.75 ], "texture": "#texture" }, + "up": { "uv": [ 5.75, 0, 8.75, 2.75 ], "texture": "#texture" }, + "north": { "uv": [ 8.5, 5.75, 11.5, 2.75 ], "texture": "#texture" }, + "south": { "uv": [ 2.75, 5.75, 5.75, 2.75 ], "texture": "#texture" }, + "west": { "uv": [ 0, 5.75, 2.75, 2.75 ], "texture": "#texture" }, + "east": { "uv": [ 5.75, 5.75, 8.5, 2.75 ], "texture": "#texture" } + } + }, + { + "from": [ 3, 6, 13 ], + "to": [ 13, 13, 15 ], + "faces": { + "down": { "uv": [ 9.25, 0, 11.75, 0.5 ], "texture": "#texture" }, + "up": { "uv": [ 11.75, 0, 14.25, 0.5 ], "texture": "#texture" }, + "south": { "uv": [ 9.25, 2.25, 11.75, 0.5 ], "texture": "#texture" }, + "west": { "uv": [ 8.75, 2.25, 9.25, 0.5 ], "texture": "#texture" }, + "east": { "uv": [ 11.75, 2.25, 12.25, 0.5 ], "texture": "#texture" } + } } ] } diff --git a/src/main/resources/assets/computercraft/textures/blocks/turtle_white.png b/src/main/resources/assets/computercraft/textures/blocks/turtle_white.png index a2dd732fad5b5b99ac63e74e51944435531b3b8f..0050df1c4428c987bf53dc34c652b6b7a73531a7 100644 GIT binary patch literal 2606 zcmeH|c{JPU8pnSLX+)}xYEd#HmT}QYQA-enYpFe!wu#$V+E}WUq0)}flF-F=I#g?$ zQZA}3muk=!HC#(VEFo%-Ew)r`E$vXt#JT_8Kkol`o^!tM_nhx}-}5}r=btx;;N~DB ztt1TqfQ;i=TTihw4kRTZJ~yV)x5OqHZ0%|d09C)jcLE>)AOR3uyzRufj*bo*jn>uG z#b7X}PoLJ))6>`2H!v_bbLNbpp`nqHk+HF{iHQjoi#0VhH8V3aH#f)Oa26I8mX?;* z*48a8Ev>DsZEbDs?XB(Y?QAxi!)fMl+BqCfM@L6zXD64-?dt04?(XjC>FMq5k&cu&X2PApbSGcp@;Q?a^|Si)F^ zQ;&lKD5Uy&9XHRi$6VwCj~C(oC}(_ZsCHAIG$bAf3|t;=kHG!vewOee?G^K=3RW*o zJ8gxjEm^CE)h`7O6($!04%P+x#TCl8ul~Ev!=Hpya7>K1`@sn5 z3nKICiw|1g?!(-83T7EDAd-1)j*Wk+DJ0~TM;qe040bUq!Bh_(LM+51qI|0s=`}uxN8FegYl2qPkDA2HIXRK=)(EoPuYgEHPEJmI z-4&2~S?C7hwU{it#}IiIJH(;LNn(?k59aiks}7X{#kcxMO`~A%+L>42owW`d){VCnGf#m+-nv3eV4*Cd(p_no?l$8|u$-JDh-c zZRqqUgw`U>y?R8>pWYpi8cxrjcbDanQ`y@0VH?~pDBjUG|GC5sZn$phQs9@L#qE2o z!K8Qm7`zLvn`4D7LDORCRMNJJ>V}G1cfaJ?O7fW+2GxdKCW02m(pTtFg%JWN)eWnK zVp47s)=PTP_w=*7_r!0aueom1ovLC%y{s^F<+{YF%*p%KVo zALHBA%aM@i_be8lpOJy-3pG;ep5HS4yt&=nytg;`&^@&QKRz)re$lxik;_d<@m<}H z#+CIP(TA`3(&~|kAEcion{Mr}~OQ2=vo3uYDr1}PV)jR-;{x>ujT`ui|a7tYC#VT(Fw#^QGJ?~fZ4F+!7r zN3Q4YZZ4fo;Tu@>&rx*DmngR*AueL7_az6NF=_Bw@H_l}x3xG0#Eg~9b!I+BsuOzf OA3EB(*;d&2$NveM`$L&!ju}8;y2o#VoTN49-K$BSpCj!3umihod$`a;#!@#*vu&GNJ00@g6 zb;#IE93NC34>z;Cc6{y|C?I`K`_xMUsQOpqf}R(e{XRcaMq^C!xTuV2v3kh4kWc@9BEUM1Kw8LPqpy(S4-a~4 z?P|oLWWZ6&IU$y>8Mn>D=rp+>q&gz+cJ35eYKqI1|R$7HZ2VMN76`TpW@MNvQI#G9UM zN`{coI!s&X4BG8>x>~@?DqBcYY}p|rYdtWst`^|_HNyzkuivZ-fMlb>a+dyB!@Kv{ zINNm??y7%cdERgg&2aH)sit_l%KAarg53k#_W~@$yK+wSk1teYM^SS)|L_&nz9hrlF?k+?Xq^t;r)70OTzO z@l|Fc5bV4T9{bS^(3offXl1%{lAja@$yNP3yPf-zbGJ;O6H5B{dEs(2tWPUWBDy3s zmHzitrb0|zEnyhJi>|fo$MP>G$WZHtT2Ki}-PMRCt_zQFZU%X;2-ZgMT=!4KsN_^~E zq6`^uj_$V-H|N=VVr+r5- zRBOT`AGDsneP|8BgQwig;9wGqUjQf~iDj7-<^18G!k%{$%&K9!1i+{R!51D%=@9%5 zt%)O9D)hNCItS|xOw7pIA)DCHS}h$t24i+y}WdDJh}*uwF9U82o(|F~=mNxw#c zb@g8;3HCfOKa~PgEOpHQLDelBTBd*c2NO&k=e-jsq49*^Oa;ZqE4w!YwYE0p8Wc0D zvnO5tj)#P70xIFO6K+>nqTkaAXWPB_Wo1kV8-LJ#8L1tW-4cHow>aAolh&Ulw>r<| zFw%;C2vWw)yv~o>STZx<1mSRMeSLk#i|_I;rVSOU`nHBIj}e~ZxAwMI`l7b~bXfdj zsL;iuJ&JVSccfIQR0sd`EHYhg2&XmNsVY*g@iGuTI2ow~FAr!g`7~E3I6BLT0 z@nx|JaIXjB@@?^qb>7bE@&Iw~pwm6)>A5SHb7|GjP5B0_PRzS-*l_nF*Hg{K{ng z@T6+cQ&mqYyK7ISJ95jy9nikHeqNw%c#q=lojybT26uPXcLW4}*KsG`7Ly15YT24g zx=iUTB=+5#9RY2HlV`<*{o{R@8;<8PVv|_cI4gWCy{zp)82@z$)3|c!$ate06FT@q z0R?#Np%c2S;AP5T}( z7)PF8$f%yChX)8r*QdZWBbTd17j7=kc=#(k;@*7)n`dCt*X!_*_Lv>CEH-Gi-7GL} zw|bb_|6Wiar`P9Vp_{_aey0g%69d=oCFK>0X$j*T_M**IBL<2oRi_iy*O~pvN)&sb zFBKstrb)|0LZ!e8FfJeF$Pmw|;#^1T7Zn`_z_!W;;a>h=u~075G=u{lzd@>3+>*rubN&;TCO#29fW*CRzMFGNwH8 zdKAOhiAVnQic1pSLQr0EHCUPyPtZUmwIkQq$s{aLC&7?2QiNhd_YFBO@U&Jdj+27& zGtuapP)z0u5aZ?3c*z&Bwe9YefjOFjiJi#nzKf#n4}+u&`SZ);e2~;O@r`P(-O>5@#g0!_Hcu+ zMiEk0H-EpDokXuUwm`9xA4M)}vVGkd^P>^DRk$1hwVzM{BGNrn8pB6dOPa4<9T`T# zv|DD;o6Cq9Is5*-$)Pll`i zknyjV*^Ftk7Uc(JwI2z49!be}^gH4Yb!-|yMyzQXh;Fw&D5esC-!M?m=}{e2e4zBC zH&5)Dw35qWe%swuW#WkPI}*FdGKYC;3w#Zd>BDd3Qd_O-uAGeKGOU740V%WY+)*!33VnzN7KlD?}M1{x+PS)X06+Z zC?1)e8F++5P3-N?sls#KRI&@%{=D`)HW(En;3}pyBfl*X1RQW@q}2Y`+Ox!T=m0|r z?SB4ukVaEkZuk09lWh!fr)(zUQrjWIi`MjrybRV)TuKr7kL5dOLe;QeLlL3QdiE%c zcE970Z48kFRm;6eZ#O3Mi|mQ&j#hSB>XiN3#=6Z?S351u|M?u%vn(mE<)jK;5EF-| j7*trJ{!cMFKqs?2*G5Vv!oGly2-wW7Ss4)wypsL{rgr}n From 63cdc7a72ecd4594883a0299223ead0395d1967f Mon Sep 17 00:00:00 2001 From: SquidDev Date: Sun, 14 May 2017 17:00:14 +0100 Subject: [PATCH 13/42] Replace reflection with access transformers This makes the code slightly neater and allows us to catch places where the variable/function has been renamed between versions. --- build.gradle | 6 +++ .../shared/common/BlockGeneric.java | 2 +- .../shared/media/items/RecordMedia.java | 3 +- .../shared/proxy/CCTurtleProxyCommon.java | 41 +++---------------- .../proxy/ComputerCraftProxyCommon.java | 4 +- .../turtle/core/TurtleCompareCommand.java | 19 +-------- .../resources/META-INF/computercraft_at.cfg | 6 +++ 7 files changed, 22 insertions(+), 59 deletions(-) create mode 100644 src/main/resources/META-INF/computercraft_at.cfg diff --git a/build.gradle b/build.gradle index a31b6f92f..af92f70e0 100644 --- a/build.gradle +++ b/build.gradle @@ -63,6 +63,12 @@ dependencies { } +jar { + manifest { + attributes('FMLAT': 'computercraft_at.cfg') + } +} + processResources { // this will ensure that this task is redone when the versions change. diff --git a/src/main/java/dan200/computercraft/shared/common/BlockGeneric.java b/src/main/java/dan200/computercraft/shared/common/BlockGeneric.java index dabbe3c81..c533ab917 100644 --- a/src/main/java/dan200/computercraft/shared/common/BlockGeneric.java +++ b/src/main/java/dan200/computercraft/shared/common/BlockGeneric.java @@ -134,7 +134,7 @@ public abstract class BlockGeneric extends Block implements } @Override - protected final ItemStack createStackedBlock( @Nonnull IBlockState state ) + public final ItemStack createStackedBlock( @Nonnull IBlockState state ) { return null; } diff --git a/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java b/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java index a458bc6c1..1ef2f7a8c 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java +++ b/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java @@ -13,7 +13,6 @@ import net.minecraft.item.ItemRecord; import net.minecraft.item.ItemStack; import net.minecraft.util.SoundEvent; import net.minecraft.world.World; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import javax.annotation.Nonnull; @@ -46,7 +45,7 @@ public class RecordMedia implements IMedia public SoundEvent getAudio( @Nonnull ItemStack stack ) { ItemRecord itemRecord = (ItemRecord)stack.getItem(); - return ObfuscationReflectionHelper.getPrivateValue(ItemRecord.class, itemRecord, "field_185076_b"); + return itemRecord.sound; } @Override diff --git a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java index a2661d834..e0aa4820c 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java @@ -38,7 +38,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingDropsEvent; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.common.event.FMLMissingMappingsEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.EntityRegistry; @@ -180,26 +179,12 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy { if( !m_dropConsumers.containsKey( entity ) ) { - boolean captured = ObfuscationReflectionHelper.getPrivateValue( - Entity.class, - entity, - "captureDrops" - ); + boolean captured = entity.captureDrops; if( !captured ) { - ObfuscationReflectionHelper.setPrivateValue( - Entity.class, - entity, - Boolean.TRUE, - "captureDrops" - ); - - ArrayList items = ObfuscationReflectionHelper.getPrivateValue( - Entity.class, - entity, - "capturedDrops" - ); + entity.captureDrops = true; + ArrayList items = entity.capturedDrops; if( items == null || items.size() == 0 ) { @@ -214,26 +199,12 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy { if( m_dropConsumers.containsKey( entity ) ) { - boolean captured = ObfuscationReflectionHelper.getPrivateValue( - Entity.class, - entity, - "captureDrops" - ); + boolean captured = entity.captureDrops; if( captured ) { - ObfuscationReflectionHelper.setPrivateValue( - Entity.class, - entity, - Boolean.FALSE, - "captureDrops" - ); - - ArrayList items = ObfuscationReflectionHelper.getPrivateValue( - Entity.class, - entity, - "capturedDrops" - ); + entity.captureDrops = false; + ArrayList items = entity.capturedDrops; if( items != null ) { diff --git a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java index 749abf8e8..1b3b4dbb7 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java @@ -73,7 +73,6 @@ import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.client.event.ConfigChangedEvent; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.common.event.FMLMissingMappingsEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; @@ -130,8 +129,7 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy if (item instanceof ItemRecord) { ItemRecord record = (ItemRecord) item; - String key = ObfuscationReflectionHelper.getPrivateValue( ItemRecord.class, record, "field_185077_c" ); - return StringUtil.translateToLocal( key ); + return StringUtil.translateToLocal( record.displayName ); } return null; } diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java index f075a8354..84d5bec88 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java @@ -17,10 +17,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.ReflectionHelper; import javax.annotation.Nonnull; -import java.lang.reflect.Method; public class TurtleCompareCommand implements ITurtleCommand { @@ -58,22 +56,7 @@ public class TurtleCompareCommand implements ITurtleCommand // Try createStackedBlock first if( !lookAtBlock.hasTileEntity( lookAtState ) ) { - try - { - Method method = ReflectionHelper.findMethod( - Block.class, lookAtBlock, - new String[]{ "func_149644_j", "j", "createStackedBlock" }, - IBlockState.class - ); - if( method != null ) - { - lookAtStack = (ItemStack)method.invoke( lookAtBlock, lookAtState ); - } - } - catch( Exception e ) - { - // ??? - } + lookAtStack = lookAtBlock.createStackedBlock( lookAtState ); } // See if the block drops anything with the same ID as itself diff --git a/src/main/resources/META-INF/computercraft_at.cfg b/src/main/resources/META-INF/computercraft_at.cfg new file mode 100644 index 000000000..78a9879da --- /dev/null +++ b/src/main/resources/META-INF/computercraft_at.cfg @@ -0,0 +1,6 @@ +# RecordMedia (and related methods) +public net.minecraft.item.ItemRecord field_185076_b # sound +public net.minecraft.item.ItemRecord field_185077_c # displayName + +# TurtleCompareCommand +public net.minecraft.block.Block func_180643_i(Lnet/minecraft/block/state/IBlockState;)Lnet/minecraft/item/ItemStack; # createStackedBlock From 61dc61d3566f1757299481311e3058b9eae713e3 Mon Sep 17 00:00:00 2001 From: Restioson Date: Sun, 7 May 2017 12:24:27 +0200 Subject: [PATCH 14/42] Attempt to fix git history #2 --- .../peripheral/speaker/SpeakerPeripheral.java | 220 ++++++++++++++++++ .../peripheral/speaker/TileSpeaker.java | 38 +++ 2 files changed, 258 insertions(+) create mode 100644 src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java create mode 100644 src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java new file mode 100644 index 000000000..bfb041103 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -0,0 +1,220 @@ +/** + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ + +package dan200.computercraft.shared.peripheral.speaker; + +import dan200.computercraft.api.lua.ILuaContext; +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.api.peripheral.IComputerAccess; +import dan200.computercraft.api.peripheral.IPeripheral; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; + +public class SpeakerPeripheral implements IPeripheral { + + private final TileSpeaker m_speaker; + private long m_clock; + private long m_lastPlayTime; + + public SpeakerPeripheral(TileSpeaker speaker) + { + m_speaker = speaker; + m_clock = 0; + m_lastPlayTime = 0; + } + + protected void updateClock() + { + m_clock++; + } + + + /* IPeripheral implementations */ + + @Override + public boolean equals(IPeripheral other) + { + if (other != null && other instanceof SpeakerPeripheral) + { + SpeakerPeripheral otherSpeaker = (SpeakerPeripheral) other; + return otherSpeaker.m_speaker == m_speaker; + } + + else + { + return false; + } + + } + + + @Override + public void attach(IComputerAccess computerAccess) + { + } + + @Override + public void detach(IComputerAccess computerAccess) + { + } + + @Override + public String getType() + { + return "speaker"; + } + + @Override + public String[] getMethodNames() + { + return new String[] { + "playsound", // Plays sound at resourceLocator + "playnote" // Plays note + }; + } + + @Override + public Object[] callMethod(IComputerAccess computerAccess, ILuaContext context, int methodIndex, Object[] args) throws LuaException + { + + switch (methodIndex) + { + // playsound + case 0: { + return playSound(args); + } + + // playnote + case 1: + { + return playNote(args); + } + + default: + { + return null; + } + + } + } + + private Object[] playNote(Object[] arguments) throws LuaException + { + float volume = 1f; + float pitch = 1f; + + // Check if arguments are correct + if (arguments.length == 0) // Too few args + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + + if (!(arguments[0] instanceof String)) // Arg wrong type + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + + if (!SoundEvent.REGISTRY.containsKey(new ResourceLocation("block.note." + arguments[0]))) + { + throw new LuaException("Invalid instrument, \"" + arguments[0] + "\"!"); + } + + if (arguments.length > 1) + { + if (!(arguments[1] instanceof Double)) // Arg wrong type + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + volume = ((Double) arguments[1]).floatValue(); + + } + + if (arguments.length > 2) + { + if (!(arguments[2] instanceof Double)) // Arg wrong type + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + pitch = ((Double) arguments[2]).floatValue(); + } + + if (arguments.length > 3) + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + + return playSound(new Object[] {"block.note." + arguments[0], volume, pitch}); + + } + + private Object[] playSound(Object[] arguments) throws LuaException + { + + float volume = 1f; + float pitch = 1f; + + // Check if arguments are correct + if (arguments.length == 0) // Too few args + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + + if (!(arguments[0] instanceof String)) // Arg wrong type + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + + if (arguments.length > 1) + { + if (!(arguments[1] instanceof Double)) // Arg wrong type + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + volume = ((Double) arguments[1]).floatValue(); + + } + + if (arguments.length > 2) + { + if (!(arguments[2] instanceof Double)) // Arg wrong type + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + pitch = ((Double) arguments[2]).floatValue(); + } + + if (arguments.length > 3) + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + + ResourceLocation resourceName = new ResourceLocation((String) arguments[0]); + + if (m_clock - m_lastPlayTime > TileSpeaker.MIN_TICKS_BETWEEN_SOUNDS) + { + + if (SoundEvent.REGISTRY.containsKey(resourceName)) + { + m_speaker.getWorld().playSound(null, m_speaker.getPos(), new SoundEvent(resourceName), SoundCategory.RECORDS, volume, pitch); + m_lastPlayTime = m_clock; + return new Object[]{true}; // Success, return true + } + + else + { + return new Object[]{false}; // Failed - sound not existent, return false + } + + } + + else + { + return new Object[]{false}; // Failed - rate limited, return false + } + } +} + diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java new file mode 100644 index 000000000..275a117b7 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java @@ -0,0 +1,38 @@ +/** + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ + +package dan200.computercraft.shared.peripheral.speaker; + +import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.shared.peripheral.common.TilePeripheralBase; +import net.minecraft.util.EnumFacing; + +public class TileSpeaker extends TilePeripheralBase +{ + // Statics + public static final int MIN_TICKS_BETWEEN_SOUNDS = 1; + + // Members + private SpeakerPeripheral m_peripheral; + + @Override + public synchronized void update() + { + if (m_peripheral != null) + { + m_peripheral.updateClock(); + } + + } + + // IPeripheralTile implementation + public IPeripheral getPeripheral(EnumFacing side) + { + m_peripheral = new SpeakerPeripheral(this); + return m_peripheral; + } + +} From 61c08afc7f759852e7030d6500494acee39e98fa Mon Sep 17 00:00:00 2001 From: Restioson Date: Sun, 7 May 2017 17:31:29 +0200 Subject: [PATCH 15/42] Implemented speaker. It's broken though - thinks it's a Disk Drive ~~Damn Tile Entities these days, always with their identity crises~~ --- .../shared/peripheral/PeripheralType.java | 3 ++- .../peripheral/common/BlockPeripheral.java | 18 +++++++++++++ .../common/BlockPeripheralVariant.java | 3 ++- .../peripheral/common/ItemPeripheral.java | 11 ++++++++ .../common/PeripheralItemFactory.java | 1 + .../proxy/ComputerCraftProxyCommon.java | 27 +++++++++++++------ 6 files changed, 53 insertions(+), 10 deletions(-) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/PeripheralType.java b/src/main/java/dan200/computercraft/shared/peripheral/PeripheralType.java index ed8510a7d..2cfaaf070 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/PeripheralType.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/PeripheralType.java @@ -20,7 +20,8 @@ public enum PeripheralType implements IStringSerializable WiredModem( "wired_modem" ), Cable( "cable" ), WiredModemWithCable( "wired_modem_with_cable" ), - AdvancedModem( "advanced_modem" ); + AdvancedModem( "advanced_modem" ), + Speaker( "speaker" ); private String m_name; diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java index 9f6758758..ba6f8ad1f 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java @@ -12,6 +12,7 @@ import dan200.computercraft.shared.peripheral.diskdrive.TileDiskDrive; import dan200.computercraft.shared.peripheral.modem.TileWirelessModem; import dan200.computercraft.shared.peripheral.monitor.TileMonitor; import dan200.computercraft.shared.peripheral.printer.TilePrinter; +import dan200.computercraft.shared.peripheral.speaker.TileSpeaker; import dan200.computercraft.shared.util.DirectionUtil; import net.minecraft.block.properties.PropertyDirection; import net.minecraft.block.properties.PropertyEnum; @@ -105,6 +106,10 @@ public class BlockPeripheral extends BlockPeripheralBase { state = state.withProperty( Properties.VARIANT, BlockPeripheralVariant.AdvancedMonitor ); } + else if (meta == 13) + { + state = state.withProperty( Properties.VARIANT, BlockPeripheralVariant.Speaker); + } return state; } @@ -164,6 +169,11 @@ public class BlockPeripheral extends BlockPeripheralBase meta = 12; break; } + case Speaker: + { + meta = 13; + break; + } } return meta; } @@ -323,6 +333,9 @@ public class BlockPeripheral extends BlockPeripheralBase } break; } + case Speaker: { + break; + } case Monitor: case AdvancedMonitor: { @@ -527,6 +540,10 @@ public class BlockPeripheral extends BlockPeripheralBase { return new TilePrinter(); } + case Speaker: + { + return new TileSpeaker(); + } } } @@ -543,6 +560,7 @@ public class BlockPeripheral extends BlockPeripheralBase switch( getPeripheralType( state ) ) { + case Speaker: case DiskDrive: case Printer: { diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheralVariant.java b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheralVariant.java index c98f90a5d..e7c6ee910 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheralVariant.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheralVariant.java @@ -121,7 +121,8 @@ public enum BlockPeripheralVariant implements IStringSerializable AdvancedMonitorDownLUD( "advanced_monitor_down_lud", PeripheralType.AdvancedMonitor ), AdvancedMonitorDownRU( "advanced_monitor_down_ru", PeripheralType.AdvancedMonitor ), AdvancedMonitorDownLRU( "advanced_monitor_down_lru", PeripheralType.AdvancedMonitor ), - AdvancedMonitorDownLU( "advanced_monitor_down_lu", PeripheralType.AdvancedMonitor ); + AdvancedMonitorDownLU( "advanced_monitor_down_lu", PeripheralType.AdvancedMonitor ), + Speaker( "speaker", PeripheralType.Speaker ); private String m_name; private PeripheralType m_peripheralType; diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheral.java index afcf44269..59c95f6d4 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheral.java @@ -56,6 +56,12 @@ public class ItemPeripheral extends ItemPeripheralBase stack = new ItemStack( this, quantity, 4 ); break; } + case Speaker: + { + stack = new ItemStack(this, quantity, 5); + break; + } + default: { // Ignore types we can't handle @@ -77,6 +83,7 @@ public class ItemPeripheral extends ItemPeripheralBase list.add( PeripheralItemFactory.create( PeripheralType.Monitor, null, 1 ) ); list.add( PeripheralItemFactory.create( PeripheralType.AdvancedMonitor, null, 1 ) ); list.add( PeripheralItemFactory.create( PeripheralType.WirelessModem, null, 1 ) ); + list.add( PeripheralItemFactory.create( PeripheralType.Speaker, null, 1) ); } @Override @@ -105,6 +112,10 @@ public class ItemPeripheral extends ItemPeripheralBase { return PeripheralType.AdvancedMonitor; } + case 5: + { + return PeripheralType.Speaker; + } } } } diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/PeripheralItemFactory.java b/src/main/java/dan200/computercraft/shared/peripheral/common/PeripheralItemFactory.java index 739ae34ee..95952414f 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/PeripheralItemFactory.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/PeripheralItemFactory.java @@ -25,6 +25,7 @@ public class PeripheralItemFactory ItemAdvancedModem advancedModem = ((ItemAdvancedModem)Item.getItemFromBlock( ComputerCraft.Blocks.advancedModem )); switch( type ) { + case Speaker: case DiskDrive: case Printer: case Monitor: diff --git a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java index 251fd9809..9751914ce 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java @@ -44,6 +44,7 @@ import dan200.computercraft.shared.peripheral.modem.TileWirelessModem; import dan200.computercraft.shared.peripheral.monitor.TileMonitor; import dan200.computercraft.shared.peripheral.printer.ContainerPrinter; import dan200.computercraft.shared.peripheral.printer.TilePrinter; +import dan200.computercraft.shared.peripheral.speaker.TileSpeaker; import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer; import dan200.computercraft.shared.pocket.items.ItemPocketComputer; import dan200.computercraft.shared.pocket.items.PocketComputerItemFactory; @@ -308,6 +309,15 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy 'Y', Items.REDSTONE ); + // Speaker + ItemStack speaker = PeripheralItemFactory.create( PeripheralType.Speaker, null, 1); + GameRegistry.addRecipe( speaker, + "XXX", "XYX", "XZX", + 'X', Blocks.STONE, + 'Y', Blocks.NOTEBLOCK, + 'Z', Items.REDSTONE + ); + // Wireless Modem ItemStack wirelessModem = PeripheralItemFactory.create( PeripheralType.WirelessModem, null, 1 ); GameRegistry.addRecipe( wirelessModem, @@ -541,14 +551,15 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy private void registerTileEntities() { // Tile Entities - registerTileEntity( TileComputer.class, "computer" ); - registerTileEntity( TileDiskDrive.class, "diskdrive" ); - registerTileEntity( TileWirelessModem.class, "wirelessmodem" ); - registerTileEntity( TileMonitor.class, "monitor" ); - registerTileEntity( TilePrinter.class, "ccprinter" ); - registerTileEntity( TileCable.class, "wiredmodem" ); - registerTileEntity( TileCommandComputer.class, "command_computer" ); - registerTileEntity( TileAdvancedModem.class, "advanced_modem" ); + GameRegistry.registerTileEntity( TileComputer.class, "computer" ); + GameRegistry.registerTileEntity( TileDiskDrive.class, "diskdrive" ); + GameRegistry.registerTileEntity( TileWirelessModem.class, "wirelessmodem" ); + GameRegistry.registerTileEntity( TileMonitor.class, "monitor" ); + GameRegistry.registerTileEntity( TilePrinter.class, "ccprinter" ); + GameRegistry.registerTileEntity( TileCable.class, "wiredmodem" ); + GameRegistry.registerTileEntity( TileCommandComputer.class, "command_computer" ); + GameRegistry.registerTileEntity( TileAdvancedModem.class, "advanced_modem" ); + GameRegistry.registerTileEntity( TileSpeaker.class, "speaker" ); // Register peripheral providers ComputerCraftAPI.registerPeripheralProvider( new DefaultPeripheralProvider() ); From 6cf1801f7e683743637559fe69cf88485f9d2959 Mon Sep 17 00:00:00 2001 From: Restioson Date: Sun, 7 May 2017 17:37:52 +0200 Subject: [PATCH 16/42] Changed method names to camelCaser --- .../shared/peripheral/speaker/SpeakerPeripheral.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index bfb041103..de88f4d3a 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -72,8 +72,8 @@ public class SpeakerPeripheral implements IPeripheral { public String[] getMethodNames() { return new String[] { - "playsound", // Plays sound at resourceLocator - "playnote" // Plays note + "playSound", // Plays sound at resourceLocator + "playNote" // Plays note }; } From a748d0167b01c42e62cb086315fda03596b0af9a Mon Sep 17 00:00:00 2001 From: Restioson Date: Sun, 7 May 2017 17:48:06 +0200 Subject: [PATCH 17/42] Fixed Speaker being recognized as Disk Drive. Massive thanks to @SquidDev --- .../shared/peripheral/common/BlockPeripheral.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java index ba6f8ad1f..7d83ce3f5 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java @@ -502,6 +502,10 @@ public class BlockPeripheral extends BlockPeripheralBase { return getDefaultState().withProperty( Properties.VARIANT, BlockPeripheralVariant.AdvancedMonitor ); } + case Speaker: + { + return getDefaultState().withProperty( Properties.VARIANT, BlockPeripheralVariant.Speaker ); + } } } From 2444245b809ecc09fa78628ea241dfa23a6c3ffc Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sun, 7 May 2017 18:32:43 +0200 Subject: [PATCH 18/42] Speaker rendering and name --- .../client/proxy/ComputerCraftProxyClient.java | 2 ++ .../peripheral/common/ItemPeripheralBase.java | 4 ++++ .../computercraft/blockstates/peripheral.json | 5 +++++ .../assets/computercraft/lang/en_US.lang | 1 + .../computercraft/models/block/speaker.json | 8 ++++++++ .../assets/computercraft/models/item/speaker.json | 3 +++ .../textures/blocks/speakerFront.png | Bin 0 -> 493 bytes .../computercraft/textures/blocks/speakerSide.png | Bin 0 -> 327 bytes .../computercraft/textures/blocks/speakerTop.png | Bin 0 -> 290 bytes 9 files changed, 23 insertions(+) create mode 100644 src/main/resources/assets/computercraft/models/block/speaker.json create mode 100644 src/main/resources/assets/computercraft/models/item/speaker.json create mode 100644 src/main/resources/assets/computercraft/textures/blocks/speakerFront.png create mode 100644 src/main/resources/assets/computercraft/textures/blocks/speakerSide.png create mode 100644 src/main/resources/assets/computercraft/textures/blocks/speakerTop.png diff --git a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java index d3c165767..7f9fb37ce 100644 --- a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java @@ -97,6 +97,8 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon registerItemModel( ComputerCraft.Blocks.peripheral, 3, "printer" ); registerItemModel( ComputerCraft.Blocks.peripheral, 4, "advanced_monitor" ); registerItemModel( ComputerCraft.Blocks.cable, 0, "cable" ); + registerItemModel( ComputerCraft.Blocks.peripheral, 5, "speaker" ); + registerItemModel( ComputerCraft.Blocks.cable, 0, "CC-Cable" ); registerItemModel( ComputerCraft.Blocks.cable, 1, "wired_modem" ); registerItemModel( ComputerCraft.Blocks.commandComputer, "command_computer" ); registerItemModel( ComputerCraft.Blocks.advancedModem, "advanced_modem" ); diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheralBase.java b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheralBase.java index a7e3b1189..aa408c5d0 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheralBase.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheralBase.java @@ -98,6 +98,10 @@ public abstract class ItemPeripheralBase extends ItemBlock implements IPeriphera { return "tile.computercraft:advanced_modem"; } + case Speaker: + { + return "tile.computercraft:speaker"; + } } } diff --git a/src/main/resources/assets/computercraft/blockstates/peripheral.json b/src/main/resources/assets/computercraft/blockstates/peripheral.json index 929c554eb..ac7a745c5 100644 --- a/src/main/resources/assets/computercraft/blockstates/peripheral.json +++ b/src/main/resources/assets/computercraft/blockstates/peripheral.json @@ -13,6 +13,11 @@ "facing=west,variant=disk_drive_invalid": { "model": "computercraft:disk_drive_invalid", "y": 270 }, "facing=east,variant=disk_drive_invalid": { "model": "computercraft:disk_drive_invalid", "y": 90 }, + "facing=north,variant=speaker": { "model": "computercraft:speaker" }, + "facing=south,variant=speaker": { "model": "computercraft:speaker", "y": 180 }, + "facing=west,variant=speaker": { "model": "computercraft:speaker", "y": 270 }, + "facing=east,variant=speaker": { "model": "computercraft:speaker", "y": 90 }, + "facing=north,variant=printer_empty": { "model": "computercraft:printer_empty" }, "facing=south,variant=printer_empty": { "model": "computercraft:printer_empty", "y": 180 }, "facing=west,variant=printer_empty": { "model": "computercraft:printer_empty", "y": 270 }, diff --git a/src/main/resources/assets/computercraft/lang/en_US.lang b/src/main/resources/assets/computercraft/lang/en_US.lang index 98361fac9..11e5c0693 100644 --- a/src/main/resources/assets/computercraft/lang/en_US.lang +++ b/src/main/resources/assets/computercraft/lang/en_US.lang @@ -9,6 +9,7 @@ tile.computercraft:wired_modem.name=Wired Modem tile.computercraft:cable.name=Networking Cable tile.computercraft:command_computer.name=Command Computer tile.computercraft:advanced_modem.name=Ender Modem +tile.computercraft:speaker.name=Speaker tile.computercraft:turtle.name=Turtle tile.computercraft:turtle.upgraded.name=%s Turtle diff --git a/src/main/resources/assets/computercraft/models/block/speaker.json b/src/main/resources/assets/computercraft/models/block/speaker.json new file mode 100644 index 000000000..afc4d4e21 --- /dev/null +++ b/src/main/resources/assets/computercraft/models/block/speaker.json @@ -0,0 +1,8 @@ +{ + "parent": "block/orientable", + "textures": { + "front": "computercraft:blocks/speakerFront", + "side": "computercraft:blocks/speakerSide", + "top": "computercraft:blocks/speakerTop" + } +} diff --git a/src/main/resources/assets/computercraft/models/item/speaker.json b/src/main/resources/assets/computercraft/models/item/speaker.json new file mode 100644 index 000000000..3aed864e9 --- /dev/null +++ b/src/main/resources/assets/computercraft/models/item/speaker.json @@ -0,0 +1,3 @@ +{ + "parent": "computercraft:block/speaker" +} diff --git a/src/main/resources/assets/computercraft/textures/blocks/speakerFront.png b/src/main/resources/assets/computercraft/textures/blocks/speakerFront.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5b81ce3dcb01139565a87975243ad3e9ed94c0 GIT binary patch literal 493 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;js(W8VM(0bWT&K~y+TWzkD&0#OhJ&|ZWl4*Y?Fh(@I) zB7WzJ8xq8U3lazJFXz3I#w2&p)aTw?Rj-TXa`~MxpU-Er*>pPn%INp|>-9Ri(!pS` zSS-r2OoHq6di#gVv{DFyM6ca!HU(0cOeSPTp*gG=jYg!kT8*FHHbaq2g}s!Q z2{umxcaSz3jcDTm2A)a`6vTvHuUB|S*AQguU!d_JH1{XPjEj|T%z473SA5SLT}wDcb;L6BmBcqIrK z#Dw&xVnN|fJG^5FaCc1EMIcX>FiJu`FW%ve)Z6%|Fn$n%`iG^Hd- zD2`)>@B7p=4M`rjAPA@|OUkm03q|iYqPMNPfcIhgzNdZPoj8tzwr%4R(6RG8scqX!06`EsD0c{G4iG_p z2O^-m=(}B{Iev*>BiL?i;1Qax>+S@cZ!^m%+66lphQV2&7io|3aDYuh3BXcZK%&h_ Z%@6XhcqWvM-X{P6002ovPDHLkV1nY3ks$y8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/computercraft/textures/blocks/speakerTop.png b/src/main/resources/assets/computercraft/textures/blocks/speakerTop.png new file mode 100644 index 0000000000000000000000000000000000000000..88e2ade7823cbe47332790382d3f7d2b5e6e223e GIT binary patch literal 290 zcmV+-0p0$IP)oYPDx omWA4ACFB;FN?|VE#(%E!3+mWJZ^xVuNB{r;07*qoM6N<$f|#s Date: Sun, 7 May 2017 18:43:29 +0200 Subject: [PATCH 19/42] Fix speaker peripheral API --- .../peripheral/speaker/SpeakerPeripheral.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index de88f4d3a..e8e48214e 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -104,8 +104,8 @@ public class SpeakerPeripheral implements IPeripheral { private Object[] playNote(Object[] arguments) throws LuaException { - float volume = 1f; - float pitch = 1f; + double volume = 1f; + double pitch = 1f; // Check if arguments are correct if (arguments.length == 0) // Too few args @@ -114,7 +114,7 @@ public class SpeakerPeripheral implements IPeripheral { } if (!(arguments[0] instanceof String)) // Arg wrong type - { + { throw new LuaException("Expected string, number (optional), number (optional)"); } @@ -125,7 +125,7 @@ public class SpeakerPeripheral implements IPeripheral { if (arguments.length > 1) { - if (!(arguments[1] instanceof Double)) // Arg wrong type + if (!(arguments[1] instanceof Double)) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); } @@ -135,7 +135,7 @@ public class SpeakerPeripheral implements IPeripheral { if (arguments.length > 2) { - if (!(arguments[2] instanceof Double)) // Arg wrong type + if (!(arguments[1] instanceof Double)) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); } @@ -147,7 +147,7 @@ public class SpeakerPeripheral implements IPeripheral { throw new LuaException("Expected string, number (optional), number (optional)"); } - return playSound(new Object[] {"block.note." + arguments[0], volume, pitch}); + return playSound(new Object[] {"block.note." + arguments[0], volume, Math.pow(2d, (pitch - 12) / 12d)}); } @@ -180,7 +180,7 @@ public class SpeakerPeripheral implements IPeripheral { if (arguments.length > 2) { - if (!(arguments[2] instanceof Double)) // Arg wrong type + if (!(arguments[1] instanceof Double)) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); } From dc96f2121adcd07fedf67aafdc40d8095b8c4285 Mon Sep 17 00:00:00 2001 From: Restioson Date: Mon, 8 May 2017 19:27:14 +0200 Subject: [PATCH 20/42] Fix Speaker not playing sounds on break and replace for entire Lua session --- .../peripheral/common/BlockPeripheral.java | 1 + .../peripheral/speaker/SpeakerPeripheral.java | 8 +++----- .../shared/peripheral/speaker/TileSpeaker.java | 16 +++++++++------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java index 7d83ce3f5..915bdb049 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java @@ -334,6 +334,7 @@ public class BlockPeripheral extends BlockPeripheralBase break; } case Speaker: { + state = state.withProperty( Properties.FACING, dir ); break; } case Monitor: diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index e8e48214e..bf096a422 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -16,7 +16,7 @@ import net.minecraft.util.SoundEvent; public class SpeakerPeripheral implements IPeripheral { - private final TileSpeaker m_speaker; + private TileSpeaker m_speaker; private long m_clock; private long m_lastPlayTime; @@ -27,12 +27,11 @@ public class SpeakerPeripheral implements IPeripheral { m_lastPlayTime = 0; } - protected void updateClock() + void updateClock() { m_clock++; } - /* IPeripheral implementations */ @Override @@ -80,7 +79,6 @@ public class SpeakerPeripheral implements IPeripheral { @Override public Object[] callMethod(IComputerAccess computerAccess, ILuaContext context, int methodIndex, Object[] args) throws LuaException { - switch (methodIndex) { // playsound @@ -96,7 +94,7 @@ public class SpeakerPeripheral implements IPeripheral { default: { - return null; + throw new LuaException("Method index out of range!"); } } diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java index 275a117b7..b74ac4a47 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java @@ -6,6 +6,7 @@ package dan200.computercraft.shared.peripheral.speaker; +import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.shared.peripheral.common.TilePeripheralBase; import net.minecraft.util.EnumFacing; @@ -18,20 +19,21 @@ public class TileSpeaker extends TilePeripheralBase // Members private SpeakerPeripheral m_peripheral; - @Override - public synchronized void update() + public TileSpeaker() { - if (m_peripheral != null) - { - m_peripheral.updateClock(); - } + super(); + m_peripheral = new SpeakerPeripheral(this); + } + @Override + public synchronized void update() { + m_peripheral.updateClock(); } // IPeripheralTile implementation + public IPeripheral getPeripheral(EnumFacing side) { - m_peripheral = new SpeakerPeripheral(this); return m_peripheral; } From 3bf15a37982a8fac617bba552d7f8b33aad20779 Mon Sep 17 00:00:00 2001 From: Restioson Date: Mon, 8 May 2017 19:34:21 +0200 Subject: [PATCH 21/42] Added speaker model - potentially glitched --- .../models/block/turtle_speaker_upgrade_left.json | 6 ++++++ .../models/block/turtle_speaker_upgrade_right.json | 6 ++++++ 2 files changed, 12 insertions(+) create mode 100644 src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_left.json create mode 100644 src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_right.json diff --git a/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_left.json b/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_left.json new file mode 100644 index 000000000..bfc5c4e3d --- /dev/null +++ b/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_left.json @@ -0,0 +1,6 @@ +{ + "parent": "computercraft:block/turtle_upgrade_base_left", + "textures": { + "texture": "computercraft:blocks/speakerFront" + } +} diff --git a/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_right.json b/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_right.json new file mode 100644 index 000000000..143d681fa --- /dev/null +++ b/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_right.json @@ -0,0 +1,6 @@ +{ + "parent": "computercraft:block/turtle_upgrade_base_right", + "textures": { + "texture": "computercraft:blocks/speakerFront" + } +} From a3b0e4e993501eeff2e04300e2d02de554058e37 Mon Sep 17 00:00:00 2001 From: Restioson Date: Wed, 10 May 2017 16:46:18 +0200 Subject: [PATCH 22/42] Added speaker as turtle peripheral --- .../dan200/computercraft/ComputerCraft.java | 1 + .../peripheral/speaker/SpeakerPeripheral.java | 25 ++- .../peripheral/speaker/TileSpeaker.java | 11 +- .../shared/proxy/CCTurtleProxyCommon.java | 9 +- .../shared/turtle/upgrades/TurtleSpeaker.java | 168 ++++++++++++++++++ .../assets/computercraft/lang/en_US.lang | 1 + 6 files changed, 203 insertions(+), 12 deletions(-) create mode 100644 src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index 210af293e..18b951fde 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -164,6 +164,7 @@ public class ComputerCraft public static TurtleAxe diamondAxe; public static TurtleHoe diamondHoe; public static TurtleModem advancedModem; + public static TurtleSpeaker turtleSpeaker; } public static class PocketUpgrades diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index bf096a422..78ce71267 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -13,6 +13,8 @@ import dan200.computercraft.api.peripheral.IPeripheral; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; public class SpeakerPeripheral implements IPeripheral { @@ -20,18 +22,33 @@ public class SpeakerPeripheral implements IPeripheral { private long m_clock; private long m_lastPlayTime; - public SpeakerPeripheral(TileSpeaker speaker) + public SpeakerPeripheral() { - m_speaker = speaker; m_clock = 0; m_lastPlayTime = 0; } - void updateClock() + public SpeakerPeripheral(TileSpeaker speaker) + { + this(); + m_speaker = speaker; + } + + public void updateClock() { m_clock++; } + public World getWorld() + { + return m_speaker.getWorld(); + } + + public BlockPos getPos() + { + return m_speaker.getPos(); + } + /* IPeripheral implementations */ @Override @@ -197,7 +214,7 @@ public class SpeakerPeripheral implements IPeripheral { if (SoundEvent.REGISTRY.containsKey(resourceName)) { - m_speaker.getWorld().playSound(null, m_speaker.getPos(), new SoundEvent(resourceName), SoundCategory.RECORDS, volume, pitch); + getWorld().playSound(null, getPos(), new SoundEvent(resourceName), SoundCategory.RECORDS, volume, pitch); m_lastPlayTime = m_clock; return new Object[]{true}; // Success, return true } diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java index b74ac4a47..94a2b2243 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java @@ -6,18 +6,17 @@ package dan200.computercraft.shared.peripheral.speaker; -import dan200.computercraft.api.peripheral.IComputerAccess; -import dan200.computercraft.api.peripheral.IPeripheral; -import dan200.computercraft.shared.peripheral.common.TilePeripheralBase; -import net.minecraft.util.EnumFacing; + import dan200.computercraft.api.peripheral.IPeripheral; + import dan200.computercraft.shared.peripheral.common.TilePeripheralBase; + import net.minecraft.util.EnumFacing; public class TileSpeaker extends TilePeripheralBase { // Statics - public static final int MIN_TICKS_BETWEEN_SOUNDS = 1; + static final int MIN_TICKS_BETWEEN_SOUNDS = 1; // Members - private SpeakerPeripheral m_peripheral; + private SpeakerPeripheral m_peripheral; // TODO what happens when multiple computers wrap one peripheral? public TileSpeaker() { diff --git a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java index 784633e16..f36f8eaf8 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java @@ -10,6 +10,7 @@ import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.items.ComputerItemFactory; +import dan200.computercraft.shared.peripheral.speaker.SpeakerPeripheral; import dan200.computercraft.shared.turtle.blocks.BlockTurtle; import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.blocks.TileTurtleAdvanced; @@ -124,7 +125,7 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy public static boolean isUpgradeVanilla( ITurtleUpgrade upgrade ) { - return upgrade instanceof TurtleTool || upgrade instanceof TurtleModem || upgrade instanceof TurtleCraftingTable; + return upgrade instanceof TurtleTool || upgrade instanceof TurtleModem || upgrade instanceof TurtleCraftingTable || upgrade instanceof TurtleSpeaker; } public static boolean isUpgradeSuitableForFamily( ComputerFamily family, ITurtleUpgrade upgrade ) @@ -404,8 +405,12 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy ComputerCraft.Upgrades.diamondHoe = new TurtleHoe( new ResourceLocation( "minecraft", "diamond_hoe" ), 7, "upgrade.minecraft:diamond_hoe.adjective", Items.DIAMOND_HOE ); registerTurtleUpgradeInternal( ComputerCraft.Upgrades.diamondHoe ); - ComputerCraft.Upgrades.advancedModem = new TurtleModem( true, new ResourceLocation( "computercraft", "advanced_modem" ), -1 ); + ComputerCraft.Upgrades.advancedModem = new TurtleModem( true, new ResourceLocation( "computercraft", "advanced_modem" ), -1 ); registerTurtleUpgradeInternal( ComputerCraft.Upgrades.advancedModem ); + + ComputerCraft.Upgrades.turtleSpeaker = new TurtleSpeaker( new ResourceLocation( "computercraft", "speaker" ), 8 ); + registerTurtleUpgradeInternal( ComputerCraft.Upgrades.turtleSpeaker ); + } @Override diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java new file mode 100644 index 000000000..a83e5f193 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java @@ -0,0 +1,168 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ + + +package dan200.computercraft.shared.turtle.upgrades; + +import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.api.turtle.*; +import dan200.computercraft.shared.peripheral.PeripheralType; +import dan200.computercraft.shared.peripheral.common.PeripheralItemFactory; +import dan200.computercraft.shared.peripheral.speaker.SpeakerPeripheral; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ModelManager; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.tuple.Pair; + +import javax.annotation.Nonnull; +import javax.vecmath.Matrix4f; + +public class TurtleSpeaker implements ITurtleUpgrade +{ + private static class Peripheral extends SpeakerPeripheral + { + // Members + ITurtleAccess m_turtle; + + public Peripheral(ITurtleAccess turtle) + { + super(); + m_turtle = turtle; + } + + @Override + public World getWorld() + { + return m_turtle.getWorld(); + } + + @Override + public BlockPos getPos() + { + return m_turtle.getPosition(); + } + + @Override + public boolean equals(IPeripheral other) + { + if (other instanceof Peripheral) + { + Peripheral otherPeripheral = (Peripheral) other; + return otherPeripheral.m_turtle == m_turtle; + } + + return false; + } + } + + // Members + ResourceLocation m_id; + int m_legacyID; + Peripheral m_peripheral; + + @SideOnly( Side.CLIENT ) + private ModelResourceLocation m_leftModel; + + @SideOnly( Side.CLIENT ) + private ModelResourceLocation m_rightModel; + + public TurtleSpeaker(ResourceLocation id, int legacyId ) + { + m_id = id; + m_legacyID = legacyId; + } + + @Nonnull + @Override + public ResourceLocation getUpgradeID() + { + return m_id; + } + + @Override + public int getLegacyUpgradeID() + { + return m_legacyID; + } + + @Nonnull + @Override + public String getUnlocalisedAdjective() + { + return "upgrade.computercraft:speaker.adjective"; + } + + @Nonnull + @Override + public TurtleUpgradeType getType() + { + return TurtleUpgradeType.Peripheral; + } + + @Override + public ItemStack getCraftingItem() + { + return PeripheralItemFactory.create( PeripheralType.Speaker, null, 1 ); + } + + @Override + public IPeripheral createPeripheral( @Nonnull ITurtleAccess turtle, @Nonnull TurtleSide side ) + { + m_peripheral = new TurtleSpeaker.Peripheral( turtle ); + return m_peripheral; // TODO does this go in constructor? + } + + @Nonnull + @Override + public TurtleCommandResult useTool(@Nonnull ITurtleAccess turtleAccess, @Nonnull TurtleSide turtleSide, @Nonnull TurtleVerb verb, @Nonnull EnumFacing direction) + { + return null; + } + + @SideOnly( Side.CLIENT ) + private void loadModelLocations() + { + if( m_leftModel == null ) + { + m_leftModel = new ModelResourceLocation( "computercraft:turtle_speaker_upgrade_left", "inventory" ); + m_rightModel = new ModelResourceLocation( "computercraft:turtle_speaker_upgrade_right", "inventory" ); + } + } + + @Nonnull + @Override + @SideOnly( Side.CLIENT ) + public Pair getModel(ITurtleAccess turtle, @Nonnull TurtleSide side ) { + + loadModelLocations(); + ModelManager modelManager = Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager(); + + if (side == TurtleSide.Left) + { + return Pair.of(modelManager.getModel( m_leftModel ), null); + } + + else + { + return Pair.of(modelManager.getModel( m_rightModel ), null); + } + + } + + @Override + public void update(@Nonnull ITurtleAccess turtleAccess, @Nonnull TurtleSide turtleSide) + { + m_peripheral.updateClock(); + } +} diff --git a/src/main/resources/assets/computercraft/lang/en_US.lang b/src/main/resources/assets/computercraft/lang/en_US.lang index 11e5c0693..c336c33b4 100644 --- a/src/main/resources/assets/computercraft/lang/en_US.lang +++ b/src/main/resources/assets/computercraft/lang/en_US.lang @@ -37,6 +37,7 @@ upgrade.minecraft:diamond_hoe.adjective=Farming upgrade.computercraft:wireless_modem.adjective=Wireless upgrade.minecraft:crafting_table.adjective=Crafty upgrade.computercraft:advanced_modem.adjective=Ender +upgrade.computercraft:speaker.adjective=Noisy gui.computercraft:wired_modem.peripheral_connected=Peripheral "%s" connected to network gui.computercraft:wired_modem.peripheral_disconnected=Peripheral "%s" disconnected from network From 97a6679510ef425270a8e4e4ec78d1c5a769e80b Mon Sep 17 00:00:00 2001 From: Restioson Date: Wed, 10 May 2017 19:28:31 +0200 Subject: [PATCH 23/42] Dammit, I hope my git history works now! --- .../computercraft/client/proxy/ComputerCraftProxyClient.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java index 7f9fb37ce..ecf46afea 100644 --- a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java @@ -97,11 +97,10 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon registerItemModel( ComputerCraft.Blocks.peripheral, 3, "printer" ); registerItemModel( ComputerCraft.Blocks.peripheral, 4, "advanced_monitor" ); registerItemModel( ComputerCraft.Blocks.cable, 0, "cable" ); - registerItemModel( ComputerCraft.Blocks.peripheral, 5, "speaker" ); - registerItemModel( ComputerCraft.Blocks.cable, 0, "CC-Cable" ); registerItemModel( ComputerCraft.Blocks.cable, 1, "wired_modem" ); registerItemModel( ComputerCraft.Blocks.commandComputer, "command_computer" ); registerItemModel( ComputerCraft.Blocks.advancedModem, "advanced_modem" ); + registerItemModel( ComputerCraft.Blocks.peripheral, 5, "speaker" ); registerItemModel( ComputerCraft.Items.disk, "disk" ); registerItemModel( ComputerCraft.Items.diskExpanded, "disk_expanded" ); From 093d2ea89f99fa9ecb52b71d60d592874ab52b00 Mon Sep 17 00:00:00 2001 From: Restioson Date: Fri, 12 May 2017 20:57:48 +0200 Subject: [PATCH 24/42] Added PocketSpeaker & corrected blockmodel for turtle speaker --- .../dan200/computercraft/ComputerCraft.java | 13 ++- .../client/proxy/CCTurtleProxyClient.java | 2 + .../peripheral/speaker/SpeakerPeripheral.java | 19 ++-- .../peripheral/speaker/TileSpeaker.java | 2 +- .../pocket/peripherals/PocketSpeaker.java | 87 ++++++++++++++++++ .../peripherals/PocketSpeakerPeripheral.java | 58 ++++++++++++ .../proxy/ComputerCraftProxyCommon.java | 4 + .../shared/turtle/upgrades/TurtleSpeaker.java | 27 ++++-- .../computercraft/models/block/speaker.json | 6 +- .../block/turtle_speaker_upgrade_left.json | 2 +- .../block/turtle_speaker_upgrade_right.json | 2 +- .../{speakerFront.png => speaker_front.png} | Bin .../{speakerSide.png => speaker_side.png} | Bin .../{speakerTop.png => speaker_top.png} | Bin .../textures/blocks/turtle_speaker_face.png | Bin 0 -> 452 bytes 15 files changed, 199 insertions(+), 23 deletions(-) create mode 100644 src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeaker.java create mode 100644 src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeakerPeripheral.java rename src/main/resources/assets/computercraft/textures/blocks/{speakerFront.png => speaker_front.png} (100%) rename src/main/resources/assets/computercraft/textures/blocks/{speakerSide.png => speaker_side.png} (100%) rename src/main/resources/assets/computercraft/textures/blocks/{speakerTop.png => speaker_top.png} (100%) create mode 100644 src/main/resources/assets/computercraft/textures/blocks/turtle_speaker_face.png diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index 18b951fde..abbcb5e18 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -40,6 +40,7 @@ import dan200.computercraft.shared.peripheral.modem.WirelessNetwork; import dan200.computercraft.shared.peripheral.printer.TilePrinter; import dan200.computercraft.shared.pocket.items.ItemPocketComputer; import dan200.computercraft.shared.pocket.peripherals.PocketModem; +import dan200.computercraft.shared.pocket.peripherals.PocketSpeaker; import dan200.computercraft.shared.proxy.ICCTurtleProxy; import dan200.computercraft.shared.proxy.IComputerCraftProxy; import dan200.computercraft.shared.turtle.blocks.BlockTurtle; @@ -132,6 +133,8 @@ public class ComputerCraft public static int floppySpaceLimit = 125 * 1000; public static int maximumFilesOpen = 128; + public static int maxNotesPerTick = 8; + // Blocks and Items public static class Blocks { @@ -171,6 +174,7 @@ public class ComputerCraft { public static PocketModem wirelessModem; public static PocketModem advancedModem; + public static PocketSpeaker pocketSpeaker; } public static class Config { @@ -196,6 +200,8 @@ public class ComputerCraft public static Property computerSpaceLimit; public static Property floppySpaceLimit; public static Property maximumFilesOpen; + public static Property maxNotesPerTick; + } // Registries @@ -287,6 +293,9 @@ public class ComputerCraft Config.turtlesCanPush = Config.config.get( Configuration.CATEGORY_GENERAL, "turtlesCanPush", turtlesCanPush ); Config.turtlesCanPush.setComment( "If set to true, Turtles will push entities out of the way instead of stopping if there is space to do so" ); + Config.maxNotesPerTick = Config.config.get( Configuration.CATEGORY_GENERAL, "maxNotesPerTick", maxNotesPerTick ); + Config.maxNotesPerTick.setComment( "Maximum amount of sounds a speaker can play at once" ); + for (Property property : Config.config.getCategory( Configuration.CATEGORY_GENERAL ).getOrderedValues()) { property.setLanguageKey( "gui.computercraft:config." + CaseFormat.LOWER_CAMEL.to( CaseFormat.LOWER_UNDERSCORE, property.getName() ) ); @@ -326,6 +335,8 @@ public class ComputerCraft turtlesObeyBlockProtection = Config.turtlesObeyBlockProtection.getBoolean(); turtlesCanPush = Config.turtlesCanPush.getBoolean(); + maximumFilesOpen = Math.max(1, Config.maximumFilesOpen.getInt()); + Config.config.save(); } @@ -704,7 +715,7 @@ public class ComputerCraft public static Iterable getVanillaPocketUpgrades() { List upgrades = new ArrayList(); for(IPocketUpgrade upgrade : pocketUpgrades.values()) { - if(upgrade instanceof PocketModem) { + if(upgrade instanceof PocketModem || upgrade instanceof PocketSpeaker) { upgrades.add( upgrade ); } } diff --git a/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java index 790eb8b99..22fdfe893 100644 --- a/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java @@ -155,6 +155,8 @@ public class CCTurtleProxyClient extends CCTurtleProxyCommon loadModel( event, "advanced_turtle_modem_on_left" ); loadModel( event, "advanced_turtle_modem_off_right" ); loadModel( event, "advanced_turtle_modem_on_right" ); + loadModel( event, "turtle_speaker_upgrade_left" ); + loadModel( event, "turtle_speaker_upgrade_right" ); loadSmartModel( event, "turtle_dynamic", m_turtleSmartItemModel ); } diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index 78ce71267..79c19bf60 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -6,6 +6,7 @@ package dan200.computercraft.shared.peripheral.speaker; +import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.peripheral.IComputerAccess; @@ -21,11 +22,13 @@ public class SpeakerPeripheral implements IPeripheral { private TileSpeaker m_speaker; private long m_clock; private long m_lastPlayTime; + private int m_notesThisTick; public SpeakerPeripheral() { m_clock = 0; m_lastPlayTime = 0; + m_notesThisTick = 0; } public SpeakerPeripheral(TileSpeaker speaker) @@ -34,9 +37,9 @@ public class SpeakerPeripheral implements IPeripheral { m_speaker = speaker; } - public void updateClock() - { + public void update() { m_clock++; + m_notesThisTick = 0; } public World getWorld() @@ -100,7 +103,7 @@ public class SpeakerPeripheral implements IPeripheral { { // playsound case 0: { - return playSound(args); + return playSound(args, false); } // playnote @@ -162,11 +165,15 @@ public class SpeakerPeripheral implements IPeripheral { throw new LuaException("Expected string, number (optional), number (optional)"); } - return playSound(new Object[] {"block.note." + arguments[0], volume, Math.pow(2d, (pitch - 12) / 12d)}); + // If the resource location for noteblock notes changes, this method call will need to be updated + Object[] returnValue = playSound(new Object[] {"block.note." + arguments[0], volume, Math.pow(2d, (pitch - 12) / 12d)}, true); + m_notesThisTick++; + + return returnValue; } - private Object[] playSound(Object[] arguments) throws LuaException + private Object[] playSound(Object[] arguments, boolean isNote) throws LuaException { float volume = 1f; @@ -209,7 +216,7 @@ public class SpeakerPeripheral implements IPeripheral { ResourceLocation resourceName = new ResourceLocation((String) arguments[0]); - if (m_clock - m_lastPlayTime > TileSpeaker.MIN_TICKS_BETWEEN_SOUNDS) + if (m_clock - m_lastPlayTime > TileSpeaker.MIN_TICKS_BETWEEN_SOUNDS || ((m_clock - m_lastPlayTime == 0) && (m_notesThisTick < ComputerCraft.maxNotesPerTick) && isNote)) { if (SoundEvent.REGISTRY.containsKey(resourceName)) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java index 94a2b2243..34d317e3e 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java @@ -26,7 +26,7 @@ public class TileSpeaker extends TilePeripheralBase @Override public synchronized void update() { - m_peripheral.updateClock(); + m_peripheral.update(); } // IPeripheralTile implementation diff --git a/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeaker.java b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeaker.java new file mode 100644 index 000000000..534bd7f0c --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeaker.java @@ -0,0 +1,87 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ + +package dan200.computercraft.shared.pocket.peripherals; + +import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.api.pocket.IPocketAccess; +import dan200.computercraft.api.pocket.IPocketUpgrade; +import dan200.computercraft.shared.peripheral.PeripheralType; +import dan200.computercraft.shared.peripheral.common.PeripheralItemFactory; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class PocketSpeaker implements IPocketUpgrade +{ + public PocketSpeaker() + { + } + + @Nonnull + @Override + public ResourceLocation getUpgradeID() + { + return new ResourceLocation( "computercraft", "speaker" ); + } + + @Nonnull + @Override + public String getUnlocalisedAdjective() + { + return "upgrade.computercraft:speaker.adjective"; + } + + @Nullable + @Override + public ItemStack getCraftingItem() + { + return PeripheralItemFactory.create(PeripheralType.Speaker, null, 1); + } + + @Nullable + @Override + public IPeripheral createPeripheral( @Nonnull IPocketAccess access ) + { + return new PocketSpeakerPeripheral(); + } + + @Override + public void update( @Nonnull IPocketAccess access, @Nullable IPeripheral peripheral ) + { + if ( peripheral instanceof PocketSpeakerPeripheral ) + { + Entity entity = access.getEntity(); + + PocketSpeakerPeripheral speaker = (PocketSpeakerPeripheral) peripheral; + + if ( entity instanceof EntityLivingBase) + { + EntityLivingBase player = (EntityLivingBase) entity; + speaker.setLocation( entity.getEntityWorld(), player.posX, player.posY + player.getEyeHeight(), player.posZ ); + } + + else if ( entity != null ) + { + speaker.setLocation( entity.getEntityWorld(), entity.posX, entity.posY, entity.posZ ); + } + speaker.update(); + } + } + + @Override + public boolean onRightClick(@Nonnull World world, @Nonnull IPocketAccess access, @Nullable IPeripheral peripheral ) + { + return false; + } + + +} diff --git a/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeakerPeripheral.java new file mode 100644 index 000000000..97bb6df58 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeakerPeripheral.java @@ -0,0 +1,58 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ + +package dan200.computercraft.shared.pocket.peripherals; + +import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.shared.peripheral.speaker.SpeakerPeripheral; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class PocketSpeakerPeripheral extends SpeakerPeripheral +{ + private World m_world; + private BlockPos m_position; + + public PocketSpeakerPeripheral() + { + super(); + m_world = null; + m_position = new BlockPos( 0.0, 0.0, 0.0 ); + } + + public void setLocation( World world, double x, double y, double z ) + { + m_position = new BlockPos( x, y, z ); + + if( m_world != world ) + { + m_world = world; + } + } + + @Override + public World getWorld() + { + return m_world; + } + + @Override + public BlockPos getPos() + { + if( m_world != null ) + { + return m_position; + } + return null; + } + + @Override + public boolean equals( IPeripheral other ) + { + // Sufficient because of use case: checking peripherals on individual pocket computers -- there will not be +1 + return other instanceof PocketSpeakerPeripheral; + } +} diff --git a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java index 9751914ce..42d6ebd49 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java @@ -49,6 +49,7 @@ import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer; import dan200.computercraft.shared.pocket.items.ItemPocketComputer; import dan200.computercraft.shared.pocket.items.PocketComputerItemFactory; import dan200.computercraft.shared.pocket.peripherals.PocketModem; +import dan200.computercraft.shared.pocket.peripherals.PocketSpeaker; import dan200.computercraft.shared.pocket.recipes.PocketComputerUpgradeRecipe; import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.inventory.ContainerTurtle; @@ -453,6 +454,9 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy ComputerCraft.PocketUpgrades.advancedModem = new PocketModem( true ); ComputerCraftAPI.registerPocketUpgrade( ComputerCraft.PocketUpgrades.advancedModem ); + ComputerCraft.PocketUpgrades.pocketSpeaker = new PocketSpeaker(); + ComputerCraftAPI.registerPocketUpgrade( ComputerCraft.PocketUpgrades.pocketSpeaker ); + // Wireless Pocket Computer GameRegistry.addRecipe( new PocketComputerUpgradeRecipe() ); diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java index a83e5f193..923a45db4 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java @@ -24,7 +24,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.apache.commons.lang3.tuple.Pair; - import javax.annotation.Nonnull; import javax.vecmath.Matrix4f; @@ -41,6 +40,12 @@ public class TurtleSpeaker implements ITurtleUpgrade m_turtle = turtle; } + @Override + public void update() + { + super.update(); + } + @Override public World getWorld() { @@ -67,9 +72,8 @@ public class TurtleSpeaker implements ITurtleUpgrade } // Members - ResourceLocation m_id; - int m_legacyID; - Peripheral m_peripheral; + private ResourceLocation m_id; + private int m_legacyID; @SideOnly( Side.CLIENT ) private ModelResourceLocation m_leftModel; @@ -77,7 +81,7 @@ public class TurtleSpeaker implements ITurtleUpgrade @SideOnly( Side.CLIENT ) private ModelResourceLocation m_rightModel; - public TurtleSpeaker(ResourceLocation id, int legacyId ) + public TurtleSpeaker(ResourceLocation id, int legacyId) { m_id = id; m_legacyID = legacyId; @@ -119,15 +123,14 @@ public class TurtleSpeaker implements ITurtleUpgrade @Override public IPeripheral createPeripheral( @Nonnull ITurtleAccess turtle, @Nonnull TurtleSide side ) { - m_peripheral = new TurtleSpeaker.Peripheral( turtle ); - return m_peripheral; // TODO does this go in constructor? + return new TurtleSpeaker.Peripheral(turtle); } @Nonnull @Override public TurtleCommandResult useTool(@Nonnull ITurtleAccess turtleAccess, @Nonnull TurtleSide turtleSide, @Nonnull TurtleVerb verb, @Nonnull EnumFacing direction) { - return null; + return TurtleCommandResult.failure(); } @SideOnly( Side.CLIENT ) @@ -161,8 +164,12 @@ public class TurtleSpeaker implements ITurtleUpgrade } @Override - public void update(@Nonnull ITurtleAccess turtleAccess, @Nonnull TurtleSide turtleSide) + public void update(@Nonnull ITurtleAccess turtle, @Nonnull TurtleSide turtleSide) { - m_peripheral.updateClock(); + if (turtle.getPeripheral(turtleSide) instanceof Peripheral) + { + Peripheral peripheral = (Peripheral) turtle.getPeripheral(turtleSide); + peripheral.update(); + } } } diff --git a/src/main/resources/assets/computercraft/models/block/speaker.json b/src/main/resources/assets/computercraft/models/block/speaker.json index afc4d4e21..288d44523 100644 --- a/src/main/resources/assets/computercraft/models/block/speaker.json +++ b/src/main/resources/assets/computercraft/models/block/speaker.json @@ -1,8 +1,8 @@ { "parent": "block/orientable", "textures": { - "front": "computercraft:blocks/speakerFront", - "side": "computercraft:blocks/speakerSide", - "top": "computercraft:blocks/speakerTop" + "front": "computercraft:blocks/speaker_front", + "side": "computercraft:blocks/speaker_side", + "top": "computercraft:blocks/speaker_top" } } diff --git a/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_left.json b/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_left.json index bfc5c4e3d..d2109d0ec 100644 --- a/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_left.json +++ b/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_left.json @@ -1,6 +1,6 @@ { "parent": "computercraft:block/turtle_upgrade_base_left", "textures": { - "texture": "computercraft:blocks/speakerFront" + "texture": "computercraft:blocks/turtle_speaker_face" } } diff --git a/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_right.json b/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_right.json index 143d681fa..96e67bcc0 100644 --- a/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_right.json +++ b/src/main/resources/assets/computercraft/models/block/turtle_speaker_upgrade_right.json @@ -1,6 +1,6 @@ { "parent": "computercraft:block/turtle_upgrade_base_right", "textures": { - "texture": "computercraft:blocks/speakerFront" + "texture": "computercraft:blocks/turtle_speaker_face" } } diff --git a/src/main/resources/assets/computercraft/textures/blocks/speakerFront.png b/src/main/resources/assets/computercraft/textures/blocks/speaker_front.png similarity index 100% rename from src/main/resources/assets/computercraft/textures/blocks/speakerFront.png rename to src/main/resources/assets/computercraft/textures/blocks/speaker_front.png diff --git a/src/main/resources/assets/computercraft/textures/blocks/speakerSide.png b/src/main/resources/assets/computercraft/textures/blocks/speaker_side.png similarity index 100% rename from src/main/resources/assets/computercraft/textures/blocks/speakerSide.png rename to src/main/resources/assets/computercraft/textures/blocks/speaker_side.png diff --git a/src/main/resources/assets/computercraft/textures/blocks/speakerTop.png b/src/main/resources/assets/computercraft/textures/blocks/speaker_top.png similarity index 100% rename from src/main/resources/assets/computercraft/textures/blocks/speakerTop.png rename to src/main/resources/assets/computercraft/textures/blocks/speaker_top.png diff --git a/src/main/resources/assets/computercraft/textures/blocks/turtle_speaker_face.png b/src/main/resources/assets/computercraft/textures/blocks/turtle_speaker_face.png new file mode 100644 index 0000000000000000000000000000000000000000..b115d457c27208379785723a8852773154f0c987 GIT binary patch literal 452 zcmV;#0XzPQP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00A^fL_t(IPj!(?iiI!`MYD^Z_!%gOXsakK z;&-mNA>rY`1&IUq*C(k*kfz@qNUG|dR8>?>)BG4!RaF#4p6B02VHkE@Cso2Iit4&9 z%TfdTz8}Z&GU6b5p0{nogESDwF{w}1rvMm1(N1D~Ums)*+^$EGn8G-Y@Sf*6j>CZv zWm#q!7E?)*$P8qu4MrrvT-Qz0lu!UR(ExiGSOb*tp}z0&0Z2nia%m6*ig#oi0iGrf zy4NuHzAqiHwQZ|}MjY_*_RNh5fC>2$3V^7pWm(SiysnEZKBnR;cjHDhq=ezV?`fJe zKp+4YPzFF8WD^S@{U4qHH3q;WuY?4%9rT~JBMI}bq>2q*&GQT@DJz?KmfjuKb(NS4 uo{}UcVI-+Lus9rIp+BPhJ{f6KS^feDC;uoTjsm^_0000#ceK literal 0 HcmV?d00001 From 42962dcd483a6795a644b58a1d50b7479a2804a8 Mon Sep 17 00:00:00 2001 From: Restioson Date: Fri, 12 May 2017 21:10:53 +0200 Subject: [PATCH 25/42] Fix Noisy turtles not in creative - Thanks @SquidDev --- .../dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java index f36f8eaf8..87b807de4 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java @@ -8,6 +8,7 @@ package dan200.computercraft.shared.proxy; import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.turtle.ITurtleUpgrade; +import dan200.computercraft.core.computer.Computer; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.items.ComputerItemFactory; import dan200.computercraft.shared.peripheral.speaker.SpeakerPeripheral; @@ -155,6 +156,7 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy addUpgradedTurtle( family, ComputerCraft.Upgrades.craftingTable, list ); addUpgradedTurtle( family, ComputerCraft.Upgrades.wirelessModem, list ); addUpgradedTurtle( family, ComputerCraft.Upgrades.advancedModem, list ); + addUpgradedTurtle( family, ComputerCraft.Upgrades.turtleSpeaker, list ); } private void addUpgradedTurtle( ComputerFamily family, ITurtleUpgrade upgrade, List list ) From 88b55934c77087ae5f651cf87cba87b02644a490 Mon Sep 17 00:00:00 2001 From: Restioson Date: Fri, 12 May 2017 21:19:37 +0200 Subject: [PATCH 26/42] Fix castException --- .../shared/peripheral/speaker/SpeakerPeripheral.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index 79c19bf60..995a326e9 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -202,7 +202,7 @@ public class SpeakerPeripheral implements IPeripheral { if (arguments.length > 2) { - if (!(arguments[1] instanceof Double)) // Arg wrong type + if (!(arguments[2] instanceof Double)) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); } From aad81bead7b55738c886bfb7c3c18bcc94efccfa Mon Sep 17 00:00:00 2001 From: Restioson Date: Sat, 13 May 2017 09:39:24 +0200 Subject: [PATCH 27/42] Fix style @gegy1000 don't say *I* get distracted --- .../shared/peripheral/common/BlockPeripheral.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java index 915bdb049..eddee8948 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java @@ -333,7 +333,8 @@ public class BlockPeripheral extends BlockPeripheralBase } break; } - case Speaker: { + case Speaker: + { state = state.withProperty( Properties.FACING, dir ); break; } From 7ff4631a9f2dbed3af047199e842ec220b184629 Mon Sep 17 00:00:00 2001 From: Restioson Date: Sat, 13 May 2017 09:47:30 +0200 Subject: [PATCH 28/42] @gegy1000 strikes again --- .../shared/peripheral/speaker/SpeakerPeripheral.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index 995a326e9..191cf36f3 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -102,7 +102,8 @@ public class SpeakerPeripheral implements IPeripheral { switch (methodIndex) { // playsound - case 0: { + case 0: + { return playSound(args, false); } From b3c49db7617e5e43468015dca55ebb2c84451e0c Mon Sep 17 00:00:00 2001 From: Restioson Date: Mon, 15 May 2017 16:47:13 +0200 Subject: [PATCH 29/42] Made Speaker threadsafe & fix warnings --- .../shared/peripheral/speaker/SoundTask.java | 45 +++++++++++++++++++ .../peripheral/speaker/SpeakerPeripheral.java | 35 +++++++++------ .../peripheral/speaker/TileSpeaker.java | 4 +- .../peripherals/PocketSpeakerPeripheral.java | 4 +- .../shared/turtle/upgrades/TurtleSpeaker.java | 6 ++- 5 files changed, 74 insertions(+), 20 deletions(-) create mode 100644 src/main/java/dan200/computercraft/shared/peripheral/speaker/SoundTask.java diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SoundTask.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SoundTask.java new file mode 100644 index 000000000..8d680badb --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SoundTask.java @@ -0,0 +1,45 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ + +package dan200.computercraft.shared.peripheral.speaker; + +import dan200.computercraft.api.lua.ILuaTask; +import dan200.computercraft.api.lua.LuaException; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +public class SoundTask implements ILuaTask +{ + + SoundTask(World world, BlockPos pos, ResourceLocation resourceName, float volume, float pitch) + { + m_world = world; + m_pos = pos; + m_resourceName = resourceName; + m_volume = volume; + m_pitch = pitch; + } + + // Fields + private World m_world; + private BlockPos m_pos; + private ResourceLocation m_resourceName; + private float m_volume; + private float m_pitch; + + + @Nullable + @Override + public Object[] execute() throws LuaException { + m_world.playSound(null, m_pos, new SoundEvent(m_resourceName), SoundCategory.RECORDS, m_volume, m_pitch); + return new Object[]{}; + } +} diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index 191cf36f3..172d026a9 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -1,4 +1,4 @@ -/** +/* * This file is part of ComputerCraft - http://www.computercraft.info * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com @@ -12,11 +12,12 @@ import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.api.peripheral.IPeripheral; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvent; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class SpeakerPeripheral implements IPeripheral { private TileSpeaker m_speaker; @@ -31,7 +32,7 @@ public class SpeakerPeripheral implements IPeripheral { m_notesThisTick = 0; } - public SpeakerPeripheral(TileSpeaker speaker) + SpeakerPeripheral(TileSpeaker speaker) { this(); m_speaker = speaker; @@ -72,21 +73,23 @@ public class SpeakerPeripheral implements IPeripheral { @Override - public void attach(IComputerAccess computerAccess) + public void attach(@Nonnull IComputerAccess computerAccess) { } @Override - public void detach(IComputerAccess computerAccess) + public void detach(@Nonnull IComputerAccess computerAccess) { } + @Nonnull @Override public String getType() { return "speaker"; } + @Nonnull @Override public String[] getMethodNames() { @@ -97,20 +100,20 @@ public class SpeakerPeripheral implements IPeripheral { } @Override - public Object[] callMethod(IComputerAccess computerAccess, ILuaContext context, int methodIndex, Object[] args) throws LuaException + public Object[] callMethod(@Nonnull IComputerAccess computerAccess, @Nonnull ILuaContext context, int methodIndex, @Nonnull Object[] args) throws LuaException { switch (methodIndex) { // playsound case 0: { - return playSound(args, false); + return playSound(args, context, false); } // playnote case 1: { - return playNote(args); + return playNote(args, context); } default: @@ -121,7 +124,7 @@ public class SpeakerPeripheral implements IPeripheral { } } - private Object[] playNote(Object[] arguments) throws LuaException + private Object[] playNote(Object[] arguments, ILuaContext context) throws LuaException { double volume = 1f; double pitch = 1f; @@ -167,14 +170,18 @@ public class SpeakerPeripheral implements IPeripheral { } // If the resource location for noteblock notes changes, this method call will need to be updated - Object[] returnValue = playSound(new Object[] {"block.note." + arguments[0], volume, Math.pow(2d, (pitch - 12) / 12d)}, true); - m_notesThisTick++; + Object[] returnValue = playSound(new Object[] {"block.note." + arguments[0], volume, Math.pow(2d, (pitch - 12) / 12d)}, context, true); + + if (returnValue[0] instanceof Boolean && (Boolean) returnValue[0]) + { + m_notesThisTick++; + } return returnValue; } - private Object[] playSound(Object[] arguments, boolean isNote) throws LuaException + private Object[] playSound(Object[] arguments, ILuaContext context, boolean isNote) throws LuaException { float volume = 1f; @@ -217,12 +224,12 @@ public class SpeakerPeripheral implements IPeripheral { ResourceLocation resourceName = new ResourceLocation((String) arguments[0]); - if (m_clock - m_lastPlayTime > TileSpeaker.MIN_TICKS_BETWEEN_SOUNDS || ((m_clock - m_lastPlayTime == 0) && (m_notesThisTick < ComputerCraft.maxNotesPerTick) && isNote)) + if (m_clock - m_lastPlayTime >= TileSpeaker.MIN_TICKS_BETWEEN_SOUNDS || ((m_clock - m_lastPlayTime == 0) && (m_notesThisTick < ComputerCraft.maxNotesPerTick) && isNote)) { if (SoundEvent.REGISTRY.containsKey(resourceName)) { - getWorld().playSound(null, getPos(), new SoundEvent(resourceName), SoundCategory.RECORDS, volume, pitch); + context.issueMainThreadTask(new SoundTask(getWorld(), getPos(), resourceName, volume, pitch)); m_lastPlayTime = m_clock; return new Object[]{true}; // Success, return true } diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java index 34d317e3e..150554685 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java @@ -1,4 +1,4 @@ -/** +/* * This file is part of ComputerCraft - http://www.computercraft.info * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com @@ -16,7 +16,7 @@ public class TileSpeaker extends TilePeripheralBase static final int MIN_TICKS_BETWEEN_SOUNDS = 1; // Members - private SpeakerPeripheral m_peripheral; // TODO what happens when multiple computers wrap one peripheral? + private SpeakerPeripheral m_peripheral; public TileSpeaker() { diff --git a/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeakerPeripheral.java index 97bb6df58..433e902c2 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeakerPeripheral.java @@ -16,14 +16,14 @@ public class PocketSpeakerPeripheral extends SpeakerPeripheral private World m_world; private BlockPos m_position; - public PocketSpeakerPeripheral() + PocketSpeakerPeripheral() { super(); m_world = null; m_position = new BlockPos( 0.0, 0.0, 0.0 ); } - public void setLocation( World world, double x, double y, double z ) + void setLocation(World world, double x, double y, double z) { m_position = new BlockPos( x, y, z ); diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java index 923a45db4..baa06c776 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java @@ -166,9 +166,11 @@ public class TurtleSpeaker implements ITurtleUpgrade @Override public void update(@Nonnull ITurtleAccess turtle, @Nonnull TurtleSide turtleSide) { - if (turtle.getPeripheral(turtleSide) instanceof Peripheral) + IPeripheral turtlePeripheral = turtle.getPeripheral(turtleSide); + + if (turtlePeripheral instanceof Peripheral) { - Peripheral peripheral = (Peripheral) turtle.getPeripheral(turtleSide); + Peripheral peripheral = (Peripheral) turtlePeripheral; peripheral.update(); } } From bdc438fc6251a1834d6bc8b2c718cd77d3f59a3a Mon Sep 17 00:00:00 2001 From: SquidDev Date: Mon, 8 May 2017 19:28:50 +0100 Subject: [PATCH 30/42] Add a basic logging system This adds a common ILogger interface and two built-in loggers - one which prints to stdout, the other using a Log4J logger. These are split up as not to cause dependency issues for emulators. The stdout logger is enabled by default, but the ComputerCraft mod class will swap over to using FML's mod specific logger, which provides a more consistent look with the rest of Minecraft. --- .../dan200/computercraft/ComputerCraft.java | 4 ++ .../computercraft/core/logger/ILogger.java | 10 +++ .../core/logger/Log4JLogger.java | 59 +++++++++++++++++ .../computercraft/core/logger/Logger.java | 65 +++++++++++++++++++ .../core/logger/StdoutLogger.java | 20 ++++++ 5 files changed, 158 insertions(+) create mode 100644 src/main/java/dan200/computercraft/core/logger/ILogger.java create mode 100644 src/main/java/dan200/computercraft/core/logger/Log4JLogger.java create mode 100644 src/main/java/dan200/computercraft/core/logger/Logger.java create mode 100644 src/main/java/dan200/computercraft/core/logger/StdoutLogger.java diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index 210af293e..219fd00a2 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -20,6 +20,8 @@ import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.core.filesystem.ComboMount; import dan200.computercraft.core.filesystem.FileMount; import dan200.computercraft.core.filesystem.JarMount; +import dan200.computercraft.core.logger.Log4JLogger; +import dan200.computercraft.core.logger.Logger; import dan200.computercraft.shared.common.DefaultBundledRedstoneProvider; import dan200.computercraft.shared.computer.blocks.BlockCommandComputer; import dan200.computercraft.shared.computer.blocks.BlockComputer; @@ -231,6 +233,8 @@ public class ComputerCraft @Mod.EventHandler public void preInit( FMLPreInitializationEvent event ) { + Logger.setInstance( new Log4JLogger( event.getModLog() ) ); + // Load config Config.config = new Configuration( event.getSuggestedConfigurationFile() ); Config.config.load(); diff --git a/src/main/java/dan200/computercraft/core/logger/ILogger.java b/src/main/java/dan200/computercraft/core/logger/ILogger.java new file mode 100644 index 000000000..4c23ffc19 --- /dev/null +++ b/src/main/java/dan200/computercraft/core/logger/ILogger.java @@ -0,0 +1,10 @@ +package dan200.computercraft.core.logger; + +import java.util.logging.Level; + +public interface ILogger +{ + void log( Level level, String message ); + + void log( Level level, String message, Throwable t ); +} diff --git a/src/main/java/dan200/computercraft/core/logger/Log4JLogger.java b/src/main/java/dan200/computercraft/core/logger/Log4JLogger.java new file mode 100644 index 000000000..a15b3222d --- /dev/null +++ b/src/main/java/dan200/computercraft/core/logger/Log4JLogger.java @@ -0,0 +1,59 @@ +package dan200.computercraft.core.logger; + +import org.apache.logging.log4j.Logger; + +import java.util.logging.Level; + +public class Log4JLogger implements ILogger +{ + private final org.apache.logging.log4j.Logger logger; + + public Log4JLogger( Logger logger ) + { + this.logger = logger; + } + + @Override + public void log( Level level, String message ) + { + logger.log( mapLevel( level ), message ); + } + + @Override + public void log( Level level, String message, Throwable t ) + { + logger.log( mapLevel( level ), message, t ); + } + + private static org.apache.logging.log4j.Level mapLevel( Level level ) + { + if( level == Level.SEVERE ) + { + return org.apache.logging.log4j.Level.ERROR; + } + else if( level == Level.WARNING ) + { + return org.apache.logging.log4j.Level.WARN; + } + else if( level == Level.INFO ) + { + return org.apache.logging.log4j.Level.INFO; + } + else if( level == Level.FINE ) + { + return org.apache.logging.log4j.Level.DEBUG; + } + else if( level == Level.FINER ) + { + return org.apache.logging.log4j.Level.TRACE; + } + else if( level == Level.ALL ) + { + return org.apache.logging.log4j.Level.ALL; + } + else + { + return org.apache.logging.log4j.Level.INFO; + } + } +} diff --git a/src/main/java/dan200/computercraft/core/logger/Logger.java b/src/main/java/dan200/computercraft/core/logger/Logger.java new file mode 100644 index 000000000..9687e41c5 --- /dev/null +++ b/src/main/java/dan200/computercraft/core/logger/Logger.java @@ -0,0 +1,65 @@ +package dan200.computercraft.core.logger; + +import javax.annotation.Nonnull; +import java.util.logging.Level; + +public class Logger +{ + private static ILogger instance; + + @Nonnull + public static ILogger getInstance() + { + ILogger logger = instance; + if( logger == null ) logger = instance = new StdoutLogger(); + return logger; + } + + public static void setInstance( @Nonnull ILogger logger ) + { + if( logger == null ) throw new NullPointerException( "Logger cannot be null" ); + instance = logger; + } + + public static void log( Level level, String message ) + { + getInstance().log( level, message ); + } + + public static void log( Level level, String message, Throwable t ) + { + getInstance().log( level, message, t ); + } + + public static void error( String message ) + { + getInstance().log( Level.SEVERE, message ); + } + + public static void error( String message, Throwable t ) + { + getInstance().log( Level.SEVERE, message, t ); + } + + public static void warn( String message ) + { + getInstance().log( Level.WARNING, message ); + } + + public static void warn( String message, Throwable t ) + { + getInstance().log( Level.WARNING, message, t ); + } + + /** + * Logs {@code message} and creates a new {@link RuntimeException} using the same message. + * + * @param message The message to log. + * @return The exception using the same message. + */ + public static RuntimeException loggedError( String message ) + { + getInstance().log( Level.SEVERE, message ); + return new RuntimeException( message ); + } +} diff --git a/src/main/java/dan200/computercraft/core/logger/StdoutLogger.java b/src/main/java/dan200/computercraft/core/logger/StdoutLogger.java new file mode 100644 index 000000000..2abea7cd1 --- /dev/null +++ b/src/main/java/dan200/computercraft/core/logger/StdoutLogger.java @@ -0,0 +1,20 @@ +package dan200.computercraft.core.logger; + +import java.util.logging.Level; + +public class StdoutLogger implements ILogger +{ + + @Override + public void log( Level level, String message ) + { + System.out.printf( "[%s] %s\n", level.getName(), message ); + } + + @Override + public void log( Level level, String message, Throwable t ) + { + System.out.printf( "[%s] %s\n", level.getName(), message ); + t.printStackTrace( System.out ); + } +} From 44ba4069c18d2db004b911c9ed2e8e056d1d4547 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Mon, 8 May 2017 19:55:51 +0100 Subject: [PATCH 31/42] Print stack traces/add logging messages in several places This will hopefully make it easier to track down various issues which might otherwise go unnoticed or provide little information. The main areas modified are those that external APIs may provide values for or interact with: various providers and ILuaObject/IPeripheral implementations. However, we do also log in a couple of other places which indicate a problem with this, or another, mod. --- src/main/java/dan200/computercraft/ComputerCraft.java | 5 +++-- .../dan200/computercraft/core/computer/Computer.java | 3 ++- .../computercraft/core/computer/ComputerThread.java | 7 ++++--- .../dan200/computercraft/core/lua/LuaJLuaMachine.java | 7 ++++++- .../computercraft/shared/computer/apis/CommandAPI.java | 3 +++ .../computercraft/shared/network/PacketHandler.java | 5 +++-- .../shared/proxy/CCTurtleProxyCommon.java | 10 ++++++---- .../dan200/computercraft/shared/util/IDAssigner.java | 10 ++++++---- 8 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index 219fd00a2..f07c8a7ac 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -609,7 +609,7 @@ public class ComputerCraft } catch( Exception e ) { - // mod misbehaved, ignore it + Logger.error( "Peripheral provider " + peripheralProvider + " errored.", e ); } } return null; @@ -653,7 +653,7 @@ public class ComputerCraft } catch( Exception e ) { - // mod misbehaved, ignore it + Logger.error( "Bundled redstone provider " + bundledRedstoneProvider + " errored.", e ); } } return combinedSignal; @@ -677,6 +677,7 @@ public class ComputerCraft catch( Exception e ) { // mod misbehaved, ignore it + Logger.error( "Media provider " + mediaProvider + " errored.", e ); } } return null; diff --git a/src/main/java/dan200/computercraft/core/computer/Computer.java b/src/main/java/dan200/computercraft/core/computer/Computer.java index 712979521..905dea4bf 100644 --- a/src/main/java/dan200/computercraft/core/computer/Computer.java +++ b/src/main/java/dan200/computercraft/core/computer/Computer.java @@ -14,6 +14,7 @@ import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.core.apis.*; import dan200.computercraft.core.filesystem.FileSystem; import dan200.computercraft.core.filesystem.FileSystemException; +import dan200.computercraft.core.logger.Logger; import dan200.computercraft.core.lua.ILuaMachine; import dan200.computercraft.core.lua.LuaJLuaMachine; import dan200.computercraft.core.terminal.Terminal; @@ -469,7 +470,7 @@ public class Computer } catch( FileSystemException e ) { - e.printStackTrace(); + Logger.error( "Cannot mount rom", e ); return false; } } diff --git a/src/main/java/dan200/computercraft/core/computer/ComputerThread.java b/src/main/java/dan200/computercraft/core/computer/ComputerThread.java index 1915c5afb..5178830e4 100644 --- a/src/main/java/dan200/computercraft/core/computer/ComputerThread.java +++ b/src/main/java/dan200/computercraft/core/computer/ComputerThread.java @@ -6,6 +6,8 @@ package dan200.computercraft.core.computer; +import dan200.computercraft.core.logger.Logger; + import java.util.ArrayList; import java.util.Iterator; import java.util.WeakHashMap; @@ -106,8 +108,7 @@ public class ComputerThread try { task.execute(); } catch( Throwable e ) { - System.out.println( "ComputerCraft: Error running task." ); - e.printStackTrace(); + Logger.error( "Error running task", e ); } } } ); @@ -139,7 +140,7 @@ public class ComputerThread // Step 3: abandon if( worker.isAlive() ) { - //System.out.println( "computercraft: Warning! Failed to abort Computer " + computercraft.getDescription() + ". Dangling lua thread could cause errors." ); + Logger.warn( "Failed to abort Computer " + computer.getID() + ". Dangling lua thread could cause errors." ); worker.interrupt(); } } diff --git a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java index 933ca3291..614147aee 100644 --- a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java +++ b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java @@ -15,6 +15,7 @@ import dan200.computercraft.core.apis.ILuaAPI; import dan200.computercraft.core.computer.Computer; import dan200.computercraft.core.computer.ITask; import dan200.computercraft.core.computer.MainThread; +import dan200.computercraft.core.logger.Logger; import org.luaj.vm2.*; import org.luaj.vm2.lib.OneArgFunction; import org.luaj.vm2.lib.VarArgFunction; @@ -183,6 +184,7 @@ public class LuaJLuaMachine implements ILuaMachine } catch( LuaError e ) { + Logger.warn( "Could not load bios.lua ", e ); if( m_mainRoutine != null ) { ((LuaThread)m_mainRoutine).abandon(); @@ -327,7 +329,8 @@ public class LuaJLuaMachine implements ILuaMachine { final int method = i; final ILuaObject apiObject = object; - table.set( methods[i], new VarArgFunction() { + final String methodName = methods[i]; + table.set( methodName, new VarArgFunction() { @Override public Varargs invoke( Varargs _args ) { @@ -412,6 +415,7 @@ public class LuaJLuaMachine implements ILuaMachine } catch( Throwable t ) { + Logger.error( "Error running task", t); m_computer.queueEvent( "task_complete", new Object[] { taskID, false, "Java Exception Thrown: " + t.toString() } ); @@ -478,6 +482,7 @@ public class LuaJLuaMachine implements ILuaMachine } catch( Throwable t ) { + Logger.error( "Error calling " + methodName + " on " + apiObject, t ); throw new LuaError( "Java Exception Thrown: " + t.toString(), 0 ); } return LuaValue.varargsOf( toValues( results, 0 ) ); diff --git a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java index ce7f23e48..edc143b3e 100644 --- a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java +++ b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java @@ -11,6 +11,7 @@ import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.ILuaTask; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.core.apis.ILuaAPI; +import dan200.computercraft.core.logger.Logger; import dan200.computercraft.shared.computer.blocks.TileCommandComputer; import dan200.computercraft.shared.util.WorldUtil; import net.minecraft.block.Block; @@ -98,6 +99,7 @@ public class CommandAPI implements ILuaAPI } catch( Throwable t ) { + Logger.error( "Error running command.", t ); return new Object[]{ false, createOutput( "Java Exception Thrown: " + t.toString() ) }; } } @@ -208,6 +210,7 @@ public class CommandAPI implements ILuaAPI catch( Throwable t ) { // Ignore buggy command + Logger.error( "Error running command.", t ); } } } diff --git a/src/main/java/dan200/computercraft/shared/network/PacketHandler.java b/src/main/java/dan200/computercraft/shared/network/PacketHandler.java index 9db6d7717..8b87cc6a1 100644 --- a/src/main/java/dan200/computercraft/shared/network/PacketHandler.java +++ b/src/main/java/dan200/computercraft/shared/network/PacketHandler.java @@ -7,6 +7,7 @@ package dan200.computercraft.shared.network; import dan200.computercraft.ComputerCraft; +import dan200.computercraft.core.logger.Logger; import net.minecraft.network.NetHandlerPlayServer; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.network.FMLNetworkEvent; @@ -24,7 +25,7 @@ public class PacketHandler } catch( Exception e ) { - e.printStackTrace(); + Logger.error( "Error handling packet", e ); } } @@ -39,7 +40,7 @@ public class PacketHandler } catch( Exception e ) { - e.printStackTrace(); + Logger.error( "Error handling packet", e ); } } } diff --git a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java index 784633e16..eea3264a5 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java @@ -8,6 +8,7 @@ package dan200.computercraft.shared.proxy; import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.turtle.ITurtleUpgrade; +import dan200.computercraft.core.logger.Logger; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.items.ComputerItemFactory; import dan200.computercraft.shared.turtle.blocks.BlockTurtle; @@ -83,7 +84,7 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy int id = upgrade.getLegacyUpgradeID(); if( id >= 0 && id < 64 ) { - throw new RuntimeException( "Error registering '"+upgrade.getUnlocalisedAdjective()+" Turtle'. Legacy UpgradeID '"+id+"' is reserved by ComputerCraft" ); + throw Logger.loggedError( "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. Legacy UpgradeID '" + id + "' is reserved by ComputerCraft" ); } // Register @@ -117,6 +118,7 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy } catch( Exception e ) { + Logger.error("Error checking stackability of items", e); } } return null; @@ -253,13 +255,13 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy { if( legacyID >= Short.MAX_VALUE ) { - throw new RuntimeException( "Error registering '"+upgrade.getUnlocalisedAdjective()+" Turtle'. UpgradeID '"+legacyID+"' is out of range" ); + throw Logger.loggedError( "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. UpgradeID '" + legacyID + "' is out of range" ); } ITurtleUpgrade existing = m_legacyTurtleUpgrades.get( legacyID ); if( existing != null ) { - throw new RuntimeException( "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. UpgradeID '" + legacyID + "' is already registered by '" + existing.getUnlocalisedAdjective() + " Turtle'" ); + throw Logger.loggedError( "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. UpgradeID '" + legacyID + "' is already registered by '" + existing.getUnlocalisedAdjective() + " Turtle'" ); } } @@ -267,7 +269,7 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy ITurtleUpgrade existing = m_turtleUpgrades.get( id ); if( existing != null ) { - throw new RuntimeException( "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. UpgradeID '" + id + "' is already registered by '" + existing.getUnlocalisedAdjective() + " Turtle'" ); + throw Logger.loggedError( "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. UpgradeID '" + id + "' is already registered by '" + existing.getUnlocalisedAdjective() + " Turtle'" ); } // Register diff --git a/src/main/java/dan200/computercraft/shared/util/IDAssigner.java b/src/main/java/dan200/computercraft/shared/util/IDAssigner.java index b1eb6910e..ee7c2dca6 100644 --- a/src/main/java/dan200/computercraft/shared/util/IDAssigner.java +++ b/src/main/java/dan200/computercraft/shared/util/IDAssigner.java @@ -1,5 +1,7 @@ package dan200.computercraft.shared.util; +import dan200.computercraft.core.logger.Logger; + import java.io.*; public class IDAssigner @@ -50,6 +52,7 @@ public class IDAssigner } catch( NumberFormatException e ) { + Logger.error( "Unexpected file '" + content + "' in '" + location.getAbsolutePath() + "'", e ); } } } @@ -82,7 +85,7 @@ public class IDAssigner } catch( IOException e ) { - e.printStackTrace(); + Logger.error( "Cannot open ID file '" + lastidFile + "'", e ); return 0; } @@ -92,7 +95,7 @@ public class IDAssigner } catch( NumberFormatException e ) { - e.printStackTrace(); + Logger.error( "Cannot parse ID file '" + lastidFile + "', perhaps it is corrupt?", e ); return 0; } } @@ -107,8 +110,7 @@ public class IDAssigner } catch( IOException e ) { - System.out.println( "An error occured while trying to create the computer folder. Please check you have relevant permissions." ); - e.printStackTrace(); + Logger.error( "An error occured while trying to create the computer folder. Please check you have relevant permissions.", e ); } return id; From a0b6cbb671af768ddd071f235d30989b142c68bd Mon Sep 17 00:00:00 2001 From: SquidDev Date: Sat, 13 May 2017 22:26:35 +0100 Subject: [PATCH 32/42] Remove ILogger facade Just use global Log4j logger on the ComputerCraft class. --- .../dan200/computercraft/ComputerCraft.java | 14 ++-- .../computercraft/core/computer/Computer.java | 3 +- .../core/computer/ComputerThread.java | 6 +- .../computercraft/core/logger/ILogger.java | 10 --- .../core/logger/Log4JLogger.java | 59 ----------------- .../computercraft/core/logger/Logger.java | 65 ------------------- .../core/logger/StdoutLogger.java | 20 ------ .../core/lua/LuaJLuaMachine.java | 8 +-- .../shared/computer/apis/CommandAPI.java | 6 +- .../shared/network/PacketHandler.java | 5 +- .../shared/proxy/CCTurtleProxyCommon.java | 19 ++++-- .../computercraft/shared/util/IDAssigner.java | 10 +-- 12 files changed, 39 insertions(+), 186 deletions(-) delete mode 100644 src/main/java/dan200/computercraft/core/logger/ILogger.java delete mode 100644 src/main/java/dan200/computercraft/core/logger/Log4JLogger.java delete mode 100644 src/main/java/dan200/computercraft/core/logger/Logger.java delete mode 100644 src/main/java/dan200/computercraft/core/logger/StdoutLogger.java diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index f07c8a7ac..448b08c26 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -20,8 +20,6 @@ import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.core.filesystem.ComboMount; import dan200.computercraft.core.filesystem.FileMount; import dan200.computercraft.core.filesystem.JarMount; -import dan200.computercraft.core.logger.Log4JLogger; -import dan200.computercraft.core.logger.Logger; import dan200.computercraft.shared.common.DefaultBundledRedstoneProvider; import dan200.computercraft.shared.computer.blocks.BlockCommandComputer; import dan200.computercraft.shared.computer.blocks.BlockComputer; @@ -70,6 +68,7 @@ import net.minecraftforge.fml.common.network.FMLEventChannel; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.internal.FMLProxyPacket; import net.minecraftforge.fml.relauncher.Side; +import org.apache.logging.log4j.Logger; import java.io.File; import java.io.IOException; @@ -209,6 +208,9 @@ public class ComputerCraft // Creative public static CreativeTabMain mainCreativeTab; + // Logging + public static Logger log; + // API users private static List peripheralProviders = new ArrayList(); private static List bundledRedstoneProviders = new ArrayList(); @@ -233,7 +235,7 @@ public class ComputerCraft @Mod.EventHandler public void preInit( FMLPreInitializationEvent event ) { - Logger.setInstance( new Log4JLogger( event.getModLog() ) ); + log = event.getModLog(); // Load config Config.config = new Configuration( event.getSuggestedConfigurationFile() ); @@ -609,7 +611,7 @@ public class ComputerCraft } catch( Exception e ) { - Logger.error( "Peripheral provider " + peripheralProvider + " errored.", e ); + ComputerCraft.log.error( "Peripheral provider " + peripheralProvider + " errored.", e ); } } return null; @@ -653,7 +655,7 @@ public class ComputerCraft } catch( Exception e ) { - Logger.error( "Bundled redstone provider " + bundledRedstoneProvider + " errored.", e ); + ComputerCraft.log.error( "Bundled redstone provider " + bundledRedstoneProvider + " errored.", e ); } } return combinedSignal; @@ -677,7 +679,7 @@ public class ComputerCraft catch( Exception e ) { // mod misbehaved, ignore it - Logger.error( "Media provider " + mediaProvider + " errored.", e ); + ComputerCraft.log.error( "Media provider " + mediaProvider + " errored.", e ); } } return null; diff --git a/src/main/java/dan200/computercraft/core/computer/Computer.java b/src/main/java/dan200/computercraft/core/computer/Computer.java index 905dea4bf..885f85188 100644 --- a/src/main/java/dan200/computercraft/core/computer/Computer.java +++ b/src/main/java/dan200/computercraft/core/computer/Computer.java @@ -14,7 +14,6 @@ import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.core.apis.*; import dan200.computercraft.core.filesystem.FileSystem; import dan200.computercraft.core.filesystem.FileSystemException; -import dan200.computercraft.core.logger.Logger; import dan200.computercraft.core.lua.ILuaMachine; import dan200.computercraft.core.lua.LuaJLuaMachine; import dan200.computercraft.core.terminal.Terminal; @@ -470,7 +469,7 @@ public class Computer } catch( FileSystemException e ) { - Logger.error( "Cannot mount rom", e ); + ComputerCraft.log.error( "Cannot mount rom", e ); return false; } } diff --git a/src/main/java/dan200/computercraft/core/computer/ComputerThread.java b/src/main/java/dan200/computercraft/core/computer/ComputerThread.java index 5178830e4..4eda28037 100644 --- a/src/main/java/dan200/computercraft/core/computer/ComputerThread.java +++ b/src/main/java/dan200/computercraft/core/computer/ComputerThread.java @@ -6,7 +6,7 @@ package dan200.computercraft.core.computer; -import dan200.computercraft.core.logger.Logger; +import dan200.computercraft.ComputerCraft; import java.util.ArrayList; import java.util.Iterator; @@ -108,7 +108,7 @@ public class ComputerThread try { task.execute(); } catch( Throwable e ) { - Logger.error( "Error running task", e ); + ComputerCraft.log.error( "Error running task", e ); } } } ); @@ -140,7 +140,7 @@ public class ComputerThread // Step 3: abandon if( worker.isAlive() ) { - Logger.warn( "Failed to abort Computer " + computer.getID() + ". Dangling lua thread could cause errors." ); + ComputerCraft.log.warn( "Failed to abort Computer " + computer.getID() + ". Dangling lua thread could cause errors." ); worker.interrupt(); } } diff --git a/src/main/java/dan200/computercraft/core/logger/ILogger.java b/src/main/java/dan200/computercraft/core/logger/ILogger.java deleted file mode 100644 index 4c23ffc19..000000000 --- a/src/main/java/dan200/computercraft/core/logger/ILogger.java +++ /dev/null @@ -1,10 +0,0 @@ -package dan200.computercraft.core.logger; - -import java.util.logging.Level; - -public interface ILogger -{ - void log( Level level, String message ); - - void log( Level level, String message, Throwable t ); -} diff --git a/src/main/java/dan200/computercraft/core/logger/Log4JLogger.java b/src/main/java/dan200/computercraft/core/logger/Log4JLogger.java deleted file mode 100644 index a15b3222d..000000000 --- a/src/main/java/dan200/computercraft/core/logger/Log4JLogger.java +++ /dev/null @@ -1,59 +0,0 @@ -package dan200.computercraft.core.logger; - -import org.apache.logging.log4j.Logger; - -import java.util.logging.Level; - -public class Log4JLogger implements ILogger -{ - private final org.apache.logging.log4j.Logger logger; - - public Log4JLogger( Logger logger ) - { - this.logger = logger; - } - - @Override - public void log( Level level, String message ) - { - logger.log( mapLevel( level ), message ); - } - - @Override - public void log( Level level, String message, Throwable t ) - { - logger.log( mapLevel( level ), message, t ); - } - - private static org.apache.logging.log4j.Level mapLevel( Level level ) - { - if( level == Level.SEVERE ) - { - return org.apache.logging.log4j.Level.ERROR; - } - else if( level == Level.WARNING ) - { - return org.apache.logging.log4j.Level.WARN; - } - else if( level == Level.INFO ) - { - return org.apache.logging.log4j.Level.INFO; - } - else if( level == Level.FINE ) - { - return org.apache.logging.log4j.Level.DEBUG; - } - else if( level == Level.FINER ) - { - return org.apache.logging.log4j.Level.TRACE; - } - else if( level == Level.ALL ) - { - return org.apache.logging.log4j.Level.ALL; - } - else - { - return org.apache.logging.log4j.Level.INFO; - } - } -} diff --git a/src/main/java/dan200/computercraft/core/logger/Logger.java b/src/main/java/dan200/computercraft/core/logger/Logger.java deleted file mode 100644 index 9687e41c5..000000000 --- a/src/main/java/dan200/computercraft/core/logger/Logger.java +++ /dev/null @@ -1,65 +0,0 @@ -package dan200.computercraft.core.logger; - -import javax.annotation.Nonnull; -import java.util.logging.Level; - -public class Logger -{ - private static ILogger instance; - - @Nonnull - public static ILogger getInstance() - { - ILogger logger = instance; - if( logger == null ) logger = instance = new StdoutLogger(); - return logger; - } - - public static void setInstance( @Nonnull ILogger logger ) - { - if( logger == null ) throw new NullPointerException( "Logger cannot be null" ); - instance = logger; - } - - public static void log( Level level, String message ) - { - getInstance().log( level, message ); - } - - public static void log( Level level, String message, Throwable t ) - { - getInstance().log( level, message, t ); - } - - public static void error( String message ) - { - getInstance().log( Level.SEVERE, message ); - } - - public static void error( String message, Throwable t ) - { - getInstance().log( Level.SEVERE, message, t ); - } - - public static void warn( String message ) - { - getInstance().log( Level.WARNING, message ); - } - - public static void warn( String message, Throwable t ) - { - getInstance().log( Level.WARNING, message, t ); - } - - /** - * Logs {@code message} and creates a new {@link RuntimeException} using the same message. - * - * @param message The message to log. - * @return The exception using the same message. - */ - public static RuntimeException loggedError( String message ) - { - getInstance().log( Level.SEVERE, message ); - return new RuntimeException( message ); - } -} diff --git a/src/main/java/dan200/computercraft/core/logger/StdoutLogger.java b/src/main/java/dan200/computercraft/core/logger/StdoutLogger.java deleted file mode 100644 index 2abea7cd1..000000000 --- a/src/main/java/dan200/computercraft/core/logger/StdoutLogger.java +++ /dev/null @@ -1,20 +0,0 @@ -package dan200.computercraft.core.logger; - -import java.util.logging.Level; - -public class StdoutLogger implements ILogger -{ - - @Override - public void log( Level level, String message ) - { - System.out.printf( "[%s] %s\n", level.getName(), message ); - } - - @Override - public void log( Level level, String message, Throwable t ) - { - System.out.printf( "[%s] %s\n", level.getName(), message ); - t.printStackTrace( System.out ); - } -} diff --git a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java index 614147aee..8da8bab3c 100644 --- a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java +++ b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java @@ -15,7 +15,7 @@ import dan200.computercraft.core.apis.ILuaAPI; import dan200.computercraft.core.computer.Computer; import dan200.computercraft.core.computer.ITask; import dan200.computercraft.core.computer.MainThread; -import dan200.computercraft.core.logger.Logger; + import org.luaj.vm2.*; import org.luaj.vm2.lib.OneArgFunction; import org.luaj.vm2.lib.VarArgFunction; @@ -184,7 +184,7 @@ public class LuaJLuaMachine implements ILuaMachine } catch( LuaError e ) { - Logger.warn( "Could not load bios.lua ", e ); + ComputerCraft.log.warn( "Could not load bios.lua ", e ); if( m_mainRoutine != null ) { ((LuaThread)m_mainRoutine).abandon(); @@ -415,7 +415,7 @@ public class LuaJLuaMachine implements ILuaMachine } catch( Throwable t ) { - Logger.error( "Error running task", t); + ComputerCraft.log.error( "Error running task", t); m_computer.queueEvent( "task_complete", new Object[] { taskID, false, "Java Exception Thrown: " + t.toString() } ); @@ -482,7 +482,7 @@ public class LuaJLuaMachine implements ILuaMachine } catch( Throwable t ) { - Logger.error( "Error calling " + methodName + " on " + apiObject, t ); + ComputerCraft.log.error( "Error calling " + methodName + " on " + apiObject, t ); throw new LuaError( "Java Exception Thrown: " + t.toString(), 0 ); } return LuaValue.varargsOf( toValues( results, 0 ) ); diff --git a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java index edc143b3e..26f307f60 100644 --- a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java +++ b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java @@ -7,11 +7,11 @@ package dan200.computercraft.shared.computer.apis; import com.google.common.collect.ImmutableMap; +import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.ILuaTask; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.core.apis.ILuaAPI; -import dan200.computercraft.core.logger.Logger; import dan200.computercraft.shared.computer.blocks.TileCommandComputer; import dan200.computercraft.shared.util.WorldUtil; import net.minecraft.block.Block; @@ -99,7 +99,7 @@ public class CommandAPI implements ILuaAPI } catch( Throwable t ) { - Logger.error( "Error running command.", t ); + ComputerCraft.log.error( "Error running command.", t ); return new Object[]{ false, createOutput( "Java Exception Thrown: " + t.toString() ) }; } } @@ -210,7 +210,7 @@ public class CommandAPI implements ILuaAPI catch( Throwable t ) { // Ignore buggy command - Logger.error( "Error running command.", t ); + ComputerCraft.log.error( "Error running command.", t ); } } } diff --git a/src/main/java/dan200/computercraft/shared/network/PacketHandler.java b/src/main/java/dan200/computercraft/shared/network/PacketHandler.java index 8b87cc6a1..64c669794 100644 --- a/src/main/java/dan200/computercraft/shared/network/PacketHandler.java +++ b/src/main/java/dan200/computercraft/shared/network/PacketHandler.java @@ -7,7 +7,6 @@ package dan200.computercraft.shared.network; import dan200.computercraft.ComputerCraft; -import dan200.computercraft.core.logger.Logger; import net.minecraft.network.NetHandlerPlayServer; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.network.FMLNetworkEvent; @@ -25,7 +24,7 @@ public class PacketHandler } catch( Exception e ) { - Logger.error( "Error handling packet", e ); + ComputerCraft.log.error( "Error handling packet", e ); } } @@ -40,7 +39,7 @@ public class PacketHandler } catch( Exception e ) { - Logger.error( "Error handling packet", e ); + ComputerCraft.log.error( "Error handling packet", e ); } } } diff --git a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java index eea3264a5..b5d12a48b 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java @@ -8,7 +8,6 @@ package dan200.computercraft.shared.proxy; import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.turtle.ITurtleUpgrade; -import dan200.computercraft.core.logger.Logger; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.items.ComputerItemFactory; import dan200.computercraft.shared.turtle.blocks.BlockTurtle; @@ -84,7 +83,9 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy int id = upgrade.getLegacyUpgradeID(); if( id >= 0 && id < 64 ) { - throw Logger.loggedError( "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. Legacy UpgradeID '" + id + "' is reserved by ComputerCraft" ); + String message = "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. Legacy UpgradeID '" + id + "' is reserved by ComputerCraft"; + ComputerCraft.log.error( message ); + throw new RuntimeException( message ); } // Register @@ -118,7 +119,7 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy } catch( Exception e ) { - Logger.error("Error checking stackability of items", e); + ComputerCraft.log.error("Error checking stackability of items", e); } } return null; @@ -255,13 +256,17 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy { if( legacyID >= Short.MAX_VALUE ) { - throw Logger.loggedError( "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. UpgradeID '" + legacyID + "' is out of range" ); + String message = "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. UpgradeID '" + legacyID + "' is out of range"; + ComputerCraft.log.error( message ); + throw new RuntimeException( message ); } ITurtleUpgrade existing = m_legacyTurtleUpgrades.get( legacyID ); if( existing != null ) { - throw Logger.loggedError( "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. UpgradeID '" + legacyID + "' is already registered by '" + existing.getUnlocalisedAdjective() + " Turtle'" ); + String message = "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. UpgradeID '" + legacyID + "' is already registered by '" + existing.getUnlocalisedAdjective() + " Turtle'"; + ComputerCraft.log.error( message ); + throw new RuntimeException( message ); } } @@ -269,7 +274,9 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy ITurtleUpgrade existing = m_turtleUpgrades.get( id ); if( existing != null ) { - throw Logger.loggedError( "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. UpgradeID '" + id + "' is already registered by '" + existing.getUnlocalisedAdjective() + " Turtle'" ); + String message = "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. UpgradeID '" + id + "' is already registered by '" + existing.getUnlocalisedAdjective() + " Turtle'"; + ComputerCraft.log.error( message ); + throw new RuntimeException( message ); } // Register diff --git a/src/main/java/dan200/computercraft/shared/util/IDAssigner.java b/src/main/java/dan200/computercraft/shared/util/IDAssigner.java index ee7c2dca6..489e1c075 100644 --- a/src/main/java/dan200/computercraft/shared/util/IDAssigner.java +++ b/src/main/java/dan200/computercraft/shared/util/IDAssigner.java @@ -1,6 +1,6 @@ package dan200.computercraft.shared.util; -import dan200.computercraft.core.logger.Logger; +import dan200.computercraft.ComputerCraft; import java.io.*; @@ -52,7 +52,7 @@ public class IDAssigner } catch( NumberFormatException e ) { - Logger.error( "Unexpected file '" + content + "' in '" + location.getAbsolutePath() + "'", e ); + ComputerCraft.log.error( "Unexpected file '" + content + "' in '" + location.getAbsolutePath() + "'", e ); } } } @@ -85,7 +85,7 @@ public class IDAssigner } catch( IOException e ) { - Logger.error( "Cannot open ID file '" + lastidFile + "'", e ); + ComputerCraft.log.error( "Cannot open ID file '" + lastidFile + "'", e ); return 0; } @@ -95,7 +95,7 @@ public class IDAssigner } catch( NumberFormatException e ) { - Logger.error( "Cannot parse ID file '" + lastidFile + "', perhaps it is corrupt?", e ); + ComputerCraft.log.error( "Cannot parse ID file '" + lastidFile + "', perhaps it is corrupt?", e ); return 0; } } @@ -110,7 +110,7 @@ public class IDAssigner } catch( IOException e ) { - Logger.error( "An error occured while trying to create the computer folder. Please check you have relevant permissions.", e ); + ComputerCraft.log.error( "An error occured while trying to create the computer folder. Please check you have relevant permissions.", e ); } return id; From efb0065ebd3a37df5c32bca9c5fbdea8783e773e Mon Sep 17 00:00:00 2001 From: SquidDev Date: Tue, 16 May 2017 15:59:09 +0100 Subject: [PATCH 33/42] Add config option to disable certain error messages --- src/main/java/dan200/computercraft/ComputerCraft.java | 6 ++++++ .../computercraft/core/computer/ComputerThread.java | 2 +- .../dan200/computercraft/core/lua/LuaJLuaMachine.java | 10 ++++++++-- .../computercraft/shared/computer/apis/CommandAPI.java | 10 ++++++++-- .../shared/proxy/CCTurtleProxyCommon.java | 2 +- .../resources/assets/computercraft/lang/en_US.lang | 1 + 6 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index 448b08c26..1ed5e4e7e 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -107,6 +107,7 @@ public class ComputerCraft public static String http_whitelist = "*"; public static boolean disable_lua51_features = false; public static String default_computer_settings = ""; + public static boolean logPeripheralErrors = true; public static boolean enableCommandBlock = false; public static boolean turtlesNeedFuel = true; @@ -180,6 +181,7 @@ public class ComputerCraft public static Property http_whitelist; public static Property disable_lua51_features; public static Property default_computer_settings; + public static Property logPeripheralErrors; public static Property enableCommandBlock; public static Property turtlesNeedFuel; @@ -253,6 +255,10 @@ public class ComputerCraft Config.default_computer_settings = Config.config.get( Configuration.CATEGORY_GENERAL, "default_computer_settings", default_computer_settings ); Config.default_computer_settings.setComment( "A comma seperated list of default system settings to set on new computers. Example: \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\" will disable all autocompletion" ); + Config.logPeripheralErrors = Config.config.get( Configuration.CATEGORY_GENERAL, "logPeripheralErrors", logPeripheralErrors ); + Config.logPeripheralErrors.setComment( "Log exceptions thrown by peripherals and other Lua objects.\n" + + "This makes it easier for mod authors to debug problems, but may result in log spam should people use buggy methods." ); + Config.enableCommandBlock = Config.config.get( Configuration.CATEGORY_GENERAL, "enableCommandBlock", enableCommandBlock ); Config.enableCommandBlock.setComment( "Enable Command Block peripheral support" ); diff --git a/src/main/java/dan200/computercraft/core/computer/ComputerThread.java b/src/main/java/dan200/computercraft/core/computer/ComputerThread.java index 4eda28037..f84a2e5c8 100644 --- a/src/main/java/dan200/computercraft/core/computer/ComputerThread.java +++ b/src/main/java/dan200/computercraft/core/computer/ComputerThread.java @@ -140,7 +140,7 @@ public class ComputerThread // Step 3: abandon if( worker.isAlive() ) { - ComputerCraft.log.warn( "Failed to abort Computer " + computer.getID() + ". Dangling lua thread could cause errors." ); + // ComputerCraft.log.warn( "Failed to abort Computer " + computer.getID() + ". Dangling lua thread could cause errors." ); worker.interrupt(); } } diff --git a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java index 8da8bab3c..574aed974 100644 --- a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java +++ b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java @@ -415,7 +415,10 @@ public class LuaJLuaMachine implements ILuaMachine } catch( Throwable t ) { - ComputerCraft.log.error( "Error running task", t); + if( ComputerCraft.logPeripheralErrors ) + { + ComputerCraft.log.error( "Error running task", t ); + } m_computer.queueEvent( "task_complete", new Object[] { taskID, false, "Java Exception Thrown: " + t.toString() } ); @@ -482,7 +485,10 @@ public class LuaJLuaMachine implements ILuaMachine } catch( Throwable t ) { - ComputerCraft.log.error( "Error calling " + methodName + " on " + apiObject, t ); + if( ComputerCraft.logPeripheralErrors ) + { + ComputerCraft.log.error( "Error calling " + methodName + " on " + apiObject, t ); + } throw new LuaError( "Java Exception Thrown: " + t.toString(), 0 ); } return LuaValue.varargsOf( toValues( results, 0 ) ); diff --git a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java index 26f307f60..2f6f54cf1 100644 --- a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java +++ b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java @@ -99,7 +99,10 @@ public class CommandAPI implements ILuaAPI } catch( Throwable t ) { - ComputerCraft.log.error( "Error running command.", t ); + if( ComputerCraft.logPeripheralErrors ) + { + ComputerCraft.log.error( "Error running command.", t ); + } return new Object[]{ false, createOutput( "Java Exception Thrown: " + t.toString() ) }; } } @@ -210,7 +213,10 @@ public class CommandAPI implements ILuaAPI catch( Throwable t ) { // Ignore buggy command - ComputerCraft.log.error( "Error running command.", t ); + if( ComputerCraft.logPeripheralErrors ) + { + ComputerCraft.log.error( "Error running command.", t ); + } } } } diff --git a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java index b5d12a48b..928cb97fc 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java @@ -119,7 +119,7 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy } catch( Exception e ) { - ComputerCraft.log.error("Error checking stackability of items", e); + ComputerCraft.log.error("Error getting computer upgrade item", e); } } return null; diff --git a/src/main/resources/assets/computercraft/lang/en_US.lang b/src/main/resources/assets/computercraft/lang/en_US.lang index 98361fac9..18ee56160 100644 --- a/src/main/resources/assets/computercraft/lang/en_US.lang +++ b/src/main/resources/assets/computercraft/lang/en_US.lang @@ -44,6 +44,7 @@ gui.computercraft:config.http_enable=Enable HTTP API gui.computercraft:config.http_whitelist=HTTP whitelist gui.computercraft:config.disable_lua51_features=Disable Lua 5.1 features gui.computercraft:config.default_computer_settings=Default Computer settings +gui.computercraft:config.log_peripheral_errors=Log peripheral errors gui.computercraft:config.enable_command_block=Enable command block peripheral gui.computercraft:config.modem_range=Modem range (default) gui.computercraft:config.modem_high_altitude_range=Modem range (high-altitude) From b28c5656652fa195507d98b96676bb257ed685ed Mon Sep 17 00:00:00 2001 From: Restioson Date: Tue, 16 May 2017 19:48:38 +0200 Subject: [PATCH 34/42] (Hopefully) addressed @dan200's concerns Push your fix to thread safety if this doesn't cut it --- .../dan200/computercraft/ComputerCraft.java | 4 +- .../shared/peripheral/speaker/SoundTask.java | 45 -------------- .../peripheral/speaker/SpeakerPeripheral.java | 60 ++++++++++++------- .../peripheral/speaker/TileSpeaker.java | 6 +- .../proxy/ComputerCraftProxyCommon.java | 18 +++--- .../assets/computercraft/lang/en_US.lang | 1 + 6 files changed, 52 insertions(+), 82 deletions(-) delete mode 100644 src/main/java/dan200/computercraft/shared/peripheral/speaker/SoundTask.java diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index abbcb5e18..9c39f2762 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -294,7 +294,7 @@ public class ComputerCraft Config.turtlesCanPush.setComment( "If set to true, Turtles will push entities out of the way instead of stopping if there is space to do so" ); Config.maxNotesPerTick = Config.config.get( Configuration.CATEGORY_GENERAL, "maxNotesPerTick", maxNotesPerTick ); - Config.maxNotesPerTick.setComment( "Maximum amount of sounds a speaker can play at once" ); + Config.maxNotesPerTick.setComment( "Maximum amount of notes a speaker can play at once" ); for (Property property : Config.config.getCategory( Configuration.CATEGORY_GENERAL ).getOrderedValues()) { @@ -335,7 +335,7 @@ public class ComputerCraft turtlesObeyBlockProtection = Config.turtlesObeyBlockProtection.getBoolean(); turtlesCanPush = Config.turtlesCanPush.getBoolean(); - maximumFilesOpen = Math.max(1, Config.maximumFilesOpen.getInt()); + maxNotesPerTick = Math.max(1, Config.maxNotesPerTick.getInt()); Config.config.save(); } diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SoundTask.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SoundTask.java deleted file mode 100644 index 8d680badb..000000000 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SoundTask.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission. - * Send enquiries to dratcliffe@gmail.com - */ - -package dan200.computercraft.shared.peripheral.speaker; - -import dan200.computercraft.api.lua.ILuaTask; -import dan200.computercraft.api.lua.LuaException; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -public class SoundTask implements ILuaTask -{ - - SoundTask(World world, BlockPos pos, ResourceLocation resourceName, float volume, float pitch) - { - m_world = world; - m_pos = pos; - m_resourceName = resourceName; - m_volume = volume; - m_pitch = pitch; - } - - // Fields - private World m_world; - private BlockPos m_pos; - private ResourceLocation m_resourceName; - private float m_volume; - private float m_pitch; - - - @Nullable - @Override - public Object[] execute() throws LuaException { - m_world.playSound(null, m_pos, new SoundEvent(m_resourceName), SoundCategory.RECORDS, m_volume, m_pitch); - return new Object[]{}; - } -} diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index 172d026a9..669b532b0 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -8,15 +8,17 @@ package dan200.computercraft.shared.peripheral.speaker; import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.lua.ILuaContext; +import dan200.computercraft.api.lua.ILuaTask; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.api.peripheral.IPeripheral; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvent; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; - import javax.annotation.Nonnull; +import javax.annotation.Nullable; public class SpeakerPeripheral implements IPeripheral { @@ -38,7 +40,7 @@ public class SpeakerPeripheral implements IPeripheral { m_speaker = speaker; } - public void update() { + public synchronized void update() { m_clock++; m_notesThisTick = 0; } @@ -124,7 +126,8 @@ public class SpeakerPeripheral implements IPeripheral { } } - private Object[] playNote(Object[] arguments, ILuaContext context) throws LuaException + @Nonnull + private synchronized Object[] playNote(Object[] arguments, ILuaContext context) throws LuaException { double volume = 1f; double pitch = 1f; @@ -147,29 +150,24 @@ public class SpeakerPeripheral implements IPeripheral { if (arguments.length > 1) { - if (!(arguments[1] instanceof Double)) // Arg wrong type + if (!(arguments[1] instanceof Double) && !(arguments[1] == null)) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); } - volume = ((Double) arguments[1]).floatValue(); + volume = arguments[1] != null ? ((Double) arguments[1]).floatValue() : 1f; } if (arguments.length > 2) { - if (!(arguments[1] instanceof Double)) // Arg wrong type + if (!(arguments[1] instanceof Double) && !(arguments[2] == null)) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); } - pitch = ((Double) arguments[2]).floatValue(); + pitch = arguments[2] != null ? ((Double) arguments[2]).floatValue() : 1f; } - if (arguments.length > 3) - { - throw new LuaException("Expected string, number (optional), number (optional)"); - } - - // If the resource location for noteblock notes changes, this method call will need to be updated + // If the resource location for note block notes changes, this method call will need to be updated Object[] returnValue = playSound(new Object[] {"block.note." + arguments[0], volume, Math.pow(2d, (pitch - 12) / 12d)}, context, true); if (returnValue[0] instanceof Boolean && (Boolean) returnValue[0]) @@ -181,7 +179,8 @@ public class SpeakerPeripheral implements IPeripheral { } - private Object[] playSound(Object[] arguments, ILuaContext context, boolean isNote) throws LuaException + @Nonnull + private synchronized Object[] playSound(Object[] arguments, ILuaContext context, boolean isNote) throws LuaException { float volume = 1f; @@ -196,31 +195,29 @@ public class SpeakerPeripheral implements IPeripheral { if (!(arguments[0] instanceof String)) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); + } if (arguments.length > 1) { - if (!(arguments[1] instanceof Double)) // Arg wrong type + if (!(arguments[1] instanceof Double) && !(arguments[1] == null)) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); } - volume = ((Double) arguments[1]).floatValue(); + + volume = arguments[1] != null ? ((Double) arguments[1]).floatValue() : 1f; } if (arguments.length > 2) { - if (!(arguments[2] instanceof Double)) // Arg wrong type + if (!(arguments[2] instanceof Double) && !(arguments[2] == null)) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); } - pitch = ((Double) arguments[2]).floatValue(); + pitch = arguments[2] != null ? ((Double) arguments[2]).floatValue() : 1f; } - if (arguments.length > 3) - { - throw new LuaException("Expected string, number (optional), number (optional)"); - } ResourceLocation resourceName = new ResourceLocation((String) arguments[0]); @@ -229,7 +226,24 @@ public class SpeakerPeripheral implements IPeripheral { if (SoundEvent.REGISTRY.containsKey(resourceName)) { - context.issueMainThreadTask(new SoundTask(getWorld(), getPos(), resourceName, volume, pitch)); + + final World world = getWorld(); + final BlockPos pos = getPos(); + final ResourceLocation resource = resourceName; + final float vol = volume; + final float soundPitch = pitch; + + context.issueMainThreadTask(new ILuaTask() { + + @Nullable + @Override + public Object[] execute() throws LuaException { + world.playSound(null, pos, new SoundEvent(resource), SoundCategory.RECORDS, vol, soundPitch); + return null; + } + + }); + m_lastPlayTime = m_clock; return new Object[]{true}; // Success, return true } diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java index 150554685..b76e149e0 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java @@ -6,9 +6,9 @@ package dan200.computercraft.shared.peripheral.speaker; - import dan200.computercraft.api.peripheral.IPeripheral; - import dan200.computercraft.shared.peripheral.common.TilePeripheralBase; - import net.minecraft.util.EnumFacing; +import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.shared.peripheral.common.TilePeripheralBase; +import net.minecraft.util.EnumFacing; public class TileSpeaker extends TilePeripheralBase { diff --git a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java index 42d6ebd49..196f1bcad 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java @@ -555,15 +555,15 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy private void registerTileEntities() { // Tile Entities - GameRegistry.registerTileEntity( TileComputer.class, "computer" ); - GameRegistry.registerTileEntity( TileDiskDrive.class, "diskdrive" ); - GameRegistry.registerTileEntity( TileWirelessModem.class, "wirelessmodem" ); - GameRegistry.registerTileEntity( TileMonitor.class, "monitor" ); - GameRegistry.registerTileEntity( TilePrinter.class, "ccprinter" ); - GameRegistry.registerTileEntity( TileCable.class, "wiredmodem" ); - GameRegistry.registerTileEntity( TileCommandComputer.class, "command_computer" ); - GameRegistry.registerTileEntity( TileAdvancedModem.class, "advanced_modem" ); - GameRegistry.registerTileEntity( TileSpeaker.class, "speaker" ); + registerTileEntity( TileComputer.class, "computer" ); + registerTileEntity( TileDiskDrive.class, "diskdrive" ); + registerTileEntity( TileWirelessModem.class, "wirelessmodem" ); + registerTileEntity( TileMonitor.class, "monitor" ); + registerTileEntity( TilePrinter.class, "ccprinter" ); + registerTileEntity( TileCable.class, "wiredmodem" ); + registerTileEntity( TileCommandComputer.class, "command_computer" ); + registerTileEntity( TileAdvancedModem.class, "advanced_modem" ); + registerTileEntity( TileSpeaker.class, "speaker" ); // Register peripheral providers ComputerCraftAPI.registerPeripheralProvider( new DefaultPeripheralProvider() ); diff --git a/src/main/resources/assets/computercraft/lang/en_US.lang b/src/main/resources/assets/computercraft/lang/en_US.lang index c336c33b4..8c7f386d1 100644 --- a/src/main/resources/assets/computercraft/lang/en_US.lang +++ b/src/main/resources/assets/computercraft/lang/en_US.lang @@ -59,3 +59,4 @@ gui.computercraft:config.advanced_turtle_fuel_limit=Advanced Turtle fuel limit gui.computercraft:config.turtles_obey_block_protection=Turtles obey block protection gui.computercraft:config.turtles_can_push=Turtles can push entities gui.computercraft:config.maximum_files_open=Maximum files open per computer +gui.computercraft:config.max_notes_per_tick=Maximum notes that a computer can play at once From 4df4b91d0957cddeb64f2eb88bea472b17e36e41 Mon Sep 17 00:00:00 2001 From: Restioson Date: Tue, 16 May 2017 20:02:59 +0200 Subject: [PATCH 35/42] Converted (!x == y) to x != y --- .../shared/peripheral/speaker/SpeakerPeripheral.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index 669b532b0..e3e98fbe4 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -150,7 +150,7 @@ public class SpeakerPeripheral implements IPeripheral { if (arguments.length > 1) { - if (!(arguments[1] instanceof Double) && !(arguments[1] == null)) // Arg wrong type + if (!(arguments[1] instanceof Double) && arguments[1] != null) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); } @@ -160,7 +160,7 @@ public class SpeakerPeripheral implements IPeripheral { if (arguments.length > 2) { - if (!(arguments[1] instanceof Double) && !(arguments[2] == null)) // Arg wrong type + if (!(arguments[1] instanceof Double) && arguments[2] != null) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); } @@ -200,7 +200,7 @@ public class SpeakerPeripheral implements IPeripheral { if (arguments.length > 1) { - if (!(arguments[1] instanceof Double) && !(arguments[1] == null)) // Arg wrong type + if (!(arguments[1] instanceof Double) && arguments[1] != null) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); } @@ -211,7 +211,7 @@ public class SpeakerPeripheral implements IPeripheral { if (arguments.length > 2) { - if (!(arguments[2] instanceof Double) && !(arguments[2] == null)) // Arg wrong type + if (!(arguments[2] instanceof Double) && arguments[2] != null) // Arg wrong type { throw new LuaException("Expected string, number (optional), number (optional)"); } From 8c4331d15aaf07b87c1033f36799813bf633a188 Mon Sep 17 00:00:00 2001 From: Daniel Ratcliffe Date: Tue, 16 May 2017 19:23:03 +0100 Subject: [PATCH 36/42] Added checks to window.setTextColor and window.setBackgroundColor --- .../resources/assets/computercraft/lua/rom/apis/window | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/resources/assets/computercraft/lua/rom/apis/window b/src/main/resources/assets/computercraft/lua/rom/apis/window index c688456da..0d4c8f6b8 100644 --- a/src/main/resources/assets/computercraft/lua/rom/apis/window +++ b/src/main/resources/assets/computercraft/lua/rom/apis/window @@ -270,6 +270,11 @@ function create( parent, nX, nY, nWidth, nHeight, bStartVisible ) end local function setTextColor( color ) + if type(color) ~= "number" then + error( "Expected number", 3 ) + elseif tHex[color] == nil then + error( "Invalid color", 3 ) + end nTextColor = color if bVisible then updateCursorColor() @@ -312,6 +317,11 @@ function create( parent, nX, nY, nWidth, nHeight, bStartVisible ) window.getPaletteColor = window.getPaletteColour local function setBackgroundColor( color ) + if type(color) ~= "number" then + error( "Expected number", 3 ) + elseif tHex[color] == nil then + error( "Invalid color", 3 ) + end nBackgroundColor = color end From 0e1135ed97c968fbefe1b5b06c6da496d1fb27f6 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Tue, 16 May 2017 19:35:07 +0100 Subject: [PATCH 37/42] Disable peripheral logging by default --- src/main/java/dan200/computercraft/ComputerCraft.java | 2 +- .../dan200/computercraft/shared/computer/apis/CommandAPI.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index 1ed5e4e7e..75280d0b8 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -107,7 +107,7 @@ public class ComputerCraft public static String http_whitelist = "*"; public static boolean disable_lua51_features = false; public static String default_computer_settings = ""; - public static boolean logPeripheralErrors = true; + public static boolean logPeripheralErrors = false; public static boolean enableCommandBlock = false; public static boolean turtlesNeedFuel = true; diff --git a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java index 2f6f54cf1..fa708a193 100644 --- a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java +++ b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java @@ -215,7 +215,7 @@ public class CommandAPI implements ILuaAPI // Ignore buggy command if( ComputerCraft.logPeripheralErrors ) { - ComputerCraft.log.error( "Error running command.", t ); + ComputerCraft.log.error( "Error checking permissions of command.", t ); } } } From 68f4611abc7ca03afa544b48f09c2f596f006edb Mon Sep 17 00:00:00 2001 From: Wilma456 Date: Tue, 16 May 2017 20:35:46 +0200 Subject: [PATCH 38/42] Add Default Settings --- .../resources/assets/computercraft/lua/rom/help/settings | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/resources/assets/computercraft/lua/rom/help/settings b/src/main/resources/assets/computercraft/lua/rom/help/settings index a44fd85a2..d87b0727e 100644 --- a/src/main/resources/assets/computercraft/lua/rom/help/settings +++ b/src/main/resources/assets/computercraft/lua/rom/help/settings @@ -6,3 +6,12 @@ settings.load( path ) settings.save( path ) settings.clear() settings.getNames() + +Default Settings: +shell.autocomplete - enables auto-completion in the Shell. +lua.autocomplete - enables auto-completion in the Lua program. +edit.autocomplete - enables auto-completion in the Edit program. +bios.use_multishell - enables Multishell on Advanced Computers, Turtles, Pocket Computers and Command Computers. +shell.allow_disk_startup - if a Disk Drive with a Disk inside that has a 'startup' script is attached to a computer, this setting allows to automatically run that script when the computer starts. +shell.allow_startup - if there is a 'startup' script in a computer's root, this setting allow to automatically run that script when the computer runs. +list.show_hidden - determines, whether the List program will list hidden files or not. From 7e556acebc8bc3cfa6e02ba2b4c9b91cec2a5f40 Mon Sep 17 00:00:00 2001 From: Restioson Date: Tue, 16 May 2017 20:42:16 +0200 Subject: [PATCH 39/42] Added Speaker to Changelog --- src/main/resources/assets/computercraft/lua/rom/help/changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/assets/computercraft/lua/rom/help/changelog b/src/main/resources/assets/computercraft/lua/rom/help/changelog index 00a671763..2c0b9c58f 100644 --- a/src/main/resources/assets/computercraft/lua/rom/help/changelog +++ b/src/main/resources/assets/computercraft/lua/rom/help/changelog @@ -30,6 +30,7 @@ New Features in ComputerCraft 1.80: * Turtles now use tinting * shell.resolveProgram now picks up on *.lua files * Fixed a handful of bugs in ComputerCraft +* Added speaker block, turtle upgrade, pocket upgrade, and peripheral api New Features in ComputerCraft 1.79: From 0113e7229fc3c74413d871c6784387a197d2766a Mon Sep 17 00:00:00 2001 From: Restioson Date: Tue, 16 May 2017 20:44:34 +0200 Subject: [PATCH 40/42] Added speaker to whatsnew --- src/main/resources/assets/computercraft/lua/rom/help/whatsnew | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/assets/computercraft/lua/rom/help/whatsnew b/src/main/resources/assets/computercraft/lua/rom/help/whatsnew index df20c4088..347d0f8c1 100644 --- a/src/main/resources/assets/computercraft/lua/rom/help/whatsnew +++ b/src/main/resources/assets/computercraft/lua/rom/help/whatsnew @@ -30,5 +30,6 @@ New Features in ComputerCraft 1.80: * Turtles now use tinting * shell.resolveProgram now picks up on *.lua files * Fixed a handful of bugs in ComputerCraft +* Added speaker block, turtle upgrade, pocket upgrade, and peripheral api Type "help changelog" to see the full version history. From b5e75a86c80b788a715e961a6e63fa99335d6026 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Tue, 16 May 2017 21:19:36 +0100 Subject: [PATCH 41/42] Remove AT for Block.createStackedBlock Access transformers do not propagate to sub classes, and so the access transformer did not work here. Reverting to reflection fixes this issue. --- .../turtle/core/TurtleCompareCommand.java | 17 +++++++++++++++-- .../resources/META-INF/computercraft_at.cfg | 3 --- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java index 84d5bec88..6c2f5588f 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java @@ -14,11 +14,13 @@ import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.item.Item; 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.fml.relauncher.ReflectionHelper; import javax.annotation.Nonnull; +import java.lang.reflect.Method; public class TurtleCompareCommand implements ITurtleCommand { @@ -56,7 +58,18 @@ public class TurtleCompareCommand implements ITurtleCommand // Try createStackedBlock first if( !lookAtBlock.hasTileEntity( lookAtState ) ) { - lookAtStack = lookAtBlock.createStackedBlock( lookAtState ); + try + { + Method method = ReflectionHelper.findMethod( + Block.class, lookAtBlock, + new String[] { "func_180643_i", "createStackedBlock" }, + IBlockState.class + ); + lookAtStack = (ItemStack) method.invoke( lookAtBlock, lookAtState ); + } + catch( Exception e ) + { + } } // See if the block drops anything with the same ID as itself diff --git a/src/main/resources/META-INF/computercraft_at.cfg b/src/main/resources/META-INF/computercraft_at.cfg index 78a9879da..48f245c20 100644 --- a/src/main/resources/META-INF/computercraft_at.cfg +++ b/src/main/resources/META-INF/computercraft_at.cfg @@ -1,6 +1,3 @@ # RecordMedia (and related methods) public net.minecraft.item.ItemRecord field_185076_b # sound public net.minecraft.item.ItemRecord field_185077_c # displayName - -# TurtleCompareCommand -public net.minecraft.block.Block func_180643_i(Lnet/minecraft/block/state/IBlockState;)Lnet/minecraft/item/ItemStack; # createStackedBlock From f833450a68ac5be7d14833e35d9f8ba4c1bff7ff Mon Sep 17 00:00:00 2001 From: Daniel Ratcliffe Date: Tue, 16 May 2017 21:57:57 +0100 Subject: [PATCH 42/42] Changed permissions on deploy.sh --- deploy.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 deploy.sh diff --git a/deploy.sh b/deploy.sh old mode 100644 new mode 100755