From fb953402bbc355e99514da9cc8bcc04f315846b9 Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Sat, 10 Dec 2022 00:05:56 +0100 Subject: [PATCH] feat: add UE related APIs --- bin/main/assemblyline/api/IArmbot.class | Bin 0 -> 363 bytes .../assemblyline/api/IArmbotUseable.class | Bin 0 -> 193 bytes bin/main/assemblyline/api/IBelt.class | Bin 0 -> 217 bytes bin/main/assemblyline/api/IBotArm.class | Bin 0 -> 112 bytes .../assemblyline/api/ICraneConnectable.class | Bin 0 -> 213 bytes .../assemblyline/api/ICraneStructure.class | Bin 0 -> 170 bytes bin/main/assemblyline/api/IFilterable.class | Bin 0 -> 231 bytes bin/main/assemblyline/api/IManipulator.class | Bin 0 -> 161 bytes .../atomicscience/api/AtomicScience.class | Bin 0 -> 1047 bytes .../atomicscience/api/BlockRadioactive.class | Bin 0 -> 6852 bytes .../atomicscience/api/IAntiPoisonArmor.class | Bin 0 -> 607 bytes .../atomicscience/api/IAntiPoisonBlock.class | Bin 0 -> 229 bytes .../atomicscience/api/IElectromagnet.class | Bin 0 -> 183 bytes .../atomicscience/api/IFissileMaterial.class | Bin 0 -> 189 bytes bin/main/atomicscience/api/IHeatSource.class | Bin 0 -> 159 bytes bin/main/atomicscience/api/IReactor.class | Bin 0 -> 143 bytes .../atomicscience/api/ISteamReceptor.class | Bin 0 -> 159 bytes bin/main/atomicscience/api/ITemperature.class | Bin 0 -> 186 bytes .../atomicscience/api/Plasma$IPlasma.class | Bin 0 -> 298 bytes bin/main/atomicscience/api/Plasma.class | Bin 0 -> 417 bytes .../api/poison/Poison$ArmorType.class | Bin 0 -> 1327 bytes .../atomicscience/api/poison/Poison.class | Bin 0 -> 3480 bytes .../api/poison/PoisonRadiation.class | Bin 0 -> 3712 bytes .../api/poison/PotionRadiation.class | Bin 0 -> 2174 bytes .../computercraft/api/ComputerCraftAPI.class | Bin 0 -> 6358 bytes .../computercraft/api/filesystem/IMount.class | Bin 0 -> 523 bytes .../api/filesystem/IWritableMount.class | Bin 0 -> 474 bytes .../api/filesystem/package-info.class | Bin 0 -> 310 bytes .../computercraft/api/lua/ILuaContext.class | Bin 0 -> 596 bytes .../computercraft/api/lua/ILuaObject.class | Bin 0 -> 394 bytes .../computercraft/api/lua/ILuaTask.class | Bin 0 -> 238 bytes .../computercraft/api/lua/LuaException.class | Bin 0 -> 720 bytes .../computercraft/api/lua/package-info.class | Bin 0 -> 296 bytes .../computercraft/api/media/IMedia.class | Bin 0 -> 454 bytes .../api/media/IMediaProvider.class | Bin 0 -> 233 bytes .../api/media/package-info.class | Bin 0 -> 300 bytes .../computercraft/api/package-info.class | Bin 0 -> 288 bytes .../api/peripheral/IComputerAccess.class | Bin 0 -> 774 bytes .../api/peripheral/IPeripheral.class | Bin 0 -> 662 bytes .../api/peripheral/IPeripheralProvider.class | Bin 0 -> 264 bytes .../api/peripheral/package-info.class | Bin 0 -> 310 bytes .../ITurtlePermissionProvider.class | Bin 0 -> 257 bytes .../api/permissions/package-info.class | Bin 0 -> 312 bytes .../redstone/IBundledRedstoneProvider.class | Bin 0 -> 235 bytes .../api/redstone/package-info.class | Bin 0 -> 306 bytes .../api/turtle/ITurtleAccess.class | Bin 0 -> 1643 bytes .../api/turtle/ITurtleCommand.class | Bin 0 -> 264 bytes .../api/turtle/ITurtleUpgrade.class | Bin 0 -> 1000 bytes .../api/turtle/TurtleAnimation.class | Bin 0 -> 1651 bytes .../api/turtle/TurtleCommandResult.class | Bin 0 -> 1619 bytes .../computercraft/api/turtle/TurtleSide.class | Bin 0 -> 1105 bytes .../api/turtle/TurtleUpgradeType.class | Bin 0 -> 1159 bytes .../computercraft/api/turtle/TurtleVerb.class | Bin 0 -> 1105 bytes .../api/turtle/package-info.class | Bin 0 -> 302 bytes bin/main/icbm/api/IAmmunition.class | Bin 0 -> 196 bytes bin/main/icbm/api/IBlockFrequency.class | Bin 0 -> 179 bytes bin/main/icbm/api/ICBM.class | Bin 0 -> 2413 bytes bin/main/icbm/api/ICBMFlags.class | Bin 0 -> 814 bytes bin/main/icbm/api/ICamouflageMaterial.class | Bin 0 -> 128 bytes bin/main/icbm/api/IHackable.class | Bin 0 -> 228 bytes bin/main/icbm/api/IItemFrequency.class | Bin 0 -> 237 bytes bin/main/icbm/api/ILauncherContainer.class | Bin 0 -> 296 bytes bin/main/icbm/api/ILauncherController.class | Bin 0 -> 667 bytes bin/main/icbm/api/IMissile.class | Bin 0 -> 484 bytes bin/main/icbm/api/IMissileLockable.class | Bin 0 -> 244 bytes bin/main/icbm/api/ITracker.class | Bin 0 -> 318 bytes bin/main/icbm/api/LauncherType.class | Bin 0 -> 981 bytes bin/main/icbm/api/RadarRegistry.class | Bin 0 -> 4722 bytes .../ExplosionEvent$PostExplosionEvent.class | Bin 0 -> 635 bytes .../ExplosionEvent$PreExplosionEvent.class | Bin 0 -> 632 bytes .../icbm/api/explosion/ExplosionEvent.class | Bin 0 -> 881 bytes bin/main/icbm/api/explosion/IEMPBlock.class | Bin 0 -> 240 bytes bin/main/icbm/api/explosion/IEMPItem.class | Bin 0 -> 280 bytes bin/main/icbm/api/explosion/IExplosive.class | Bin 0 -> 367 bytes .../api/explosion/IExplosiveContainer.class | Bin 0 -> 201 bytes .../icbm/api/explosion/IExplosiveIgnore.class | Bin 0 -> 193 bytes bin/main/icbm/api/sentry/IAATarget.class | Bin 0 -> 218 bytes bin/main/mffs/api/Blacklist.class | Bin 0 -> 633 bytes bin/main/mffs/api/IActivatable.class | Bin 0 -> 166 bytes .../mffs/api/IBiometricIdentifierLink.class | Bin 0 -> 352 bytes bin/main/mffs/api/ICache.class | Bin 0 -> 221 bytes bin/main/mffs/api/IFieldInteraction.class | Bin 0 -> 1003 bytes bin/main/mffs/api/IForceFieldBlock.class | Bin 0 -> 272 bytes bin/main/mffs/api/IProjector.class | Bin 0 -> 339 bytes .../mffs/api/ISpecialForceManipulation.class | Bin 0 -> 216 bytes bin/main/mffs/api/card/ICard.class | Bin 0 -> 105 bytes .../mffs/api/card/ICardIdentification.class | Bin 0 -> 452 bytes bin/main/mffs/api/card/ICardInfinite.class | Bin 0 -> 121 bytes bin/main/mffs/api/card/ICardLink.class | Bin 0 -> 304 bytes .../mffs/api/fortron/IFortronCapacitor.class | Bin 0 -> 324 bytes .../mffs/api/fortron/IFortronFrequency.class | Bin 0 -> 204 bytes .../mffs/api/fortron/IFortronStorage.class | Bin 0 -> 282 bytes .../modules/IInterdictionMatrixModule.class | Bin 0 -> 283 bytes bin/main/mffs/api/modules/IModule.class | Bin 0 -> 690 bytes .../mffs/api/modules/IModuleAcceptor.class | Bin 0 -> 500 bytes .../mffs/api/modules/IProjectorMode.class | Bin 0 -> 495 bytes .../api/security/IBiometricIdentifier.class | Bin 0 -> 326 bytes .../api/security/IInterdictionMatrix.class | Bin 0 -> 627 bytes bin/main/mffs/api/security/Permission.class | Bin 0 -> 1426 bytes build.gradle | 2 +- src/main/java/assemblyline/api/IArmbot.java | 22 ++ .../java/assemblyline/api/IArmbotUseable.java | 8 + src/main/java/assemblyline/api/IBelt.java | 11 + src/main/java/assemblyline/api/IBotArm.java | 5 + .../assemblyline/api/ICraneConnectable.java | 8 + .../assemblyline/api/ICraneStructure.java | 8 + .../java/assemblyline/api/IFilterable.java | 10 + .../java/assemblyline/api/IManipulator.java | 8 + .../java/atomicscience/api/AtomicScience.java | 17 + .../atomicscience/api/BlockRadioactive.java | 140 ++++++++ .../atomicscience/api/IAntiPoisonArmor.java | 14 + .../atomicscience/api/IAntiPoisonBlock.java | 9 + .../atomicscience/api/IElectromagnet.java | 8 + .../atomicscience/api/IFissileMaterial.java | 8 + .../java/atomicscience/api/IHeatSource.java | 6 + src/main/java/atomicscience/api/IReactor.java | 7 + .../atomicscience/api/ISteamReceptor.java | 7 + .../java/atomicscience/api/ITemperature.java | 9 + src/main/java/atomicscience/api/Plasma.java | 17 + .../java/atomicscience/api/poison/Poison.java | 77 +++++ .../api/poison/PoisonRadiation.java | 66 ++++ .../api/poison/PotionRadiation.java | 32 ++ .../computercraft/api/ComputerCraftAPI.java | 315 ++++++++++++++++++ .../computercraft/api/filesystem/IMount.java | 57 ++++ .../api/filesystem/IWritableMount.java | 52 +++ .../api/filesystem/package-info.java | 10 + .../computercraft/api/lua/ILuaContext.java | 58 ++++ .../computercraft/api/lua/ILuaObject.java | 26 ++ .../computercraft/api/lua/ILuaTask.java | 12 + .../computercraft/api/lua/LuaException.java | 36 ++ .../computercraft/api/lua/package-info.java | 10 + .../computercraft/api/media/IMedia.java | 59 ++++ .../api/media/IMediaProvider.java | 23 ++ .../computercraft/api/media/package-info.java | 10 + .../computercraft/api/package-info.java | 10 + .../api/peripheral/IComputerAccess.java | 102 ++++++ .../api/peripheral/IPeripheral.java | 100 ++++++ .../api/peripheral/IPeripheralProvider.java | 23 ++ .../api/peripheral/package-info.java | 10 + .../ITurtlePermissionProvider.java | 19 ++ .../api/permissions/package-info.java | 10 + .../redstone/IBundledRedstoneProvider.java | 23 ++ .../api/redstone/package-info.java | 10 + .../api/turtle/ITurtleAccess.java | 168 ++++++++++ .../api/turtle/ITurtleCommand.java | 25 ++ .../api/turtle/ITurtleUpgrade.java | 94 ++++++ .../api/turtle/TurtleAnimation.java | 22 ++ .../api/turtle/TurtleCommandResult.java | 73 ++++ .../computercraft/api/turtle/TurtleSide.java | 23 ++ .../api/turtle/TurtleUpgradeType.java | 27 ++ .../computercraft/api/turtle/TurtleVerb.java | 26 ++ .../api/turtle/package-info.java | 10 + src/main/java/icbm/api/IAmmunition.java | 9 + src/main/java/icbm/api/IBlockFrequency.java | 7 + src/main/java/icbm/api/ICBM.java | 63 ++++ src/main/java/icbm/api/ICBMFlags.java | 15 + .../java/icbm/api/ICamouflageMaterial.java | 3 + src/main/java/icbm/api/IHackable.java | 9 + src/main/java/icbm/api/IItemFrequency.java | 9 + .../java/icbm/api/ILauncherContainer.java | 12 + .../java/icbm/api/ILauncherController.java | 28 ++ src/main/java/icbm/api/IMissile.java | 24 ++ src/main/java/icbm/api/IMissileLockable.java | 10 + src/main/java/icbm/api/ITracker.java | 11 + src/main/java/icbm/api/LauncherType.java | 6 + src/main/java/icbm/api/RadarRegistry.java | 114 +++++++ .../icbm/api/explosion/ExplosionEvent.java | 38 +++ .../java/icbm/api/explosion/IEMPBlock.java | 9 + .../java/icbm/api/explosion/IEMPItem.java | 10 + .../java/icbm/api/explosion/IExplosive.java | 21 ++ .../api/explosion/IExplosiveContainer.java | 7 + .../icbm/api/explosion/IExplosiveIgnore.java | 7 + src/main/java/icbm/api/sentry/IAATarget.java | 13 + src/main/java/mffs/api/Blacklist.java | 19 ++ src/main/java/mffs/api/IActivatable.java | 8 + .../mffs/api/IBiometricIdentifierLink.java | 11 + src/main/java/mffs/api/ICache.java | 10 + src/main/java/mffs/api/IFieldInteraction.java | 41 +++ src/main/java/mffs/api/IForceFieldBlock.java | 11 + src/main/java/mffs/api/IProjector.java | 14 + .../mffs/api/ISpecialForceManipulation.java | 10 + src/main/java/mffs/api/card/ICard.java | 5 + .../mffs/api/card/ICardIdentification.java | 17 + .../java/mffs/api/card/ICardInfinite.java | 5 + src/main/java/mffs/api/card/ICardLink.java | 11 + .../mffs/api/fortron/IFortronCapacitor.java | 12 + .../mffs/api/fortron/IFortronFrequency.java | 7 + .../mffs/api/fortron/IFortronStorage.java | 14 + .../modules/IInterdictionMatrixModule.java | 9 + src/main/java/mffs/api/modules/IModule.java | 22 ++ .../mffs/api/modules/IModuleAcceptor.java | 17 + .../java/mffs/api/modules/IProjectorMode.java | 17 + .../api/security/IBiometricIdentifier.java | 12 + .../api/security/IInterdictionMatrix.java | 24 ++ .../java/mffs/api/security/Permission.java | 45 +++ 195 files changed, 2707 insertions(+), 1 deletion(-) create mode 100644 bin/main/assemblyline/api/IArmbot.class create mode 100644 bin/main/assemblyline/api/IArmbotUseable.class create mode 100644 bin/main/assemblyline/api/IBelt.class create mode 100644 bin/main/assemblyline/api/IBotArm.class create mode 100644 bin/main/assemblyline/api/ICraneConnectable.class create mode 100644 bin/main/assemblyline/api/ICraneStructure.class create mode 100644 bin/main/assemblyline/api/IFilterable.class create mode 100644 bin/main/assemblyline/api/IManipulator.class create mode 100644 bin/main/atomicscience/api/AtomicScience.class create mode 100644 bin/main/atomicscience/api/BlockRadioactive.class create mode 100644 bin/main/atomicscience/api/IAntiPoisonArmor.class create mode 100644 bin/main/atomicscience/api/IAntiPoisonBlock.class create mode 100644 bin/main/atomicscience/api/IElectromagnet.class create mode 100644 bin/main/atomicscience/api/IFissileMaterial.class create mode 100644 bin/main/atomicscience/api/IHeatSource.class create mode 100644 bin/main/atomicscience/api/IReactor.class create mode 100644 bin/main/atomicscience/api/ISteamReceptor.class create mode 100644 bin/main/atomicscience/api/ITemperature.class create mode 100644 bin/main/atomicscience/api/Plasma$IPlasma.class create mode 100644 bin/main/atomicscience/api/Plasma.class create mode 100644 bin/main/atomicscience/api/poison/Poison$ArmorType.class create mode 100644 bin/main/atomicscience/api/poison/Poison.class create mode 100644 bin/main/atomicscience/api/poison/PoisonRadiation.class create mode 100644 bin/main/atomicscience/api/poison/PotionRadiation.class create mode 100644 bin/main/dan200/computercraft/api/ComputerCraftAPI.class create mode 100644 bin/main/dan200/computercraft/api/filesystem/IMount.class create mode 100644 bin/main/dan200/computercraft/api/filesystem/IWritableMount.class create mode 100644 bin/main/dan200/computercraft/api/filesystem/package-info.class create mode 100644 bin/main/dan200/computercraft/api/lua/ILuaContext.class create mode 100644 bin/main/dan200/computercraft/api/lua/ILuaObject.class create mode 100644 bin/main/dan200/computercraft/api/lua/ILuaTask.class create mode 100644 bin/main/dan200/computercraft/api/lua/LuaException.class create mode 100644 bin/main/dan200/computercraft/api/lua/package-info.class create mode 100644 bin/main/dan200/computercraft/api/media/IMedia.class create mode 100644 bin/main/dan200/computercraft/api/media/IMediaProvider.class create mode 100644 bin/main/dan200/computercraft/api/media/package-info.class create mode 100644 bin/main/dan200/computercraft/api/package-info.class create mode 100644 bin/main/dan200/computercraft/api/peripheral/IComputerAccess.class create mode 100644 bin/main/dan200/computercraft/api/peripheral/IPeripheral.class create mode 100644 bin/main/dan200/computercraft/api/peripheral/IPeripheralProvider.class create mode 100644 bin/main/dan200/computercraft/api/peripheral/package-info.class create mode 100644 bin/main/dan200/computercraft/api/permissions/ITurtlePermissionProvider.class create mode 100644 bin/main/dan200/computercraft/api/permissions/package-info.class create mode 100644 bin/main/dan200/computercraft/api/redstone/IBundledRedstoneProvider.class create mode 100644 bin/main/dan200/computercraft/api/redstone/package-info.class create mode 100644 bin/main/dan200/computercraft/api/turtle/ITurtleAccess.class create mode 100644 bin/main/dan200/computercraft/api/turtle/ITurtleCommand.class create mode 100644 bin/main/dan200/computercraft/api/turtle/ITurtleUpgrade.class create mode 100644 bin/main/dan200/computercraft/api/turtle/TurtleAnimation.class create mode 100644 bin/main/dan200/computercraft/api/turtle/TurtleCommandResult.class create mode 100644 bin/main/dan200/computercraft/api/turtle/TurtleSide.class create mode 100644 bin/main/dan200/computercraft/api/turtle/TurtleUpgradeType.class create mode 100644 bin/main/dan200/computercraft/api/turtle/TurtleVerb.class create mode 100644 bin/main/dan200/computercraft/api/turtle/package-info.class create mode 100644 bin/main/icbm/api/IAmmunition.class create mode 100644 bin/main/icbm/api/IBlockFrequency.class create mode 100644 bin/main/icbm/api/ICBM.class create mode 100644 bin/main/icbm/api/ICBMFlags.class create mode 100644 bin/main/icbm/api/ICamouflageMaterial.class create mode 100644 bin/main/icbm/api/IHackable.class create mode 100644 bin/main/icbm/api/IItemFrequency.class create mode 100644 bin/main/icbm/api/ILauncherContainer.class create mode 100644 bin/main/icbm/api/ILauncherController.class create mode 100644 bin/main/icbm/api/IMissile.class create mode 100644 bin/main/icbm/api/IMissileLockable.class create mode 100644 bin/main/icbm/api/ITracker.class create mode 100644 bin/main/icbm/api/LauncherType.class create mode 100644 bin/main/icbm/api/RadarRegistry.class create mode 100644 bin/main/icbm/api/explosion/ExplosionEvent$PostExplosionEvent.class create mode 100644 bin/main/icbm/api/explosion/ExplosionEvent$PreExplosionEvent.class create mode 100644 bin/main/icbm/api/explosion/ExplosionEvent.class create mode 100644 bin/main/icbm/api/explosion/IEMPBlock.class create mode 100644 bin/main/icbm/api/explosion/IEMPItem.class create mode 100644 bin/main/icbm/api/explosion/IExplosive.class create mode 100644 bin/main/icbm/api/explosion/IExplosiveContainer.class create mode 100644 bin/main/icbm/api/explosion/IExplosiveIgnore.class create mode 100644 bin/main/icbm/api/sentry/IAATarget.class create mode 100644 bin/main/mffs/api/Blacklist.class create mode 100644 bin/main/mffs/api/IActivatable.class create mode 100644 bin/main/mffs/api/IBiometricIdentifierLink.class create mode 100644 bin/main/mffs/api/ICache.class create mode 100644 bin/main/mffs/api/IFieldInteraction.class create mode 100644 bin/main/mffs/api/IForceFieldBlock.class create mode 100644 bin/main/mffs/api/IProjector.class create mode 100644 bin/main/mffs/api/ISpecialForceManipulation.class create mode 100644 bin/main/mffs/api/card/ICard.class create mode 100644 bin/main/mffs/api/card/ICardIdentification.class create mode 100644 bin/main/mffs/api/card/ICardInfinite.class create mode 100644 bin/main/mffs/api/card/ICardLink.class create mode 100644 bin/main/mffs/api/fortron/IFortronCapacitor.class create mode 100644 bin/main/mffs/api/fortron/IFortronFrequency.class create mode 100644 bin/main/mffs/api/fortron/IFortronStorage.class create mode 100644 bin/main/mffs/api/modules/IInterdictionMatrixModule.class create mode 100644 bin/main/mffs/api/modules/IModule.class create mode 100644 bin/main/mffs/api/modules/IModuleAcceptor.class create mode 100644 bin/main/mffs/api/modules/IProjectorMode.class create mode 100644 bin/main/mffs/api/security/IBiometricIdentifier.class create mode 100644 bin/main/mffs/api/security/IInterdictionMatrix.class create mode 100644 bin/main/mffs/api/security/Permission.class create mode 100644 src/main/java/assemblyline/api/IArmbot.java create mode 100644 src/main/java/assemblyline/api/IArmbotUseable.java create mode 100644 src/main/java/assemblyline/api/IBelt.java create mode 100644 src/main/java/assemblyline/api/IBotArm.java create mode 100644 src/main/java/assemblyline/api/ICraneConnectable.java create mode 100644 src/main/java/assemblyline/api/ICraneStructure.java create mode 100644 src/main/java/assemblyline/api/IFilterable.java create mode 100644 src/main/java/assemblyline/api/IManipulator.java create mode 100644 src/main/java/atomicscience/api/AtomicScience.java create mode 100644 src/main/java/atomicscience/api/BlockRadioactive.java create mode 100644 src/main/java/atomicscience/api/IAntiPoisonArmor.java create mode 100644 src/main/java/atomicscience/api/IAntiPoisonBlock.java create mode 100644 src/main/java/atomicscience/api/IElectromagnet.java create mode 100644 src/main/java/atomicscience/api/IFissileMaterial.java create mode 100644 src/main/java/atomicscience/api/IHeatSource.java create mode 100644 src/main/java/atomicscience/api/IReactor.java create mode 100644 src/main/java/atomicscience/api/ISteamReceptor.java create mode 100644 src/main/java/atomicscience/api/ITemperature.java create mode 100644 src/main/java/atomicscience/api/Plasma.java create mode 100644 src/main/java/atomicscience/api/poison/Poison.java create mode 100644 src/main/java/atomicscience/api/poison/PoisonRadiation.java create mode 100644 src/main/java/atomicscience/api/poison/PotionRadiation.java create mode 100755 src/main/java/dan200/computercraft/api/ComputerCraftAPI.java create mode 100755 src/main/java/dan200/computercraft/api/filesystem/IMount.java create mode 100755 src/main/java/dan200/computercraft/api/filesystem/IWritableMount.java create mode 100755 src/main/java/dan200/computercraft/api/filesystem/package-info.java create mode 100755 src/main/java/dan200/computercraft/api/lua/ILuaContext.java create mode 100755 src/main/java/dan200/computercraft/api/lua/ILuaObject.java create mode 100755 src/main/java/dan200/computercraft/api/lua/ILuaTask.java create mode 100755 src/main/java/dan200/computercraft/api/lua/LuaException.java create mode 100755 src/main/java/dan200/computercraft/api/lua/package-info.java create mode 100755 src/main/java/dan200/computercraft/api/media/IMedia.java create mode 100755 src/main/java/dan200/computercraft/api/media/IMediaProvider.java create mode 100755 src/main/java/dan200/computercraft/api/media/package-info.java create mode 100755 src/main/java/dan200/computercraft/api/package-info.java create mode 100755 src/main/java/dan200/computercraft/api/peripheral/IComputerAccess.java create mode 100755 src/main/java/dan200/computercraft/api/peripheral/IPeripheral.java create mode 100755 src/main/java/dan200/computercraft/api/peripheral/IPeripheralProvider.java create mode 100755 src/main/java/dan200/computercraft/api/peripheral/package-info.java create mode 100644 src/main/java/dan200/computercraft/api/permissions/ITurtlePermissionProvider.java create mode 100644 src/main/java/dan200/computercraft/api/permissions/package-info.java create mode 100755 src/main/java/dan200/computercraft/api/redstone/IBundledRedstoneProvider.java create mode 100755 src/main/java/dan200/computercraft/api/redstone/package-info.java create mode 100755 src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java create mode 100755 src/main/java/dan200/computercraft/api/turtle/ITurtleCommand.java create mode 100755 src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java create mode 100755 src/main/java/dan200/computercraft/api/turtle/TurtleAnimation.java create mode 100755 src/main/java/dan200/computercraft/api/turtle/TurtleCommandResult.java create mode 100755 src/main/java/dan200/computercraft/api/turtle/TurtleSide.java create mode 100755 src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeType.java create mode 100755 src/main/java/dan200/computercraft/api/turtle/TurtleVerb.java create mode 100755 src/main/java/dan200/computercraft/api/turtle/package-info.java create mode 100644 src/main/java/icbm/api/IAmmunition.java create mode 100644 src/main/java/icbm/api/IBlockFrequency.java create mode 100644 src/main/java/icbm/api/ICBM.java create mode 100644 src/main/java/icbm/api/ICBMFlags.java create mode 100644 src/main/java/icbm/api/ICamouflageMaterial.java create mode 100644 src/main/java/icbm/api/IHackable.java create mode 100644 src/main/java/icbm/api/IItemFrequency.java create mode 100644 src/main/java/icbm/api/ILauncherContainer.java create mode 100644 src/main/java/icbm/api/ILauncherController.java create mode 100644 src/main/java/icbm/api/IMissile.java create mode 100644 src/main/java/icbm/api/IMissileLockable.java create mode 100644 src/main/java/icbm/api/ITracker.java create mode 100644 src/main/java/icbm/api/LauncherType.java create mode 100644 src/main/java/icbm/api/RadarRegistry.java create mode 100644 src/main/java/icbm/api/explosion/ExplosionEvent.java create mode 100644 src/main/java/icbm/api/explosion/IEMPBlock.java create mode 100644 src/main/java/icbm/api/explosion/IEMPItem.java create mode 100644 src/main/java/icbm/api/explosion/IExplosive.java create mode 100644 src/main/java/icbm/api/explosion/IExplosiveContainer.java create mode 100644 src/main/java/icbm/api/explosion/IExplosiveIgnore.java create mode 100644 src/main/java/icbm/api/sentry/IAATarget.java create mode 100644 src/main/java/mffs/api/Blacklist.java create mode 100644 src/main/java/mffs/api/IActivatable.java create mode 100644 src/main/java/mffs/api/IBiometricIdentifierLink.java create mode 100644 src/main/java/mffs/api/ICache.java create mode 100644 src/main/java/mffs/api/IFieldInteraction.java create mode 100644 src/main/java/mffs/api/IForceFieldBlock.java create mode 100644 src/main/java/mffs/api/IProjector.java create mode 100644 src/main/java/mffs/api/ISpecialForceManipulation.java create mode 100644 src/main/java/mffs/api/card/ICard.java create mode 100644 src/main/java/mffs/api/card/ICardIdentification.java create mode 100644 src/main/java/mffs/api/card/ICardInfinite.java create mode 100644 src/main/java/mffs/api/card/ICardLink.java create mode 100644 src/main/java/mffs/api/fortron/IFortronCapacitor.java create mode 100644 src/main/java/mffs/api/fortron/IFortronFrequency.java create mode 100644 src/main/java/mffs/api/fortron/IFortronStorage.java create mode 100644 src/main/java/mffs/api/modules/IInterdictionMatrixModule.java create mode 100644 src/main/java/mffs/api/modules/IModule.java create mode 100644 src/main/java/mffs/api/modules/IModuleAcceptor.java create mode 100644 src/main/java/mffs/api/modules/IProjectorMode.java create mode 100644 src/main/java/mffs/api/security/IBiometricIdentifier.java create mode 100644 src/main/java/mffs/api/security/IInterdictionMatrix.java create mode 100644 src/main/java/mffs/api/security/Permission.java diff --git a/bin/main/assemblyline/api/IArmbot.class b/bin/main/assemblyline/api/IArmbot.class new file mode 100644 index 0000000000000000000000000000000000000000..925e208acc04891648fa72a9a859936e1da4e515 GIT binary patch literal 363 zcmZ8du};G<6g(HGLnyR#VuUSS@WR%q15}kFF;rr=(?{guBvtZ?)L&!Z1NbO}?FJ#S z`26nOo&Da|_s1uI2TUaf0ynzrs50*0Y)wkjJs=T*o^(!li4R!3#XDuD8wYu3eEl&71v+5N^R zp*VVFxGtO%ILSinv?N~oWJ8;%w$ynto8|Gxd$vyHw&S_L_)i(4yewTe`?jDb>qubK t&wC$?LjnJQUk@Pt_-7a*tU)4)c;44(UteGp`Ab|y90&9X6MqhH{R1_hT3rAD literal 0 HcmV?d00001 diff --git a/bin/main/assemblyline/api/IArmbotUseable.class b/bin/main/assemblyline/api/IArmbotUseable.class new file mode 100644 index 0000000000000000000000000000000000000000..bc24cbc670156d43a09b0413dd05a32fcb875092 GIT binary patch literal 193 zcmX^0Z`VEs1_l!bPId++Mh5xB;^NfYq@2o}%)C_n#DYwHPsgI%r2LZ5;?%^XoK$uO z7Dfhvti-ZJ{hY+SbbbG%tkmQZMh4dWJfI3j1_KQrTqamY`yliMmlS2@rCV!8F*0xk u=a&{Gr@Ce40QC!_TBirn!N$nI$iNJABm)B@&~{b^HV}(}9Y``UZ~y?lxHSX- literal 0 HcmV?d00001 diff --git a/bin/main/assemblyline/api/IBelt.class b/bin/main/assemblyline/api/IBelt.class new file mode 100644 index 0000000000000000000000000000000000000000..f2900c6bd96ebd94121cf081e68a5d2cdf62a71f GIT binary patch literal 217 zcmXAjy$ZrW5QJy_i+_bESX-LLYwWBP6oi0Z4 z&-e8Pu*4uhgD}-a!Pm1bt#PdM-KhPBtpsQhMwxzUWwlGy;hb?Sgh|S>P7*)!W$VO< z;es%phf(c)h_Na%g{%m}ed=yG*RGNqHb+@lyTotMEkVA8(I5=AE(Z emzrZyz3mVPO%Dw;JXRYWRCocpULo`<9sM8j>^SED literal 0 HcmV?d00001 diff --git a/bin/main/assemblyline/api/IBotArm.class b/bin/main/assemblyline/api/IBotArm.class new file mode 100644 index 0000000000000000000000000000000000000000..d4de83f2a331d8fb9e03e7db024ab2e505d2017d GIT binary patch literal 112 zcmX^0Z`VEs1_l!bc6J6PMh1z*;^NfYq@2o}%)C_n#DYwHPpAA6$D&+z1{OvJfvm)` zME#t^ymWp4q^#8B5=I8D;QZ2}5qSEA&(xOy$ z1{OvJfvm)`ME#t^ymWp4q^#8B5_SeQMg}DudY$w0@_=d*lX6lS8MuP;ON)|I-7-NO d5j4Z~K;{BXVq{7-TcmNM2PO#9*W{Ssq zeBV4@_XmI#CLsca8MQ4}xw|=Av!=7v>Bc(G4dsqQ^cAKhT}eBt3%$!rHeO-evj4Oc z7V)-buPd3Gh7Mj^&y`N)WS-1%o$RGweEah_`9DyIveTt8ECd$(kI%AG87e6BkG((Ie5muKYdILX)K0E*b literal 0 HcmV?d00001 diff --git a/bin/main/assemblyline/api/IManipulator.class b/bin/main/assemblyline/api/IManipulator.class new file mode 100644 index 0000000000000000000000000000000000000000..9f489044ca30b99ca9dbb63f27ed96f11f8c8ba9 GIT binary patch literal 161 zcmX^0Z`VEs1_l!bE_MbcMh4l$;^NfYq@2o}%)C_n#DYwHPv6A6%!1OK#FG3Xb_Nzk z27#=^vPAuy#JqHU|D>$cH`1tf3jk$iSAF2jOxB=a&{Gr@Ce4q%txHA{(R! jGJ}ngfsuh3XgLD|6VO~%1~vwe`RpJXD8m5~XW#??cp)Wb literal 0 HcmV?d00001 diff --git a/bin/main/atomicscience/api/AtomicScience.class b/bin/main/atomicscience/api/AtomicScience.class new file mode 100644 index 0000000000000000000000000000000000000000..ea0f0139b0bef501d78cb1571dc4d77eb58051bb GIT binary patch literal 1047 zcmb7DYi|-k6g@*9yT$Db-?g^X`hcn|)Y@vn8tlVhwva%(Nk5rk8E~3?G|QsD%b19< zi9f&}WxTu405!(AA9ix?+S6`u+pJ23{+OF)Z`IbEMU_q;M^v^E0Uzqe!h6 zQ83OhcgjC<-R5pfuhdV46);R67T;B>@6G*ctyC#9B#c2$E%2q=%2U#==e7gx1}3*V zLd6sV%Z9b3@}O3QM&V8BQr$O8A=?G3idouOr-C=fC1Y<8PB4t+a$5{azrTv>3=`SR zW`?rI%f-We6}K2>dRCHsFQK4H`JnXnxLQ1lRA&uW1iB+#VfnlnG(Ep1bjx!b&!xp} z%9c(RXzBPoke*AP)PiM8R|Y$zA(b|%-LBUV3YHl%|3{`^g+YtPCO!Q?+9HlsJWz0- zVZl24q&r@ttv4O}LXqL|hVV5!#3RxnqtRM|VJVe1{+^!?S<@QU@R-`QM9_1zCw&?@ zRSpZtt9Z&VKXL;yRo(a+7@oy#llwBnQ811%Y=?AEs;AlW(~96{*CNE;3!Lf5G$5v>U?~{X=!2t}mhp2+=tDJUXr6 a?!;ObFE5vLS0*##%mj$l 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 GhT#ue_A!$H literal 0 HcmV?d00001 diff --git a/bin/main/atomicscience/api/IFissileMaterial.class b/bin/main/atomicscience/api/IFissileMaterial.class new file mode 100644 index 0000000000000000000000000000000000000000..782fa04b1404e209b8c4e674142982cc8efd1ca2 GIT binary patch literal 189 zcmZvWF$%&!6h!AoO^lU|7tlrqy)k!9t0?ACrF2eEM|h~2kx6R4FCWD literal 0 HcmV?d00001 diff --git a/bin/main/atomicscience/api/IHeatSource.class b/bin/main/atomicscience/api/IHeatSource.class new file mode 100644 index 0000000000000000000000000000000000000000..e96c4701952f9aa37dcc735dc1074d41389702d7 GIT binary patch literal 159 zcmX^0Z`VEs1_l!bPId++Mh4l$lKkAv$cna|=?75=%;pQW+VzAV#=l<^VYYNQUZx Y%mbRh$iNK5tU$*w0BLq0$;7|`03`w|6951J literal 0 HcmV?d00001 diff --git a/bin/main/atomicscience/api/IReactor.class b/bin/main/atomicscience/api/IReactor.class new file mode 100644 index 0000000000000000000000000000000000000000..aff663e06590ce09b89533fc5cbd175c0e65a15a GIT binary patch literal 143 zcmX^0Z`VEs1_l!bPId++Mh2W&*RX{5l7#M*DvNEuNSPbkyl8J!>0EaRn8UO$Q literal 0 HcmV?d00001 diff --git a/bin/main/atomicscience/api/ISteamReceptor.class b/bin/main/atomicscience/api/ISteamReceptor.class new file mode 100644 index 0000000000000000000000000000000000000000..085c2d98b1b0e4cb441b78b6357752f659084dbf GIT binary patch literal 159 zcmY+8F$%&!5JmsQm{kiAynv-PZsQq*RDuEfaTsJnvK!)>!&!I$4<&BwY(B4eJpTLh zd;vIMZjcc+97F5mE>69u<<8l%ipuR-MY|Y!gPgFcd0^YHzuD8ZR*8gV@T1}e{po~! lTkbA|MHL>s=+QMwSpT>7W2PVwCg}n|DLq9o5=`0*voF_(C}scv literal 0 HcmV?d00001 diff --git a/bin/main/atomicscience/api/ITemperature.class b/bin/main/atomicscience/api/ITemperature.class new file mode 100644 index 0000000000000000000000000000000000000000..236d10e6740733b4db6d468fd171a5ec71ad3702 GIT binary patch literal 186 zcmZ9Gy$ZrG7)9?_YoirJU%u7}Gx_w#+d z0i3WANC*e*`_`J#SndoCs~=9?ZqPc=M(pEC?+K3cXFYqijhwB^%9m^WX>YLrFKr ztMu|73~y%M@B8QT3&0J|6b6JDH&y9uuui-c%{!-;1&5L^P45avgz1()SQqTy^kTgg z+Ym-!$E_z^Ts?Yebm_d|P=z?&xaU_rOAM84p>PAjEd>_4(fj1N7k5h-LI^28cKlv%SeD{0{~lgdE+5#1`YQ#oHLx`lyaO7<2Yn K+vT(G4*meV|E`lF(pK@6&JfOL zve{fAt1$$(ip2wp@?l}GP<&fp=+6`m_h(C+`NItDFTCriK{#zzY{&N38KhXeL>;%? z_f{A|1q@LYH*k|7ly0Yt#PXf7G~ctGaw-=uMJRVfMG&DdWDdqu$Q*<@m{bwwAi}{N z6%h^;4(_Q?5aO#@75z{d2J^OK6&lqe%R4ZRDi&$TyQWbo8J^9t*i;}PN=p5YcAdnX z7?p-ai^W*Hm)R98U{S_HhM}&Rnswi*sz~AyL&WerqiMReCPSio^5W64W%{XH*J1qG zqSK(e5t51@7+!YM+6NZz;ez<6%PN+z!m!d^YrA69>!~gQSH(NSaNm)K6wPgTrnO`9 zmtvh2{pUy7=FW}U)H*cab~&)nd{U>%{h+c30+oQMw;&WA5N$KS8rxxiCiGj za|>;ZaU%f~$wMNNeMBVZh)AXZhQ_&Nh!G%rUBdwJ2MK*5%s=ICV0v^&I>Yr-3=428 zAi$^q<3Rx?1h^d%U`l|yvH;WJ?^Ho*VOY}xEsSb2eFx+9_tfP^&)N zr|)qt3R#k}OY0ow@S6TR_OOW^JP=ttlipKX=n{>~2bL4_lV_Og6bexS+9Xx1WyD1B z2;xYz>8o@~oIcXRjJ_u&F7!0lyDv?gV}9YYXvk$_g bA7FpyNmvy%pW>N_&+&pYiO-P2+Q!&#zSb$; literal 0 HcmV?d00001 diff --git a/bin/main/atomicscience/api/poison/Poison.class b/bin/main/atomicscience/api/poison/Poison.class new file mode 100644 index 0000000000000000000000000000000000000000..0199eae4abc6484e927def3a60b2b294bc311589 GIT binary patch literal 3480 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 literal 0 HcmV?d00001 diff --git a/bin/main/atomicscience/api/poison/PotionRadiation.class b/bin/main/atomicscience/api/poison/PotionRadiation.class new file mode 100644 index 0000000000000000000000000000000000000000..fa577a9ec941ef6692369f5d474aee5347416707 GIT binary patch literal 2174 zcmb7F-%}e^6#gy=SqO{Jn3hr~1!~&_ghfO_gGGJ?S5v@1VT!+c+1!K+o87qCAn3b3 z`DAAteef^nIAe!N9i4IX)zN34efMv0Ji8m15U|zEBztr2J>U7xIp00|>)${81YiOc z1x*YI?%G9Zlnp5?LukAtwURB%wxzAwuC%Qz&q?kr6oeVHiY51jQ|6{Hh2c8VknW*Y zazvhQlb?4^o3E4!GVo?-(U;fOXP4&}8HO_dHCBotGA%9X-e$O*(6{u=F5l;x$*qF6 zMp3OoD!IWBp0{(N6>Vr&pfX%L3qR{8w-zL);u&->w9l_Br}d?~+1Yh{Wtm|tV+mI) zN=q0H&%1fsDG1H5i$%)Cu&ul-X!HJ~;`oI~wcrBr3ldcDEJIf#ySa)qbHa(@BDxe@ zV(4rVr4;bx*P$Cd3}s%|P-XR4(gMGQSE6!bD&tamvnOAGoKqWwWL z`t=3RqhG}U28lE;m4uaJ7&*`NOte}WDG%Z~6*q8``svz1D290AT!IMDqp@MK3vghzSLocN#pWeDv$1VxSJ)|T?F{VIcNIsR=v6G4yFivG7PP#?3!U;X8 zM-jq=*MgQP7+zK}i75uPOlL?gx|I_L3k8J6uUg%n zio2j;(Q1hUH*MOSiWW*F(~+6Ke)B%RM`n&b{&VTu_$RG+7w;>0@5w{an~f(!QN;(i zPtDKqA}@$FyW$wsfU(Sz#$+%b7wSBSeHz;;3{Y~N+;zFJ7xW?R*hQ*(W3T+|P9da| zTMB55Bu84~0|f?W+GLJbnF-XcPic#V+)j9%Z%eK=S7~Ym1x!ot zF2sX-a#HG1Pt-KVsC)GKq9|xagjOM1(_Qo}zyq>1lXZOP5u&lq9}&CP9sVBi$G8%^ zTE(?0uJ=@Ni@qbhSG&WH@#0WtBvi#qo8OUF6JDX;OFn{%KD1+y-Wf@B&>ZN*tF$)} zpd;nSrZ||!YZTjC-NpKPr&S>dtG>0FC9-hRE b`2Kx$_-!ZnZE$L}XgiJHN={{hXoC9>QshMD literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/ComputerCraftAPI.class b/bin/main/dan200/computercraft/api/ComputerCraftAPI.class new file mode 100644 index 0000000000000000000000000000000000000000..3c8a7797d3037b61f095a143a0f3d6c1c68398fa GIT binary patch literal 6358 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 literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/filesystem/IMount.class b/bin/main/dan200/computercraft/api/filesystem/IMount.class new file mode 100644 index 0000000000000000000000000000000000000000..9374255b0e61aad4c8a401fd9ee3a4184701a469 GIT binary patch literal 523 zcmaix&rSj{5XQejU={p>B9CC=da%TJF&Ixug29lui3e|WDVvg|-E_MKd^8U}fDdIH zAQ2-Zp4yrD`kR@rpI`4E04~uAP$HZSrMYOgMQkTo;gyS>9C;x#Ek-(3`7HNpB6<(D zFg`$;&=|{CDN<Ta z{l=7y%iQyrHdCf+-J_C2Lb#z@Ia6E9)Uk`wN`pOCm$1*;12q1;KE%=Q4Bwjz_3<|w7lIc6 literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/filesystem/IWritableMount.class b/bin/main/dan200/computercraft/api/filesystem/IWritableMount.class new file mode 100644 index 0000000000000000000000000000000000000000..3c3ecba6a0d53e95f748f27db8d5238d432e0093 GIT binary patch literal 474 zcma)&%}xR_6oqdQ7)4MJeFtD+3312DL`g83Nt{I2Ww?;yOgrgxh`gE$AHat)9?Cd$lZI9YIvZdFk4U$hNHP$N|je4!nNty>8?>0Ez7Bk#1C54(4Q zYL|~OXI@*A2edD!y-{f^$KmIVpz4$p_AIDwGd3gZ)}B%J{-VA=1VmVPd>fCkN{6uY zF?*hYF%{IBv%lq3X#+D+reXkhI^8RnifrLx9w8(+`Weva+91+^7OR4^D@ZJ$T~vFh d%Ghh@)VDefI{2kI-0C!`^<9JW5tt=vzX9Z)b&&u7 literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/filesystem/package-info.class b/bin/main/dan200/computercraft/api/filesystem/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..7bbec793b0909bca2e22af646df5779437e384aa GIT binary patch literal 310 zcmY+A&q@O^5Ql%Mty`=0&p|=(6>L^fJa{SvK@b!Ry{FmPlDbKjB-5B$*hVHq32WkLlK))%ctl pg~+=Ex>uvS+cQ95hrgkH9rU(!7a8|cPWqhfMGUYXae!gO;SbpqR^R{t literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/lua/ILuaContext.class b/bin/main/dan200/computercraft/api/lua/ILuaContext.class new file mode 100644 index 0000000000000000000000000000000000000000..8395b923682dfc6e744f68b0a56163053cdf5cfe GIT binary patch literal 596 zcma)3!A`P^=k28iQ$Gfg9!#>BHTQ!?TU+a+iZ8S{+b6rz>hM%MlDT1 z;_bcJd2i>#k9=USUV1!Y4z>% literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/lua/ILuaObject.class b/bin/main/dan200/computercraft/api/lua/ILuaObject.class new file mode 100644 index 0000000000000000000000000000000000000000..5b758615279a33bad51f443f04a0dab68c97bf2d GIT binary patch literal 394 zcmaiwu};G<6h-d~5JQ2s3o9$_f-A(95rGsbz>ty2I3}cW?Z~xJzm0(p;G<9-1vRk1 z_^yuMdA^@t?;ilJF=a>y7nLwqiv^c<)dsJebmGNx(KcKM!Sf=B$LFPzo?)LbU5Yos zwJ;fZ* gfv^{w1(I0R0aA38F&xJHD5fbAjBpaCamQe?1#zu#^#A|> literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/lua/ILuaTask.class b/bin/main/dan200/computercraft/api/lua/ILuaTask.class new file mode 100644 index 0000000000000000000000000000000000000000..2fecc34b27cf57d87b2b304c89e4f1ae0c230f90 GIT binary patch literal 238 zcmX^0Z`VEs1_l!b9(D#MMh4ZC#5^Md1O4Ru+=9}Q)S~2~#IzFq#DYxyoYF*nPoL7n zki_C_b_Nzk27#=^vPAuy#JqHU|D>$cbcf{kS%PC42%rSKz}eWFan*% W%D@KXvjcf7K$-)HxqxgY25taGBtB69 literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/lua/LuaException.class b/bin/main/dan200/computercraft/api/lua/LuaException.class new file mode 100644 index 0000000000000000000000000000000000000000..a242e497399665846d181b0a2b0ddd76e419e9bc GIT binary patch literal 720 zcma)(%}T>S6ot>UX;af$|7+D+e^#1;5fL|vE<~Xa1X0||G>&y7P0BP8AIgoO2rhg8 zA4kd;K^P%2WI{a(G`le#{*= z<|mJy=tnXPOc)F^_xyo7J`cLi@PfhYUHjre_zbMgP&|-fF zgi@ihz%X8ci7G>F!yN%HA|-?Fep@$9xH1rDajzrPCGYrxVcHEn?q6{w^*Ku#(VZMH zwA_EY*k_pgW2l~K_QYVoyUDCysx0I&uT{^Ck^Y4W3Mi7J%yy|OA~$^jGEHw_U4*gn z#HrNMr+z-;mPTWZAbI)*@})@>85El+(K<$_J-TJIm+WcFcthox;v6PuwP*)*krGT& zR7vYFMLEsW`IK=)3|(v5t-lcSG`5}~YH3-9pa#rhjvyLV&0yzLqXn1k)*EVe;}!Lh zrfPE4AScVDubDts)AAv-oIweJMH-zW@Ddss-l1LlE!Z!pKT(jHEhfqJA4Us9qsvKE F^Bev+da3{b literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/lua/package-info.class b/bin/main/dan200/computercraft/api/lua/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..fdc4920b1eb5a636f45bd7f2b2f4d08fdbaf651a GIT binary patch literal 296 zcmY+9%}N775QJ-D;>OkZbBN$0crX)1@sLvp2tq(n$h|W=8z#;lGqcGhPv*e~@S((6 z@t}R^K73tN)#umy2Y_3g6zDKqR%CC+V=kQWO_D(bsuL%#xNeAh5^uDUSIX9|K$qck zO&j8x?211v*HR>g^3^p#$Ook*!`WZOsC{O*cxh}>MlMuTOD(6?x)pt*u(|9|U_brF!d05TUSDu!7)inw>7GyGhB;D*jpzet;h(&TgwB zBE7uFBzZIQUfw@eZvb!sy$Bi#P7-v(!9W|IFH5Fi0?t|E((0TNi+Vh%D1u!DM+_(wkFU|l*Aeetb7-=hC3 z?>{OykOeNw#QJ;787Vmas_)47klbJ{hdmPrnXZs=;!7ucr`v}8w({abmgt8H#mB#i z&22`-Yf<~I2Z_VZ)R)1~wOlFauG2iLl4vPVup>VK(3EhS(1I%D2--F8ZR*a3yRa`W K#js!l4nF~}Lxghx literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/media/IMediaProvider.class b/bin/main/dan200/computercraft/api/media/IMediaProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..ec1abfdc680e17b431160e07cc498e2cacdfc194 GIT binary patch literal 233 zcma)%Jr06E5QX2M0$Q1P2`zMqv7^_JU^L+b>oSr>{<2v(oP`JQP)5+o&gPpbUfz83 zeBB=ac9?o_2^kc}24r&@~WIE=HYJDsxeFec1%*-25zDifzm z&dL(}jO`~#I4t9ettfTH-!5&r6j6`FN_7iY@n081!YrvViAJLd`_em?6mNgh_QHlIbKwK{P=?mH z&{@nZ&U~3OU*8{}0B&$ppv7=e3UfUgacQ+{B6;aW6}fPVYburCPRMt$pi5;cTcFJ_ zSc;Y4wJ;0*JYSNG481qocuDuFCWhm`iD6!5IDc(SRGMZgsCi8jV{8;rSrZa_ly1$n zEd#G~ojtTQeDd;e$I!8BL!O~O{k5BBJBF_FcBM*6@w0zulX9D4*m(Pg-Myso$t-*TA4=R4 z3!P%7_~yra^ZE7u0pJ=(1v-TDQrfG@L?~x`lQ^g#t0bh?!b|lkSA3yuArHG=S@D63;5Ov3jpe9XF6G=4D)i7M3q<>DQB)*ypAHat)PAf(u z)fja%XEAfXGxy%}^!)G$;0P@nC5FSX2oE|PE~6k$H7TjYL~{{)JSOGEGg89mZhv{( zlai9e#yUfNE*66OBAoJz(VV1au!1NJjb1u~_sgMHUO4RzzVw-RJ|*{wrhvO=8KB!< zEoT`25xUAOw5jDiTq{qDkxvXazqWm2eAAQvPw*f1W~bqDL#+bi_LbS-l(c)yu;#Q~ zhU#5PDV;1RTdGq~a{IyfH3Z#^(lC^s)<{9 literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/peripheral/IPeripheral.class b/bin/main/dan200/computercraft/api/peripheral/IPeripheral.class new file mode 100644 index 0000000000000000000000000000000000000000..e1b1256bf66b7fa000c786f965063842ce100a80 GIT binary patch literal 662 zcmbVKO;5r=5PgfA(_ycPq>7!K;* z<6p$G6mdLeGQ8K@O9^aE`YP6z75m?Oe3d#L&?A!MuiXGyX4KlQ)L)#ZZzm zQJQ2fwi&#I!ipNU#FX!1hv9fOlfahNI#-6mDTl!k#t7MCIQw7E-o4Ec(m01hFS&^A zl$%Q?n{C+l9&EFnG}n?Yqu6e=I=BCmq78?EVa2)#aI78H;GnRDi}g|5K-uD(1&R{3 XP$?{f-4V7oiTkKo+`7P?B^>?$9J#|5 literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/peripheral/IPeripheralProvider.class b/bin/main/dan200/computercraft/api/peripheral/IPeripheralProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..9e4e30852a7af2193d1b741f271aad214addeb41 GIT binary patch literal 264 zcmb7k$(O}v|h2k=m0f}o9!Qw&oK z!#9uT?G9j#kpqjciDj{JT@jUeRU6ikmS-bmr9{PARTtJW6Mp!~p)MO0vv$xYOjFrN zk;x(vyHm=MAxsiB-!@@C4+=ISR|UVPucgjnaqQglTP=b=2|U91P}Vx)t;(1%`$4zt Vz-$7c*M0@4g&n}|5}ej83|~?rP&EJm literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/peripheral/package-info.class b/bin/main/dan200/computercraft/api/peripheral/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..7fcbe08a6cdf32ef7237da7deaeae33791ca2521 GIT binary patch literal 310 zcmY+A%SuBr5QhKM)>EtXvQQ9w1)HNNE?kv@AP5$P?$ew(H8nSqoOaVEbKwK{P-2dV zXcjYzZ+_;Re0;vW1GvILfeu4i342+VTsq^ML_r2oCoa6=o`Ui(6olqp$XBtTb7gB+ zpv!Q$6f42CunYb;Uy@7=gJ;(SNq0&U!_nWws2yfFeQIn{hGr_Nxu&tTE{UX^jhQ`2 zzvjkOk=I7IGR9dxp5EUw^xWD~U>Ht*6eq1BL*ECtQWfR+**~<&xy|&~KC9((W)x!H n#n8PN-CUml3|sjd+SftvyKbY%{Wz0;W;+oB>_+Ti7_t8a!YEeG literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/permissions/ITurtlePermissionProvider.class b/bin/main/dan200/computercraft/api/permissions/ITurtlePermissionProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..b5bd57d74ee8e785d241ea9349dc0e3d0996c794 GIT binary patch literal 257 zcmX^0Z`VEs1_l!bE_MbcMh3f-#5^Md1O4Ru+=9}Q)S~2~#IzFq#DYxyg4Cki%;MtA z{Jdg)&ydohlAP24xKKb*epzNpY7sjF3nPO-R$^JAeokUuy1su>R%&tyP$;w5DJMTU z+cghpW@1uKDkFoUhEHB#f!Lvrus1BiOW}xNubpLZM($=swMzTT*X+NOIdvpUj01;6sUt z2Pq;FNl?P7D7OXXkmTk))0wza$fY^EPMbTO1z+z;1t6$ zu>0*iU-t)qDcT_d!c0j$i6W7j)46nPQ!5Wn$a5|%tBW(5MZ74rDp+m4!P=T@uGogC z6S_xvm7HKxVV7Suk#3|SO0o{x(l-N~1kG)1Qp|drmO?jCY bOz8ikk1KGKK&bgT0QqMcXjT(K?*UqGvpYq~ literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/redstone/package-info.class b/bin/main/dan200/computercraft/api/redstone/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..f326f58bbe7ed2c183dc0e24e1253e5c2c208b72 GIT binary patch literal 306 zcmY+A&q@O^5Ql%Mty`=0&p|=o!A%v#Lr&qs-+5k}f>QkIAKIqecD8d*V(FAQ`H(gV mbZ_#9`wKu|FMUD#I_Uk@ePpShC(=*sAYg#QfFle8j(-6Es#Q7w literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/turtle/ITurtleAccess.class b/bin/main/dan200/computercraft/api/turtle/ITurtleAccess.class new file mode 100644 index 0000000000000000000000000000000000000000..3f3fbb5ed6a99a09faa0483e2c861c731a1fc8fb GIT binary patch literal 1643 zcmb7FTTc@~6h4DUkvoVN6jZ!GSA{`9U;2c_CYv-!(uz?N&9HkcgWH+S?ktzT=7T@L zA7wl3Jq^cg{@%6c7wa^ z5`$54-PNfyQY!|_m%KA0BVInp)UUGENhp;tn9{isgAv9$F?G#gvDkyd_kHgxgJ~k# zlW8WRbGrFrrCXij+rwakIL6vXzKCN6gXCRlS+`|Ei8{$Qik?r#6wL+WVA1#X7)(-t z8tDuShP6mjWhTk5)8bB^Vp&HzOY-QQOJ5zKGCDbBuymzB+XH%`gzVj|-MOa#qIe~dlyi`zlDe@;LN+IyTQxbwcgEsS8W z+gG05S6=NKPNC|eLGu>tOoc=9w!`HCla22@2HF)E29X9A3 Kqt6BC?A!nRP~q|b literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/turtle/ITurtleCommand.class b/bin/main/dan200/computercraft/api/turtle/ITurtleCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..61053e6fe53a20c7759f2302b679305f162c9271 GIT binary patch literal 264 zcmX^0Z`VEs1_l!bPId++Mh3l<#5^Md1O4Ru+=9}Q)S~2~#IzFq#DYxylG37*oK$_! z5HRhWpPQSQm%`4#!pI*ZX z#l_Z|1l6OsASkuCG^fOxk%22XzqBYh)h#mzXsa-)Gxb0&WMgDtWMBsRm4Sf~=xSC5 OHV}(}9Y``UZ~y@OqEHb4 literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/turtle/ITurtleUpgrade.class b/bin/main/dan200/computercraft/api/turtle/ITurtleUpgrade.class new file mode 100644 index 0000000000000000000000000000000000000000..224b6d12dfa86b275c387ea2d15b9f031a747e87 GIT binary patch literal 1000 zcmcIjJx>Bb5S>K@L=+U1))E?)7_F`%7?Vp(G=h{S%if5K_m#apjDNx(WTCx3$~b!v z2^L^Ob1&JQdGp@Ry|3^04*)oaMgejR+MWo{Ivp;fAWjWxsl}t=B39g_+W5%bL5BD7 zSPKseu+5-45mUi^5svxIXoAu(D38(1OWaEaTg{fspkWU~Ka#>%33^@6)~YEos5e{J z3zELkDjYiu3e+%ojj7;*3f3uG5@y?op+XEjYk>$|g8_q6VhYjlK!rFnr|6v9%f1ov znVPCnqcC`jTE$POh0oxvxpw^gVY*Uck~nM2XKMS(LuZAx_*VmW7kcc|qzMk9h@^dP zQrbUl3{j69cZHAn&oeXKi-JIe-W?{XZ{}-uWfU@a*`$}hdryt>xoZcLhI|@(v~vaz z8Sb=JW Shj5f(4eG?e;F!KSIQaqV7eM_0 literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/turtle/TurtleAnimation.class b/bin/main/dan200/computercraft/api/turtle/TurtleAnimation.class new file mode 100644 index 0000000000000000000000000000000000000000..d05bc598ce438b72b3b70d13d60fb7434b0e929b GIT binary patch literal 1651 zcmbW1-Bue_6vzLEgiJmTFk;0PYPA*%Nk0-OMQb8LX;9h#wF9_j>CGVwFqq7+h6%_E z_yj(PPA}S}%dTGg96pE3y?0{C>RMi4F7iLWoqf*PXMg0+zkhoLU=GhL3@DU$O)y)j zl$&Aus1tipGctQ|*&O-hxD&-Kue>R;6!>iu`(a=qtuTCOPE5IFg8gzm=(H8m>tWz2 z%rq`|T2-O27M^%3VRUMuU4<;uL(}|0A;Zh9qn_q6r$_UaXMgQJDSie}tZ`HCuk*#|sLn z>Ebq}VL9COvKY)m;j+dRjMFn}J(scR#(CPDIHHKFtHtdc`Cio+L?#Q1;X@6JA>m#4Gi*lTNig|Df6CW_2iGdwy|DD`J^W9QIo#?{rn1pjNI3@ca?*v6hh zy?@K@= zzxw-ui8~RwEccztN7ODH^+I)Vh6DP-_xZ?m)YBo{oGf`?WQR*&HYAjLeDN$-C zQR*a7Y9dkUAHW{x?x7pf)VJ^A65aP6pen@t`RjKmcXTZE0`EV^gun-BfolRE4GLTr zxRDW<6u4;#ObHaT0wsalcGvHYP}%M}R)l8luID|W`*u$D%?o{I=Y<~Fg+C~&RDub| zO((eKxPu9vyqFGy~Jbh1@I;1T9NO}5+^7J!}_k!%^6X@Tgn?1}>&A4h- z>DJX3`11UM3^|~;Nz2;8BA0<|OL*AZK2N3Q?PCe5?vqsMm0RNnucanlV)^zj^h-C~ o?rG{x2svu-$GtO3o1N8+rqc?1(=}ZE z(AV^qrTKyD+orZHmbIqi=#7IHrWe?L8VQENk^WZKY`sy}p6?%-hR=}o_PoF_OwVIj z+~|V%9z&nEXF4ta-MVhsfol?}b56>3DZtq?UAO6OQX0KZ0sR~2N@~7qHR?n|C|77D zDaBW95usL!$gCQ+)v){r43bjaVMwes56m2hP(~3YhSX~Gy{hcCF+@3HNUJ+pf)B_@ zBE@$@GSWyf1r@kd)4C4$>mH+MPt{?`vz1cZPPo2VNepL^MDjjSXPFWXl7Na}lS3?Sh{{GOHi4e3 zL@{HrqHcDI8f_Cr0~U$eibNIFUtG_i&?BkboK8Ixlu;o^r`q%sF(Dl1dL*z6xki6| z#BI|lK_5y~-EFmUf~q=of=PAy1k>kE4~VubP~;L7vrG+JA&$Eui5lXei8d1xnZXB? z?|5R~qmr4U3?S^Uch1u Pc)An(Bo@3R^ez7d&L}s@ literal 0 HcmV?d00001 diff --git a/bin/main/dan200/computercraft/api/turtle/TurtleSide.class b/bin/main/dan200/computercraft/api/turtle/TurtleSide.class new file mode 100644 index 0000000000000000000000000000000000000000..ad7783cdd2dc6a45238e52ea7318717c9bd8bb2e GIT binary patch literal 1105 zcmb7CT~8WO5IvU#7H|c`3Ki|QZ2^(hrtJ%a&={JSq9$D>Ax)ZGmIc==3t1Ku{#A<) znl?3k?vH9Zccro~P0Bv(+_`h+%$Ym$>-V=C0IyM!5nw2ExczE(SJemo;n+1C-QitV zWODGvt!5zGQ`jM1y?O@_td&Q?lS}%M%QI1HvXTe%nzAc81SHB8$$8u#0VbHdw}!H{YUbZ#}dV+!B9j6p(z zB)Dhhh^k(2Yi!U#&E*&BDu%~+D&q-5(x-MZa*e)%XV_wha>wBleK4HR`20N`x6cjT zEg$&W{Ch=xGRU5$<1RzZpEi4n{335Jn$0PAjy%H~KiR&;N29V&!5#a&8?iXF12Jtd zc68&tDIPR2-?NfHQk$CDvpH=cMXNqSkzH9tYqeb4qhU(4^-^tJ3>qLyGX|1bF=2`X z$;PlmIEB2=c{+$;otHaI{C6S=rROrwrw)JuKYJ%ksC80ZVt9lnDjqY$eWZtdS9CQz#TrADI}RV} zc5ld#^-DW$oeAA79{AM$*&?|Nsz>ekgkj$wHolR}6qS(D(;A*3!|=wBxo7fzzvv@! zn`9zNc9!gpsy%RY@y?LfoBXREb25NLSB;LvscFfn?8B8Hr74*26n6_$Xodb2Wp_z7 z0YEd=ABZo@>eES(<``zkPb2FS+49MK18XK`l}pTBAmJGcLC;tWeWxR3ghaI&9AU9~ zfz%g@2w;i6NykZwTe|q znh4*=gK_varIO*v5mL?fO7^;0lFSa3l`A~l_)I4^ly1=2ErlqR^7$AeOFlAJEWxr@ Tc<}@5-*EwCJ5vG9nD>DR*9NZfZua+aG$SYqcDJ`32W(?sT+WXV_(s-dP=nQse(|Dh%;$&*R2thMC>N zlY_P9cH?AMXV~~K9ZaHX*p_2?HKI`{HW{Kjy;C!RSPBej1sTj!t!faGD>NqLb&%-%)?=~ZMw(2ZJP|)M$h1Ole?C%{mT?2 zq=|y}$r@1A3vLfhQnW&Gs;*LajHfc5Fl0h(M+497DtLx9h9q}gJ~Dd!5sfe0(^31} zG`z}QsLj7u)F*@Nb2>U>sE5;nrzlSI_M+K>g6AkQya|Kt*nBXkgc#hRPr4C{Lraj- zdqdYS-&^8A(~~_bi%4oyw>l1|EhKL(1Sqnr({Qa->RU8SiMC#nfLXHgbi0f+9T6c8t!7YbiX0;XFXX#e(514KE6`>b zEX7K2E$o6n&6gw-L+{nqLDE!dVmSVr7&glc=P$KQ%Fs+jHPDS!2 zGV;pkM#MPF$IlP<3>~+&6d3xGU%g4A$I$h`tyD=le)bP-a&GgsHP2f4jTwcQ?=ZBl jhIhB80K-mxzo`~F+rEn;&y!5Lne9dNupe=Ne#GGqNnca0 literal 0 HcmV?d00001 diff --git a/bin/main/icbm/api/IAmmunition.class b/bin/main/icbm/api/IAmmunition.class new file mode 100644 index 0000000000000000000000000000000000000000..67aa813f58cc8793e9d34bc9cfee3fc1aa0675b7 GIT binary patch literal 196 zcmX^0Z`VEs1_l!bE_MbcMh210?qgtJ0=j{ffsFy=7IqK~l;Hr0 HGjIX`tLrk= literal 0 HcmV?d00001 diff --git a/bin/main/icbm/api/IBlockFrequency.class b/bin/main/icbm/api/IBlockFrequency.class new file mode 100644 index 0000000000000000000000000000000000000000..7dbf12a5d1209e6d7f00a29b4cd8206885a4e50f GIT binary patch literal 179 zcmX^0Z`VEs1_l!bZgvJHMh1z@S1pvVXDtiC` literal 0 HcmV?d00001 diff --git a/bin/main/icbm/api/ICBM.class b/bin/main/icbm/api/ICBM.class new file mode 100644 index 0000000000000000000000000000000000000000..3dfbdd5c4867be88fa4bb483420216e1e8eaffdc GIT binary patch literal 2413 zcmaJ@TUQfT7~O}2OcJAL6eTDcuLMvcUa%5xkc2ihfD#%_ZHq%Vz-Tg)hDik5m-1)& zsy?8rUA;W@p?|1vUEOCUBomf)v2xCQ=ezIkviSSoUw#L013zf!5jbd+SE@<9W+Zdz znK=!9fx|EKrk|!CeFdsxjpm$=Ne*%3o`Gxeua@(PDNs_f$aSd_Z49;81QUJJ;c;*E-w6V zd}Y-utH~$oOl2~eeOzhUhP|E4I#((;QVc;L9zhgGgBa3qo<2J8I%#RRC=mOk6Ai;% z)yh~6CZb_P;AFQ_mv0SYgs|f(XWEjmhH(y8A{a+fAha&+IcaZLs{#)a9<*Ckf982| z3ozn&smrwr+a~E+NQH3;6A@g)b+$xPHOa!7Kz}0R)p28|>?m$3*-3%piJVuW6(&VK z!<2^G0t1~Kx?M()0y`&Qm`&>?D}CFWg4@$6Zwjp^uea7y2>0+n!~HIt3)`EvtVS@6 z8Md3%;DGeI=^Iw^5y!$NOj56=G-L!$bfR?8n`s!8Rap;WR$x+1%2a$-H!5;9Zd-A; z%i_8jSDbje_v5b&dn0ad$apR@6%QkgFH~da6p$Y1TlE*H;1M1R1Z~S@3LHy#VQJY9qkyk8ED0QSvg^(}f}#pct0^cdW*ATLwT9B3 zu(MgRTV+|ZIn)t6bH>vVF4%hcAKx6 zFtkstYYI5h2U_ShWlpKn=b#75?v|o>Z&R;NTy597I}P#=I?>PRwbm+$aEMy#qDkA= zKUSxFd;PX6oy@hBQbAO?r@VG%w&(RKXWZ)UNM{*q_?}7suf-s^+^+0zIy%_vw5IHI znn_P?uQgOBHL3a096r(Dgv75*@FH^81i}TYQ7_9`_BvOL3SwNT;w%>-mpytB<1au; zBh`Z->9B`BK>8pKwfTLd4}0h%2&rvKT_0t*^?4pAmEQ0i4jKpk2%Q78qYqlH~u zo(jc6LW%lHzEMgJf527BjyP9fpx3#zm_~*E;0N5G&aEduggaPed4lwRownDAwIsgl^bvwVeh5APpseBP5I8{Xv129(+6_wFWa^U`!!3d|$;E%0K;3l!h&w4}@QRVa0a~RaC_jiTrX!qm R_z%@OlNltrO|c%l{tuRLL1O>_ literal 0 HcmV?d00001 diff --git a/bin/main/icbm/api/ICBMFlags.class b/bin/main/icbm/api/ICBMFlags.class new file mode 100644 index 0000000000000000000000000000000000000000..c138b719577713110c4597bf7b7b67f2aa9aa4db GIT binary patch literal 814 zcmZWnU2hUW6g>mwqjaHkZMCSit=bA`yPEiBV?q%K$pQu%;v1RWPH~!LA+t+kf0pq< z|yS?ALq>7-+zAo0`L}ZGDtAk()T6~pGl`(KkqaHK8`Y2V<=wp z8}0-=96LSlTKF-;X49>;M(4HesO9#~Yc3VLcUgm2$#DFRg3GkVr;l!L&>l9Z-7?tf zH@dYC|Ajj3!JzF@Xlt3(X?Gj-TK|F}d*%l+l<|9pWVteASgTJjMHZVxc|06x{W)ym zUIsS9$vl)dLPb0f0f|=9m+`GLQ{swy&K0?Hw8g#{%P3a27Phg&U@3DJN^=ayQjvtSyL0!==$kkRBG!-giuN`(B( z>zXy9rh#MI}(kSnRri(vZ9TwD%Gys}V* zMVA+UmJ!3YySjE-U2ZU)D_=B83PWM}L7eI>B~u>q)pSmlJ;ki%orr)21zAh zf=q6}qPjetCWQK_*o7Y`e#3ox*Wg3@vB4+yfx)NtbA!iUDLH{My{lv!)G|xIJPj?< zd55lPmzwXp^ZGA> C2BXjb literal 0 HcmV?d00001 diff --git a/bin/main/icbm/api/ICamouflageMaterial.class b/bin/main/icbm/api/ICamouflageMaterial.class new file mode 100644 index 0000000000000000000000000000000000000000..666b4f15238238ca08b63cb5110a985cba7c8d29 GIT binary patch literal 128 zcmX^0Z`VEs1_l!bc6J6PMh2P80%lQSwZRzP z!-aGH9=AJyA=(itgs#y^uJ~ls?3?w0lT0Gi2%SA&S!HZfwM_P+J>e@AD~`SV$nRVV zLbcc55I(&trbjo{TFz&}sJF14%5$9%yrCbcgvt-pQPxIi1VU(*9IYpy8$8Vb literal 0 HcmV?d00001 diff --git a/bin/main/icbm/api/IItemFrequency.class b/bin/main/icbm/api/IItemFrequency.class new file mode 100644 index 0000000000000000000000000000000000000000..0e43121921c16fa0610940aa213fcb0c2e5defcb GIT binary patch literal 237 zcmaivF$%&!6h!AoO*C2v7S>wD#%=8E0|CJzV8269xZ4P+Y=?Qn zoA>AW06&gNGlETUb_ zMpU|H)ySg}+Kvdflp3i{+f`zbTL)Q2$sguG2-9=hD2{c>gjrW@?W}wPp=XZ(o;4l7 OhcgZ^vXO=B?W%IWy}$ke@Duw9CIt43?q*UIMy735IsHWbckY7EttFpeN?@h0 z21;7xdh)v4Cmj;Z2%J{V49J(tlI5N^+JvFhxhL7Rxqg=E#i-v2xmP_(Fe`92mRNXt zR9$JZ!cs;q$n=ID%8)y{Ax#DI6Ep;xBelQkuUvY1smSS}z;chme+Re2f&{i(hwab# zudmJpW^6PoFxfi16PVM={hf%Nd+zYMPEesL1=e}dD1;81bv@oukK8KHRp5w6#u|%> z3^<|O%ex4tHMJa3k6Yho)>;<|t2AAivNV=m9<MJz>J#!AFh btVR5R^@tnTjJSnn#BJ>G27z6!6WIFz7jnOE literal 0 HcmV?d00001 diff --git a/bin/main/icbm/api/IMissile.class b/bin/main/icbm/api/IMissile.class new file mode 100644 index 0000000000000000000000000000000000000000..b55eb0dba6735e3fd5a60458db6e860ff0c18e8a GIT binary patch literal 484 zcmb7BO-}+b5S^m30;1s8)tiBX^dL7*#AwoF)q{q6DHAM~mbAMY{c9fl0sbiCY+W|- z=%Ia`>Fdm!*RSu7PXHLhc>)aveXZteE;pKsdmVx{n7}TB-bxmd8)=vPalS&8CD3GW zS(EW?V_eYAa&h~6EbzwJOlpgsK@#s5$Y5tMoH1wz%p$K$b*=MjY3jH~mk)na{e^d% zO3yTi4A=B*iP^JOuR++UrXEyTFz8S=mAO?fW#5azFs(I;ZN3&ZVbC;@%;0K}=2jQz zgEVMpLa&w1-nnufc|o!Bd=}w)QjReC2VcaQpIq)0-jSswe(Ub2G?uI+{j~PzCt758 l0{c+f-m0)&VW+}_3cGL^c}LKT*oWf^PpA@uQ`#GF_5<#Ie)<3a literal 0 HcmV?d00001 diff --git a/bin/main/icbm/api/IMissileLockable.class b/bin/main/icbm/api/IMissileLockable.class new file mode 100644 index 0000000000000000000000000000000000000000..1d46c191c46c6a63f01d7605b6ac0d7f6667571e GIT binary patch literal 244 zcmZY4ziz@n39_-DzcYb5QTqkxd|^ zMmPNo;Uz2nZEx~D;pxDk^jwPxT$iquAg&=SvTa^m8tK@#+Om!3ych{z$~e!ei@o#e r<5pH1!er+z-tcQg5uWdT%bu1H2*dafFo@hoB5uhN@)@q%SJZKuvtyDX<0ZIa`Se_*%(nK^}$E=)p9@)Ju+C)R+w7Uun zIupZ=Qf*jSxpkx+r!@9s<~%ISZTTIePde-_JT&@+uJX{!-XVdc_A* zlZ;GOUDZGgPw-5}Q--)t*lgmOLj})qz!2q*!)L~5JY&fDi@bsAwUp;1DXq8$Yf(;FC$oSL`3rQn(m4O);jArjB90x5P7T`M0AW za;YcX>f79%IuuuZlmcH~A?&1ddQ9_>Xal9w9Wg6_P8t&s&xj#WBuHlrYm}#u*CAhg zh3{b9#JY5YjcX)4=V8!ulA#|IlIBS0-QXNa{Tk`7ga}}V{u^GkAl9i`hU|mvYZWtK{7XjzhdyaO5aQ)QTlo?iMe9g002{knr6lNOK19}-}*B$OzCru?m|#yI;lb0J?FgV zIq&6p-}mUR|Ni5j01V@rhB|>xE4H{2Hj-BOoDnzNbLNtj^4yGu27%U##;Orc81_>5 z%;H5e=21LudVDb!6XuMSFpt}w4jG;+l;x!1ux7^rYWH^;R0$VGD?uG#q)}14cr?ohot1QC`}`=gk@Xas6c&ha8{t< zm=iZOv6Jy(oskZq zwoxZ$BxViQQVx<|e$=Cl2YSmEy>wr+y1Qv(T*j1rJxhM@=GQ9$4$i#8`sB0Pm z7kZ;<+gdf98_z@X!xYS zwjvphx~`Ftn);dXZGN)%ppJ(nwe?uSH0(!{Ni86nk?^*;#(L47M<^wphT{S~HIx7iCj~-PJaA<*aV>eC>+KjmBDj zW3y|r?lTifKBj0%(iHf}%;_wzmYJlPs~;oPHq@R0EMv9CXHcMv1w<7*7LPfLW!h#V zw9>4Zhd+d8$4e6>R~gR#FZ(OaEw6i{5e=3=cXaT9S~r`XzfRCxfO zmTO@p5%F=~vpT*G*5SsrV~*p-<<#>!UQkn+!qkg8zNx03QB!_=8{g6JlEC)6qU-oB zzQ@L0>RV=NsCRsvOfKJ6-E%%HCrE(K)l3 z5)X5S{Oh=hE%VpW`YyH=-a4*wp$=XA_A9YgKHG4gngs!P+s?s+`4pVr6uOS>#clFj zphazwq7=Xmbo1%MPVC~0)ZrY#;=n3^#B{ z;84Rl2DUfc0Dq1B8Dmp7abiBycO9p0;`IE!>zLfYnGH-|hOd9$2Il6Z=wkv`ZvUC`Y3>h2teAPav5y zc>UA#tD%QE#wo>!;WagsdFvMSp57w8C=12jz z_P>Yklc?D-ztzTntfTexHN3p_CmVP*w1GFSDkojS%WO7T`Ytf3fEjvZmIlpnG|y_b zKq@{?W}Rnjo}k~J#96M-W0C*jWSa>GOGvTvW?#Y zJ|9=#!7n-L#3B5OMNJTAKYq$s< literal 0 HcmV?d00001 diff --git a/bin/main/icbm/api/explosion/ExplosionEvent$PostExplosionEvent.class b/bin/main/icbm/api/explosion/ExplosionEvent$PostExplosionEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..91e58baf34dbdc47f186619f472a891af56ced2b GIT binary patch literal 635 zcmah`+e*Vg5Ix(bm&Dd;>!r1V6nv-(=B4;jDMC}B5JXVw^EO>^C6|(Vt1Ih=d#NUwT2f z94bIzX#JbXkUy2K40{Y`ZPOK@?nqZyKEDn12hX=B`c166hGCc~#fD!^Bhft=F(`d+ zA~a;7mXJf9p<+_Cik2&QN#+CcjKJ rMyse$sTi$cJ$YS5m5`FeYJ?UU8`wmVzHd=HgKgBwYRNEJG@yP0Uh$x` literal 0 HcmV?d00001 diff --git a/bin/main/icbm/api/explosion/ExplosionEvent$PreExplosionEvent.class b/bin/main/icbm/api/explosion/ExplosionEvent$PreExplosionEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..fd2ddb7f0d99b0785b8dda05749f4c69174841cf GIT binary patch literal 632 zcmah`OHaZ;5dId*qZLHJ2k5~VIiM!?pq?0@!${e zM;WID6A46jGc(^zcOKvL^XvTsz$vzKNHLs9YvAa7By}+v*ma2u+4DMG+hzuj&z0P^ZQVL@_c)!-^IFR7>2o|SZ~%e60L(igVOPa zLPHvA0U2Z&N+wmi8ao5w-|~Si7%HY`al6lb8T+%K5fgc5Pg$4aUBe;lNQnzXx)}JF%o;AH&BJt6sb~#DuL3o<7`zUe?+#Mw)_u% z2nP$PhyDP56k>K84k-~}X?Nbt?99A<>mNUFZUOAWGf^S9VK9t^KMsYw8b@g!rinQE zjgBTVDNGoI-C%qv;&haYvp5n#8pnK2s`R;^j3Su{eU?zWOtWZ2SnnsY5OJ8uAoI@( zp~K=-CEpO}idT=wH+jVVB70xC+G6W^-?8MqEYb2hC04w)QR0c$u9sN#Ru@XFf8#?HJmdX2 z4*<6?u*9Vfw`yV;Ev)gri51QR2bzkD4UVYK)#OMcMX#cfB4}u&C@S)_cmNNeo5{l2^=@DUp+!N^by*XooU%&Fw$-b-@Bki4tX6R4 z<|TmyzFcqT3xIEYB&ZNNMlUw3wua@nwSH&3Z z>fXf_!m67&$$4X(=%AK4AAGQXJTEiN_RbU%cFKy4SHWnLpIG}KT*TQ2o;^xG&E6WG ooI=vxjPN=2`=DiDtPol+;8$sD5D3-y6F|{hN2BbJ#H^rs2WQ7divR!s literal 0 HcmV?d00001 diff --git a/bin/main/icbm/api/explosion/IEMPItem.class b/bin/main/icbm/api/explosion/IEMPItem.class new file mode 100644 index 0000000000000000000000000000000000000000..4a9abdfc1ddda56e222b75c5f16fda64be6468fa GIT binary patch literal 280 zcmZus%Sr=55Uh^I)rjETA5aMP#oL}&ScoVDyyY+%+R$-!CQK%a{+b6rz>gApHD1I+ zKj`Wzsy;s7-T~a;w8DsRp?=x1+bGM+CZw&V$Zd1?&=%<`91_mgu6G<_&Y~3VG>XsesqCNacV3)-uK%DC z%OKl)k9zj6)gRZr)K`y$$vo|{ms<@&IQz|UJw!0mgafOwr6&tk;dt0^Vts_k7oQ?i AH2?qr literal 0 HcmV?d00001 diff --git a/bin/main/icbm/api/explosion/IExplosive.class b/bin/main/icbm/api/explosion/IExplosive.class new file mode 100644 index 0000000000000000000000000000000000000000..ff26bd1eaf120f8be30731910c6907413b182b9d GIT binary patch literal 367 zcmYLFK~BRk5F8iUkOEDCUb(jyeBs8G7Db{UQFwsstRh#gQ#ok`JdFbn;8BQ8Vv&o- zJ3Bj?-JjpDZveNLMCb`z8@=92wKJ05ceW@^;bb~*zXytNEHK`vgOXOcTt2Tiq$`1b zPE~p@a5SBz0+(F9Ia_FD%_n6~YD)r>>Flu^Tvgt<{Ep37`)}VWM@&6%4B_bV`N}tUb=*4 z-e!sqX03Vtmf*(aoR6GHg6)NVNa#jfOyxI9#)N^l{Lh;BJ3?z+UQ{F(X>Po|U;C(f dZV*g?p#^FNrj73vx&Kto9GI0O^ literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/Blacklist.class b/bin/main/mffs/api/Blacklist.class new file mode 100644 index 0000000000000000000000000000000000000000..233513fa3ed0520497120772d54e742b52641492 GIT binary patch literal 633 zcmZWm%T60X5UjC{Uu^usfj|O=8$?m|!p#7TOQTa;LP4N0k=N2U zG8+4*!9;~tU_G@m&_>@#tK(=v7pV8=mQJjS8myGmPW|kkzz0l}L+arPe{=vCG;d?w( zCDa9)&+dN8^nwnnsG;eh1y7*Zo69N?XnR;e(M9VXD*vJn9;zt18R_^Wn+7U5lY!w} zt$rLzb1oC@@H|;X9!<8k7dmCR{@dMh!0I5*IL8m|iqsZs{OVj{kInP^J$Y<8FGMAx z9LmIW^a|703+y)fOEdxpj>))vwGMYQpUlpITgyD0FibJzyjXkv$% ot@$fhlAHQp*yk;nU->-4$7i{70y=OKM$cW)00KMh4E})DoBoi$;`Y7$XB$aDHh~a;jTq4p5aK nvZ;C?1KAiEfSQ3WU|?VZTEfb}#sIR6oq+==0yGdL&cFo#o*E?= literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/IBiometricIdentifierLink.class b/bin/main/mffs/api/IBiometricIdentifierLink.class new file mode 100644 index 0000000000000000000000000000000000000000..6868779b1d18f24cf82ce25a225a7612a6f6b73d GIT binary patch literal 352 zcmX^0Z`VEs1_l!bUUmj1Mh3;)w6tRV#DYwHPp8cM+|-hy%w*4$)Vz|+w9M2ZpUk{$ zb_Nzk27#=^vPAuy#JqHU|D>$cDv@|q*;HDO*CYKgvmQ-Rj-kOm? z9J?vSj0}Q6W5BkSmSpDW2d9<*RdWVsrspM=loq8jGFYR_+YoE39nd7M;QZ2}f5JZbLBLi1*PHJKiRF^0=U15w2%o>_N zk}EjBv?w{%Ei)&Tk%1fH6g`kFY>W&*H9!Y5FfapM#>&9P0CFKa0|%7m1j+#Q14$+Z FZUE;7GzS0x literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/IFieldInteraction.class b/bin/main/mffs/api/IFieldInteraction.class new file mode 100644 index 0000000000000000000000000000000000000000..317d4798e08ea8521d7ed8cfacde9a7895ad7c0e GIT binary patch literal 1003 zcmb7D-*3|}5I&DV*w{+Du`$N4!2q=q!bsz-fHa0GMPjTX(s*6}V^@w-#3TO} z5BvfAQHYCE0*pO?BIS!OclUjF=lk~k%U1w+0uLgXW3ZWz#|0M?#p8iOoyNwa6VfYd zBA92;J`q#FwJ;e!7@eT>5nN!f)kNhsEj1QA-VYzUQsTs07r{jak4vMb=nA1xQ>0T; z`A>Y}a4be#`cS*;z{>325&=UzV*zWdTHBOCyp|h1f z>nf){gQb~&;)VP`k}1fb=eaT{ofvzrJmx&6SMZ>S4T?y#^~DQOV0vI)Dn|*a6AX5` ze+G}O%aBW(=hpDjE6oR$rHSbGj$;O`S^_mFq-8MQ4ffTFNTrz8P201j@eKC6XH->t z^pF3Se#U<2gekPBi+D&aICCV@I^@&PJbn~lhuYC5l|x%7ngJ$~hFF_kV@CNJQ&nRa zAoc03_{iW~w@2hv@K5tldHJ5f3YqqVmL=)IG~6}@9nuu8SZHE`o`@F`l^NknM~u%- z|9|@LB|N8G9U={PT3I)=%J_oDQv4F4OjeEMUGIp&@^5xb87wBYbP@-uDt-O0{diRA zre&a#={XM(EYM=LXlX9N5>(5x46T5dp&hUTD}U__UW3hGzdpko eaFbYWQT92wO?kIYo$tWi;J;lVdEN`2_kRE%)*%W2 literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/IForceFieldBlock.class b/bin/main/mffs/api/IForceFieldBlock.class new file mode 100644 index 0000000000000000000000000000000000000000..63d0bbba09cfd2b3a2ef1550c17580e3d81593f0 GIT binary patch literal 272 zcmZvXy$%6E6ot?AxBd!^LaU-NjgE#wGKqvlLOo{h$})CjcJXcs58$E1j)Fv#_ayf_ z-+4T5cK|~)0u%_HV-%%Aonj$p)@h!_Y{IFr`VgQ*XzkTS38RvoSZw#KGeUF6+0t2m zSVtK5<_Txw7$>ZqiZXGv&V)j~856BJO-EA7{`_0?`5xs3S5^m3zTJfGf8xe-Jxcc1 ng!;;!-@1kg?O*qS*RBu<#e6GJ$fuN1fu9thnkR&s&ryE?wTeu@ literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/IProjector.class b/bin/main/mffs/api/IProjector.class new file mode 100644 index 0000000000000000000000000000000000000000..9e9141f26a20c7fd60f8689709814bf2b5d0ff1f GIT binary patch literal 339 zcmYL_!A`?442J)VLB<$tY@E2k2`=Qq6L6RmgapzM_mH}iw>GV^Fln#Gfd}BB5MC*& zA|=l6&z66G|9pM{xW|P?PhnQ(`Np`KjeUvLihQb~MqgpFa$9E#7nbJveXnaADO?9i zrsP0Ax;z;UTMAOKGuHlx8Uux^uI&R?C8fyTX2NpL6rVV(HHHe89X4kwG8+;_=Mz^! zVO0MO)MOM6Zf@U1%xIHhwQI%cl2SXj)GTVEtRbz!KvJ*l*PBLoR2VL*kLYR61u2X> oyLWr1;!QX?htN2d1@&bICm2bfaN53S7&re3&V^8z%H6~47l)}r11DBUu6gl#1zk<_BSC8uj8i-EvQ zCo?@sf**0t;|sxSe)=;ZFuEVUH*OT$L73~&+NY|vZ@a&dhdIqB5M0X&xRzi6A2SI< P@X;kgyCJM>b+CQ|z;811 literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/card/ICard.class b/bin/main/mffs/api/card/ICard.class new file mode 100644 index 0000000000000000000000000000000000000000..e892883d32b3ae9489a7f94129317c1367983678 GIT binary patch literal 105 zcmX^0Z`VEs1_l!bc6J6PMh4;Bw6tRV#DYxya?F#rGn literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/card/ICardIdentification.class b/bin/main/mffs/api/card/ICardIdentification.class new file mode 100644 index 0000000000000000000000000000000000000000..139a5620b1a90fecce63933e9ba3a136dac3d1d0 GIT binary patch literal 452 zcmah`!Ab)$5PhlE)vncw7q8yjivji4g9kxaSWsB>;4Nln*VHB}Nm}sNJoo{AlsJ{* z7A*8IZ{U&lX7c9i`{NV96^;`01Ws*T2dUnS)XG;fzhTTPa?#XAt7ux6U|V1`QFA4y z$~E%tc|tlS*bz8hBNiCGsBll-nh;nnaD7%diqaZK+N(NB6UoY)p^Qquj*CB+Kzim) ze3zYkoISCls;Z9SZ9Lg_PODVfP<#mFow6iwv0-FZbpI)%H?A2Aq+!+Ka)ZTxhwM>c zP_{F#>DEkni<32Jo-YP-bOKvkeZEAW<4v%OMa+B4K3Mh?`@j4U2mDgtkg6w?7nU`6T%Fe*T$RLoF zSeB@tlbDyT@1K;Fnq0!jz!jWdT9lmXmYI{v$RLEGMGvH!jgf(off;BC2rx3R0!bzY FHUMe=9<2ZX literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/card/ICardLink.class b/bin/main/mffs/api/card/ICardLink.class new file mode 100644 index 0000000000000000000000000000000000000000..289d1b3ef2e43490e2a50c0e114892fba0fcd808 GIT binary patch literal 304 zcma)&&uYRz5Ql%GZDJLQH($YAoP)i26biP19s=IibrLpzHnLd*zFH4`fId{|Mrf~k z`3*C}eDKZp&*v9_7tCUe2#Y4qJ60#dTDc?dwjonvs~8W2d8vBEwXy|&97@ri5O?B- zJ>h+sTJhW%E83~tv+>gKE=1;)t~Tk}nqFL|YN^AiGurqI>(&YPp>G}UuVuYS_JLdc wao=umll#GhY1W>dmRC~?;rZWgHHbw7!Z`c_7zNo!L>Q!FOu~flG|Vym1>+)GJ^%m! literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/fortron/IFortronCapacitor.class b/bin/main/mffs/api/fortron/IFortronCapacitor.class new file mode 100644 index 0000000000000000000000000000000000000000..dc2d5bc2f9d36e03404a88a4c34276bb4cfff362 GIT binary patch literal 324 zcmZ{gO-chn5QSeSnlbSQMezWxl8wC)TtwU`1A&1+#tXD<%}{aD9lLu1Ud@FE@K9n+ z+!U;}gIQPBQcqu2xkQwOO;Sd`Q7NJ@26vPoJsrGniny*$!}Ek%X1@ub*(Y!f%Sq%>6+mRviN+CU1ofB9YU@BBQ_TT9Nq zPw&O$LWVsBKZ~*|CAUX~J literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/fortron/IFortronStorage.class b/bin/main/mffs/api/fortron/IFortronStorage.class new file mode 100644 index 0000000000000000000000000000000000000000..85c79e40871ea6b7d4c348c515646c98b11d719c GIT binary patch literal 282 zcmX^0Z`VEs1_l!bes%^XMh1o4w6tRV#DYxywEUuyqWnC4Pd5l7xFo+QF+G)?frXJl zAS|@Qebf<|`=5FUw3xg<8VMz!jWdT9lmXmYI{v$RL8| yOg)eb*%%oZ8JK~-V_;wfx|)@NjRE9(b_NbG%?YKs7`VZF9uN)G!3!jr82A8`dPZ6R literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/modules/IInterdictionMatrixModule.class b/bin/main/mffs/api/modules/IInterdictionMatrixModule.class new file mode 100644 index 0000000000000000000000000000000000000000..eb1cad72adabc59ba017cceffb02e3af69aaa320 GIT binary patch literal 283 zcmZ{gJ#WH542EA*+VHV-?9`cd=q+q)6(Au6RaLic$HhTLiBnxJ2>u!aKY$;FxKOD} z+rb}_U)zs;IvtTvkl>E+@O#R45207-lylaM@IFd^bTzxiOW6OlZjveoQ;M?lHV=k1w945v wq_P!VzuKB7PoIRrN7Z=8b19hc_%HiQiyc7;H_>k611KJopx0*TN8iEV0+-BI6aWAK literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/modules/IModule.class b/bin/main/mffs/api/modules/IModule.class new file mode 100644 index 0000000000000000000000000000000000000000..c2d94fb7973f4a25048b42a963eb6799f9ad0f94 GIT binary patch literal 690 zcmb7C%}N6?5T4Zj*dJ@vgT8_7r8($r#e?EPU`1h}h2kadPHSp5k!-f&t9kGNd?+y+ zOOcAuUNVz!X1;tgna{8H4*)oaqXtw6oMh8!PWg+VnNACdIc2xrX+V`gZ_XE-O0H(~ z?s1NZCD5Ir4YjdGt81M*pxO@yA%Uh=_eTHZoc5y?EnA}61d(SetdKND8w@6{Di$-v zZDEi=yh+tXR4B1PlXHpE2{IxP_KhamAYHh-Hgx38S#arJxcY~6W10aYa9lPkrATos z?2~Ih!BC(~2|V;8g_dSQVPg2y(pPO{O2_3HFvixRsB9_s#+zU*C@f}_xg)kbdG_kt z?qM#ILUQXSH2mF*7r>N7!xJmC`ZL}UfyovH+fCMyw_;uRK}aX9vs{~D`Nwqv1a{n( n0o2?U)u0aLHZ@?^;Z28Dpylsvk9T0t+b-;{;yvdb_{_s^|4q}1 literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/modules/IModuleAcceptor.class b/bin/main/mffs/api/modules/IModuleAcceptor.class new file mode 100644 index 0000000000000000000000000000000000000000..350e7a1ee46561981923dfabbe8549c9986d4310 GIT binary patch literal 500 zcmaJ;Jx{|h6g-!H%CS#l^C9x~VVdrmk;0N%d5HCTB z5YR6Ex_kHTo(hI-!NBH7TF%PfR;?6!7G3PIP2n(+T5wgzv?n`}#C zoi%!4D$2GOHvWUe)K;oxUXZcVUjx5rQVbc0O#cK7X#N8Xf&Lpj?6y-ve06ot<%r6uLBh#9ex0X)DK#1tw86;Y{DCD=@ITe)&=$QlvvoJ(p-vc zTAG=7cwXHRj%Ms{Up+fz-N-8AOTzitaGjP76zd{0!69?6tV!ZwlTvx5#h86Uh{kGW zq^}$k9{=<9dRQ4%vn!=$9dMk=m0yb7Iu><yFGU00f(8=xz<-*C_Y^J_>Q6 zp$N@vv7?!N`}O_t3E&!s8G3|^wyL7BYcY{s7ewDpaVx8qHHa$~>{Tk^kYR^#ytJ>@ zG}hN<{=8(Tgd>SJ&T)+Q!FuHd;c7hlvy~~u*ZFL_z=k=)@OSQEls1I@q&*z`06_*_xBvhE literal 0 HcmV?d00001 diff --git a/bin/main/mffs/api/security/IInterdictionMatrix.class b/bin/main/mffs/api/security/IInterdictionMatrix.class new file mode 100644 index 0000000000000000000000000000000000000000..65d4e5b4c55d5d6a4f2e90345f82e25dcea17779 GIT binary patch literal 627 zcmaJ<+e*Vg5S{fF?^^FyP(f&4Tm;_~L50FXMX(QoZ|imvwkEr}nH2kLKKKEClsJjC zf`|l?$;{a~bI$Dh$LkvaoWO1bBLWVyIL@VhvNA_g1WSFXlp_osYsh+cttr@-2*v~~ zc6Cq7RJ%mpJao}e1QP-d9FokeLlbmN(z+fx@}X)o2qTze+>j{tfr58ZHNS#pz~=&; z=|?avU~h=ae5Xh;m+HC-E{wq^?i|6afc+s#U0Rylg6!#bj+2{Wnq)h2Bo zPaF4a7I$jel#RqrS;+;|>Wx-qVL>*PZKP8HQ*E0#O-0}lj(^wB{--(T^K(NQHt95M2*(@e(!N4t=jLF3=>oAH~! zz%?cs{c7TmQty3jg2qHj()-RkcRlx&A3r~T18@d6;}{T_Y_F{a1$)CQ1g^8`d*SoK zvg^0KAn>}KIHCe0kL{;+p=Ed03$^BB*9qyWT&rt(qipDvQsYjszAP|R`Cp>T0)vZ{ zns%#EtXO(oKjIg@)#ajTHVh_8hGrSH zYGbKr)s4H zM8|Hs0%~PT1~c@%&N|JMn0H!U#|sw(BH7#uIcwdAZUTGg^vw1*QlQZkWH2ERo9}y$ zWsQGxcR41fAj!m0fuZK}4Lb-*?wZ>PBza6hipc^E*dsNL4IDe9^>g@11%vEyn!ou0$+HR+!~}*bUdOF&wwtbR+0B-etLxaU72Ee1%gYoZxX5CRa_D6R!x-Vy z6$Lw?^69FAA*4yW@R1i#Ju|eOCrkE*439(m>n-+{Kwj%^xbb6*g!%K}3&d(f9s7j6?=i_Bs!mBT&0vRmK!QUIV(P2} zSq5=6FTosxgnC?p6AVUT>M4oNyrlvII7i>;X4LL;$I=&V}Vfq12HDoi^zIYBpPV^ zD9Mnd@zZkjQA}cty4WLYP4_b6nv{)dNWlbGL%6oF7Fc^TLH$qz{v V+8ib1WIZWk@^ 0.8D) { + this.updateTick(world, x, y, z, world.rand); + } + } + + @Override + public void updateTick(World world, int x, int y, int z, Random rand) { + if (!world.isRemote) { + if (this.isRandomlyRadioactive) { + AxisAlignedBB i = AxisAlignedBB.getBoundingBox( + (double)((float)x - this.radius), (double)((float)y - this.radius), + (double)((float)z - this.radius), (double)((float)x + this.radius), + (double)((float)y + this.radius), (double)((float)z + this.radius)); + List newX = + world.getEntitiesWithinAABB(EntityLiving.class, i); + + for (EntityLiving newZ : newX) { + PoisonRadiation.INSTANCE.poisonEntity( + new Vector3((double)x, (double)y, (double)z), newZ, + this.amplifier); + } + } + + if (this.canSpread) { + for (int var11 = 0; var11 < 4; ++var11) { + int xOffset = x + rand.nextInt(3) - 1; + int yOffset = y + rand.nextInt(5) - 3; + int zOffset = z + rand.nextInt(3) - 1; + Block block = world.getBlock(xOffset, yOffset, zOffset); + if ((double)rand.nextFloat() > 0.4D && + (block == Blocks.farmland || block == Blocks.grass)) { + world.setBlock(xOffset, yOffset, zOffset, this); + } + } + + if ((double)rand.nextFloat() > 0.85D) { + world.setBlock(x, y, z, Blocks.mycelium); + } + } + } + } + + public void func_71891_b(World par1World, int x, int y, int z, + Entity par5Entity) { + if (par5Entity instanceof EntityLiving && this.canWalkPoison) { + PoisonRadiation.INSTANCE.poisonEntity( + new Vector3((double)x, (double)y, (double)z), + (EntityLiving)par5Entity); + } + } + + public int func_71925_a(Random par1Random) { return 0; } + + @SideOnly(Side.CLIENT) + public void func_71862_a(World world, int x, int y, int z, + Random par5Random) { + if (Minecraft.getMinecraft().gameSettings.particleSetting == 0) { + byte radius = 3; + + for (int i = 0; i < 2; ++i) { + Vector3 diDian = new Vector3((double)x, (double)y, (double)z); + diDian.x += Math.random() * (double)radius - (double)(radius / 2); + diDian.y += Math.random() * (double)radius - (double)(radius / 2); + diDian.z += Math.random() * (double)radius - (double)(radius / 2); + EntitySmokeFX fx = new EntitySmokeFX( + world, diDian.x, diDian.y, diDian.z, (Math.random() - 0.5D) / 2.0D, + (Math.random() - 0.5D) / 2.0D, (Math.random() - 0.5D) / 2.0D); + fx.setRBGColorF(0.2F, 0.8F, 0.0F); + Minecraft.getMinecraft().effectRenderer.addEffect(fx); + } + } + } +} diff --git a/src/main/java/atomicscience/api/IAntiPoisonArmor.java b/src/main/java/atomicscience/api/IAntiPoisonArmor.java new file mode 100644 index 0000000..fc05b65 --- /dev/null +++ b/src/main/java/atomicscience/api/IAntiPoisonArmor.java @@ -0,0 +1,14 @@ +package atomicscience.api; + +import atomicscience.api.poison.Poison; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; + +public interface IAntiPoisonArmor { + + boolean isProtectedFromPoison(ItemStack var1, EntityLivingBase var2, Poison var3); + + void onProtectFromPoison(ItemStack var1, EntityLivingBase var2, Poison var3); + + Poison.ArmorType getArmorType(); +} diff --git a/src/main/java/atomicscience/api/IAntiPoisonBlock.java b/src/main/java/atomicscience/api/IAntiPoisonBlock.java new file mode 100644 index 0000000..c013b03 --- /dev/null +++ b/src/main/java/atomicscience/api/IAntiPoisonBlock.java @@ -0,0 +1,9 @@ +package atomicscience.api; + +import atomicscience.api.poison.Poison; +import net.minecraft.world.World; + +public interface IAntiPoisonBlock { + + boolean isPoisonPrevention(World var1, int var2, int var3, int var4, Poison var5); +} diff --git a/src/main/java/atomicscience/api/IElectromagnet.java b/src/main/java/atomicscience/api/IElectromagnet.java new file mode 100644 index 0000000..7b92be0 --- /dev/null +++ b/src/main/java/atomicscience/api/IElectromagnet.java @@ -0,0 +1,8 @@ +package atomicscience.api; + +import net.minecraft.world.World; + +public interface IElectromagnet { + + boolean isRunning(World var1, int var2, int var3, int var4); +} diff --git a/src/main/java/atomicscience/api/IFissileMaterial.java b/src/main/java/atomicscience/api/IFissileMaterial.java new file mode 100644 index 0000000..174c7e7 --- /dev/null +++ b/src/main/java/atomicscience/api/IFissileMaterial.java @@ -0,0 +1,8 @@ +package atomicscience.api; + +import atomicscience.api.ITemperature; + +public interface IFissileMaterial { + + int onFissile(ITemperature var1); +} diff --git a/src/main/java/atomicscience/api/IHeatSource.java b/src/main/java/atomicscience/api/IHeatSource.java new file mode 100644 index 0000000..14a3f7d --- /dev/null +++ b/src/main/java/atomicscience/api/IHeatSource.java @@ -0,0 +1,6 @@ +package atomicscience.api; + +import atomicscience.api.ITemperature; + +public interface IHeatSource extends ITemperature { +} diff --git a/src/main/java/atomicscience/api/IReactor.java b/src/main/java/atomicscience/api/IReactor.java new file mode 100644 index 0000000..1e85b0e --- /dev/null +++ b/src/main/java/atomicscience/api/IReactor.java @@ -0,0 +1,7 @@ +package atomicscience.api; + + +public interface IReactor { + + boolean isOverToxic(); +} diff --git a/src/main/java/atomicscience/api/ISteamReceptor.java b/src/main/java/atomicscience/api/ISteamReceptor.java new file mode 100644 index 0000000..057cbed --- /dev/null +++ b/src/main/java/atomicscience/api/ISteamReceptor.java @@ -0,0 +1,7 @@ +package atomicscience.api; + + +public interface ISteamReceptor { + + void onReceiveSteam(int var1); +} diff --git a/src/main/java/atomicscience/api/ITemperature.java b/src/main/java/atomicscience/api/ITemperature.java new file mode 100644 index 0000000..943e2fa --- /dev/null +++ b/src/main/java/atomicscience/api/ITemperature.java @@ -0,0 +1,9 @@ +package atomicscience.api; + + +public interface ITemperature { + + float getTemperature(); + + void setTemperature(float var1); +} diff --git a/src/main/java/atomicscience/api/Plasma.java b/src/main/java/atomicscience/api/Plasma.java new file mode 100644 index 0000000..4505c99 --- /dev/null +++ b/src/main/java/atomicscience/api/Plasma.java @@ -0,0 +1,17 @@ +package atomicscience.api; + +import net.minecraft.world.World; + +public class Plasma { + + public static Plasma.IPlasma blockPlasma; + + + + public interface IPlasma { + + void spawn(World var1, int var2, int var3, int var4, byte var5); + + boolean canPlace(World var1, int var2, int var3, int var4); + } +} diff --git a/src/main/java/atomicscience/api/poison/Poison.java b/src/main/java/atomicscience/api/poison/Poison.java new file mode 100644 index 0000000..81abe27 --- /dev/null +++ b/src/main/java/atomicscience/api/poison/Poison.java @@ -0,0 +1,77 @@ +package atomicscience.api.poison; + +import atomicscience.api.IAntiPoisonArmor; +import java.util.EnumSet; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import universalelectricity.core.vector.Vector3; + +public abstract class Poison { + + public static Poison[] list = new Poison[32]; + protected String name; + protected EnumSet armorRequired; + + public Poison(String name, int id) { + this.armorRequired = EnumSet.range(Poison.ArmorType.HELM, Poison.ArmorType.BOOTS); + this.name = name; + if (list == null) { + list = new Poison[32]; + } + + list[0] = this; + } + + public String getName() { + return this.name; + } + + public EnumSet getArmorRequired() { + return this.armorRequired; + } + + public void poisonEntity(Vector3 emitPosition, EntityLivingBase entity, + int amplifier) { + EnumSet armorWorn = EnumSet.of(Poison.ArmorType.UNKNOWN); + if (entity instanceof EntityPlayer) { + EntityPlayer entityPlayer = (EntityPlayer) entity; + + for (int i = 0; i < entityPlayer.inventory.armorInventory.length; ++i) { + if (entityPlayer.inventory.armorInventory[i] != null && + entityPlayer.inventory.armorInventory[i].getItem() instanceof IAntiPoisonArmor && + ((IAntiPoisonArmor) entityPlayer.inventory.armorInventory[i] + .getItem()) + .isProtectedFromPoison(entityPlayer.inventory.armorInventory[i], + entity, this)) { + ((IAntiPoisonArmor) entityPlayer.inventory.armorInventory[i].getItem()) + .onProtectFromPoison(entityPlayer.inventory.armorInventory[i], + entity, this); + armorWorn.add( + ((IAntiPoisonArmor) entityPlayer.inventory.armorInventory[i] + .getItem()) + .getArmorType()); + } + } + } + + if (!armorWorn.containsAll(this.armorRequired)) { + this.doPoisonEntity(emitPosition, entity, armorWorn, amplifier); + } + } + + public void poisonEntity(Vector3 emitPosition, EntityLivingBase entity) { + this.poisonEntity(emitPosition, entity, 0); + } + + protected abstract void doPoisonEntity(Vector3 var1, EntityLivingBase var2, + EnumSet var3, int var4); + + public static enum ArmorType { + HELM, + BODY, + LEGGINGS, + BOOTS, + UNKNOWN; + } +} diff --git a/src/main/java/atomicscience/api/poison/PoisonRadiation.java b/src/main/java/atomicscience/api/poison/PoisonRadiation.java new file mode 100644 index 0000000..21fc3af --- /dev/null +++ b/src/main/java/atomicscience/api/poison/PoisonRadiation.java @@ -0,0 +1,66 @@ +package atomicscience.api.poison; + +import atomicscience.api.IAntiPoisonBlock; +import java.util.EnumSet; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; +import universalelectricity.core.vector.Vector3; +import universalelectricity.prefab.CustomDamageSource; +import universalelectricity.prefab.potion.CustomPotionEffect; + +public class PoisonRadiation extends Poison { + + public static final Poison INSTANCE = new PoisonRadiation("radiation", 0); + public static final CustomDamageSource damageSource = (CustomDamageSource) (new CustomDamageSource("radiation")) + .setDamageBypassesArmor(); + public static boolean disabled = false; + + public PoisonRadiation(String name, int id) { + super(name, id); + } + + @Override + protected void doPoisonEntity(Vector3 emitPosition, EntityLivingBase entity, + EnumSet armorWorn, + int amplifier) { + if (!disabled) { + if (emitPosition == null) { + entity.addPotionEffect( + new CustomPotionEffect(PotionRadiation.INSTANCE.getId(), + 300 * (amplifier + 1), amplifier, null)); + return; + } + + if (this.getAntiRadioactiveCount(entity.worldObj, emitPosition, + new Vector3(entity)) <= amplifier) { + entity.addPotionEffect( + new CustomPotionEffect(PotionRadiation.INSTANCE.getId(), + 400 * (amplifier + 1), amplifier, null)); + } + } + } + + public int getAntiRadioactiveCount(World world, Vector3 startingPosition, + Vector3 endingPosition) { + Vector3 delta = Vector3.subtract(endingPosition, startingPosition).normalize(); + Vector3 targetPosition = startingPosition.clone(); + double totalDistance = startingPosition.distanceTo(endingPosition); + int count = 0; + if (totalDistance > 1.0D) { + for (; targetPosition.distanceTo(endingPosition) <= totalDistance; targetPosition.add(delta)) { + Block block = targetPosition.getBlock(world); + if (block != Blocks.air && block instanceof IAntiPoisonBlock && + ((IAntiPoisonBlock) block) + .isPoisonPrevention(world, targetPosition.intX(), + targetPosition.intY(), + targetPosition.intZ(), this)) { + ++count; + } + } + } + + return count; + } +} diff --git a/src/main/java/atomicscience/api/poison/PotionRadiation.java b/src/main/java/atomicscience/api/poison/PotionRadiation.java new file mode 100644 index 0000000..c36d417 --- /dev/null +++ b/src/main/java/atomicscience/api/poison/PotionRadiation.java @@ -0,0 +1,32 @@ +package atomicscience.api.poison; + +import atomicscience.api.AtomicScience; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import universalelectricity.prefab.potion.CustomPotion; + +public class PotionRadiation extends CustomPotion { + public static PotionRadiation INSTANCE; + + public PotionRadiation(int id, boolean isBadEffect, int color, String name) { + super(AtomicScience.CONFIGURATION.get("Potion", name + " potion ID", id) + .getInt(id), + isBadEffect, color, name); + this.setIconIndex(6, 0); + } + + @Override + public void performEffect(EntityLivingBase entity, int amplifier) { + if ((double) entity.worldObj.rand.nextFloat() > 0.9D - (double) amplifier * 0.08D) { + entity.attackEntityFrom(PoisonRadiation.damageSource, 1); + if (entity instanceof EntityPlayer) { + ((EntityPlayer) entity) + .addExhaustion(0.01F * (float) (amplifier + 1)); + } + } + } + + public boolean isReady(int duration, int amplifier) { + return duration % 10 == 0; + } +} diff --git a/src/main/java/dan200/computercraft/api/ComputerCraftAPI.java b/src/main/java/dan200/computercraft/api/ComputerCraftAPI.java new file mode 100755 index 0000000..4f84caa --- /dev/null +++ b/src/main/java/dan200/computercraft/api/ComputerCraftAPI.java @@ -0,0 +1,315 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api; + +import dan200.computercraft.api.filesystem.IMount; +import dan200.computercraft.api.filesystem.IWritableMount; +import dan200.computercraft.api.media.IMediaProvider; +import dan200.computercraft.api.peripheral.IPeripheralProvider; +import dan200.computercraft.api.permissions.ITurtlePermissionProvider; +import dan200.computercraft.api.redstone.IBundledRedstoneProvider; +import dan200.computercraft.api.turtle.ITurtleUpgrade; +import net.minecraft.world.World; + +import java.lang.reflect.Method; + +/** + * The static entry point to the ComputerCraft API. + * Members in this class must be called after mod_ComputerCraft has been initialised, + * but may be called before it is fully loaded. + */ +public final class ComputerCraftAPI +{ + public static boolean isInstalled() + { + findCC(); + return computerCraft != null; + } + + public static String getInstalledVersion() + { + findCC(); + if( computerCraft_getVersion != null ) + { + try { + return (String)computerCraft_getVersion.invoke( null ); + } catch (Exception e) { + // It failed + } + } + return ""; + } + + public static String getAPIVersion() + { + return "1.75"; + } + + /** + * Creates a numbered directory in a subfolder of the save directory for a given world, and returns that number.
+ * Use in conjuction with createSaveDirMount() to create a unique place for your peripherals or media items to store files.
+ * @param world The world for which the save dir should be created. This should be the serverside world object. + * @param parentSubPath The folder path within the save directory where the new directory should be created. eg: "computercraft/disk" + * @return The numerical value of the name of the new folder, or -1 if the folder could not be created for some reason.
+ * eg: if createUniqueNumberedSaveDir( world, "computer/disk" ) was called returns 42, then "computer/disk/42" is now available for writing. + * @see #createSaveDirMount(World, String, long) + */ + public static int createUniqueNumberedSaveDir( World world, String parentSubPath ) + { + findCC(); + if( computerCraft_createUniqueNumberedSaveDir != null ) + { + try { + return (Integer)computerCraft_createUniqueNumberedSaveDir.invoke( null, world, parentSubPath ); + } catch (Exception e) { + // It failed + } + } + return -1; + } + + /** + * Creates a file system mount that maps to a subfolder of the save directory for a given world, and returns it.
+ * Use in conjuction with IComputerAccess.mount() or IComputerAccess.mountWritable() to mount a folder from the + * users save directory onto a computers file system.
+ * @param world The world for which the save dir can be found. This should be the serverside world object. + * @param subPath The folder path within the save directory that the mount should map to. eg: "computer/disk/42".
+ * Use createUniqueNumberedSaveDir() to create a new numbered folder to use. + * @param capacity The ammount of data that can be stored in the directory before it fills up, in bytes. + * @return The mount, or null if it could be created for some reason. Use IComputerAccess.mount() or IComputerAccess.mountWritable() + * to mount this on a Computers' file system. + * @see #createUniqueNumberedSaveDir(World, String) + * @see dan200.computercraft.api.peripheral.IComputerAccess#mount(String, dan200.computercraft.api.filesystem.IMount) + * @see dan200.computercraft.api.peripheral.IComputerAccess#mountWritable(String, dan200.computercraft.api.filesystem.IWritableMount) + * @see dan200.computercraft.api.filesystem.IMount + * @see IWritableMount + */ + public static IWritableMount createSaveDirMount( World world, String subPath, long capacity ) + { + findCC(); + if( computerCraft_createSaveDirMount != null ) + { + try { + return (IWritableMount)computerCraft_createSaveDirMount.invoke( null, world, subPath, capacity ); + } catch (Exception e){ + // It failed + } + } + return null; + } + + /** + * Creates a file system mount to a resource folder, and returns it.
+ * Use in conjuction with IComputerAccess.mount() or IComputerAccess.mountWritable() to mount a resource folder onto a computers file system.
+ * The files in this mount will be a combination of files in the specified mod jar, and resource packs that contain resources with the same domain and path.
+ * @param modClass A class in whose jar to look first for the resources to mount. Using your main mod class is recommended. eg: MyMod.class + * @param domain The domain under which to look for resources. eg: "mymod" + * @param subPath The domain under which to look for resources. eg: "mymod/lua/myfiles" + * @return The mount, or null if it could be created for some reason. Use IComputerAccess.mount() or IComputerAccess.mountWritable() + * to mount this on a Computers' file system. + * @see dan200.computercraft.api.peripheral.IComputerAccess#mount(String, dan200.computercraft.api.filesystem.IMount) + * @see dan200.computercraft.api.peripheral.IComputerAccess#mountWritable(String, IWritableMount) + * @see dan200.computercraft.api.filesystem.IMount + */ + public static IMount createResourceMount( Class modClass, String domain, String subPath ) + { + findCC(); + if( computerCraft_createResourceMount != null ) + { + try { + return (IMount)computerCraft_createResourceMount.invoke( null, modClass, domain, subPath ); + } catch (Exception e){ + // It failed + } + } + return null; + } + + /** + * Registers a peripheral handler to convert blocks into IPeripheral implementations. + * @see dan200.computercraft.api.peripheral.IPeripheral + * @see dan200.computercraft.api.peripheral.IPeripheralProvider + */ + public static void registerPeripheralProvider( IPeripheralProvider handler ) + { + findCC(); + if ( computerCraft_registerPeripheralProvider != null) + { + try { + computerCraft_registerPeripheralProvider.invoke( null, handler ); + } catch (Exception e){ + // It failed + } + } + } + + /** + * Registers a new turtle turtle for use in ComputerCraft. After calling this, + * users should be able to craft Turtles with your new turtle. It is recommended to call + * this during the load() method of your mod. + * @see dan200.computercraft.api.turtle.ITurtleUpgrade + */ + public static void registerTurtleUpgrade( ITurtleUpgrade upgrade ) + { + if( upgrade != null ) + { + findCC(); + if( computerCraft_registerTurtleUpgrade != null ) + { + try { + computerCraft_registerTurtleUpgrade.invoke( null, upgrade ); + } catch( Exception e ) { + // It failed + } + } + } + } + + /** + * Registers a bundled redstone handler to provide bundled redstone output for blocks + * @see dan200.computercraft.api.redstone.IBundledRedstoneProvider + */ + public static void registerBundledRedstoneProvider( IBundledRedstoneProvider handler ) + { + findCC(); + if( computerCraft_registerBundledRedstoneProvider != null ) + { + try { + computerCraft_registerBundledRedstoneProvider.invoke( null, handler ); + } catch (Exception e) { + // It failed + } + } + } + + /** + * If there is a Computer or Turtle at a certain position in the world, get it's bundled redstone output. + * @see dan200.computercraft.api.redstone.IBundledRedstoneProvider + * @return If there is a block capable of emitting bundled redstone at the location, it's signal (0-65535) will be returned. + * If there is no block capable of emitting bundled redstone at the location, -1 will be returned. + */ + public static int getBundledRedstoneOutput( World world, int x, int y, int z, int side ) + { + findCC(); + if( computerCraft_getDefaultBundledRedstoneOutput != null ) + { + try { + return (Integer)computerCraft_getDefaultBundledRedstoneOutput.invoke( null, world, x, y, z, side ); + } catch (Exception e){ + // It failed + } + } + return -1; + } + + /** + * Registers a media handler to provide IMedia implementations for Items + * @see dan200.computercraft.api.media.IMediaProvider + */ + public static void registerMediaProvider( IMediaProvider handler ) + { + findCC(); + if( computerCraft_registerMediaProvider != null ) + { + try { + computerCraft_registerMediaProvider.invoke( null, handler ); + } catch (Exception e){ + // It failed + } + } + } + + /** + * Registers a permission handler to restrict where turtles can move or build + * @see dan200.computercraft.api.permissions.ITurtlePermissionProvider + */ + public static void registerPermissionProvider( ITurtlePermissionProvider handler ) + { + findCC(); + if( computerCraft_registerPermissionProvider != null ) + { + try { + computerCraft_registerPermissionProvider.invoke( null, handler ); + } catch (Exception e) { + // It failed + } + } + } + + // The functions below here are private, and are used to interface with the non-API ComputerCraft classes. + // Reflection is used here so you can develop your mod without decompiling ComputerCraft and including + // it in your solution, and so your mod won't crash if ComputerCraft is installed. + + private static void findCC() + { + if( !ccSearched ) { + try { + computerCraft = Class.forName( "dan200.computercraft.ComputerCraft" ); + computerCraft_getVersion = findCCMethod( "getVersion", new Class[]{ + } ); + computerCraft_createUniqueNumberedSaveDir = findCCMethod( "createUniqueNumberedSaveDir", new Class[]{ + World.class, String.class + } ); + computerCraft_createSaveDirMount = findCCMethod( "createSaveDirMount", new Class[] { + World.class, String.class, Long.TYPE + } ); + computerCraft_createResourceMount = findCCMethod( "createResourceMount", new Class[] { + Class.class, String.class, String.class + } ); + computerCraft_registerPeripheralProvider = findCCMethod( "registerPeripheralProvider", new Class[] { + IPeripheralProvider.class + } ); + computerCraft_registerTurtleUpgrade = findCCMethod( "registerTurtleUpgrade", new Class[] { + ITurtleUpgrade.class + } ); + computerCraft_registerBundledRedstoneProvider = findCCMethod( "registerBundledRedstoneProvider", new Class[] { + IBundledRedstoneProvider.class + } ); + computerCraft_getDefaultBundledRedstoneOutput = findCCMethod( "getDefaultBundledRedstoneOutput", new Class[] { + World.class, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE + } ); + computerCraft_registerMediaProvider = findCCMethod( "registerMediaProvider", new Class[] { + IMediaProvider.class + } ); + computerCraft_registerPermissionProvider = findCCMethod( "registerPermissionProvider", new Class[] { + ITurtlePermissionProvider.class + } ); + } catch( Exception e ) { + System.out.println( "ComputerCraftAPI: ComputerCraft not found." ); + } finally { + ccSearched = true; + } + } + } + + private static Method findCCMethod( String name, Class[] args ) + { + try { + if( computerCraft != null ) + { + return computerCraft.getMethod( name, args ); + } + return null; + } catch( NoSuchMethodException e ) { + System.out.println( "ComputerCraftAPI: ComputerCraft method " + name + " not found." ); + return null; + } + } + + private static boolean ccSearched = false; + private static Class computerCraft = null; + private static Method computerCraft_getVersion = null; + private static Method computerCraft_createUniqueNumberedSaveDir = null; + private static Method computerCraft_createSaveDirMount = null; + private static Method computerCraft_createResourceMount = null; + private static Method computerCraft_registerPeripheralProvider = null; + private static Method computerCraft_registerTurtleUpgrade = null; + private static Method computerCraft_registerBundledRedstoneProvider = null; + private static Method computerCraft_getDefaultBundledRedstoneOutput = null; + private static Method computerCraft_registerMediaProvider = null; + private static Method computerCraft_registerPermissionProvider = null; +} diff --git a/src/main/java/dan200/computercraft/api/filesystem/IMount.java b/src/main/java/dan200/computercraft/api/filesystem/IMount.java new file mode 100755 index 0000000..cf884d9 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/filesystem/IMount.java @@ -0,0 +1,57 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.filesystem; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * Represents a read only part of a virtual filesystem that can be mounted onto a computercraft using IComputerAccess.mount(). + * Ready made implementations of this interface can be created using ComputerCraftAPI.createSaveDirMount() or ComputerCraftAPI.createResourceMount(), or you're free to implement it yourselves! + * @see dan200.computercraft.api.ComputerCraftAPI#createSaveDirMount(World, String) + * @see dan200.computercraft.api.ComputerCraftAPI#createResourceMount(Class, String, String) + * @see dan200.computercraft.api.peripheral.IComputerAccess#mount(String, IMount) + * @see IWritableMount + */ +public interface IMount +{ + /** + * Returns whether a file with a given path exists or not. + * @param path A file path in normalised format, relative to the mount location. ie: "programs/myprogram" + * @return true if the file exists, false otherwise + */ + public boolean exists( String path ) throws IOException; + + /** + * Returns whether a file with a given path is a directory or not. + * @param path A file path in normalised format, relative to the mount location. ie: "programs/myprograms" + * @return true if the file exists and is a directory, false otherwise + */ + public boolean isDirectory( String path ) throws IOException; + + /** + * Returns the file names of all the files in a directory. + * @param path A file path in normalised format, relative to the mount location. ie: "programs/myprograms" + * @param contents A list of strings. Add all the file names to this list + */ + public void list( String path, List contents ) throws IOException; + + /** + * Returns the size of a file with a given path, in bytes + * @param path A file path in normalised format, relative to the mount location. ie: "programs/myprogram" + * @return the size of the file, in bytes + */ + public long getSize( String path ) throws IOException; + + /** + * Opens a file with a given path, and returns an inputstream representing it's contents. + * @param path A file path in normalised format, relative to the mount location. ie: "programs/myprogram" + * @return a stream representing the contents of the file + */ + public InputStream openForRead( String path ) throws IOException; +} diff --git a/src/main/java/dan200/computercraft/api/filesystem/IWritableMount.java b/src/main/java/dan200/computercraft/api/filesystem/IWritableMount.java new file mode 100755 index 0000000..ffe3290 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/filesystem/IWritableMount.java @@ -0,0 +1,52 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.filesystem; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * Represents a part of a virtual filesystem that can be mounted onto a computercraft using IComputerAccess.mount() or IComputerAccess.mountWritable(), that can also be written to. + * Ready made implementations of this interface can be created using ComputerCraftAPI.createSaveDirMount(), or you're free to implement it yourselves! + * @see dan200.computercraft.api.ComputerCraftAPI#createSaveDirMount(World, String) + * @see dan200.computercraft.api.peripheral.IComputerAccess#mountWritable(String, dan200.computercraft.api.filesystem.IMount) + * @see dan200.computercraft.api.filesystem.IMount + */ +public interface IWritableMount extends IMount +{ + /** + * Creates a directory at a given path inside the virtual file system. + * @param path A file path in normalised format, relative to the mount location. ie: "programs/mynewprograms" + */ + public void makeDirectory( String path ) throws IOException; + + /** + * Deletes a directory at a given path inside the virtual file system. + * @param path A file path in normalised format, relative to the mount location. ie: "programs/myoldprograms" + */ + public void delete( String path ) throws IOException; + + /** + * Opens a file with a given path, and returns an outputstream for writing to it. + * @param path A file path in normalised format, relative to the mount location. ie: "programs/myprogram" + * @return a stream for writing to + */ + public OutputStream openForWrite( String path ) throws IOException; + + /** + * Opens a file with a given path, and returns an outputstream for appending to it. + * @param path A file path in normalised format, relative to the mount location. ie: "programs/myprogram" + * @return a stream for writing to + */ + public OutputStream openForAppend( String path ) throws IOException; + + /** + * Get the ammount of free space on the mount, in bytes. You should decrease this value as the user writes to the mount, and write operations should fail once it reaches zero. + * @return The ammount of free space, in bytes. + */ + public long getRemainingSpace() throws IOException; +} diff --git a/src/main/java/dan200/computercraft/api/filesystem/package-info.java b/src/main/java/dan200/computercraft/api/filesystem/package-info.java new file mode 100755 index 0000000..d7a2d59 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/filesystem/package-info.java @@ -0,0 +1,10 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +@API( owner="ComputerCraft", provides="ComputerCraft|API|FileSystem", apiVersion="1.75" ) +package dan200.computercraft.api.filesystem; + +import cpw.mods.fml.common.API; \ No newline at end of file diff --git a/src/main/java/dan200/computercraft/api/lua/ILuaContext.java b/src/main/java/dan200/computercraft/api/lua/ILuaContext.java new file mode 100755 index 0000000..1ffbeea --- /dev/null +++ b/src/main/java/dan200/computercraft/api/lua/ILuaContext.java @@ -0,0 +1,58 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.lua; + +/** + * An interface passed to peripherals and ILuaObjects' by computers or turtles, providing methods + * that allow the peripheral call to wait for events before returning, just like in lua. + * This is very useful if you need to signal work to be performed on the main thread, and don't want to return + * until the work has been completed. + */ +public interface ILuaContext +{ + /** + * Wait for an event to occur on the computercraft, suspending the thread until it arises. This method is exactly equivalent to os.pullEvent() in lua. + * @param filter A specific event to wait for, or null to wait for any event + * @return An object array containing the name of the event that occurred, and any event parameters + * @throws Exception If the user presses CTRL+T to terminate the current program while pullEvent() is waiting for an event, a "Terminated" exception will be thrown here. + * Do not attempt to common this exception, unless you wish to prevent termination, which is not recommended. + * @throws InterruptedException If the user shuts down or reboots the computercraft while pullEvent() is waiting for an event, InterruptedException will be thrown. This exception must not be caught or intercepted, or the computercraft will leak memory and end up in a broken state. + */ + public Object[] pullEvent( String filter ) throws LuaException, InterruptedException; + + /** + * The same as pullEvent(), except "terminated" events are ignored. Only use this if you want to prevent program termination, which is not recommended. This method is exactly equivalent to os.pullEventRaw() in lua. + * @param filter A specific event to wait for, or null to wait for any event + * @return An object array containing the name of the event that occurred, and any event parameters + * @throws InterruptedException If the user shuts down or reboots the computercraft while pullEventRaw() is waiting for an event, InterruptedException will be thrown. This exception must not be caught or intercepted, or the computercraft will leak memory and end up in a broken state. + * @see #pullEvent(String) + */ + public Object[] pullEventRaw( String filter ) throws InterruptedException; + + /** + * Yield the current coroutine with some arguments until it is resumed. This method is exactly equivalent to coroutine.yield() in lua. Use pullEvent() if you wish to wait for events. + * @param arguments An object array containing the arguments to pass to coroutine.yield() + * @return An object array containing the return values from coroutine.yield() + * @throws InterruptedException If the user shuts down or reboots the computercraft the coroutine is suspended, InterruptedException will be thrown. This exception must not be caught or intercepted, or the computercraft will leak memory and end up in a broken state. + * @see #pullEvent(String) + */ + public Object[] yield( Object[] arguments ) throws InterruptedException; + + /** + * TODO: Document me + * @param task + * @return + */ + public Object[] executeMainThreadTask( ILuaTask task ) throws LuaException, InterruptedException; + + /** + * TODO: Document me + * @param task + * @return + */ + public long issueMainThreadTask( ILuaTask task ) throws LuaException; +} diff --git a/src/main/java/dan200/computercraft/api/lua/ILuaObject.java b/src/main/java/dan200/computercraft/api/lua/ILuaObject.java new file mode 100755 index 0000000..abd8b40 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/lua/ILuaObject.java @@ -0,0 +1,26 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.lua; + +/** + * An interface for representing custom objects returned by IPeripheral.callMethod() calls. + * Return objects implementing this interface to expose objects with methods to lua. + */ +public interface ILuaObject +{ + /** + * Get the names of the methods that this object implements. This works the same as IPeripheral.getMethodNames(). See that method for detailed documentation. + * @see dan200.computercraft.api.peripheral.IPeripheral#getMethodNames() + */ + public String[] getMethodNames(); + + /** + * Called when a user calls one of the methods that this object implements. This works the same as IPeripheral.callMethod(). See that method for detailed documentation. + * @see dan200.computercraft.api.peripheral.IPeripheral#callMethod(dan200.computercraft.api.peripheral.IComputerAccess, ILuaContext, int, Object[]) + */ + public Object[] callMethod( ILuaContext context, int method, Object[] arguments ) throws LuaException, InterruptedException; +} diff --git a/src/main/java/dan200/computercraft/api/lua/ILuaTask.java b/src/main/java/dan200/computercraft/api/lua/ILuaTask.java new file mode 100755 index 0000000..45feead --- /dev/null +++ b/src/main/java/dan200/computercraft/api/lua/ILuaTask.java @@ -0,0 +1,12 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.lua; + +public interface ILuaTask +{ + public Object[] execute() throws LuaException; +} diff --git a/src/main/java/dan200/computercraft/api/lua/LuaException.java b/src/main/java/dan200/computercraft/api/lua/LuaException.java new file mode 100755 index 0000000..6683c4b --- /dev/null +++ b/src/main/java/dan200/computercraft/api/lua/LuaException.java @@ -0,0 +1,36 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.lua; + +/** + * An exception representing an error in Lua, like that raised by the error() function + */ +public class LuaException extends Exception +{ + private final int m_level; + + public LuaException() + { + this( "error", 1 ); + } + + public LuaException( String message ) + { + this( message, 1 ); + } + + public LuaException( String message, int level ) + { + super( message ); + m_level = level; + } + + public int getLevel() + { + return m_level; + } +} diff --git a/src/main/java/dan200/computercraft/api/lua/package-info.java b/src/main/java/dan200/computercraft/api/lua/package-info.java new file mode 100755 index 0000000..3ea3d91 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/lua/package-info.java @@ -0,0 +1,10 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +@API( owner="ComputerCraft", provides="ComputerCraft|API|Lua", apiVersion="1.75" ) +package dan200.computercraft.api.lua; + +import cpw.mods.fml.common.API; diff --git a/src/main/java/dan200/computercraft/api/media/IMedia.java b/src/main/java/dan200/computercraft/api/media/IMedia.java new file mode 100755 index 0000000..57ebc08 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/media/IMedia.java @@ -0,0 +1,59 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.media; + +import dan200.computercraft.api.filesystem.IMount; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +/** + * Represents an item that can be placed in a disk drive and used by a Computer. + * Implement this interface on your Item class to allow it to be used in the drive. + */ +public interface IMedia +{ + /** + * Get a string representing the label of this item. Will be called vi disk.getLabel() in lua. + * @param stack The itemstack to inspect + * @return The label. ie: "Dan's Programs" + */ + public String getLabel( ItemStack stack ); + + /** + * Set a string representing the label of this item. Will be called vi disk.setLabel() in lua. + * @param stack The itemstack to modify. + * @param label The string to set the label to. + * @return true if the label was updated, false if the label may not be modified. + */ + public boolean setLabel( ItemStack stack, String label ); + + /** + * If this disk represents an item with audio (like a record), get the readable name of the audio track. ie: "Jonathon Coulton - Still Alive" + * @param stack The itemstack to inspect. + * @return The name, or null if this item does not represent an item with audio. + */ + public String getAudioTitle( ItemStack stack ); + + /** + * If this disk represents an item with audio (like a record), get the resource name of the audio track to play. + * @param stack The itemstack to inspect. + * @return The name, or null if this item does not represent an item with audio. + */ + public String getAudioRecordName( ItemStack stack ); + + /** + * If this disk represents an item with data (like a floppy disk), get a mount representing it's contents. This will be mounted onto the filesystem of the computercraft while the media is in the disk drive. + * @param stack The itemstack to inspect. + * @param world The world in which the item and disk drive reside. + * @return The mount, or null if this item does not represent an item with data. If the IMount returned also implements IWritableMount, it will mounted using mountWritable() + * @see dan200.computercraft.api.filesystem.IMount + * @see dan200.computercraft.api.filesystem.IWritableMount + * @see dan200.computercraft.api.ComputerCraftAPI#createSaveDirMount(World, String, long) + * @see dan200.computercraft.api.ComputerCraftAPI#createResourceMount(Class, String, String) + */ + public IMount createDataMount( ItemStack stack, World world ); +} diff --git a/src/main/java/dan200/computercraft/api/media/IMediaProvider.java b/src/main/java/dan200/computercraft/api/media/IMediaProvider.java new file mode 100755 index 0000000..c0aabd5 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/media/IMediaProvider.java @@ -0,0 +1,23 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.media; + +import net.minecraft.item.ItemStack; + +/** + * This interface is used to provide IMedia implementations for ItemStack + * @see dan200.computercraft.api.ComputerCraftAPI#registerMediaProvider(IMediaProvider) + */ +public interface IMediaProvider +{ + /** + * Produce an IMedia implementation from an ItemStack. + * @see dan200.computercraft.api.ComputerCraftAPI#registerMediaProvider(IMediaProvider) + * @return an IMedia implementation, or null if the item is not something you wish to handle + */ + public IMedia getMedia( ItemStack stack ); +} diff --git a/src/main/java/dan200/computercraft/api/media/package-info.java b/src/main/java/dan200/computercraft/api/media/package-info.java new file mode 100755 index 0000000..9e2f507 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/media/package-info.java @@ -0,0 +1,10 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +@API( owner="ComputerCraft", provides="ComputerCraft|API|Media", apiVersion="1.75" ) +package dan200.computercraft.api.media; + +import cpw.mods.fml.common.API; diff --git a/src/main/java/dan200/computercraft/api/package-info.java b/src/main/java/dan200/computercraft/api/package-info.java new file mode 100755 index 0000000..f3a706a --- /dev/null +++ b/src/main/java/dan200/computercraft/api/package-info.java @@ -0,0 +1,10 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +@API( owner="ComputerCraft", provides="ComputerCraft|API", apiVersion="1.75" ) +package dan200.computercraft.api; + +import cpw.mods.fml.common.API; \ No newline at end of file diff --git a/src/main/java/dan200/computercraft/api/peripheral/IComputerAccess.java b/src/main/java/dan200/computercraft/api/peripheral/IComputerAccess.java new file mode 100755 index 0000000..2458c06 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/peripheral/IComputerAccess.java @@ -0,0 +1,102 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.peripheral; + +import dan200.computercraft.api.filesystem.IMount; +import dan200.computercraft.api.filesystem.IWritableMount; + +/** + * The interface passed to peripherals by computers or turtles, providing methods + * that they can call. This should not be implemented by your classes. Do not interact + * with computers except via this interface. + */ +public interface IComputerAccess +{ + /** + * Mount a mount onto the computers' file system in a read only mode.
+ * @param desiredLocation The location on the computercraft's file system where you would like the mount to be mounted. + * @param mount The mount object to mount on the computercraft. These can be obtained by calling ComputerCraftAPI.createSaveDirMount(), ComputerCraftAPI.createResourceMount() or by creating your own objects that implement the IMount interface. + * @return The location on the computercraft's file system where you the mount mounted, or null if there was already a file in the desired location. Store this value if you wish to unmount the mount later. + * @see dan200.computercraft.api.ComputerCraftAPI#createSaveDirMount(World, String) + * @see dan200.computercraft.api.ComputerCraftAPI#createResourceMount(Class, String, String) + * @see #mountWritable(String, dan200.computercraft.api.filesystem.IWritableMount) + * @see #unmount(String) + * @see dan200.computercraft.api.filesystem.IMount + */ + public String mount( String desiredLocation, IMount mount ); + + /** + * TODO: Document me + */ + public String mount( String desiredLocation, IMount mount, String driveName ); + + /** + * Mount a mount onto the computers' file system in a writable mode.
+ * @param desiredLocation The location on the computercraft's file system where you would like the mount to be mounted. + * @param mount The mount object to mount on the computercraft. These can be obtained by calling ComputerCraftAPI.createSaveDirMount() or by creating your own objects that implement the IWritableMount interface. + * @return The location on the computercraft's file system where you the mount mounted, or null if there was already a file in the desired location. Store this value if you wish to unmount the mount later. + * @see dan200.computercraft.api.ComputerCraftAPI#createSaveDirMount(World, String) + * @see dan200.computercraft.api.ComputerCraftAPI#createResourceMount(Class, String, String) + * @see #mount(String, IMount) + * @see #unmount(String) + * @see IMount + */ + public String mountWritable( String desiredLocation, IWritableMount mount ); + + /** + * TODO: Document me + */ + public String mountWritable( String desiredLocation, IWritableMount mount, String driveName ); + + /** + * Unmounts a directory previously mounted onto the computers file system by mount() or mountWritable().
+ * When a directory is unmounted, it will disappear from the computers file system, and the user will no longer be able to + * access it. All directories mounted by a mount or mountWritable are automatically unmounted when the peripheral + * is attached if they have not been explicitly unmounted. + * @param location The desired location in the computers file system of the directory to unmount. + * This must be the location of a directory previously mounted by mount() or mountWritable(), as + * indicated by their return value. + * @see #mount(String, IMount) + * @see #mountWritable(String, IWritableMount) + */ + public void unmount( String location ); + + /** + * Returns the numerical ID of this computercraft.
+ * This is the same number obtained by calling os.getComputerID() or running the "id" program from lua, + * and is guarunteed unique. This number will be positive. + * @return The identifier. + */ + public int getID(); + + /** + * Causes an event to be raised on this computercraft, which the computercraft can respond to by calling + * os.pullEvent(). This can be used to notify the computercraft when things happen in the world or to + * this peripheral. + * @param event A string identifying the type of event that has occurred, this will be + * returned as the first value from os.pullEvent(). It is recommended that you + * you choose a name that is unique, and recognisable as originating from your + * peripheral. eg: If your peripheral type is "button", a suitable event would be + * "button_pressed". + * @param arguments In addition to a name, you may pass an array of extra arguments to the event, that will + * be supplied as extra return values to os.pullEvent(). Objects in the array will be converted + * to lua data types in the same fashion as the return values of IPeripheral.callMethod().
+ * You may supply null to indicate that no arguments are to be supplied. + * @see dan200.computercraft.api.peripheral.IPeripheral#callMethod + */ + public void queueEvent( String event, Object[] arguments ); + + /** + * Get a string, unique to the computercraft, by which the computercraft refers to this peripheral. + * For directly attached peripherals this will be "left","right","front","back",etc, but + * for peripherals attached remotely it will be different. It is good practice to supply + * this string when raising events to the computercraft, so that the computercraft knows from + * which peripheral the event came. + * @return A string unique to the computercraft, but not globally. + */ + public String getAttachmentName(); +} diff --git a/src/main/java/dan200/computercraft/api/peripheral/IPeripheral.java b/src/main/java/dan200/computercraft/api/peripheral/IPeripheral.java new file mode 100755 index 0000000..a28d656 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/peripheral/IPeripheral.java @@ -0,0 +1,100 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.peripheral; + +import dan200.computercraft.api.lua.ILuaContext; +import dan200.computercraft.api.lua.LuaException; + +/** + * The interface that defines a peripheral. This should be implemented by the + * TileEntity of any common that you wish to be interacted with by + * computercraft or turtle. + */ +public interface IPeripheral +{ + /** + * Should return a string that uniquely identifies this type of peripheral. + * This can be queried from lua by calling peripheral.getType() + * @return A string identifying the type of peripheral. + */ + public String getType(); + + /** + * Should return an array of strings that identify the methods that this + * peripheral exposes to Lua. This will be called once before each attachment, + * and should not change when called multiple times. + * @return An array of strings representing method names. + * @see #callMethod + */ + public String[] getMethodNames(); + + /** + * This is called when a lua program on an attached computercraft calls peripheral.call() with + * one of the methods exposed by getMethodNames().
+ *
+ * Be aware that this will be called from the ComputerCraft Lua thread, and must be thread-safe + * when interacting with minecraft objects. + * @param computer The interface to the computercraft that is making the call. Remember that multiple + * computers can be attached to a peripheral at once. + * @param context The context of the currently running lua thread. This can be used to wait for events + * or otherwise yield. + * @param method An integer identifying which of the methods from getMethodNames() the computercraft + * wishes to call. The integer indicates the index into the getMethodNames() table + * that corresponds to the string passed into peripheral.call() + * @param arguments An array of objects, representing the arguments passed into peripheral.call().
+ * Lua values of type "string" will be represented by Object type String.
+ * Lua values of type "number" will be represented by Object type Double.
+ * Lua values of type "boolean" will be represented by Object type Boolean.
+ * Lua values of any other type will be represented by a null object.
+ * This array will be empty if no arguments are passed. + * @return An array of objects, representing values you wish to return to the lua program.
+ * Integers, Doubles, Floats, Strings, Booleans and null be converted to their corresponding lua type.
+ * All other types will be converted to nil.
+ * You may return null to indicate no values should be returned. + * @throws Exception If you throw any exception from this function, a lua error will be raised with the + * same message as your exception. Use this to throw appropriate errors if the wrong + * arguments are supplied to your method. + * @see #getMethodNames + */ + public Object[] callMethod( IComputerAccess computer, ILuaContext context, int method, Object[] arguments ) throws LuaException, InterruptedException; + + /** + * Is called when canAttachToSide has returned true, and a computercraft is attaching to the peripheral. + * This will occur when a peripheral is placed next to an active computercraft, when a computercraft is turned on next to a peripheral, + * or when a turtle travels into a square next to a peripheral. + * Between calls to attach() and detach(), the attached computercraft can make method calls on the peripheral using peripheral.call(). + * This method can be used to keep track of which computers are attached to the peripheral, or to take action when attachment + * occurs.
+ *
+ * Be aware that this will be called from the ComputerCraft Lua thread, and must be thread-safe + * when interacting with minecraft objects. + * @param computer The interface to the computercraft that is being attached. Remember that multiple + * computers can be attached to a peripheral at once. + * @see #detach + */ + public void attach( IComputerAccess computer ); + + /** + * Is called when a computercraft is detaching from the peripheral. + * This will occur when a computercraft shuts down, when the peripheral is removed while attached to computers, + * or when a turtle moves away from a square attached to a peripheral. + * This method can be used to keep track of which computers are attached to the peripheral, or to take action when detachment + * occurs.
+ *
+ * Be aware that this will be called from the ComputerCraft Lua thread, and must be thread-safe + * when interacting with minecraft objects. + * @param computer The interface to the computercraft that is being detached. Remember that multiple + * computers can be attached to a peripheral at once. + * @see #detach + */ + public void detach( IComputerAccess computer ); + + /** + * TODO: Document me + */ + public boolean equals( IPeripheral other ); +} diff --git a/src/main/java/dan200/computercraft/api/peripheral/IPeripheralProvider.java b/src/main/java/dan200/computercraft/api/peripheral/IPeripheralProvider.java new file mode 100755 index 0000000..a2775f9 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/peripheral/IPeripheralProvider.java @@ -0,0 +1,23 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.peripheral; + +import net.minecraft.world.World; + +/** + * This interface is used to create peripheral implementations for blocks + * @see dan200.computercraft.api.ComputerCraftAPI#registerPeripheralProvider(IPeripheralProvider) + */ +public interface IPeripheralProvider +{ + /** + * Produce an peripheral implementation from a block location. + * @see dan200.computercraft.api.ComputerCraftAPI#registerPeripheralProvider(IPeripheralProvider) + * @return a peripheral, or null if there is not a peripheral here you'd like to handle. + */ + public IPeripheral getPeripheral( World world, int x, int y, int z, int side ); +} diff --git a/src/main/java/dan200/computercraft/api/peripheral/package-info.java b/src/main/java/dan200/computercraft/api/peripheral/package-info.java new file mode 100755 index 0000000..10ea4da --- /dev/null +++ b/src/main/java/dan200/computercraft/api/peripheral/package-info.java @@ -0,0 +1,10 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +@API( owner="ComputerCraft", provides="ComputerCraft|API|Peripheral", apiVersion="1.75" ) +package dan200.computercraft.api.peripheral; + +import cpw.mods.fml.common.API; diff --git a/src/main/java/dan200/computercraft/api/permissions/ITurtlePermissionProvider.java b/src/main/java/dan200/computercraft/api/permissions/ITurtlePermissionProvider.java new file mode 100644 index 0000000..476b4fc --- /dev/null +++ b/src/main/java/dan200/computercraft/api/permissions/ITurtlePermissionProvider.java @@ -0,0 +1,19 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.permissions; + +import net.minecraft.world.World; + +/** + * This interface is used to restrict where turtles can move or build + * @see dan200.computercraft.api.ComputerCraftAPI#registerPermissionProvider(ITurtlePermissionProvider) + */ +public interface ITurtlePermissionProvider +{ + public boolean isBlockEnterable( World world, int x, int y, int z ); + public boolean isBlockEditable( World world, int x, int y, int z ); +} diff --git a/src/main/java/dan200/computercraft/api/permissions/package-info.java b/src/main/java/dan200/computercraft/api/permissions/package-info.java new file mode 100644 index 0000000..a51e7ec --- /dev/null +++ b/src/main/java/dan200/computercraft/api/permissions/package-info.java @@ -0,0 +1,10 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +@API( owner="ComputerCraft", provides="ComputerCraft|API|Permissions", apiVersion="1.75" ) +package dan200.computercraft.api.permissions; + +import cpw.mods.fml.common.API; \ No newline at end of file diff --git a/src/main/java/dan200/computercraft/api/redstone/IBundledRedstoneProvider.java b/src/main/java/dan200/computercraft/api/redstone/IBundledRedstoneProvider.java new file mode 100755 index 0000000..b85f2ef --- /dev/null +++ b/src/main/java/dan200/computercraft/api/redstone/IBundledRedstoneProvider.java @@ -0,0 +1,23 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.redstone; + +import net.minecraft.world.World; + +/** + * This interface is used to provide bundled redstone output for blocks + * @see dan200.computercraft.api.ComputerCraftAPI#registerBundledRedstoneProvider(IBundledRedstoneProvider) + */ +public interface IBundledRedstoneProvider +{ + /** + * Produce an bundled redstone output from a block location. + * @see dan200.computercraft.api.ComputerCraftAPI#registerBundledRedstoneProvider(IBundledRedstoneProvider) + * @return a number in the range 0-65535 to indicate this block is providing output, or -1 if you do not wish to handle this block + */ + public int getBundledRedstoneOutput( World world, int x, int y, int z, int side ); +} diff --git a/src/main/java/dan200/computercraft/api/redstone/package-info.java b/src/main/java/dan200/computercraft/api/redstone/package-info.java new file mode 100755 index 0000000..e01c623 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/redstone/package-info.java @@ -0,0 +1,10 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +@API( owner="ComputerCraft", provides="ComputerCraft|API|Redstone", apiVersion="1.75" ) +package dan200.computercraft.api.redstone; + +import cpw.mods.fml.common.API; diff --git a/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java b/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java new file mode 100755 index 0000000..96c6159 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/turtle/ITurtleAccess.java @@ -0,0 +1,168 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.turtle; + +import dan200.computercraft.api.lua.ILuaContext; +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.api.peripheral.IPeripheral; +import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +/** + * The interface passed to turtle by turtles, providing methods that they can call. + * This should not be implemented by your classes. Do not interact with turtles except via this interface and ITurtleUpgrade. + */ +public interface ITurtleAccess +{ + /** + * Returns the world in which the turtle resides. + * @return the world in which the turtle resides. + */ + public World getWorld(); + + /** + * Returns a vector containing the integer co-ordinates at which the turtle resides. + * @return a vector containing the integer co-ordinates at which the turtle resides. + */ + public ChunkCoordinates getPosition(); + + /** + * TODO: Document me + */ + public boolean teleportTo( World world, int x, int y, int z ); + + /** + * Returns a vector containing the floating point co-ordinates at which the turtle is rendered. + * This will shift when the turtle is moving. + * @param f The subframe fraction + * @return a vector containing the floating point co-ordinates at which the turtle resides. + */ + public Vec3 getVisualPosition( float f ); + + /** + * TODO: Document me + */ + public float getVisualYaw( float f ); + + /** + * Returns the world direction the turtle is currently facing. + * @return the world direction the turtle is currently facing. + */ + public int getDirection(); + + /** + * TODO: Document me + */ + public void setDirection( int dir ); + + /** + * TODO: Document me + */ + public int getSelectedSlot(); + + /** + * TODO: Document me + */ + public void setSelectedSlot( int slot ); + + /** + * Sets the colour of the turtle, as if the player had dyed it with a dye item. + * @param dyeColour 0-15 to dye the turtle one of the 16 standard minecraft colours, or -1 to remove the dye from the turtle. + */ + public void setDyeColour( int dyeColour ); + + /** + * Gets the colour the turtle has been dyed. + * @return 0-15 if the turtle has been dyed one of the 16 standard minecraft colours, -1 if the turtle is clean. + */ + public int getDyeColour(); + + /** + * TODO: Document me + */ + public IInventory getInventory(); + + /** + * TODO: Document me + */ + public boolean isFuelNeeded(); + + /** + * TODO: Document me + */ + public int getFuelLevel(); + + /** + * TODO: Document me + */ + public void setFuelLevel( int fuel ); + + /** + * TODO: Document me + */ + public int getFuelLimit(); + + /** + * Removes some fuel from the turtles fuel supply. Negative numbers can be passed in to INCREASE the fuel level of the turtle. + * @return Whether the turtle was able to consume the ammount of fuel specified. Will return false if you supply a number + * greater than the current fuel level of the turtle. + */ + public boolean consumeFuel( int fuel ); + + /** + * TODO: Document me + */ + public void addFuel( int fuel ); + + /** + * Adds a custom command to the turtles command queue. Unlike peripheral methods, these custom commands will be executed + * on the main thread, so are guaranteed to be able to access Minecraft objects safely, and will be queued up + * with the turtles standard movement and tool commands. An issued command will return an unique integer, which will + * be supplied as a parameter to a "turtle_response" event issued to the turtle after the command has completed. Look at the + * lua source code for "rom/apis/turtle" for how to build a lua wrapper around this functionality. + * @param command an object which will execute the custom command when its point in the queue is reached + * @return the objects the command returned when executed. you should probably return these to the player + * unchanged if called from a peripheral method. + * @see ITurtleCommand + */ + public Object[] executeCommand( ILuaContext context, ITurtleCommand command ) throws LuaException, InterruptedException; + + /** + * TODO: Document me + */ + public void playAnimation( TurtleAnimation animation ); + + /** + * Returns the turtle on the specified side of the turtle, if there is one. + * @return the turtle on the specified side of the turtle, if there is one. + */ + public ITurtleUpgrade getUpgrade( TurtleSide side ); + + /** + * TODO: Document me + */ + public void setUpgrade( TurtleSide side, ITurtleUpgrade upgrade ); + + /** + * Returns the peripheral created by the upgrade on the specified side of the turtle, if there is one. + * @return the peripheral created by the upgrade on the specified side of the turtle, if there is one. + */ + public IPeripheral getPeripheral( TurtleSide side ); + + /** + * TODO: Document me + */ + public NBTTagCompound getUpgradeNBTData( TurtleSide side ); + + /** + * TODO: Document me + */ + public void updateUpgradeNBTData( TurtleSide side ); +} diff --git a/src/main/java/dan200/computercraft/api/turtle/ITurtleCommand.java b/src/main/java/dan200/computercraft/api/turtle/ITurtleCommand.java new file mode 100755 index 0000000..17d113e --- /dev/null +++ b/src/main/java/dan200/computercraft/api/turtle/ITurtleCommand.java @@ -0,0 +1,25 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.turtle; + +/** + * An interface for objects executing custom turtle commands, used with ITurtleAccess.issueCommand + * @see ITurtleAccess#executeCommand(dan200.computercraft.api.lua.ILuaContext,ITurtleCommand) + */ +public interface ITurtleCommand +{ + /** + * Will be called by the turtle on the main thread when it is time to execute the custom command. + * The handler should either perform the work of the command, and return success, or return + * failure with an error message to indicate the command cannot be executed at this time. + * @param turtle access to the turtle for whom the command was issued + * @return TurtleCommandResult.success() or TurtleCommandResult.failure( errorMessage ) + * @see ITurtleAccess#executeCommand(dan200.computercraft.api.lua.ILuaContext,ITurtleCommand) + * @see dan200.computercraft.api.turtle.TurtleCommandResult + */ + public TurtleCommandResult execute( ITurtleAccess turtle ); +} diff --git a/src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java b/src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java new file mode 100755 index 0000000..0dcc6e6 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java @@ -0,0 +1,94 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.turtle; + +import dan200.computercraft.api.peripheral.IPeripheral; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +/** + * The primary interface for defining an turtle for Turtles. A turtle turtle + * can either be a new tool, or a new peripheral. + * @see dan200.computercraft.api.ComputerCraftAPI#registerTurtleUpgrade( dan200.computercraft.api.turtle.ITurtleUpgrade ) + */ +public interface ITurtleUpgrade +{ + /** + * Gets a unique numerical identifier representing this type of turtle turtle. + * Like Minecraft common and item IDs, you should strive to make this number unique + * among all turtle turtle that have been released for ComputerCraft. + * The ID must be in the range 64 to 255, as the ID is stored as an 8-bit value, + * and 0-64 is reserved for future use by ComputerCraft. The turtle will + * fail registration if an already used ID is specified. + * @see dan200.computercraft.api.ComputerCraftAPI#registerTurtleUpgrade( dan200.computercraft.api.turtle.ITurtleUpgrade ) + */ + public int getUpgradeID(); + + /** + * Return a String to describe this type of turtle in turtle item names. + * Examples of built-in adjectives are "Wireless", "Mining" and "Crafty". + */ + public String getUnlocalisedAdjective(); + + /** + * Return whether this turtle adds a tool or a peripheral to the turtle. + * Currently, turtle crafting is restricted to one tool & one peripheral per turtle. + * @see TurtleUpgradeType for the differences between the two. + */ + public TurtleUpgradeType getType(); + + /** + * Return an item stack representing the type of item that a turtle must be crafted + * with to create a turtle which holds this turtle. + * Currently, turtle crafting is restricted to one tool & one peripheral per turtle. + */ + public ItemStack getCraftingItem(); + + /** + * Will only be called for Peripheral turtle. Creates a peripheral for a turtle + * being placed using this turtle. The peripheral created will be stored + * for the lifetime of the turtle, will have update() called once-per-tick, and will be + * attach'd detach'd and have methods called in the same manner as a Computer peripheral. + * + * @param turtle Access to the turtle that the peripheral is being created for. + * @param side Which side of the turtle (left or right) that the turtle resides on. + * @return The newly created peripheral. You may return null if this turtle is a Tool + * and this method is not expected to be called. + */ + public IPeripheral createPeripheral( ITurtleAccess turtle, TurtleSide side ); + + /** + * Will only be called for Tool turtle. Called when turtle.dig() or turtle.attack() is called + * by the turtle, and the tool is required to do some work. + * @param turtle Access to the turtle that the tool resides on. + * @param side Which side of the turtle (left or right) the tool resides on. + * @param verb Which action (dig or attack) the turtle is being called on to perform. + * @param direction Which world direction the action should be performed in, relative to the turtles + * position. This will either be up, down, or the direction the turtle is facing, depending on + * whether dig, digUp or digDown was called. + * @return Whether the turtle was able to perform the action, and hence whether the turtle.dig() + * or turtle.attack() lua method should return true. If true is returned, the tool will perform + * a swinging animation. You may return null if this turtle is a Peripheral + * and this method is not expected to be called. + */ + public TurtleCommandResult useTool( ITurtleAccess turtle, TurtleSide side, TurtleVerb verb, int direction ); + + /** + * Called to obtain the IIcon to be used when rendering a turtle peripheral. Needs to be a "common" + * type IIcon for now, as there is no way to determine which texture sheet an IIcon is from by the + * IIcon itself. + * @param turtle Access to the turtle that the peripheral resides on. + * @param side Which side of the turtle (left or right) the peripheral resides on. + * @return The IIcon that you wish to be used to render your turtle peripheral. + */ + public IIcon getIcon( ITurtleAccess turtle, TurtleSide side ); + + /** + * TODO: Document me + */ + public void update( ITurtleAccess turtle, TurtleSide side ); +} diff --git a/src/main/java/dan200/computercraft/api/turtle/TurtleAnimation.java b/src/main/java/dan200/computercraft/api/turtle/TurtleAnimation.java new file mode 100755 index 0000000..abb4134 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/turtle/TurtleAnimation.java @@ -0,0 +1,22 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.turtle; + +public enum TurtleAnimation +{ + None, + MoveForward, + MoveBack, + MoveUp, + MoveDown, + TurnLeft, + TurnRight, + SwingLeftTool, + SwingRightTool, + Wait, + ShortWait, +} diff --git a/src/main/java/dan200/computercraft/api/turtle/TurtleCommandResult.java b/src/main/java/dan200/computercraft/api/turtle/TurtleCommandResult.java new file mode 100755 index 0000000..67046bd --- /dev/null +++ b/src/main/java/dan200/computercraft/api/turtle/TurtleCommandResult.java @@ -0,0 +1,73 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.turtle; + +public final class TurtleCommandResult +{ + private static final TurtleCommandResult s_success = new TurtleCommandResult( true, null, null ); + private static final TurtleCommandResult s_emptyFailure = new TurtleCommandResult( false, null, null ); + + public static TurtleCommandResult success() + { + return success( null ); + } + + public static TurtleCommandResult success( Object[] results ) + { + if( results == null || results.length == 0 ) + { + return s_success; + } + else + { + return new TurtleCommandResult( true, null, results ); + } + } + + public static TurtleCommandResult failure() + { + return failure( null ); + } + + public static TurtleCommandResult failure( String errorMessage ) + { + if( errorMessage == null ) + { + return s_emptyFailure; + } + else + { + return new TurtleCommandResult( false, errorMessage, null ); + } + } + + private final boolean m_success; + private final String m_errorMessage; + private final Object[] m_results; + + private TurtleCommandResult( boolean success, String errorMessage, Object[] results ) + { + m_success = success; + m_errorMessage = errorMessage; + m_results = results; + } + + public boolean isSuccess() + { + return m_success; + } + + public String getErrorMessage() + { + return m_errorMessage; + } + + public Object[] getResults() + { + return m_results; + } +} diff --git a/src/main/java/dan200/computercraft/api/turtle/TurtleSide.java b/src/main/java/dan200/computercraft/api/turtle/TurtleSide.java new file mode 100755 index 0000000..5fc7c61 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/turtle/TurtleSide.java @@ -0,0 +1,23 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.turtle; + +/** + * An enum representing the two sides of the turtle that a turtle turtle might reside. + */ +public enum TurtleSide +{ + /** + * The turtles left side (where the pickaxe usually is on a Wireless Mining Turtle) + */ + Left, + + /** + * The turtles right side (where the modem usually is on a Wireless Mining Turtle) + */ + Right, +} diff --git a/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeType.java b/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeType.java new file mode 100755 index 0000000..e5fd1af --- /dev/null +++ b/src/main/java/dan200/computercraft/api/turtle/TurtleUpgradeType.java @@ -0,0 +1,27 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.turtle; + +/** + * An enum representing the two different types of turtle that an ITurtleUpgrade + * implementation can add to a turtle. + * @see ITurtleUpgrade + */ +public enum TurtleUpgradeType +{ + /** + * A tool is rendered as an item on the side of the turtle, and responds to the turtle.dig() + * and turtle.attack() methods (Such as pickaxe or sword on Mining and Melee turtles). + */ + Tool, + + /** + * A peripheral adds a special peripheral which is attached to the side of the turtle, + * and can be interacted with the peripheral API (Such as the modem on Wireless Turtles). + */ + Peripheral, +} diff --git a/src/main/java/dan200/computercraft/api/turtle/TurtleVerb.java b/src/main/java/dan200/computercraft/api/turtle/TurtleVerb.java new file mode 100755 index 0000000..566fa48 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/turtle/TurtleVerb.java @@ -0,0 +1,26 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +package dan200.computercraft.api.turtle; + +/** + * An enum representing the two different actions that an ITurtleUpgrade of type + * Tool may be called on to perform by a turtle. + * @see ITurtleUpgrade + * @see ITurtleUpgrade#useTool + */ +public enum TurtleVerb +{ + /** + * The turtle called turtle.dig(), turtle.digUp() or turtle.digDown() + */ + Dig, + + /** + * The turtle called turtle.attack(), turtle.attackUp() or turtle.attackDown() + */ + Attack, +} diff --git a/src/main/java/dan200/computercraft/api/turtle/package-info.java b/src/main/java/dan200/computercraft/api/turtle/package-info.java new file mode 100755 index 0000000..7825971 --- /dev/null +++ b/src/main/java/dan200/computercraft/api/turtle/package-info.java @@ -0,0 +1,10 @@ +/** + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2015. 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. + */ + +@API( owner="ComputerCraft", provides="ComputerCraft|API|Turtle", apiVersion="1.75" ) +package dan200.computercraft.api.turtle; + +import cpw.mods.fml.common.API; diff --git a/src/main/java/icbm/api/IAmmunition.java b/src/main/java/icbm/api/IAmmunition.java new file mode 100644 index 0000000..9f8d36d --- /dev/null +++ b/src/main/java/icbm/api/IAmmunition.java @@ -0,0 +1,9 @@ +package icbm.api; + +import net.minecraft.item.ItemStack; + +public interface IAmmunition { + boolean hasAmmunition(ItemStack var1); + + boolean useAmmunition(ItemStack var1); +} diff --git a/src/main/java/icbm/api/IBlockFrequency.java b/src/main/java/icbm/api/IBlockFrequency.java new file mode 100644 index 0000000..5c5c403 --- /dev/null +++ b/src/main/java/icbm/api/IBlockFrequency.java @@ -0,0 +1,7 @@ +package icbm.api; + +public interface IBlockFrequency { + int getFrequency(); + + void setFrequency(int var1); +} diff --git a/src/main/java/icbm/api/ICBM.java b/src/main/java/icbm/api/ICBM.java new file mode 100644 index 0000000..0928c24 --- /dev/null +++ b/src/main/java/icbm/api/ICBM.java @@ -0,0 +1,63 @@ +package icbm.api; + +import java.lang.reflect.Method; + +import icbm.api.explosion.IExplosive; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; + +public class ICBM { + public static final String NAME = "ICBM"; + public static final String VERSION = "1.1.1"; + public static final int BLOCK_ID_PREFIX = 3880; + public static final int ITEM_ID_PREFIX = 3900; + public static Class explosionManager; + + public static void createExplosion( + World worldObj, double x, double y, double z, Entity entity, int explosiveID + ) { + try { + Method e = explosionManager.getMethod( + "createExplosion", + new Class[] { World.class, + Double.class, + Double.class, + Double.class, + Entity.class, + Integer.class } + ); + e.invoke( + (Object) null, + new Object[] { worldObj, + Double.valueOf(x), + Double.valueOf(y), + Double.valueOf(z), + entity, + Integer.valueOf(explosiveID) } + ); + } catch (Exception var10) { + System.out.println( + "ICBM: Failed to create an ICBM explosion with the ID: " + explosiveID + ); + var10.printStackTrace(); + } + } + + public static IExplosive getExplosive(String name) { + if (name != null) { + try { + Method e = explosionManager.getMethod( + "getExplosiveByName", new Class[] { String.class } + ); + return (IExplosive) e.invoke((Object) null, new Object[] { name }); + } catch (Exception var2) { + System.out.println( + "ICBM: Failed to get explosive with the name: " + name + ); + var2.printStackTrace(); + } + } + + return null; + } +} diff --git a/src/main/java/icbm/api/ICBMFlags.java b/src/main/java/icbm/api/ICBMFlags.java new file mode 100644 index 0000000..f7741f5 --- /dev/null +++ b/src/main/java/icbm/api/ICBMFlags.java @@ -0,0 +1,15 @@ +package icbm.api; + +import universalelectricity.prefab.flag.FlagRegistry; + +public class ICBMFlags { + public static final String FLAG_BAN_GLOBAL = FlagRegistry.registerFlag("ban_icbm"); + public static final String FLAG_BAN_EXPLOSIVE + = FlagRegistry.registerFlag("ban_explosive"); + public static final String FLAG_BAN_GRENADE + = FlagRegistry.registerFlag("ban_grenade"); + public static final String FLAG_BAN_MISSILE + = FlagRegistry.registerFlag("ban_missile"); + public static final String FLAG_BAN_MINECART + = FlagRegistry.registerFlag("ban_minecart"); +} diff --git a/src/main/java/icbm/api/ICamouflageMaterial.java b/src/main/java/icbm/api/ICamouflageMaterial.java new file mode 100644 index 0000000..e4c7b42 --- /dev/null +++ b/src/main/java/icbm/api/ICamouflageMaterial.java @@ -0,0 +1,3 @@ +package icbm.api; + +public interface ICamouflageMaterial {} diff --git a/src/main/java/icbm/api/IHackable.java b/src/main/java/icbm/api/IHackable.java new file mode 100644 index 0000000..1d87e73 --- /dev/null +++ b/src/main/java/icbm/api/IHackable.java @@ -0,0 +1,9 @@ +package icbm.api; + +import net.minecraft.entity.player.EntityPlayer; + +public interface IHackable { + void generateNewKey(); + + boolean tryForAccess(EntityPlayer var1, String var2); +} diff --git a/src/main/java/icbm/api/IItemFrequency.java b/src/main/java/icbm/api/IItemFrequency.java new file mode 100644 index 0000000..a775666 --- /dev/null +++ b/src/main/java/icbm/api/IItemFrequency.java @@ -0,0 +1,9 @@ +package icbm.api; + +import net.minecraft.item.ItemStack; + +public interface IItemFrequency { + int getFrequency(ItemStack var1); + + void setFrequency(int var1, ItemStack var2); +} diff --git a/src/main/java/icbm/api/ILauncherContainer.java b/src/main/java/icbm/api/ILauncherContainer.java new file mode 100644 index 0000000..49da5e5 --- /dev/null +++ b/src/main/java/icbm/api/ILauncherContainer.java @@ -0,0 +1,12 @@ +package icbm.api; + +import icbm.api.ILauncherController; +import icbm.api.IMissile; + +public interface ILauncherContainer { + IMissile getContainingMissile(); + + void setContainingMissile(IMissile var1); + + ILauncherController getController(); +} diff --git a/src/main/java/icbm/api/ILauncherController.java b/src/main/java/icbm/api/ILauncherController.java new file mode 100644 index 0000000..ec58f8d --- /dev/null +++ b/src/main/java/icbm/api/ILauncherController.java @@ -0,0 +1,28 @@ +package icbm.api; + +import icbm.api.IBlockFrequency; +import icbm.api.IMissile; +import icbm.api.LauncherType; +import net.minecraft.item.ItemStack; +import universalelectricity.core.block.IElectricityStorage; +import universalelectricity.core.vector.Vector3; +import universalelectricity.prefab.implement.IRedstoneReceptor; + +public interface ILauncherController + extends IElectricityStorage, IRedstoneReceptor, IBlockFrequency { + LauncherType getLauncherType(); + + void launch(); + + boolean canLaunch(); + + String getStatus(); + + Vector3 getTarget(); + + void setTarget(Vector3 var1); + + void placeMissile(ItemStack var1); + + IMissile getMissile(); +} diff --git a/src/main/java/icbm/api/IMissile.java b/src/main/java/icbm/api/IMissile.java new file mode 100644 index 0000000..de2bf67 --- /dev/null +++ b/src/main/java/icbm/api/IMissile.java @@ -0,0 +1,24 @@ +package icbm.api; + +import icbm.api.explosion.IExplosiveContainer; +import universalelectricity.core.vector.Vector3; + +public interface IMissile extends IExplosiveContainer { + void explode(); + + void setExplode(); + + void normalExplode(); + + void setNormalExplode(); + + void dropMissileAsItem(); + + int getTicksInAir(); + + ILauncherContainer getLauncher(); + + void launch(Vector3 var1); + + void launch(Vector3 var1, int var2); +} diff --git a/src/main/java/icbm/api/IMissileLockable.java b/src/main/java/icbm/api/IMissileLockable.java new file mode 100644 index 0000000..2121853 --- /dev/null +++ b/src/main/java/icbm/api/IMissileLockable.java @@ -0,0 +1,10 @@ +package icbm.api; + +import icbm.api.IMissile; +import universalelectricity.core.vector.Vector3; + +public interface IMissileLockable { + boolean canLock(IMissile var1); + + Vector3 getPredictedPosition(int var1); +} diff --git a/src/main/java/icbm/api/ITracker.java b/src/main/java/icbm/api/ITracker.java new file mode 100644 index 0000000..ef1fec6 --- /dev/null +++ b/src/main/java/icbm/api/ITracker.java @@ -0,0 +1,11 @@ +package icbm.api; + +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public interface ITracker { + void setTrackingEntity(final ItemStack p0, final Entity p1); + + Entity getTrackingEntity(final World p0, final ItemStack p1); +} diff --git a/src/main/java/icbm/api/LauncherType.java b/src/main/java/icbm/api/LauncherType.java new file mode 100644 index 0000000..03d0f29 --- /dev/null +++ b/src/main/java/icbm/api/LauncherType.java @@ -0,0 +1,6 @@ +package icbm.api; + +public enum LauncherType { + TRADITIONAL, + CRUISE; +} diff --git a/src/main/java/icbm/api/RadarRegistry.java b/src/main/java/icbm/api/RadarRegistry.java new file mode 100644 index 0000000..fa2a45f --- /dev/null +++ b/src/main/java/icbm/api/RadarRegistry.java @@ -0,0 +1,114 @@ +package icbm.api; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import universalelectricity.core.vector.Vector2; +import universalelectricity.core.vector.Vector3; +import universalelectricity.prefab.vector.Region2; + +public class RadarRegistry { + private static Set detectableTileEntities = new HashSet<>(); + private static Set detectableEntities = new HashSet<>(); + + public static void register(TileEntity tileEntity) { + if (!detectableTileEntities.contains(tileEntity)) { + detectableTileEntities.add(tileEntity); + } + } + + public static void unregister(TileEntity tileEntity) { + if (detectableTileEntities.contains(tileEntity)) { + detectableTileEntities.remove(tileEntity); + } + } + + public static void register(Entity entity) { + if (!detectableEntities.contains(entity)) { + detectableEntities.add(entity); + } + } + + public static void unregister(Entity entity) { + if (detectableEntities.contains(entity)) { + detectableEntities.remove(entity); + } + } + + public static List + getTileEntitiesInArea(Vector2 minVector, Vector2 maxVector) { + ArrayList returnArray = new ArrayList<>(); + cleanUpArray(); + + for (TileEntity tileEntity : detectableTileEntities) { + if ((new Region2(minVector, maxVector)) + .isIn((new Vector3(tileEntity)).toVector2())) { + returnArray.add(tileEntity); + } + } + + return returnArray; + } + + public static List getEntitiesWithinRadius(Vector2 vector, int radius) { + cleanUpArray(); + ArrayList returnArray = new ArrayList<>(); + + for (Entity entity : detectableEntities) { + if (Vector2.distance(vector, (new Vector3(entity)).toVector2()) + <= (double) radius) { + returnArray.add(entity); + } + } + + return returnArray; + } + + public static Set getTileEntities() { + cleanUpArray(); + return detectableTileEntities; + } + + public static Set getEntities() { + cleanUpArray(); + return detectableEntities; + } + + public static void cleanUpArray() { + try { + Iterator e = detectableTileEntities.iterator(); + + while (e.hasNext()) { + TileEntity it2 = e.next(); + + if (it2 == null) { + e.remove(); + } else if (it2.isInvalid()) { + e.remove(); + } else if (it2.getWorldObj().getTileEntity(it2.xCoord, it2.yCoord, it2.zCoord) != it2) { + e.remove(); + } + } + + Iterator it21 = detectableEntities.iterator(); + + while (it21.hasNext()) { + Entity entity = (Entity) it21.next(); + + if (entity == null) { + it21.remove(); + } else if (entity.isDead) { + it21.remove(); + } + } + } catch (Exception var3) { + System.out.println("Failed to clean up radar list properly."); + var3.printStackTrace(); + } + } +} diff --git a/src/main/java/icbm/api/explosion/ExplosionEvent.java b/src/main/java/icbm/api/explosion/ExplosionEvent.java new file mode 100644 index 0000000..03a2d75 --- /dev/null +++ b/src/main/java/icbm/api/explosion/ExplosionEvent.java @@ -0,0 +1,38 @@ +package icbm.api.explosion; + +import cpw.mods.fml.common.eventhandler.Event; +import net.minecraft.world.World; + +public class ExplosionEvent extends Event { + public final World world; + public final double x; + public final double y; + public final double z; + public IExplosive explosive; + + public ExplosionEvent( + World world, double x, double y, double z, IExplosive explosive + ) { + this.world = world; + this.x = x; + this.y = y; + this.z = z; + this.explosive = explosive; + } + + public static class PostExplosionEvent extends ExplosionEvent { + public PostExplosionEvent( + World world, double x, double y, double z, IExplosive explosive + ) { + super(world, x, y, z, explosive); + } + } + + public static class PreExplosionEvent extends ExplosionEvent { + public PreExplosionEvent( + World world, double x, double y, double z, IExplosive explosive + ) { + super(world, x, y, z, explosive); + } + } +} diff --git a/src/main/java/icbm/api/explosion/IEMPBlock.java b/src/main/java/icbm/api/explosion/IEMPBlock.java new file mode 100644 index 0000000..d19dc1f --- /dev/null +++ b/src/main/java/icbm/api/explosion/IEMPBlock.java @@ -0,0 +1,9 @@ +package icbm.api.explosion; + +import icbm.api.explosion.IExplosive; +import net.minecraft.world.World; +import universalelectricity.core.vector.Vector3; + +public interface IEMPBlock { + void onEMP(World var1, Vector3 var2, IExplosive var3); +} diff --git a/src/main/java/icbm/api/explosion/IEMPItem.java b/src/main/java/icbm/api/explosion/IEMPItem.java new file mode 100644 index 0000000..14ac63d --- /dev/null +++ b/src/main/java/icbm/api/explosion/IEMPItem.java @@ -0,0 +1,10 @@ +package icbm.api.explosion; + +import icbm.api.explosion.IExplosive; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import universalelectricity.core.item.IItemElectric; + +public interface IEMPItem extends IItemElectric { + void onEMP(ItemStack var1, Entity var2, IExplosive var3); +} diff --git a/src/main/java/icbm/api/explosion/IExplosive.java b/src/main/java/icbm/api/explosion/IExplosive.java new file mode 100644 index 0000000..30dde18 --- /dev/null +++ b/src/main/java/icbm/api/explosion/IExplosive.java @@ -0,0 +1,21 @@ +package icbm.api.explosion; + +public interface IExplosive { + int getID(); + + String getUnlocalizedName(); + + String getExplosiveName(); + + String getGrenadeName(); + + String getMissileName(); + + String getMinecartName(); + + float getRadius(); + + int getTier(); + + double getEnergy(); +} diff --git a/src/main/java/icbm/api/explosion/IExplosiveContainer.java b/src/main/java/icbm/api/explosion/IExplosiveContainer.java new file mode 100644 index 0000000..545ef8d --- /dev/null +++ b/src/main/java/icbm/api/explosion/IExplosiveContainer.java @@ -0,0 +1,7 @@ +package icbm.api.explosion; + +import icbm.api.explosion.IExplosive; + +public interface IExplosiveContainer { + IExplosive getExplosiveType(); +} diff --git a/src/main/java/icbm/api/explosion/IExplosiveIgnore.java b/src/main/java/icbm/api/explosion/IExplosiveIgnore.java new file mode 100644 index 0000000..06c5f20 --- /dev/null +++ b/src/main/java/icbm/api/explosion/IExplosiveIgnore.java @@ -0,0 +1,7 @@ +package icbm.api.explosion; + +import icbm.api.explosion.ExplosionEvent; + +public interface IExplosiveIgnore { + boolean canIgnore(ExplosionEvent var1); +} diff --git a/src/main/java/icbm/api/sentry/IAATarget.java b/src/main/java/icbm/api/sentry/IAATarget.java new file mode 100644 index 0000000..95ccf40 --- /dev/null +++ b/src/main/java/icbm/api/sentry/IAATarget.java @@ -0,0 +1,13 @@ +// +// Decompiled by Procyon v0.6.0 +// + +package icbm.api.sentry; + +public interface IAATarget { + void destroyCraft(); + + int doDamage(final int p0); + + boolean canBeTargeted(final Object p0); +} diff --git a/src/main/java/mffs/api/Blacklist.java b/src/main/java/mffs/api/Blacklist.java new file mode 100644 index 0000000..01e2033 --- /dev/null +++ b/src/main/java/mffs/api/Blacklist.java @@ -0,0 +1,19 @@ +package mffs.api; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.block.Block; + +public class Blacklist +{ + public static final Set stabilizationBlacklist; + public static final Set disintegrationBlacklist; + public static final Set forceManipulationBlacklist; + + static { + stabilizationBlacklist = new HashSet<>(); + disintegrationBlacklist = new HashSet<>(); + forceManipulationBlacklist = new HashSet<>(); + } +} diff --git a/src/main/java/mffs/api/IActivatable.java b/src/main/java/mffs/api/IActivatable.java new file mode 100644 index 0000000..c5e4068 --- /dev/null +++ b/src/main/java/mffs/api/IActivatable.java @@ -0,0 +1,8 @@ +package mffs.api; + +public interface IActivatable +{ + boolean isActive(); + + void setActive(final boolean p0); +} diff --git a/src/main/java/mffs/api/IBiometricIdentifierLink.java b/src/main/java/mffs/api/IBiometricIdentifierLink.java new file mode 100644 index 0000000..884e934 --- /dev/null +++ b/src/main/java/mffs/api/IBiometricIdentifierLink.java @@ -0,0 +1,11 @@ +package mffs.api; + +import java.util.Set; +import mffs.api.security.IBiometricIdentifier; + +public interface IBiometricIdentifierLink +{ + IBiometricIdentifier getBiometricIdentifier(); + + Set getBiometricIdentifiers(); +} diff --git a/src/main/java/mffs/api/ICache.java b/src/main/java/mffs/api/ICache.java new file mode 100644 index 0000000..06a06d5 --- /dev/null +++ b/src/main/java/mffs/api/ICache.java @@ -0,0 +1,10 @@ +package mffs.api; + +public interface ICache +{ + Object getCache(final String p0); + + void clearCache(final String p0); + + void clearCache(); +} diff --git a/src/main/java/mffs/api/IFieldInteraction.java b/src/main/java/mffs/api/IFieldInteraction.java new file mode 100644 index 0000000..e6c92a4 --- /dev/null +++ b/src/main/java/mffs/api/IFieldInteraction.java @@ -0,0 +1,41 @@ +package mffs.api; + +import java.util.Set; +import universalelectricity.core.vector.Vector3; +import mffs.api.modules.IModule; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import mffs.api.modules.IProjectorMode; +import universalelectricity.prefab.implement.IRotatable; +import mffs.api.modules.IModuleAcceptor; + +public interface IFieldInteraction extends IModuleAcceptor, IRotatable, IActivatable +{ + IProjectorMode getMode(); + + ItemStack getModeStack(); + + int[] getSlotsBasedOnDirection(final ForgeDirection p0); + + int[] getModuleSlots(); + + int getSidedModuleCount(final IModule p0, final ForgeDirection... p1); + + Vector3 getTranslation(); + + Vector3 getPositiveScale(); + + Vector3 getNegativeScale(); + + int getRotationYaw(); + + int getRotationPitch(); + + Set getCalculatedField(); + + Set getInteriorPoints(); + + void setCalculating(final boolean p0); + + void setCalculated(final boolean p0); +} diff --git a/src/main/java/mffs/api/IForceFieldBlock.java b/src/main/java/mffs/api/IForceFieldBlock.java new file mode 100644 index 0000000..d6965fa --- /dev/null +++ b/src/main/java/mffs/api/IForceFieldBlock.java @@ -0,0 +1,11 @@ +package mffs.api; + +import net.minecraft.world.World; +import net.minecraft.world.IBlockAccess; + +public interface IForceFieldBlock +{ + IProjector getProjector(final IBlockAccess p0, final int p1, final int p2, final int p3); + + void weakenForceField(final World p0, final int p1, final int p2, final int p3, final int p4); +} diff --git a/src/main/java/mffs/api/IProjector.java b/src/main/java/mffs/api/IProjector.java new file mode 100644 index 0000000..0199e80 --- /dev/null +++ b/src/main/java/mffs/api/IProjector.java @@ -0,0 +1,14 @@ +package mffs.api; + +import net.minecraft.inventory.IInventory; + +public interface IProjector extends IInventory, IBiometricIdentifierLink, IFieldInteraction +{ + void projectField(); + + void destroyField(); + + int getProjectionSpeed(); + + long getTicks(); +} diff --git a/src/main/java/mffs/api/ISpecialForceManipulation.java b/src/main/java/mffs/api/ISpecialForceManipulation.java new file mode 100644 index 0000000..3210b48 --- /dev/null +++ b/src/main/java/mffs/api/ISpecialForceManipulation.java @@ -0,0 +1,10 @@ +package mffs.api; + +public interface ISpecialForceManipulation +{ + boolean preMove(final int p0, final int p1, final int p2); + + void move(final int p0, final int p1, final int p2); + + void postMove(); +} diff --git a/src/main/java/mffs/api/card/ICard.java b/src/main/java/mffs/api/card/ICard.java new file mode 100644 index 0000000..4c47839 --- /dev/null +++ b/src/main/java/mffs/api/card/ICard.java @@ -0,0 +1,5 @@ +package mffs.api.card; + +public interface ICard +{ +} diff --git a/src/main/java/mffs/api/card/ICardIdentification.java b/src/main/java/mffs/api/card/ICardIdentification.java new file mode 100644 index 0000000..06c8d87 --- /dev/null +++ b/src/main/java/mffs/api/card/ICardIdentification.java @@ -0,0 +1,17 @@ +package mffs.api.card; + +import mffs.api.security.Permission; +import net.minecraft.item.ItemStack; + +public interface ICardIdentification extends ICard +{ + boolean hasPermission(final ItemStack p0, final Permission p1); + + boolean addPermission(final ItemStack p0, final Permission p1); + + boolean removePermission(final ItemStack p0, final Permission p1); + + String getUsername(final ItemStack p0); + + void setUsername(final ItemStack p0, final String p1); +} diff --git a/src/main/java/mffs/api/card/ICardInfinite.java b/src/main/java/mffs/api/card/ICardInfinite.java new file mode 100644 index 0000000..4f35a5a --- /dev/null +++ b/src/main/java/mffs/api/card/ICardInfinite.java @@ -0,0 +1,5 @@ +package mffs.api.card; + +public interface ICardInfinite +{ +} diff --git a/src/main/java/mffs/api/card/ICardLink.java b/src/main/java/mffs/api/card/ICardLink.java new file mode 100644 index 0000000..460c031 --- /dev/null +++ b/src/main/java/mffs/api/card/ICardLink.java @@ -0,0 +1,11 @@ +package mffs.api.card; + +import universalelectricity.core.vector.Vector3; +import net.minecraft.item.ItemStack; + +public interface ICardLink +{ + void setLink(final ItemStack p0, final Vector3 p1); + + Vector3 getLink(final ItemStack p0); +} diff --git a/src/main/java/mffs/api/fortron/IFortronCapacitor.java b/src/main/java/mffs/api/fortron/IFortronCapacitor.java new file mode 100644 index 0000000..65d7874 --- /dev/null +++ b/src/main/java/mffs/api/fortron/IFortronCapacitor.java @@ -0,0 +1,12 @@ +package mffs.api.fortron; + +import java.util.Set; + +public interface IFortronCapacitor +{ + Set getLinkedDevices(); + + int getTransmissionRange(); + + int getTransmissionRate(); +} diff --git a/src/main/java/mffs/api/fortron/IFortronFrequency.java b/src/main/java/mffs/api/fortron/IFortronFrequency.java new file mode 100644 index 0000000..1e4f9b4 --- /dev/null +++ b/src/main/java/mffs/api/fortron/IFortronFrequency.java @@ -0,0 +1,7 @@ +package mffs.api.fortron; + +import icbm.api.IBlockFrequency; + +public interface IFortronFrequency extends IFortronStorage, IBlockFrequency +{ +} diff --git a/src/main/java/mffs/api/fortron/IFortronStorage.java b/src/main/java/mffs/api/fortron/IFortronStorage.java new file mode 100644 index 0000000..fd7424f --- /dev/null +++ b/src/main/java/mffs/api/fortron/IFortronStorage.java @@ -0,0 +1,14 @@ +package mffs.api.fortron; + +public interface IFortronStorage +{ + void setFortronEnergy(final int p0); + + int getFortronEnergy(); + + int getFortronCapacity(); + + int requestFortron(final int p0, final boolean p1); + + int provideFortron(final int p0, final boolean p1); +} diff --git a/src/main/java/mffs/api/modules/IInterdictionMatrixModule.java b/src/main/java/mffs/api/modules/IInterdictionMatrixModule.java new file mode 100644 index 0000000..9916f8c --- /dev/null +++ b/src/main/java/mffs/api/modules/IInterdictionMatrixModule.java @@ -0,0 +1,9 @@ +package mffs.api.modules; + +import mffs.api.security.IInterdictionMatrix; +import net.minecraft.entity.EntityLivingBase; + +public interface IInterdictionMatrixModule extends IModule +{ + boolean onDefend(final IInterdictionMatrix p0, final EntityLivingBase p1); +} diff --git a/src/main/java/mffs/api/modules/IModule.java b/src/main/java/mffs/api/modules/IModule.java new file mode 100644 index 0000000..f01ab79 --- /dev/null +++ b/src/main/java/mffs/api/modules/IModule.java @@ -0,0 +1,22 @@ +package mffs.api.modules; + +import mffs.api.IFieldInteraction; +import net.minecraft.item.ItemStack; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import universalelectricity.core.vector.Vector3; +import java.util.Set; +import mffs.api.IProjector; + +public interface IModule +{ + float getFortronCost(final float p0); + + boolean onProject(final IProjector p0, final Set fieldBlocks); + + int onProject(final IProjector p0, final Vector3 p1); + + boolean onCollideWithForceField(final World p0, final int p1, final int p2, final int p3, final Entity p4, final ItemStack p5); + + void onCalculate(final IFieldInteraction p0, final Set fieldBlocks); +} diff --git a/src/main/java/mffs/api/modules/IModuleAcceptor.java b/src/main/java/mffs/api/modules/IModuleAcceptor.java new file mode 100644 index 0000000..352b8e3 --- /dev/null +++ b/src/main/java/mffs/api/modules/IModuleAcceptor.java @@ -0,0 +1,17 @@ +package mffs.api.modules; + +import java.util.Set; +import net.minecraft.item.ItemStack; + +public interface IModuleAcceptor +{ + ItemStack getModule(final IModule p0); + + int getModuleCount(final IModule p0, final int... p1); + + Set getModuleStacks(final int... p0); + + Set getModules(final int... p0); + + int getFortronCost(); +} diff --git a/src/main/java/mffs/api/modules/IProjectorMode.java b/src/main/java/mffs/api/modules/IProjectorMode.java new file mode 100644 index 0000000..3ed4ec1 --- /dev/null +++ b/src/main/java/mffs/api/modules/IProjectorMode.java @@ -0,0 +1,17 @@ +package mffs.api.modules; + +import java.util.Set; +import mffs.api.IFieldInteraction; +import mffs.api.IProjector; +import universalelectricity.core.vector.Vector3; + +public interface IProjectorMode { + Set getExteriorPoints(final IFieldInteraction p0); + + Set getInteriorPoints(final IFieldInteraction p0); + + boolean isInField(final IFieldInteraction p0, final Vector3 p1); + + void render(final IProjector p0, final double p1, final double p2, + final double p3, final float p4, final long p5); +} diff --git a/src/main/java/mffs/api/security/IBiometricIdentifier.java b/src/main/java/mffs/api/security/IBiometricIdentifier.java new file mode 100644 index 0000000..eaa760b --- /dev/null +++ b/src/main/java/mffs/api/security/IBiometricIdentifier.java @@ -0,0 +1,12 @@ +package mffs.api.security; + +import net.minecraft.item.ItemStack; + +public interface IBiometricIdentifier +{ + boolean isAccessGranted(final String p0, final Permission p1); + + String getOwner(); + + ItemStack getManipulatingCard(); +} diff --git a/src/main/java/mffs/api/security/IInterdictionMatrix.java b/src/main/java/mffs/api/security/IInterdictionMatrix.java new file mode 100644 index 0000000..4c1aebb --- /dev/null +++ b/src/main/java/mffs/api/security/IInterdictionMatrix.java @@ -0,0 +1,24 @@ +package mffs.api.security; + +import java.util.Set; +import net.minecraft.item.ItemStack; +import mffs.api.IActivatable; +import mffs.api.IBiometricIdentifierLink; +import mffs.api.modules.IModuleAcceptor; +import mffs.api.fortron.IFortronFrequency; +import net.minecraft.inventory.IInventory; + +public interface IInterdictionMatrix extends IInventory, IFortronFrequency, IModuleAcceptor, IBiometricIdentifierLink, IActivatable +{ + int getWarningRange(); + + int getActionRange(); + + boolean mergeIntoInventory(final ItemStack p0); + + Set getFilteredItems(); + + boolean getFilterMode(); + + int getFortronCost(); +} diff --git a/src/main/java/mffs/api/security/Permission.java b/src/main/java/mffs/api/security/Permission.java new file mode 100644 index 0000000..03ea1f1 --- /dev/null +++ b/src/main/java/mffs/api/security/Permission.java @@ -0,0 +1,45 @@ +package mffs.api.security; + +public class Permission +{ + public static final Permission FORCE_FIELD_WARP; + public static final Permission BLOCK_ALTER; + public static final Permission BLOCK_ACCESS; + public static final Permission SECURITY_CENTER_CONFIGURE; + public static final Permission BYPASS_INTERDICTION_MATRIX; + public static final Permission DEFENSE_STATION_CONFISCATION; + public static final Permission REMOTE_CONTROL; + private static Permission[] LIST; + public final int id; + public final String name; + + public Permission(final int id, final String name) { + this.id = id; + this.name = name; + if (Permission.LIST == null) { + Permission.LIST = new Permission[7]; + } + Permission.LIST[this.id] = this; + } + + public static Permission getPermission(final int id) { + if (id < Permission.LIST.length && id >= 0) { + return Permission.LIST[id]; + } + return null; + } + + public static Permission[] getPermissions() { + return Permission.LIST; + } + + static { + FORCE_FIELD_WARP = new Permission(0, "warp"); + BLOCK_ALTER = new Permission(1, "blockPlaceAccess"); + BLOCK_ACCESS = new Permission(2, "blockAccess"); + SECURITY_CENTER_CONFIGURE = new Permission(3, "configure"); + BYPASS_INTERDICTION_MATRIX = new Permission(4, "bypassDefense"); + DEFENSE_STATION_CONFISCATION = new Permission(5, "bypassConfiscation"); + REMOTE_CONTROL = new Permission(6, "remoteControl"); + } +}