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/deploy.sh b/deploy.sh old mode 100644 new mode 100755 diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index 1e279a93b..6607de8d8 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 */ @@ -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; @@ -68,6 +69,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; @@ -90,6 +92,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; @@ -105,6 +108,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 = false; public static boolean enableCommandBlock = false; public static boolean turtlesNeedFuel = true; @@ -131,6 +135,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 { @@ -163,12 +169,14 @@ public class ComputerCraft public static TurtleAxe diamondAxe; public static TurtleHoe diamondHoe; public static TurtleModem advancedModem; + public static TurtleSpeaker turtleSpeaker; } public static class PocketUpgrades { public static PocketModem wirelessModem; public static PocketModem advancedModem; + public static PocketSpeaker pocketSpeaker; } public static class Config { @@ -178,6 +186,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; @@ -194,6 +203,8 @@ public class ComputerCraft public static Property computerSpaceLimit; public static Property floppySpaceLimit; public static Property maximumFilesOpen; + public static Property maxNotesPerTick; + } // Registries @@ -206,6 +217,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(); @@ -230,6 +244,8 @@ public class ComputerCraft @Mod.EventHandler public void preInit( FMLPreInitializationEvent event ) { + log = event.getModLog(); + // Load config Config.config = new Configuration( event.getSuggestedConfigurationFile() ); Config.config.load(); @@ -246,6 +262,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" ); @@ -285,6 +305,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 notes 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() ) ); @@ -324,6 +347,8 @@ public class ComputerCraft turtlesObeyBlockProtection = Config.turtlesObeyBlockProtection.getBoolean(); turtlesCanPush = Config.turtlesCanPush.getBoolean(); + maxNotesPerTick = Math.max(1, Config.maxNotesPerTick.getInt()); + Config.config.save(); } @@ -334,6 +359,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 ) { @@ -596,7 +629,7 @@ public class ComputerCraft } catch( Exception e ) { - // mod misbehaved, ignore it + ComputerCraft.log.error( "Peripheral provider " + peripheralProvider + " errored.", e ); } } return null; @@ -640,7 +673,7 @@ public class ComputerCraft } catch( Exception e ) { - // mod misbehaved, ignore it + ComputerCraft.log.error( "Bundled redstone provider " + bundledRedstoneProvider + " errored.", e ); } } return combinedSignal; @@ -664,6 +697,7 @@ public class ComputerCraft catch( Exception e ) { // mod misbehaved, ignore it + ComputerCraft.log.error( "Media provider " + mediaProvider + " errored.", e ); } } return null; @@ -694,7 +728,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/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/pocket/IPocketAccess.java b/src/main/java/dan200/computercraft/api/pocket/IPocketAccess.java index 2485cacf3..a84c2de62 100644 --- a/src/main/java/dan200/computercraft/api/pocket/IPocketAccess.java +++ b/src/main/java/dan200/computercraft/api/pocket/IPocketAccess.java @@ -23,26 +23,40 @@ public interface IPocketAccess Entity getEntity(); /** - * Get the colour of the pocket computer's light. + * Get the colour of this pocket computer as a RGB number. * - * See {@link #setLight(int)} for the values this may return. + * @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. * - * @return The colour of the pocket computer's light. + * @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. + * + * @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/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..940adb89a 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. */ @@ -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; @@ -117,31 +118,43 @@ public interface ITurtleAccess void setSelectedSlot( int slot ); /** - * Sets the colour of the turtle, as if the player had dyed it with a dye item. + * Set the colour of the turtle to a RGB number. * - * @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() + * @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 setDyeColour( int dyeColour ); + void setColour( int colour ); /** - * Gets the colour the turtle has been dyed. + * Get the colour of this turtle as a RGB number. * - * @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() + * @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 getDyeColour(); + int getColour(); /** * 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/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..22fdfe893 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 */ @@ -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; @@ -156,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 ); } @@ -199,8 +200,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/proxy/ComputerCraftProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java index 75bbe05fb..ecf46afea 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 */ @@ -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; @@ -47,7 +48,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; @@ -100,6 +100,7 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon 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" ); @@ -112,61 +113,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 @@ -189,12 +195,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; - - Colour colour = Colour.fromInt( ComputerCraft.Items.pocketComputer.getLightState( stack ) ); - return colour == null ? Colour.Black.getHex() : colour.getHex(); + 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 ); @@ -515,20 +535,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/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..fc78a2e85 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 */ @@ -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/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..d4d38a1d9 100644 --- a/src/main/java/dan200/computercraft/core/apis/FSAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/FSAPI.java @@ -1,21 +1,23 @@ /* * 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 */ 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,40 +261,40 @@ 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" ); } } catch( FileSystemException e ) { - return null; + return new Object[] { null, e.getMessage() }; } } case 12: @@ -368,269 +370,4 @@ public class FSAPI implements ILuaAPI } } } - - private static Object[] wrapBufferedReader( final IMountedFileNormal reader ) - { - return new Object[] { new ILuaObject() { - @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 - try { - String line = reader.readLine(); - if( line != null ) { - return new Object[] { line }; - } else { - return null; - } - } catch( IOException e ) { - return null; - } - } - case 1: - { - // readAll - 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(); - return null; - } catch( IOException e ) { - return null; - } - } - default: - { - return null; - } - } - } - } }; - } - - private static Object[] wrapBufferedWriter( final IMountedFileNormal writer ) - { - return new Object[] { new ILuaObject() { - @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 - 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 - 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(); - return null; - } catch( IOException e ) { - return null; - } - } - case 3: - { - try { - 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() { - - @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 - 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(); - return null; - } catch( IOException e ) { - return null; - } - } - default: - { - assert( false ); - return null; - } - } - } - }}; - } - - private static Object[] wrapOutputStream( final IMountedFileBinary writer ) - { - - return new Object[] { new ILuaObject() { - - @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 - 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(); - return null; - } catch( IOException e ) { - return null; - } - } - case 2: - { - 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 768afd017..71b6119f1 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 */ @@ -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,76 +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() { + 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 - try { - String line = reader.readLine(); - if( line != null ) { - return new Object[] { line }; - } else { - return null; - } - } catch( IOException e ) { - return null; - } - } - case 1: - { - // readAll - 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(); - return null; - } catch( IOException e ) { - return null; - } - } - case 3: { // getResponseCode return new Object[] { responseCode }; } - case 4: + case 1: { // getResponseHeaders return new Object[] { responseHeaders }; @@ -212,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 b7f816ad7..9a7182b63 100644 --- a/src/main/java/dan200/computercraft/core/apis/HTTPRequest.java +++ b/src/main/java/dan200/computercraft/core/apis/HTTPRequest.java @@ -1,12 +1,13 @@ /* * 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 */ 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/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/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/computer/Computer.java b/src/main/java/dan200/computercraft/core/computer/Computer.java index 9c84e71f2..885f85188 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 */ @@ -469,7 +469,7 @@ public class Computer } catch( FileSystemException e ) { - e.printStackTrace(); + 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 49d739c95..f84a2e5c8 100644 --- a/src/main/java/dan200/computercraft/core/computer/ComputerThread.java +++ b/src/main/java/dan200/computercraft/core/computer/ComputerThread.java @@ -1,11 +1,13 @@ /* * 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 */ package dan200.computercraft.core.computer; +import dan200.computercraft.ComputerCraft; + 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(); + ComputerCraft.log.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." ); + // 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/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..b6a6d870b 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 */ @@ -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/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 deleted file mode 100644 index 1d01febc8..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-2016. 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 f6581e881..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-2016. 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 c8b956b0d..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-2016. 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/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..dbfba5a77 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 */ @@ -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 org.luaj.vm2.*; import org.luaj.vm2.lib.OneArgFunction; import org.luaj.vm2.lib.VarArgFunction; @@ -23,6 +24,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; @@ -183,6 +185,7 @@ public class LuaJLuaMachine implements ILuaMachine } catch( LuaError e ) { + ComputerCraft.log.warn( "Could not load bios.lua ", e ); if( m_mainRoutine != null ) { ((LuaThread)m_mainRoutine).abandon(); @@ -327,7 +330,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 +416,10 @@ public class LuaJLuaMachine implements ILuaMachine } catch( Throwable 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() } ); @@ -478,6 +486,10 @@ public class LuaJLuaMachine implements ILuaMachine } catch( Throwable 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 ) ); @@ -509,6 +521,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/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..c533ab917 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 */ @@ -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/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/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/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/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/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..fa708a193 100644 --- a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java +++ b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java @@ -1,12 +1,13 @@ /* * 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 */ 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; @@ -98,6 +99,10 @@ public class CommandAPI implements ILuaAPI } catch( Throwable t ) { + if( ComputerCraft.logPeripheralErrors ) + { + ComputerCraft.log.error( "Error running command.", t ); + } return new Object[]{ false, createOutput( "Java Exception Thrown: " + t.toString() ) }; } } @@ -208,6 +213,10 @@ public class CommandAPI implements ILuaAPI catch( Throwable t ) { // Ignore buggy command + if( ComputerCraft.logPeripheralErrors ) + { + ComputerCraft.log.error( "Error checking permissions of command.", t ); + } } } } 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..ab3c10330 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 */ @@ -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 76d703f2f..05581bf54 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 */ @@ -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/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..1ef2f7a8c 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 */ @@ -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/media/recipes/DiskRecipe.java b/src/main/java/dan200/computercraft/shared/media/recipes/DiskRecipe.java index 4c9a59468..35bffc4f4 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 */ @@ -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/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..64c669794 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 */ @@ -24,7 +24,7 @@ public class PacketHandler } catch( Exception e ) { - e.printStackTrace(); + ComputerCraft.log.error( "Error handling packet", e ); } } @@ -39,7 +39,7 @@ public class PacketHandler } catch( Exception e ) { - e.printStackTrace(); + ComputerCraft.log.error( "Error handling packet", e ); } } } diff --git a/src/main/java/dan200/computercraft/shared/peripheral/PeripheralType.java b/src/main/java/dan200/computercraft/shared/peripheral/PeripheralType.java index 455937f96..2cfaaf070 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 */ @@ -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/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..eddee8948 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 */ @@ -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,11 @@ public class BlockPeripheral extends BlockPeripheralBase } break; } + case Speaker: + { + state = state.withProperty( Properties.FACING, dir ); + break; + } case Monitor: case AdvancedMonitor: { @@ -489,6 +504,10 @@ public class BlockPeripheral extends BlockPeripheralBase { return getDefaultState().withProperty( Properties.VARIANT, BlockPeripheralVariant.AdvancedMonitor ); } + case Speaker: + { + return getDefaultState().withProperty( Properties.VARIANT, BlockPeripheralVariant.Speaker ); + } } } @@ -527,6 +546,10 @@ public class BlockPeripheral extends BlockPeripheralBase { return new TilePrinter(); } + case Speaker: + { + return new TileSpeaker(); + } } } @@ -543,6 +566,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/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..e7c6ee910 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 */ @@ -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/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..59c95f6d4 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 */ @@ -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/ItemPeripheralBase.java b/src/main/java/dan200/computercraft/shared/peripheral/common/ItemPeripheralBase.java index d5841e62e..aa408c5d0 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 */ @@ -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/java/dan200/computercraft/shared/peripheral/common/PeripheralItemFactory.java b/src/main/java/dan200/computercraft/shared/peripheral/common/PeripheralItemFactory.java index d0fe8ffb3..95952414f 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 */ @@ -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/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..68d51853c 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 */ @@ -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/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..15c8277f3 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 */ @@ -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/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java new file mode 100644 index 000000000..e3e98fbe4 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -0,0 +1,264 @@ +/* + * 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.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 { + + 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; + } + + SpeakerPeripheral(TileSpeaker speaker) + { + this(); + m_speaker = speaker; + } + + public synchronized void update() { + m_clock++; + m_notesThisTick = 0; + } + + public World getWorld() + { + return m_speaker.getWorld(); + } + + public BlockPos getPos() + { + return m_speaker.getPos(); + } + + /* 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(@Nonnull IComputerAccess computerAccess) + { + } + + @Override + public void detach(@Nonnull IComputerAccess computerAccess) + { + } + + @Nonnull + @Override + public String getType() + { + return "speaker"; + } + + @Nonnull + @Override + public String[] getMethodNames() + { + return new String[] { + "playSound", // Plays sound at resourceLocator + "playNote" // Plays note + }; + } + + @Override + public Object[] callMethod(@Nonnull IComputerAccess computerAccess, @Nonnull ILuaContext context, int methodIndex, @Nonnull Object[] args) throws LuaException + { + switch (methodIndex) + { + // playsound + case 0: + { + return playSound(args, context, false); + } + + // playnote + case 1: + { + return playNote(args, context); + } + + default: + { + throw new LuaException("Method index out of range!"); + } + + } + } + + @Nonnull + private synchronized Object[] playNote(Object[] arguments, ILuaContext context) throws LuaException + { + double volume = 1f; + double 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) && arguments[1] != null) // Arg wrong type + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + volume = arguments[1] != null ? ((Double) arguments[1]).floatValue() : 1f; + + } + + if (arguments.length > 2) + { + if (!(arguments[1] instanceof Double) && arguments[2] != null) // Arg wrong type + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + pitch = arguments[2] != null ? ((Double) arguments[2]).floatValue() : 1f; + } + + // 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]) + { + m_notesThisTick++; + } + + return returnValue; + + } + + @Nonnull + private synchronized Object[] playSound(Object[] arguments, ILuaContext context, boolean isNote) 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) && arguments[1] != null) // Arg wrong type + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + + volume = arguments[1] != null ? ((Double) arguments[1]).floatValue() : 1f; + + } + + if (arguments.length > 2) + { + if (!(arguments[2] instanceof Double) && arguments[2] != null) // Arg wrong type + { + throw new LuaException("Expected string, number (optional), number (optional)"); + } + pitch = arguments[2] != null ? ((Double) arguments[2]).floatValue() : 1f; + } + + + 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 (SoundEvent.REGISTRY.containsKey(resourceName)) + { + + 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 + } + + 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..b76e149e0 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java @@ -0,0 +1,39 @@ +/* + * 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 + static final int MIN_TICKS_BETWEEN_SOUNDS = 1; + + // Members + private SpeakerPeripheral m_peripheral; + + public TileSpeaker() + { + super(); + m_peripheral = new SpeakerPeripheral(this); + } + + @Override + public synchronized void update() { + m_peripheral.update(); + } + + // IPeripheralTile implementation + + public IPeripheral getPeripheral(EnumFacing side) + { + return m_peripheral; + } + +} 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..efb3cf7e4 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 */ @@ -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/pocket/core/PocketServerComputer.java b/src/main/java/dan200/computercraft/shared/pocket/core/PocketServerComputer.java index bd0d9470c..f6bb6dd1d 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; @@ -38,21 +39,47 @@ public class PocketServerComputer extends ServerComputer implements IPocketAcces } @Override - public int getLight() + public int getColour() { - int value = getUserData().getInteger( "modemLight" ); - return value >= 0 && value <= 15 ? value : 0; + return ComputerCraft.Items.pocketComputer.getColour( m_stack ); } @Override - public void setLight( int value ) + public void setColour( int colour ) { - if( value < 0 || value > 15 ) throw new IllegalArgumentException( "Colour out of bounds" ); + ComputerCraft.Items.pocketComputer.setColourDirect( m_stack, colour ); + updateUpgradeNBTData(); + } + @Override + public int getLight() + { NBTTagCompound tag = getUserData(); - if( tag.getInteger( "modemLight" ) != value ) + if( tag.hasKey( "modemLight", Constants.NBT.TAG_ANY_NUMERIC ) ) { - tag.setInteger( "modemLight", value ); + return tag.getInteger( "modemLight" ); + } + else + { + return -1; + } + } + + @Override + public void setLight( int colour ) + { + NBTTagCompound tag = getUserData(); + if( colour >= 0 && colour <= 0xFFFFFF ) + { + 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 29afeebaf..df4f89854 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 */ @@ -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 ) ); } } @@ -457,12 +466,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 ) @@ -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 1f7424b14..ad36d15da 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 */ @@ -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/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 ); } } 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/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..433e902c2 --- /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; + + PocketSpeakerPeripheral() + { + super(); + m_world = null; + m_position = new BlockPos( 0.0, 0.0, 0.0 ); + } + + 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/pocket/recipes/PocketComputerUpgradeRecipe.java b/src/main/java/dan200/computercraft/shared/pocket/recipes/PocketComputerUpgradeRecipe.java index 5f2faa764..0fade6195 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 */ @@ -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/CCTurtleProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java index 06f5c272f..2fdc67655 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 */ @@ -8,8 +8,10 @@ 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; import dan200.computercraft.shared.turtle.blocks.BlockTurtle; import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.blocks.TileTurtleAdvanced; @@ -34,10 +36,11 @@ 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; @@ -81,7 +84,9 @@ 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" ); + String message = "Error registering '" + upgrade.getUnlocalisedAdjective() + " Turtle'. Legacy UpgradeID '" + id + "' is reserved by ComputerCraft"; + ComputerCraft.log.error( message ); + throw new RuntimeException( message ); } // Register @@ -115,6 +120,7 @@ public abstract class CCTurtleProxyCommon implements ICCTurtleProxy } catch( Exception e ) { + ComputerCraft.log.error("Error getting computer upgrade item", e); } } return null; @@ -122,7 +128,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 ) @@ -139,7 +145,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 ); @@ -152,13 +158,14 @@ 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 ) { 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 ); @@ -178,26 +185,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 ) { @@ -212,26 +205,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 ) { @@ -251,13 +230,17 @@ 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" ); + 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 new RuntimeException( "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 ); } } @@ -265,7 +248,9 @@ 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'" ); + 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 @@ -290,11 +275,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 ) ); @@ -305,11 +290,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 ) ); @@ -329,14 +314,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" ); @@ -359,7 +344,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 @@ -377,7 +362,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 @@ -402,21 +387,68 @@ 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 ); + } - 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..ce779ad10 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 */ @@ -9,8 +9,8 @@ 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.ColourableRecipe; import dan200.computercraft.shared.common.DefaultBundledRedstoneProvider; import dan200.computercraft.shared.common.TileGeneric; import dan200.computercraft.shared.computer.blocks.BlockCommandComputer; @@ -44,10 +44,12 @@ 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; 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; @@ -74,7 +76,7 @@ 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; import net.minecraftforge.fml.common.network.FMLNetworkEvent; @@ -130,8 +132,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; } @@ -234,15 +235,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 +259,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,12 +271,13 @@ 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" ); 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" ); @@ -306,6 +308,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, @@ -375,6 +386,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 ); @@ -415,7 +429,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, @@ -424,7 +438,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, @@ -438,6 +452,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() ); @@ -447,13 +464,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 ) ) ); } @@ -473,22 +490,78 @@ 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" ); + registerTileEntity( TileSpeaker.class, "speaker" ); // 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..a00f1cf3a 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 */ @@ -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..caa8517e4 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 */ @@ -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/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..f2c19266e 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 */ @@ -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 09c80c0b9..d12349d87 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 */ @@ -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; @@ -40,11 +39,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 +70,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; @@ -195,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 ) ); @@ -410,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 @@ -714,4 +715,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/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..05a31b2ea 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 */ @@ -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; @@ -34,6 +31,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; @@ -115,7 +113,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; @@ -137,7 +135,7 @@ public class TurtleBrain implements ITurtleAccess m_selectedSlot = 0; m_fuelLevel = 0; - m_colour = null; + m_colourHex = -1; m_overlay = null; m_instanceID = -1; @@ -217,14 +215,7 @@ public class TurtleBrain implements ITurtleAccess } // Read colour - if( nbttagcompound.hasKey( "colourIndex" ) ) - { - m_colour = Colour.values()[ nbttagcompound.getInteger( "colourIndex" ) ]; - } - else - { - m_colour = null; - } + m_colourHex = ColourUtils.getHexColour( nbttagcompound ); // Read overlay if( nbttagcompound.hasKey( "overlay_mod" ) ) @@ -323,9 +314,9 @@ public class TurtleBrain implements ITurtleAccess } // Write colour - if( m_colour != null ) + if( m_colourHex != -1 ) { - nbttagcompound.setInteger( "colourIndex", m_colour.ordinal() ); + nbttagcompound.setInteger( "colour", m_colourHex ); } // Write overlay @@ -382,9 +373,9 @@ public class TurtleBrain implements ITurtleAccess } // Colour - if( m_colour != null ) + if( m_colourHex != -1 ) { - nbttagcompound.setInteger( "colourIndex", m_colour.ordinal() ); + nbttagcompound.setInteger( "colour", m_colourHex ); } // Overlay @@ -437,14 +428,7 @@ 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 ); // Overlay if( nbttagcompound.hasKey( "overlay_mod" ) && nbttagcompound.hasKey( "overlay_path" ) ) @@ -649,6 +633,13 @@ public class TurtleBrain implements ITurtleAccess return m_owner; } + @Nonnull + @Override + public IItemHandlerModifiable getItemHandler() + { + return m_owner.getItemHandler(); + } + @Override public boolean isFuelNeeded() { @@ -768,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; @@ -788,21 +773,51 @@ 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; m_owner.updateBlock(); } } + @Override + public void setColour( int colour ) + { + if( colour >= 0 && colour <= 0xFFFFFF ) + { + if( m_colourHex != colour ) + { + m_colourHex = colour; + m_owner.updateBlock(); + } + } + else if( m_colourHex != -1 ) + { + m_colourHex = -1; + 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/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..6c2f5588f 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 */ @@ -14,8 +14,8 @@ 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; @@ -62,17 +62,13 @@ public class TurtleCompareCommand implements ITurtleCommand { Method method = ReflectionHelper.findMethod( Block.class, lookAtBlock, - new String[]{ "func_149644_j", "j", "createStackedBlock" }, + new String[] { "func_180643_i", "createStackedBlock" }, IBlockState.class ); - if( method != null ) - { - lookAtStack = (ItemStack)method.invoke( lookAtBlock, lookAtState ); - } + lookAtStack = (ItemStack) method.invoke( lookAtBlock, lookAtState ); } catch( Exception e ) { - // ??? } } 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..dd2aef445 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 */ @@ -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/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..2ce5c6b5b 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 */ @@ -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..a77589c45 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 */ @@ -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/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..82cd7a561 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 */ @@ -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..13eacc159 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 */ @@ -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..de004d17a 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 */ @@ -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/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..569bd4887 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 */ @@ -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/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..ae11ee336 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 */ @@ -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/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..dc97bf8f3 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 */ @@ -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/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..65f31bf3b 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 */ @@ -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 c514a9e24..0781223f6 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 */ @@ -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 4496b4046..92e5b664e 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 */ @@ -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 2a72a1685..abac8477f 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 */ @@ -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 cba296587..2a7775ace 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 */ @@ -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 f49054585..a423d1e47 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 */ @@ -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/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/TurtleSpeaker.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java new file mode 100644 index 000000000..baa06c776 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java @@ -0,0 +1,177 @@ +/* + * 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 void update() + { + super.update(); + } + + @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 + private ResourceLocation m_id; + private int m_legacyID; + + @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 ) + { + return new TurtleSpeaker.Peripheral(turtle); + } + + @Nonnull + @Override + public TurtleCommandResult useTool(@Nonnull ITurtleAccess turtleAccess, @Nonnull TurtleSide turtleSide, @Nonnull TurtleVerb verb, @Nonnull EnumFacing direction) + { + return TurtleCommandResult.failure(); + } + + @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 turtle, @Nonnull TurtleSide turtleSide) + { + IPeripheral turtlePeripheral = turtle.getPeripheral(turtleSide); + + if (turtlePeripheral instanceof Peripheral) + { + Peripheral peripheral = (Peripheral) turtlePeripheral; + peripheral.update(); + } + } +} 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..c3aac1a37 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 */ @@ -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/Colour.java b/src/main/java/dan200/computercraft/shared/util/Colour.java index fe43bc915..069617714 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 */ @@ -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/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..6831230fa --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/util/ColourUtils.java @@ -0,0 +1,74 @@ +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; + +import javax.annotation.Nonnull; + +public final 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; + } + + 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; + } + } + +} 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/IDAssigner.java b/src/main/java/dan200/computercraft/shared/util/IDAssigner.java index b1eb6910e..489e1c075 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.ComputerCraft; + import java.io.*; public class IDAssigner @@ -50,6 +52,7 @@ public class IDAssigner } catch( NumberFormatException e ) { + ComputerCraft.log.error( "Unexpected file '" + content + "' in '" + location.getAbsolutePath() + "'", e ); } } } @@ -82,7 +85,7 @@ public class IDAssigner } catch( IOException e ) { - e.printStackTrace(); + ComputerCraft.log.error( "Cannot open ID file '" + lastidFile + "'", e ); return 0; } @@ -92,7 +95,7 @@ public class IDAssigner } catch( NumberFormatException e ) { - e.printStackTrace(); + ComputerCraft.log.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(); + ComputerCraft.log.error( "An error occured while trying to create the computer folder. Please check you have relevant permissions.", e ); } return id; 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..00cf71cc5 100644 --- a/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java @@ -1,24 +1,25 @@ /* * 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 */ 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; } } 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/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/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 */ 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..48f245c20 --- /dev/null +++ b/src/main/resources/META-INF/computercraft_at.cfg @@ -0,0 +1,3 @@ +# RecordMedia (and related methods) +public net.minecraft.item.ItemRecord field_185076_b # sound +public net.minecraft.item.ItemRecord field_185077_c # displayName 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..ac7a745c5 100644 --- a/src/main/resources/assets/computercraft/blockstates/CC-Peripheral.json +++ b/src/main/resources/assets/computercraft/blockstates/peripheral.json @@ -1,450 +1,455 @@ -{ - "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=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 }, + "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 } + } +} diff --git a/src/main/resources/assets/computercraft/lang/en_US.lang b/src/main/resources/assets/computercraft/lang/en_US.lang index 98361fac9..aafc2186d 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 @@ -36,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 @@ -44,6 +46,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) @@ -57,3 +60,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 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 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 diff --git a/src/main/resources/assets/computercraft/lua/rom/help/changelog b/src/main/resources/assets/computercraft/lua/rom/help/changelog index 0b63f3660..e46d933f2 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 * Startup can now be a directory containing multiple startup files New Features in ComputerCraft 1.79: 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. diff --git a/src/main/resources/assets/computercraft/lua/rom/help/whatsnew b/src/main/resources/assets/computercraft/lua/rom/help/whatsnew index 71a176ce9..c68899c47 100644 --- a/src/main/resources/assets/computercraft/lua/rom/help/whatsnew +++ b/src/main/resources/assets/computercraft/lua/rom/help/whatsnew @@ -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 * Startup can now be a directory containing multiple startup files Type "help changelog" to see the full version history. 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 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..288d44523 --- /dev/null +++ b/src/main/resources/assets/computercraft/models/block/speaker.json @@ -0,0 +1,8 @@ +{ + "parent": "block/orientable", + "textures": { + "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 new file mode 100644 index 000000000..d2109d0ec --- /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/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 new file mode 100644 index 000000000..96e67bcc0 --- /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/turtle_speaker_face" + } +} 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/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/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/speaker_front.png b/src/main/resources/assets/computercraft/textures/blocks/speaker_front.png new file mode 100644 index 000000000..fc5b81ce3 Binary files /dev/null and b/src/main/resources/assets/computercraft/textures/blocks/speaker_front.png differ diff --git a/src/main/resources/assets/computercraft/textures/blocks/speaker_side.png b/src/main/resources/assets/computercraft/textures/blocks/speaker_side.png new file mode 100644 index 000000000..9aed498a5 Binary files /dev/null and b/src/main/resources/assets/computercraft/textures/blocks/speaker_side.png differ diff --git a/src/main/resources/assets/computercraft/textures/blocks/speaker_top.png b/src/main/resources/assets/computercraft/textures/blocks/speaker_top.png new file mode 100644 index 000000000..88e2ade78 Binary files /dev/null and b/src/main/resources/assets/computercraft/textures/blocks/speaker_top.png differ 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 000000000..b115d457c Binary files /dev/null and b/src/main/resources/assets/computercraft/textures/blocks/turtle_speaker_face.png differ 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 a2dd732fa..0050df1c4 100644 Binary files a/src/main/resources/assets/computercraft/textures/blocks/turtle_white.png and b/src/main/resources/assets/computercraft/textures/blocks/turtle_white.png differ 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 f066cc2f4..16757c61e 100644 Binary files a/src/main/resources/assets/computercraft/textures/items/pocket_computer.png and b/src/main/resources/assets/computercraft/textures/items/pocket_computer.png differ 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 d262102d8..c81c88e23 100644 Binary files a/src/main/resources/assets/computercraft/textures/items/pocket_computer_advanced.png and b/src/main/resources/assets/computercraft/textures/items/pocket_computer_advanced.png differ diff --git a/src/main/resources/assets/computercraft/textures/items/pocket_computer_blink.png b/src/main/resources/assets/computercraft/textures/items/pocket_computer_blink.png index 23ad6b40e..ccbfe7510 100644 Binary files a/src/main/resources/assets/computercraft/textures/items/pocket_computer_blink.png and b/src/main/resources/assets/computercraft/textures/items/pocket_computer_blink.png differ 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 d360e8ce1..000000000 Binary files a/src/main/resources/assets/computercraft/textures/items/pocket_computer_blink_advanced.png and /dev/null differ 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 000000000..8055d0c7c Binary files /dev/null and b/src/main/resources/assets/computercraft/textures/items/pocket_computer_colour.png differ diff --git a/src/main/resources/assets/computercraft/textures/items/pocket_computer_frame.png b/src/main/resources/assets/computercraft/textures/items/pocket_computer_frame.png new file mode 100644 index 000000000..0a446b222 Binary files /dev/null and b/src/main/resources/assets/computercraft/textures/items/pocket_computer_frame.png differ 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 4addbc205..c0d3956bb 100644 Binary files a/src/main/resources/assets/computercraft/textures/items/pocket_computer_on.png and b/src/main/resources/assets/computercraft/textures/items/pocket_computer_on.png differ diff --git a/src/main/resources/assets/computercraft/textures/items/pocket_computer_on_advanced.png b/src/main/resources/assets/computercraft/textures/items/pocket_computer_on_advanced.png deleted file mode 100644 index 4915ccec8..000000000 Binary files a/src/main/resources/assets/computercraft/textures/items/pocket_computer_on_advanced.png and /dev/null differ