mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-30 16:45:14 -04:00
Merge branch 'master-MC1.7.10' of https://github.com/MightyPirates/OpenComputers into master-MC1.7.10
This commit is contained in:
commit
9ae594dc7c
@ -2,6 +2,7 @@ sudo: false
|
|||||||
language: scala
|
language: scala
|
||||||
scala: 2.11.1
|
scala: 2.11.1
|
||||||
jdk: oraclejdk8
|
jdk: oraclejdk8
|
||||||
|
dist: trusty
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email: false
|
email: false
|
||||||
|
95
build.gradle
95
build.gradle
@ -9,20 +9,21 @@ buildscript {
|
|||||||
name = "sonatype"
|
name = "sonatype"
|
||||||
url = "https://oss.sonatype.org/content/repositories/snapshots/"
|
url = "https://oss.sonatype.org/content/repositories/snapshots/"
|
||||||
}
|
}
|
||||||
|
maven {
|
||||||
|
url = "https://jitpack.io"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
|
classpath 'com.github.CDAGaming:ForgeGradle:1c670759c5'
|
||||||
|
classpath 'com.github.CDAGaming:CurseGradle:184e4322fd'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
|
||||||
id "com.matthewprenger.cursegradle" version "1.0.9"
|
|
||||||
}
|
|
||||||
|
|
||||||
apply plugin: 'scala'
|
apply plugin: 'scala'
|
||||||
apply plugin: 'forge'
|
apply plugin: 'forge'
|
||||||
apply plugin: 'idea'
|
apply plugin: 'idea'
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
|
apply plugin: 'com.matthewprenger.cursegradle'
|
||||||
|
|
||||||
file "build.properties" withReader {
|
file "build.properties" withReader {
|
||||||
def prop = new Properties()
|
def prop = new Properties()
|
||||||
@ -77,53 +78,61 @@ repositories {
|
|||||||
name = "mightypirates"
|
name = "mightypirates"
|
||||||
url = "https://maven.cil.li/"
|
url = "https://maven.cil.li/"
|
||||||
}
|
}
|
||||||
|
// These are necessary because some parts of the maven repo is weirdly structured, this needs to be fixed.
|
||||||
|
ivy {
|
||||||
|
name 'weird maven repos'
|
||||||
|
artifactPattern "https://maven.cil.li/[module]/[revision]/[module]-[revision].[ext]"
|
||||||
|
}
|
||||||
|
ivy {
|
||||||
|
name 'weird maven repos 2'
|
||||||
|
artifactPattern "https://maven.cil.li/[module]/[revision]/[module]-[revision]-[classifier].[ext]"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
provided
|
|
||||||
embedded
|
embedded
|
||||||
compile.extendsFrom embedded
|
implementation.extendsFrom embedded
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
provided "appeng:RotaryCraft:${config.rotc.version}:api"
|
compileOnly "appeng:RotaryCraft:${config.rotc.version}:api"
|
||||||
provided ("appeng:appliedenergistics2:${config.ae2.version}:dev") {
|
compileOnly ("appeng:appliedenergistics2:${config.ae2.version}:dev") {
|
||||||
exclude module: 'buildcraft'
|
exclude module: 'buildcraft'
|
||||||
}
|
}
|
||||||
provided "codechicken:CodeChickenLib:${config.minecraft.version}-${config.ccl.version}:dev"
|
compileOnly "codechicken:CodeChickenLib:${config.minecraft.version}-${config.ccl.version}:dev"
|
||||||
provided "codechicken:EnderStorage:${config.minecraft.version}-${config.es.version}:dev"
|
compileOnly "codechicken:EnderStorage:${config.minecraft.version}-${config.es.version}:dev"
|
||||||
provided "codechicken:ForgeMultipart:${config.minecraft.version}-${config.fmp.version}:dev"
|
compileOnly "codechicken:ForgeMultipart:${config.minecraft.version}-${config.fmp.version}:dev"
|
||||||
provided "codechicken:NotEnoughItems:${config.minecraft.version}-${config.nei.version}:dev"
|
compileOnly "codechicken:NotEnoughItems:${config.minecraft.version}-${config.nei.version}:dev"
|
||||||
provided "codechicken:WR-CBE:${config.minecraft.version}-${config.wrcbe.version}:dev"
|
compileOnly "codechicken:WR-CBE:${config.minecraft.version}-${config.wrcbe.version}:dev"
|
||||||
provided "com.bluepowermod:BluePower:${config.bluepower.version}:deobf"
|
compileOnly "com.bluepowermod:BluePower:${config.bluepower.version}:deobf"
|
||||||
provided "com.gregoriust.gregtech:gregtech_${config.minecraft.version}:${config.gt.version}:dev"
|
compileOnly "com.gregoriust.gregtech:gregtech_${config.minecraft.version}:${config.gt.version}:dev"
|
||||||
provided "igwmod:IGW-Mod-1.7.10:${config.igwmod.version}:userdev"
|
compileOnly "igwmod:IGW-Mod-1.7.10:${config.igwmod.version}:userdev"
|
||||||
provided "li.cil.tis3d:TIS-3D:${config.tis3d.version}:dev"
|
compileOnly "li.cil.tis3d:TIS-3D:${config.tis3d.version}:dev"
|
||||||
provided "mcp.mobius.waila:Waila:${config.waila.version}_${config.minecraft.version}:dev"
|
compileOnly "mcp.mobius.waila:Waila:${config.waila.version}_${config.minecraft.version}:dev"
|
||||||
provided "net.industrial-craft:industrialcraft-2:${config.ic2.version}:dev"
|
compileOnly "net.industrial-craft:industrialcraft-2:${config.ic2.version}:dev"
|
||||||
provided "net.sengir.forestry:forestry_${config.minecraft.version}:${config.forestry.version}:dev"
|
compileOnly "net.sengir.forestry:forestry_${config.minecraft.version}:${config.forestry.version}:dev"
|
||||||
provided "dev.modwarriors.notenoughkeys:NotEnoughKeys:${config.minecraft.version}-${config.nek.version}:deobf-dev"
|
compileOnly "dev.modwarriors.notenoughkeys:NotEnoughKeys:${config.minecraft.version}-${config.nek.version}:deobf-dev"
|
||||||
provided "qmunity:QmunityLib:${config.qmunitylib.version}:deobf"
|
compileOnly "qmunity:QmunityLib:${config.qmunitylib.version}:deobf"
|
||||||
provided "tmech:TMechworks:${config.minecraft.version}-${config.tmech.version}:deobf"
|
compileOnly "tmech:TMechworks:${config.minecraft.version}-${config.tmech.version}:deobf"
|
||||||
provided ("mrtjp:ProjectRed:${config.projred.version}:dev") {
|
compileOnly ("mrtjp:ProjectRed:${config.projred.version}:dev") {
|
||||||
exclude module: 'CoFHCore'
|
exclude module: 'CoFHCore'
|
||||||
}
|
}
|
||||||
// provided "coloredlightscore:ColoredLightsCore:${config.coloredlights.version}:api"
|
// compileOnly "coloredlightscore:ColoredLightsCore:${config.coloredlights.version}:api"
|
||||||
|
|
||||||
provided name: 'buildcraft', version: config.bc.version, classifier: "dev", ext: 'jar'
|
compileOnly name: 'buildcraft', version: config.bc.version, classifier: "dev", ext: 'jar'
|
||||||
provided name: 'GalacticraftCoreAll', version: config.gc.version, ext: 'jar'
|
compileOnly name: 'GalacticraftCoreAll', version: config.gc.version, ext: 'jar'
|
||||||
provided name: 'MekanismAll', version: config.mekanism.version, ext: 'jar'
|
compileOnly name: 'MekanismAll', version: config.mekanism.version, ext: 'jar'
|
||||||
provided name: 'redlogic', version: config.redlogic.version, ext: 'jar'
|
compileOnly name: 'redlogic', version: config.redlogic.version, ext: 'jar'
|
||||||
|
|
||||||
provided name: 'CoFHLib', version: config.cofhlib.version, ext: 'jar'
|
compileOnly name: 'CoFHLib', version: config.cofhlib.version, ext: 'jar'
|
||||||
provided name: 'CoFHCore', version: config.cofhcore.version, ext: 'jar'
|
compileOnly name: 'CoFHCore', version: config.cofhcore.version, ext: 'jar'
|
||||||
provided name: 'MineFactoryReloaded', version: config.mfr.version, ext: 'jar'
|
compileOnly name: 'MineFactoryReloaded', version: config.mfr.version, ext: 'jar'
|
||||||
provided name: 'ComputerCraft', version: config.cc.version, ext: 'jar'
|
compileOnly name: 'ComputerCraft', version: config.cc.version, ext: 'jar'
|
||||||
provided name: 'EnderIO', version: config.eio.version, ext: 'jar'
|
compileOnly name: 'EnderIO', version: config.eio.version, ext: 'jar'
|
||||||
provided name: 'Railcraft', version: config.rc.version, ext: 'jar'
|
compileOnly name: 'Railcraft', version: config.rc.version, ext: 'jar'
|
||||||
provided name: 'BloodMagic', version: config.bloodmagic.version, ext: 'jar'
|
compileOnly name: 'BloodMagic', version: config.bloodmagic.version, ext: 'jar'
|
||||||
provided name: 'ExtraCells', version: config.ec.version, ext: 'jar'
|
compileOnly name: 'ExtraCells', version: config.ec.version, ext: 'jar'
|
||||||
provided name: 'ThaumicEnergistics', version: config.thaumicenergistics.version, ext: 'jar'
|
compileOnly name: 'ThaumicEnergistics', version: config.thaumicenergistics.version, ext: 'jar'
|
||||||
|
|
||||||
compile 'com.google.code.findbugs:jsr305:1.3.9' // Annotations used by google libs.
|
compile 'com.google.code.findbugs:jsr305:1.3.9' // Annotations used by google libs.
|
||||||
|
|
||||||
@ -134,13 +143,6 @@ dependencies {
|
|||||||
testCompile "org.scalatest:scalatest_2.11:2.2.6"
|
testCompile "org.scalatest:scalatest_2.11:2.2.6"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the "provided" dependencies to the compile (but NOT runtime) classpath.
|
|
||||||
sourceSets.main.compileClasspath += [configurations.provided]
|
|
||||||
|
|
||||||
idea.module.scopes.PROVIDED.plus += [configurations.provided]
|
|
||||||
// TODO Causes errors on Gradle 2 for me (No such property: allDependencies for class: java.io.File).
|
|
||||||
//eclipse.classpath.plusConfigurations += [configurations.provided]
|
|
||||||
|
|
||||||
minecraft {
|
minecraft {
|
||||||
version = "${config.minecraft.version}-${config.forge.version}"
|
version = "${config.minecraft.version}-${config.forge.version}"
|
||||||
|
|
||||||
@ -255,6 +257,7 @@ curseforge {
|
|||||||
changelog = file("changelog.md")
|
changelog = file("changelog.md")
|
||||||
addGameVersion config.minecraft.version
|
addGameVersion config.minecraft.version
|
||||||
addGameVersion "Java 8"
|
addGameVersion "Java 8"
|
||||||
|
mainArtifact jar
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
minecraft.version=1.7.10
|
minecraft.version=1.7.10
|
||||||
forge.version=10.13.4.1614-1.7.10
|
forge.version=10.13.4.1614-1.7.10
|
||||||
|
|
||||||
oc.version=1.7.4
|
oc.version=1.7.5
|
||||||
|
|
||||||
ae2.version=rv2-beta-26
|
ae2.version=rv2-beta-26
|
||||||
bc.version=7.0.9
|
bc.version=7.0.9
|
||||||
|
81
changelog.md
81
changelog.md
@ -1,26 +1,69 @@
|
|||||||
## New Features/Support
|
## New Features/Support
|
||||||
|
|
||||||
* **Misc: when powering on, drones may fly a bit higher**
|
**This will be the last version for Minecraft 1.11.2. Minecraft 1.7.10, 1.10.2, and 1.12.2 will keep receiving updates.**
|
||||||
- will fly a above their starting block to get above nonfull blocks (such as chests)
|
|
||||||
* Misc: more robot names
|
* **Added: Barcode reader upgrade!** (AmandaCameron)
|
||||||
* Misc: robot/drone swing respects harvestability of block vs tool
|
- An Analyzer can now be installed in a Tablet as an upgrade.
|
||||||
* Fixed: zero sized files (bufferChanges failing to do its job)
|
- Provides the `barcode_reader` component.
|
||||||
* Fixed: client crash when using remote terminal out of range
|
- When clicking on a block with a tablet containing this upgrade, the `tablet_use` event will contain information the Analyzer would normally reveal.
|
||||||
* Fixed: inventory controllers now honor specified target slot
|
- This allows getting components' addresses into OC directly by clicking on blocks.
|
||||||
* Fixed: T1 wireless cards now ignore properly ignore wired messages
|
* Added: Config option to set max signal queue size (default 256, the same as before).
|
||||||
* Fixed: waila integration by checking for nulls with relay block
|
- Signals pushed to the computer when the queue is full are dropped.
|
||||||
* Fixed: practical logisitics integration by not passing null for EnumFacing
|
* Added: Allow different HTTP request methods in `internet.request` (the method to use is now the fourth optional argument).
|
||||||
* Fixed: locking items in hotbar when gui is open
|
* Added: You can now install Angel Upgrades in drones (Minecraft 1.12 only).
|
||||||
* Fixed: some container names localized
|
* Added: Chargers can now charge items in nearby players' inventories.
|
||||||
|
* Added: Experience Upgrade now shows its level in its tooltip (Minecraft 1.12 only).
|
||||||
|
* Added: Extended item information to Thaumcraft Essentia Jars on Minecraft 1.12 (seebs)
|
||||||
|
* Added: Support for SimpleLogic bundled cables on Minecraft 1.12. (asiekierka)
|
||||||
|
* Added: Re-added Wireless Redstone (ChickenBones Edition) support on Minecraft 1.12.
|
||||||
|
* Misc: Hide bounding box wireframe on screens while not sneaking
|
||||||
|
* Misc: More robot names.
|
||||||
|
* Misc: Updated the chinese translation of the manual. (3TUSK, ZeroAurora, JackyWangMislantiaJnirvana)
|
||||||
|
* Changed: Cleaned up some wording in the config file.
|
||||||
|
* Changed: `gpu.bind` is now faster.
|
||||||
|
* Changed: `computer.pushSignal` now accepts tables of simple key-value pairs, but not nested tables.
|
||||||
|
* Changed: APU tiers now correspond to their CPU tiers.
|
||||||
|
* Changed: Putting unmanaged hard drives into a Raid now forces them into managed mode along with wiping them.
|
||||||
|
* Fixed: Robots being unable to use buckets.
|
||||||
|
* Fixed: Fluid dupe bug that I will _not_ explain to you.
|
||||||
|
* Fixed: Tier 2 wireless network card not receiving wired messages.
|
||||||
|
* Fixed: Return value of `robot.swing` when the block breaks too fast.
|
||||||
|
* Fixed: Server racks not sending messages to mountables quickly enough.
|
||||||
|
* Fixed: Relays not displaying traffic accurately.
|
||||||
|
* Fixed: Relay message relaying issues.
|
||||||
|
* Fixed: `itemDamageRate` config option set to 0 not working. (svitoos)
|
||||||
|
* Fixed: Crash with `hologram.copy`.
|
||||||
|
* Fixed: Geolyzer's `isSunVisible`.
|
||||||
|
* Fixed: Crash with remote terminals.
|
||||||
|
* Fixed: A Robot without inventory deleting the items it drops.
|
||||||
|
* Fixed: `too long without yielding` sometimes not triggering when it should.
|
||||||
|
* Fixed: Crash when blowing up a computer while code is running.
|
||||||
|
* Fixed: Another fluid dupe bug that I will definitely not explain to you either. Stop asking.
|
||||||
|
* Fixed: Available architectures not always being what they should be.
|
||||||
|
* Fixed: Crashes in AE2 integration.
|
||||||
|
* Fixed: The AE2 ME Interface part not having network control.
|
||||||
|
* Fixed: AE2 ME cells not having all intended information on inspection. (wkalinin)
|
||||||
|
* Fixed: Crash with AE2 when power usage is disabled.
|
||||||
|
* Fixed: AE2 interface not being recognized as components when channels are disabled.
|
||||||
|
* Fixed: Some AE2 integration not working on 1.7.10. (wkalinin)
|
||||||
|
* Fixed: Another crash with AE2 when power usage is disabled.
|
||||||
|
* Fixed: Specific AE2 integration being very slow.
|
||||||
|
* Fixed: Crash with IC2 Classic.
|
||||||
|
|
||||||
## OpenOS fixes/improvements
|
## OpenOS fixes/improvements
|
||||||
|
|
||||||
* Fixed: fixed event timing issues when pulling smaller timeouts than a current timer
|
* Fixed: Error related to installing OPPM.
|
||||||
* Added: tty handles '\v' code to move cursor down one line
|
* Fixed: OpenOS timers being starved during blocking pulls.
|
||||||
* Misc: some openos cleanup
|
* Fixed: `reset` alias to reset the screen resolution to its maximum.
|
||||||
* Misc: more memory savings
|
* Fixed: Certain TCP connections in Network loot disk
|
||||||
* Misc: slightly faster boot up times
|
* Fixed: Various vt100 fixes
|
||||||
|
* Fixed: Now errors properly on using `print` with bad `__string` metamethods
|
||||||
|
|
||||||
## List of contributors
|
## List of contributors
|
||||||
payonel, Wilma456
|
payonel,
|
||||||
Anar Abdullayev, TheCodex6824
|
AmandaCameron, wkalinin,
|
||||||
|
LizzyTrickster, svitoos,
|
||||||
|
kchanakira, seebs,
|
||||||
|
asiekierka,
|
||||||
|
3TUSK, ZeroAurora,
|
||||||
|
JackyWangMislantiaJnirvana
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
|
|||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=http\://services.gradle.org/distributions/gradle-2.3-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
|
||||||
|
@ -8,6 +8,7 @@ tile.oc.adapter.name=Adapter
|
|||||||
tile.oc.assembler.name=Elektronik-Werkbank
|
tile.oc.assembler.name=Elektronik-Werkbank
|
||||||
tile.oc.cable.name=Kabel
|
tile.oc.cable.name=Kabel
|
||||||
tile.oc.capacitor.name=Kondensator
|
tile.oc.capacitor.name=Kondensator
|
||||||
|
tile.oc.carpetedCapacitor.name=Teppichkondensator
|
||||||
tile.oc.case1.name=Computergehäuse (Stufe 1)
|
tile.oc.case1.name=Computergehäuse (Stufe 1)
|
||||||
tile.oc.case2.name=Computergehäuse (Stufe 2)
|
tile.oc.case2.name=Computergehäuse (Stufe 2)
|
||||||
tile.oc.case3.name=Computergehäuse (Stufe 3)
|
tile.oc.case3.name=Computergehäuse (Stufe 3)
|
||||||
@ -57,6 +58,7 @@ item.oc.CircuitBoard.name=Leiterplatte
|
|||||||
item.oc.ComponentBus0.name=Komponentenschnittstelle (Stufe 1)
|
item.oc.ComponentBus0.name=Komponentenschnittstelle (Stufe 1)
|
||||||
item.oc.ComponentBus1.name=Komponentenschnittstelle (Stufe 2)
|
item.oc.ComponentBus1.name=Komponentenschnittstelle (Stufe 2)
|
||||||
item.oc.ComponentBus2.name=Komponentenschnittstelle (Stufe 3)
|
item.oc.ComponentBus2.name=Komponentenschnittstelle (Stufe 3)
|
||||||
|
item.oc.ComponentBus3.name=Komponentenschnittstelle (Kreativ)
|
||||||
item.oc.ControlUnit.name=Steuerwerk (CU)
|
item.oc.ControlUnit.name=Steuerwerk (CU)
|
||||||
item.oc.CPU0.name=Hauptprozessor (CPU) (Stufe 1)
|
item.oc.CPU0.name=Hauptprozessor (CPU) (Stufe 1)
|
||||||
item.oc.CPU1.name=Hauptprozessor (CPU) (Stufe 2)
|
item.oc.CPU1.name=Hauptprozessor (CPU) (Stufe 2)
|
||||||
@ -201,6 +203,8 @@ oc:gui.Chat.WarningRecipes=Es gab Fehler beim Laden eines oder mehrerer Rezepte.
|
|||||||
oc:gui.Chat.WarningSimpleComponent=Eine Erweiterung (deine?) welche das §aSimpleComponent§f-Interface verwendet, hat etwas §efalsch gemacht§f. Komponentenlogik konnte nicht eingefügt werden. Bitte wirf einen Blick in deine Log-Datei für weitere Informationen.
|
oc:gui.Chat.WarningSimpleComponent=Eine Erweiterung (deine?) welche das §aSimpleComponent§f-Interface verwendet, hat etwas §efalsch gemacht§f. Komponentenlogik konnte nicht eingefügt werden. Bitte wirf einen Blick in deine Log-Datei für weitere Informationen.
|
||||||
oc:gui.Drive.Managed=Managed
|
oc:gui.Drive.Managed=Managed
|
||||||
oc:gui.Drive.Unmanaged=Unmanaged
|
oc:gui.Drive.Unmanaged=Unmanaged
|
||||||
|
oc:gui.Drive.ReadOnlyLock=Sperre
|
||||||
|
oc:gui.Drive.ReadOnlyLockWarning=§lNur Lesen§r Sperre. Kann nur entfernt werden, wenn das Laufwerk gelöscht wird.
|
||||||
oc:gui.Drive.Warning=§lWarnung§r: Umschalten der Modi führt zum Datenverlust.
|
oc:gui.Drive.Warning=§lWarnung§r: Umschalten der Modi führt zum Datenverlust.
|
||||||
oc:gui.Error.ComponentOverflow=Zu viele Komponenten sind mit dem Computer verbunden.
|
oc:gui.Error.ComponentOverflow=Zu viele Komponenten sind mit dem Computer verbunden.
|
||||||
oc:gui.Error.InternalError=Interner Fehler, bitte sieh in der Logdatei nach. Das ist wahrscheinlich ein Bug.
|
oc:gui.Error.InternalError=Interner Fehler, bitte sieh in der Logdatei nach. Das ist wahrscheinlich ein Bug.
|
||||||
@ -263,6 +267,7 @@ oc:tooltip.APU=Eine CPU mit integrierter GPU (bzw. IGP), falls du unbedingt den
|
|||||||
oc:tooltip.Assembler=Erlaubt die Fertigung von Robotern und weiteren Geräten aus diversen anderen Computerteilen.
|
oc:tooltip.Assembler=Erlaubt die Fertigung von Robotern und weiteren Geräten aus diversen anderen Computerteilen.
|
||||||
oc:tooltip.Cable=Ein billiger Weg, verschiedene Blöcke miteinander zu verbinden.
|
oc:tooltip.Cable=Ein billiger Weg, verschiedene Blöcke miteinander zu verbinden.
|
||||||
oc:tooltip.Capacitor=Speichert Energie für spätere Verwendung. Kann extrem schnell befüllt und entleert werden.
|
oc:tooltip.Capacitor=Speichert Energie für spätere Verwendung. Kann extrem schnell befüllt und entleert werden.
|
||||||
|
oc:tooltip.CarpetedCapacitor=Speichert Energie für den späteren Gebrauch. Kann sehr schnell befüllt und entleert werden. Lädt auf, wenn Schafe oder Ozelots darauf laufen.
|
||||||
oc:tooltip.CardBase=Wie der Name schon sagt, werden alle Erweiterungskarten hieraus hergestellt.
|
oc:tooltip.CardBase=Wie der Name schon sagt, werden alle Erweiterungskarten hieraus hergestellt.
|
||||||
oc:tooltip.Case=Das Computergehäuse ist der essentielle Grundbaustein für einen Computer. §fErweiterungskarten§7, §fRAM§7 und §fFestplatten§7 können in einem Gehäuse installiert werden.[nl] Slots: §f%s§7
|
oc:tooltip.Case=Das Computergehäuse ist der essentielle Grundbaustein für einen Computer. §fErweiterungskarten§7, §fRAM§7 und §fFestplatten§7 können in einem Gehäuse installiert werden.[nl] Slots: §f%s§7
|
||||||
oc:tooltip.Chamelium=Rohmaterial für 3D-Drucke. Nicht zum Verzehr geeignet: kann zu Erblindung und zeitweiligem Verlust von Präsenz führen.
|
oc:tooltip.Chamelium=Rohmaterial für 3D-Drucke. Nicht zum Verzehr geeignet: kann zu Erblindung und zeitweiligem Verlust von Präsenz führen.
|
||||||
@ -286,6 +291,7 @@ oc:tooltip.DiskDrive.CC=ComputerCraft-Disketten werden §aauch unterstützt§7.
|
|||||||
oc:tooltip.DiskDrive=Erlaubt es, Disketten zu lesen und zu beschreiben. Kann in Robotern installiert werden, um später Disketten einlegen zu können.
|
oc:tooltip.DiskDrive=Erlaubt es, Disketten zu lesen und zu beschreiben. Kann in Robotern installiert werden, um später Disketten einlegen zu können.
|
||||||
oc:tooltip.DiskDriveMountable=Funktioniert genauso wie ein normales Diskettenlaufwerk, wird aber in einem Serverschrank installiert.
|
oc:tooltip.DiskDriveMountable=Funktioniert genauso wie ein normales Diskettenlaufwerk, wird aber in einem Serverschrank installiert.
|
||||||
oc:tooltip.DiskUsage=Festplattennutzung: %s/%s Byte
|
oc:tooltip.DiskUsage=Festplattennutzung: %s/%s Byte
|
||||||
|
oc:tooltip.DiskLocked=Gesperrt von %s
|
||||||
oc:tooltip.DiskModeManaged=Modus: Managed
|
oc:tooltip.DiskModeManaged=Modus: Managed
|
||||||
oc:tooltip.DiskModeUnmanaged=Modus: Unmanaged
|
oc:tooltip.DiskModeUnmanaged=Modus: Unmanaged
|
||||||
oc:tooltip.Drone=Drohnen sind schlichte, flinke Aufklärungseinheiten mit limitierter Inventargröße.
|
oc:tooltip.Drone=Drohnen sind schlichte, flinke Aufklärungseinheiten mit limitierter Inventargröße.
|
||||||
|
@ -47,8 +47,8 @@ item.oc.AbstractBusCard.name=Abstract Bus Card
|
|||||||
item.oc.Acid.name=Grog
|
item.oc.Acid.name=Grog
|
||||||
item.oc.ALU.name=Arithmetic Logic Unit (ALU)
|
item.oc.ALU.name=Arithmetic Logic Unit (ALU)
|
||||||
item.oc.Analyzer.name=Analyzer
|
item.oc.Analyzer.name=Analyzer
|
||||||
item.oc.APU0.name=Accelerated Processing Unit (APU) (Tier 1)
|
item.oc.APU0.name=Accelerated Processing Unit (APU) (Tier 2)
|
||||||
item.oc.APU1.name=Accelerated Processing Unit (APU) (Tier 2)
|
item.oc.APU1.name=Accelerated Processing Unit (APU) (Tier 3)
|
||||||
item.oc.APU2.name=Accelerated Processing Unit (APU) (Creative)
|
item.oc.APU2.name=Accelerated Processing Unit (APU) (Creative)
|
||||||
item.oc.ArrowKeys.name=Arrow Keys
|
item.oc.ArrowKeys.name=Arrow Keys
|
||||||
item.oc.ButtonGroup.name=Button Group
|
item.oc.ButtonGroup.name=Button Group
|
||||||
|
@ -8,6 +8,7 @@ tile.oc.adapter.name=Адаптер
|
|||||||
tile.oc.assembler.name=Сборщик
|
tile.oc.assembler.name=Сборщик
|
||||||
tile.oc.cable.name=Кабель
|
tile.oc.cable.name=Кабель
|
||||||
tile.oc.capacitor.name=Конденсатор энергии
|
tile.oc.capacitor.name=Конденсатор энергии
|
||||||
|
tile.oc.carpetedCapacitor.name=Конденсатор с ковровым покрытием
|
||||||
tile.oc.case1.name=Системный блок (1-ый уровень)
|
tile.oc.case1.name=Системный блок (1-ый уровень)
|
||||||
tile.oc.case2.name=Системный блок (2-ой уровень)
|
tile.oc.case2.name=Системный блок (2-ой уровень)
|
||||||
tile.oc.case3.name=Системный блок (3-ий уровень)
|
tile.oc.case3.name=Системный блок (3-ий уровень)
|
||||||
@ -57,6 +58,7 @@ item.oc.CircuitBoard.name=Нетравленая печатная плата
|
|||||||
item.oc.ComponentBus0.name=Компонентная шина (1-ый уровень)
|
item.oc.ComponentBus0.name=Компонентная шина (1-ый уровень)
|
||||||
item.oc.ComponentBus1.name=Компонентная шина (2-ой уровень)
|
item.oc.ComponentBus1.name=Компонентная шина (2-ой уровень)
|
||||||
item.oc.ComponentBus2.name=Компонентная шина (3-ий уровень)
|
item.oc.ComponentBus2.name=Компонентная шина (3-ий уровень)
|
||||||
|
item.oc.ComponentBus3.name=Компонентная шина (Творческая)
|
||||||
item.oc.ControlUnit.name=Устройство управления (УУ)
|
item.oc.ControlUnit.name=Устройство управления (УУ)
|
||||||
item.oc.CPU0.name=Центральный процессор (ЦП) (1-ый уровень)
|
item.oc.CPU0.name=Центральный процессор (ЦП) (1-ый уровень)
|
||||||
item.oc.CPU1.name=Центральный процессор (ЦП) (2-ой уровень)
|
item.oc.CPU1.name=Центральный процессор (ЦП) (2-ой уровень)
|
||||||
@ -201,6 +203,8 @@ oc:gui.Chat.WarningRecipes=Произошла ошибка при загрузк
|
|||||||
oc:gui.Chat.WarningSimpleComponent=Некоторый мод §eневерно§f использует интрефейс §aSimpleComponent§f. Логика компонента не смогла быть внедрена. Проверьте логи, чобы узнать подробнее.
|
oc:gui.Chat.WarningSimpleComponent=Некоторый мод §eневерно§f использует интрефейс §aSimpleComponent§f. Логика компонента не смогла быть внедрена. Проверьте логи, чобы узнать подробнее.
|
||||||
oc:gui.Drive.Managed=Файловый режим
|
oc:gui.Drive.Managed=Файловый режим
|
||||||
oc:gui.Drive.Unmanaged=Блочный режим
|
oc:gui.Drive.Unmanaged=Блочный режим
|
||||||
|
oc:gui.Drive.ReadOnlyLock=Блокировка
|
||||||
|
oc:gui.Drive.ReadOnlyLockWarning=Блокировка §lтолько для чтения§r. Не может быть снята, если только носитель не был стёрт.
|
||||||
oc:gui.Drive.Warning=§lВнимание§r: переключение режимов очищает диск!
|
oc:gui.Drive.Warning=§lВнимание§r: переключение режимов очищает диск!
|
||||||
oc:gui.Error.ComponentOverflow=Слишком много компонентов подключено к компьютеру.
|
oc:gui.Error.ComponentOverflow=Слишком много компонентов подключено к компьютеру.
|
||||||
oc:gui.Error.InternalError=Возникла внутренняя ошибка, пожалуйста, посмотрите лог-файл. Возможно, это баг.
|
oc:gui.Error.InternalError=Возникла внутренняя ошибка, пожалуйста, посмотрите лог-файл. Возможно, это баг.
|
||||||
@ -263,6 +267,7 @@ oc:tooltip.APU=Это процессор со встроенной видеок
|
|||||||
oc:tooltip.Assembler=Позволяет собирать роботов и другие устройства из ряда различных частей компьютера.
|
oc:tooltip.Assembler=Позволяет собирать роботов и другие устройства из ряда различных частей компьютера.
|
||||||
oc:tooltip.Cable=Простой и дешёвый способ соединить компоненты между собой.
|
oc:tooltip.Cable=Простой и дешёвый способ соединить компоненты между собой.
|
||||||
oc:tooltip.Capacitor=Накапливает энергию для дальнейшего использования. Может быть очень быстро заполнен и опустошён.
|
oc:tooltip.Capacitor=Накапливает энергию для дальнейшего использования. Может быть очень быстро заполнен и опустошён.
|
||||||
|
oc:tooltip.CarpetedCapacitor=Накапливает энергию для последующего использования. Может быть заполнен и опорожнен очень быстро. Заряжается, когда по нём гуляют овцы или оцелоты
|
||||||
oc:tooltip.CardBase=Как видно из названия, это основа для всех карт расширения.
|
oc:tooltip.CardBase=Как видно из названия, это основа для всех карт расширения.
|
||||||
oc:tooltip.Case=Системный блок - основа компьютера, содержащий §fкарты расширения§7, §fОЗУ§7 и §fжёсткие диски§7.[nl] Слотов: §f%s§7
|
oc:tooltip.Case=Системный блок - основа компьютера, содержащий §fкарты расширения§7, §fОЗУ§7 и §fжёсткие диски§7.[nl] Слотов: §f%s§7
|
||||||
oc:tooltip.Chamelium=Базовый материал для 3D печати. Не глотать: может привести к слепоте и временным отсутствием присутствия.
|
oc:tooltip.Chamelium=Базовый материал для 3D печати. Не глотать: может привести к слепоте и временным отсутствием присутствия.
|
||||||
@ -286,6 +291,7 @@ oc:tooltip.DiskDrive.CC=§aПоддерживаются§7 дискеты из C
|
|||||||
oc:tooltip.DiskDrive=Позволяет читать и записывать дискеты. Может быть установлен в роботов, что позволит затем вставлять дискеты.
|
oc:tooltip.DiskDrive=Позволяет читать и записывать дискеты. Может быть установлен в роботов, что позволит затем вставлять дискеты.
|
||||||
oc:tooltip.DiskDriveMountable=Работает так же, как и обычный дисковод, но может быть вставлен только в серверную стойку.
|
oc:tooltip.DiskDriveMountable=Работает так же, как и обычный дисковод, но может быть вставлен только в серверную стойку.
|
||||||
oc:tooltip.DiskUsage=Занято %s/%s байт
|
oc:tooltip.DiskUsage=Занято %s/%s байт
|
||||||
|
oc:tooltip.DiskLocked=Блокирован: %s
|
||||||
oc:tooltip.DiskModeManaged=Режим: файловый
|
oc:tooltip.DiskModeManaged=Режим: файловый
|
||||||
oc:tooltip.DiskModeUnmanaged=Режим: блочный
|
oc:tooltip.DiskModeUnmanaged=Режим: блочный
|
||||||
oc:tooltip.Drone=Дроны это легкие и быстрые устройства, но с ограниченным инвентарем.
|
oc:tooltip.Drone=Дроны это легкие и быстрые устройства, но с ограниченным инвентарем.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
-- called from /init.lua
|
-- called from /init.lua
|
||||||
local raw_loadfile = ...
|
local raw_loadfile = ...
|
||||||
|
|
||||||
_G._OSVERSION = "OpenOS 1.7.4"
|
_G._OSVERSION = "OpenOS 1.7.5"
|
||||||
|
|
||||||
-- luacheck: globals component computer unicode _OSVERSION
|
-- luacheck: globals component computer unicode _OSVERSION
|
||||||
local component = component
|
local component = component
|
||||||
|
@ -181,7 +181,7 @@ function text.internal.reader(txt, mode)
|
|||||||
}, {__index=text.internal.stream_base((mode or ""):match("b"))})
|
}, {__index=text.internal.stream_base((mode or ""):match("b"))})
|
||||||
process.closeOnExit(reader)
|
process.closeOnExit(reader)
|
||||||
|
|
||||||
return require("buffer").new("r", reader)
|
return require("buffer").new((mode or "r"):match("[rb]+"), reader)
|
||||||
end
|
end
|
||||||
|
|
||||||
function text.internal.writer(ostream, mode, append_txt)
|
function text.internal.writer(ostream, mode, append_txt)
|
||||||
@ -223,7 +223,7 @@ function text.internal.writer(ostream, mode, append_txt)
|
|||||||
}, {__index=text.internal.stream_base((mode or ""):match("b"))})
|
}, {__index=text.internal.stream_base((mode or ""):match("b"))})
|
||||||
process.closeOnExit(writer)
|
process.closeOnExit(writer)
|
||||||
|
|
||||||
return require("buffer").new("w", writer)
|
return require("buffer").new((mode or "w"):match("[awb]+"), writer)
|
||||||
end
|
end
|
||||||
|
|
||||||
function text.detab(value, tabWidth)
|
function text.detab(value, tabWidth)
|
||||||
|
@ -47,17 +47,12 @@ end
|
|||||||
|
|
||||||
function io.stream(fd,file,mode)
|
function io.stream(fd,file,mode)
|
||||||
checkArg(1,fd,'number')
|
checkArg(1,fd,'number')
|
||||||
|
checkArg(2, file, "table", "string", "nil")
|
||||||
assert(fd>=0,'fd must be >= 0. 0 is input, 1 is stdout, 2 is stderr')
|
assert(fd>=0,'fd must be >= 0. 0 is input, 1 is stdout, 2 is stderr')
|
||||||
local dio = require("process").info().data.io
|
local dio = require("process").info().data.io
|
||||||
if file then
|
if file then
|
||||||
if type(file) == "string" then
|
if type(file) == "string" then
|
||||||
local result, reason = io.open(file, mode)
|
file = assert(io.open(file, mode))
|
||||||
if not result then
|
|
||||||
error(reason, 2)
|
|
||||||
end
|
|
||||||
file = result
|
|
||||||
elseif not io.type(file) then
|
|
||||||
error("bad argument #1 (string or file expected, got " .. type(file) .. ")", 2)
|
|
||||||
end
|
end
|
||||||
dio[fd] = file
|
dio[fd] = file
|
||||||
end
|
end
|
||||||
|
@ -41,6 +41,7 @@ if hookInterval < 1000 then hookInterval = 1000 end
|
|||||||
|
|
||||||
local deadline = math.huge
|
local deadline = math.huge
|
||||||
local hitDeadline = false
|
local hitDeadline = false
|
||||||
|
local tooLongWithoutYielding = setmetatable({}, { __tostring = function() return "too long without yielding" end})
|
||||||
local function checkDeadline()
|
local function checkDeadline()
|
||||||
if computer.realTime() > deadline then
|
if computer.realTime() > deadline then
|
||||||
debug.sethook(coroutine.running(), checkDeadline, "", 1)
|
debug.sethook(coroutine.running(), checkDeadline, "", 1)
|
||||||
@ -48,9 +49,16 @@ local function checkDeadline()
|
|||||||
deadline = deadline + 0.5
|
deadline = deadline + 0.5
|
||||||
end
|
end
|
||||||
hitDeadline = true
|
hitDeadline = true
|
||||||
error("too long without yielding", 0)
|
error(tooLongWithoutYielding)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
local function pcallTimeoutCheck(...)
|
||||||
|
local ok, timeout = ...
|
||||||
|
if rawequal(timeout, tooLongWithoutYielding) then
|
||||||
|
return ok, tostring(tooLongWithoutYielding)
|
||||||
|
end
|
||||||
|
return ...
|
||||||
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -739,9 +747,7 @@ sandbox = {
|
|||||||
next = next,
|
next = next,
|
||||||
pairs = pairs,
|
pairs = pairs,
|
||||||
pcall = function(...)
|
pcall = function(...)
|
||||||
local result = table.pack(pcall(...))
|
return pcallTimeoutCheck(pcall(...))
|
||||||
checkDeadline()
|
|
||||||
return table.unpack(result, 1, result.n)
|
|
||||||
end,
|
end,
|
||||||
print = nil, -- in boot/*_base.lua
|
print = nil, -- in boot/*_base.lua
|
||||||
rawequal = rawequal,
|
rawequal = rawequal,
|
||||||
@ -785,18 +791,23 @@ sandbox = {
|
|||||||
tonumber = tonumber,
|
tonumber = tonumber,
|
||||||
tostring = tostring,
|
tostring = tostring,
|
||||||
type = type,
|
type = type,
|
||||||
_VERSION = _VERSION:match("5.3") and "Lua 5.3" or "Lua 5.2",
|
_VERSION = _VERSION:match("Luaj") and "Luaj" or _VERSION:match("5.3") and "Lua 5.3" or "Lua 5.2",
|
||||||
xpcall = function(f, msgh, ...)
|
xpcall = function(f, msgh, ...)
|
||||||
local handled = false
|
local handled = false
|
||||||
|
checkArg(2, msgh, "function")
|
||||||
local result = table.pack(xpcall(f, function(...)
|
local result = table.pack(xpcall(f, function(...)
|
||||||
if handled then
|
if (...) == tooLongWithoutYielding then
|
||||||
|
return tooLongWithoutYielding
|
||||||
|
elseif handled then
|
||||||
return ...
|
return ...
|
||||||
else
|
else
|
||||||
handled = true
|
handled = true
|
||||||
return msgh(...)
|
return msgh(...)
|
||||||
end
|
end
|
||||||
end, ...))
|
end, ...))
|
||||||
checkDeadline()
|
if result[2] == tooLongWithoutYielding then
|
||||||
|
result = table.pack(result[1], select(2, pcallTimeoutCheck(pcall(msgh, tostring(tooLongWithoutYielding)))))
|
||||||
|
end
|
||||||
return table.unpack(result, 1, result.n)
|
return table.unpack(result, 1, result.n)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@ -1503,4 +1514,4 @@ end
|
|||||||
|
|
||||||
-- JNLua converts the coroutine to a string immediately, so we can't get the
|
-- JNLua converts the coroutine to a string immediately, so we can't get the
|
||||||
-- traceback later. Because of that we have to do the error handling here.
|
-- traceback later. Because of that we have to do the error handling here.
|
||||||
return pcall(main)
|
return pcallTimeoutCheck(pcall(main))
|
||||||
|
@ -88,6 +88,7 @@ Michiyo # Contributor
|
|||||||
Mycroft Holmes # The Moon Is a Harsh Mistress
|
Mycroft Holmes # The Moon Is a Harsh Mistress
|
||||||
Pac-Man # Pac-Man
|
Pac-Man # Pac-Man
|
||||||
Optimus # Transformers. Seperated "Optimus Prime" into two names, as both are quite fitting robot names.
|
Optimus # Transformers. Seperated "Optimus Prime" into two names, as both are quite fitting robot names.
|
||||||
|
Ordis # Warframe
|
||||||
P-Body # Portal
|
P-Body # Portal
|
||||||
Pintsize # Questionable Content
|
Pintsize # Questionable Content
|
||||||
PixelToast # Contributor
|
PixelToast # Contributor
|
||||||
|
@ -193,7 +193,7 @@ object EventHandler {
|
|||||||
if (SideTracker.isServer) e.player match {
|
if (SideTracker.isServer) e.player match {
|
||||||
case _: FakePlayer => // Nope
|
case _: FakePlayer => // Nope
|
||||||
case player: EntityPlayerMP =>
|
case player: EntityPlayerMP =>
|
||||||
if (!LuaStateFactory.isAvailable) {
|
if (!LuaStateFactory.isAvailable && !LuaStateFactory.luajRequested) {
|
||||||
player.addChatMessage(Localization.Chat.WarningLuaFallback)
|
player.addChatMessage(Localization.Chat.WarningLuaFallback)
|
||||||
}
|
}
|
||||||
if (Recipes.hadErrors) {
|
if (Recipes.hadErrors) {
|
||||||
|
@ -79,7 +79,7 @@ class Proxy {
|
|||||||
if (LuaStateFactory.include53) {
|
if (LuaStateFactory.include53) {
|
||||||
api.Machine.add(classOf[NativeLua53Architecture])
|
api.Machine.add(classOf[NativeLua53Architecture])
|
||||||
}
|
}
|
||||||
if (api.Machine.architectures.size == 0) {
|
if (LuaStateFactory.includeLuaJ) {
|
||||||
api.Machine.add(classOf[LuaJLuaArchitecture])
|
api.Machine.add(classOf[LuaJLuaArchitecture])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
|
|||||||
create()
|
create()
|
||||||
|
|
||||||
val connectors = mutable.Set.empty[Chargeable]
|
val connectors = mutable.Set.empty[Chargeable]
|
||||||
|
val equipment = mutable.Set.empty[ItemStack]
|
||||||
|
|
||||||
var chargeSpeed = 0.0
|
var chargeSpeed = 0.0
|
||||||
|
|
||||||
@ -79,6 +80,14 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
|
|||||||
|
|
||||||
override def canUpdate = true
|
override def canUpdate = true
|
||||||
|
|
||||||
|
private def chargeStack(stack: ItemStack, charge: Double): Unit = {
|
||||||
|
if (stack != null && charge > 0) {
|
||||||
|
val offered = charge + node.changeBuffer(-charge)
|
||||||
|
val surplus = ItemCharge.charge(stack, offered)
|
||||||
|
node.changeBuffer(surplus)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override def updateEntity() {
|
override def updateEntity() {
|
||||||
super.updateEntity()
|
super.updateEntity()
|
||||||
|
|
||||||
@ -104,11 +113,16 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
|
|||||||
val charge = Settings.get.chargeRateTablet * chargeSpeed * Settings.get.tickFrequency
|
val charge = Settings.get.chargeRateTablet * chargeSpeed * Settings.get.tickFrequency
|
||||||
canCharge ||= charge > 0 && node.globalBuffer >= charge * 0.5
|
canCharge ||= charge > 0 && node.globalBuffer >= charge * 0.5
|
||||||
if (canCharge) {
|
if (canCharge) {
|
||||||
(0 until getSizeInventory).map(getStackInSlot).foreach(stack => if (stack != null) {
|
(0 until getSizeInventory).map(getStackInSlot).foreach(chargeStack(_, charge))
|
||||||
val offered = charge + node.changeBuffer(-charge)
|
}
|
||||||
val surplus = ItemCharge.charge(stack, offered)
|
}
|
||||||
node.changeBuffer(surplus)
|
|
||||||
})
|
// Charging of equipment
|
||||||
|
{
|
||||||
|
val charge = Settings.get.chargeRateTablet * chargeSpeed * Settings.get.tickFrequency
|
||||||
|
canCharge ||= charge > 0 && node.globalBuffer >= charge * 0.5
|
||||||
|
if (canCharge) {
|
||||||
|
equipment.foreach(chargeStack(_, charge))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,17 +233,35 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
|
|||||||
}
|
}
|
||||||
|
|
||||||
val players = world.getEntitiesWithinAABB(classOf[EntityPlayer], bounds).collect {
|
val players = world.getEntitiesWithinAABB(classOf[EntityPlayer], bounds).collect {
|
||||||
case player: EntityPlayer if api.Nanomachines.hasController(player) => new PlayerChargeable(player)
|
case player: EntityPlayer => player
|
||||||
|
}
|
||||||
|
|
||||||
|
val chargeablePlayers = players.collect {
|
||||||
|
case player if api.Nanomachines.hasController(player) => new PlayerChargeable(player)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only update list when we have to, keeps pointless block updates to a minimum.
|
// Only update list when we have to, keeps pointless block updates to a minimum.
|
||||||
|
|
||||||
val newConnectors = robots ++ drones ++ players
|
val newConnectors = robots ++ drones ++ chargeablePlayers
|
||||||
if (connectors.size != newConnectors.length || (connectors.nonEmpty && (connectors -- newConnectors).nonEmpty)) {
|
if (connectors.size != newConnectors.length || (connectors.nonEmpty && (connectors -- newConnectors).nonEmpty)) {
|
||||||
connectors.clear()
|
connectors.clear()
|
||||||
connectors ++= newConnectors
|
connectors ++= newConnectors
|
||||||
world.notifyBlocksOfNeighborChange(x, y, z, block)
|
world.notifyBlocksOfNeighborChange(x, y, z, block)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// scan players for chargeable equipment
|
||||||
|
equipment.clear()
|
||||||
|
players.foreach {
|
||||||
|
player => player.inventory.mainInventory.foreach {
|
||||||
|
stack: ItemStack =>
|
||||||
|
if (Option(Driver.driverFor(stack, getClass)) match {
|
||||||
|
case Some(driver) if driver.slot(stack) == Slot.Tablet => true
|
||||||
|
case _ => ItemCharge.canCharge(stack)
|
||||||
|
}) {
|
||||||
|
equipment += stack
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
trait Chargeable {
|
trait Chargeable {
|
||||||
|
@ -331,7 +331,8 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance
|
|||||||
super.onRedstoneInputChanged(args)
|
super.onRedstoneInputChanged(args)
|
||||||
components.collect {
|
components.collect {
|
||||||
case Some(mountable: RackMountable) if mountable.node != null =>
|
case Some(mountable: RackMountable) if mountable.node != null =>
|
||||||
mountable.node.sendToNeighbors("redstone.changed", args)
|
val toLocalArgs = RedstoneChangedEventArgs(toLocal(args.side), args.oldValue, args.newValue, args.color)
|
||||||
|
mountable.node.sendToNeighbors("redstone.changed", toLocalArgs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ import li.cil.oc.api.Driver
|
|||||||
import li.cil.oc.api.fs.Label
|
import li.cil.oc.api.fs.Label
|
||||||
import li.cil.oc.api.network.Analyzable
|
import li.cil.oc.api.network.Analyzable
|
||||||
import li.cil.oc.api.network.Visibility
|
import li.cil.oc.api.network.Visibility
|
||||||
|
import li.cil.oc.common.item.data.DriveData
|
||||||
import li.cil.oc.common.Slot
|
import li.cil.oc.common.Slot
|
||||||
import li.cil.oc.server.component.FileSystem
|
import li.cil.oc.server.component.FileSystem
|
||||||
import li.cil.oc.server.{PacketSender => ServerPacketSender}
|
import li.cil.oc.server.{PacketSender => ServerPacketSender}
|
||||||
@ -79,6 +80,14 @@ class Raid extends traits.Environment with traits.Inventory with traits.Rotatabl
|
|||||||
def tryCreateRaid(id: String) {
|
def tryCreateRaid(id: String) {
|
||||||
if (items.count(_.isDefined) == items.length && filesystem.fold(true)(fs => fs.node == null || fs.node.address != id)) {
|
if (items.count(_.isDefined) == items.length && filesystem.fold(true)(fs => fs.node == null || fs.node.address != id)) {
|
||||||
filesystem.foreach(fs => if (fs.node != null) fs.node.remove())
|
filesystem.foreach(fs => if (fs.node != null) fs.node.remove())
|
||||||
|
items.foreach(fs => fs match {
|
||||||
|
case Some(fsStack) =>
|
||||||
|
val drive = new DriveData(fsStack)
|
||||||
|
drive.lockInfo = ""
|
||||||
|
drive.isUnmanaged = false
|
||||||
|
drive.save(fsStack)
|
||||||
|
case _ => // should not happen but is safe to ignore
|
||||||
|
})
|
||||||
val fs = api.FileSystem.asManagedEnvironment(
|
val fs = api.FileSystem.asManagedEnvironment(
|
||||||
api.FileSystem.fromSaveDirectory(id, wipeDisksAndComputeSpace, Settings.get.bufferChanges),
|
api.FileSystem.fromSaveDirectory(id, wipeDisksAndComputeSpace, Settings.get.bufferChanges),
|
||||||
label, this, Settings.resourceDomain + ":hdd_access", 6).
|
label, this, Settings.resourceDomain + ":hdd_access", 6).
|
||||||
|
@ -216,7 +216,8 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B
|
|||||||
|
|
||||||
override protected def onRedstoneInputChanged(args: RedstoneChangedEventArgs) {
|
override protected def onRedstoneInputChanged(args: RedstoneChangedEventArgs) {
|
||||||
super.onRedstoneInputChanged(args)
|
super.onRedstoneInputChanged(args)
|
||||||
machine.node.sendToNeighbors("redstone.changed", args)
|
val toLocalArgs = RedstoneChangedEventArgs(toLocal(args.side), args.oldValue, args.newValue, args.color)
|
||||||
|
machine.node.sendToNeighbors("redstone.changed", toLocalArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
@ -101,7 +101,7 @@ trait NetworkControl[AETile >: Null <: TileEntity with IGridProxyable with IActi
|
|||||||
case (key: String, value: AnyRef) => (key, value)
|
case (key: String, value: AnyRef) => (key, value)
|
||||||
}
|
}
|
||||||
result(allCraftables
|
result(allCraftables
|
||||||
.collect{ case aeCraftItem if matches(convert(aeCraftItem), filter) => new NetworkControl.Craftable(tile, aeCraftItem) }
|
.collect{ case aeCraftItem if filter.isEmpty || matches(convert(aeCraftItem), filter) => new NetworkControl.Craftable(tile, aeCraftItem) }
|
||||||
.toArray)
|
.toArray)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,8 +260,10 @@ object PacketSender {
|
|||||||
val x = (xz >> 8).toByte
|
val x = (xz >> 8).toByte
|
||||||
val z = xz.toByte
|
val z = xz.toByte
|
||||||
pb.writeShort(xz)
|
pb.writeShort(xz)
|
||||||
pb.writeInt(t.volume(x + z * t.width))
|
val rangeStart: Int = x + z * t.width
|
||||||
pb.writeInt(t.volume(x + z * t.width + t.width * t.width))
|
val rangeFinal: Int = x + z * t.width + t.width * t.width
|
||||||
|
pb.writeInt(t.volume(rangeStart max 0 min t.volume.length - 1))
|
||||||
|
pb.writeInt(t.volume(rangeFinal max 0 min t.volume.length - 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
pb.sendToPlayersNearTileEntity(t)
|
pb.sendToPlayersNearTileEntity(t)
|
||||||
|
@ -187,11 +187,11 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc
|
|||||||
private def collectDroppedItems(itemsBefore: Iterable[EntityItem]) {
|
private def collectDroppedItems(itemsBefore: Iterable[EntityItem]) {
|
||||||
val itemsAfter = adjacentItems
|
val itemsAfter = adjacentItems
|
||||||
val itemsDropped = itemsAfter -- itemsBefore
|
val itemsDropped = itemsAfter -- itemsBefore
|
||||||
for (drop <- itemsDropped) {
|
if (itemsDropped.nonEmpty) {
|
||||||
|
for (drop <- itemsDropped) {
|
||||||
drop.delayBeforeCanPickup = 0
|
drop.delayBeforeCanPickup = 0
|
||||||
drop.onCollideWithPlayer(this)
|
drop.onCollideWithPlayer(this)
|
||||||
drop.setDead()
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,11 +288,20 @@ trait Agent extends traits.WorldControl with traits.InventoryControl with traits
|
|||||||
entity.captureDrops = true
|
entity.captureDrops = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected def endConsumeDrops(player: Player, entity: Entity) {
|
protected def endConsumeDrops(player: Player, entity: Entity) {
|
||||||
entity.captureDrops = false
|
entity.captureDrops = false
|
||||||
for (drop <- entity.capturedDrops) {
|
// this inventory size check is a HACK to preserve old behavior that a agent can suck items out
|
||||||
val stack = drop.getEntityItem
|
// of the capturedDrops. Ideally, we'd only pick up items off the ground. We could clear the
|
||||||
InventoryUtils.addToPlayerInventory(stack, player)
|
// capturedDrops when Player.attackTargetEntityWithCurrentItem() is called
|
||||||
|
// But this felt slightly less hacky, slightly
|
||||||
|
if (player.inventory.getSizeInventory > 0) {
|
||||||
|
for (drop <- entity.capturedDrops) {
|
||||||
|
if (!drop.isDead) {
|
||||||
|
val stack = drop.getEntityItem
|
||||||
|
InventoryUtils.addToPlayerInventory(stack, player, spawnInWorld = false)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
entity.capturedDrops.clear()
|
entity.capturedDrops.clear()
|
||||||
}
|
}
|
||||||
|
@ -382,7 +382,7 @@ object DebugCard {
|
|||||||
def setGameType(context: Context, args: Arguments): Array[AnyRef] =
|
def setGameType(context: Context, args: Arguments): Array[AnyRef] =
|
||||||
withPlayer(player => {
|
withPlayer(player => {
|
||||||
val gametype = args.checkString(0)
|
val gametype = args.checkString(0)
|
||||||
player.setGameType(GameType.values.find(_.name == gametype).getOrElse(GameType.SURVIVAL))
|
player.setGameType(GameType.values.find(_.getName == gametype).getOrElse(GameType.SURVIVAL))
|
||||||
null
|
null
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -83,7 +83,8 @@ class UpgradeNavigation(val host: EnvironmentHost with Rotatable) extends prefab
|
|||||||
Map(
|
Map(
|
||||||
"position" -> Array(delta.xCoord, delta.yCoord, delta.zCoord),
|
"position" -> Array(delta.xCoord, delta.yCoord, delta.zCoord),
|
||||||
"redstone" -> waypoint.maxInput,
|
"redstone" -> waypoint.maxInput,
|
||||||
"label" -> waypoint.label
|
"label" -> waypoint.label,
|
||||||
|
"address" -> waypoint.node.address()
|
||||||
)
|
)
|
||||||
}).toArray)
|
}).toArray)
|
||||||
}
|
}
|
||||||
|
@ -158,10 +158,14 @@ object WirelessNetworkCard {
|
|||||||
override def getDeviceInfo: util.Map[String, String] = deviceInfo
|
override def getDeviceInfo: util.Map[String, String] = deviceInfo
|
||||||
|
|
||||||
override protected def isPacketAccepted(packet: Packet, distance: Double): Boolean = {
|
override protected def isPacketAccepted(packet: Packet, distance: Double): Boolean = {
|
||||||
(shouldSendWiredTraffic || distance == 0) && super.isPacketAccepted(packet, distance)
|
if (distance <= maxWirelessRange && (distance > 0 || shouldSendWiredTraffic)) {
|
||||||
|
super.isPacketAccepted(packet, distance)
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Tier2(host: EnvironmentHost) extends Tier1(host) {
|
class Tier2(host: EnvironmentHost) extends Tier1(host) {
|
||||||
override protected def wirelessCostPerRange: Double = Settings.get.wirelessCostPerRange(Tier.Two)
|
override protected def wirelessCostPerRange: Double = Settings.get.wirelessCostPerRange(Tier.Two)
|
||||||
|
|
||||||
|
@ -22,24 +22,22 @@ import org.apache.commons.lang3.SystemUtils
|
|||||||
import scala.util.Random
|
import scala.util.Random
|
||||||
|
|
||||||
object LuaStateFactory {
|
object LuaStateFactory {
|
||||||
def isAvailable = {
|
def isAvailable: Boolean = {
|
||||||
// Force initialization of both.
|
// Force initialization of both.
|
||||||
val lua52 = Lua52.isAvailable
|
val lua52 = Lua52.isAvailable
|
||||||
val lua53 = Lua53.isAvailable
|
val lua53 = Lua53.isAvailable
|
||||||
lua52 || lua53
|
lua52 || lua53
|
||||||
}
|
}
|
||||||
|
|
||||||
def include52 = {
|
def luajRequested: Boolean = Settings.get.forceLuaJ || Settings.get.registerLuaJArchitecture
|
||||||
Lua52.isAvailable && !Settings.get.forceLuaJ
|
|
||||||
}
|
|
||||||
|
|
||||||
def include53 = {
|
def includeLuaJ: Boolean = !isAvailable || luajRequested
|
||||||
Lua53.isAvailable && Settings.get.enableLua53
|
|
||||||
}
|
|
||||||
|
|
||||||
def default53 = {
|
def include52: Boolean = Lua52.isAvailable && !Settings.get.forceLuaJ
|
||||||
include53 && Settings.get.defaultLua53
|
|
||||||
}
|
def include53: Boolean = Lua53.isAvailable && Settings.get.enableLua53 && !Settings.get.forceLuaJ
|
||||||
|
|
||||||
|
def default53: Boolean = include53 && Settings.get.defaultLua53
|
||||||
|
|
||||||
def setDefaultArch(stack: ItemStack): ItemStack = {
|
def setDefaultArch(stack: ItemStack): ItemStack = {
|
||||||
if (default53) {
|
if (default53) {
|
||||||
|
@ -156,7 +156,7 @@ object FluidUtils {
|
|||||||
override def canFill(from: ForgeDirection, fluid: Fluid): Boolean = fluid.canBePlacedInWorld
|
override def canFill(from: ForgeDirection, fluid: Fluid): Boolean = fluid.canBePlacedInWorld
|
||||||
|
|
||||||
override def fill(from: ForgeDirection, resource: FluidStack, doFill: Boolean): Int = {
|
override def fill(from: ForgeDirection, resource: FluidStack, doFill: Boolean): Int = {
|
||||||
if (resource != null && resource.getFluid.canBePlacedInWorld && resource.getFluid.getBlock != null) {
|
if (resource != null && resource.getFluid.canBePlacedInWorld && resource.getFluid.getBlock != null && resource.amount >= 1000) {
|
||||||
if (doFill) {
|
if (doFill) {
|
||||||
val world = position.world.get
|
val world = position.world.get
|
||||||
if (!world.isAirBlock(position) && !world.isAnyLiquid(position.bounds))
|
if (!world.isAirBlock(position) && !world.isAnyLiquid(position.bounds))
|
||||||
|
@ -369,7 +369,7 @@ object InventoryUtils {
|
|||||||
/**
|
/**
|
||||||
* Try inserting an item stack into a player inventory. If that fails, drop it into the world.
|
* Try inserting an item stack into a player inventory. If that fails, drop it into the world.
|
||||||
*/
|
*/
|
||||||
def addToPlayerInventory(stack: ItemStack, player: EntityPlayer): Unit = {
|
def addToPlayerInventory(stack: ItemStack, player: EntityPlayer, spawnInWorld: Boolean = true): Unit = {
|
||||||
if (stack != null) {
|
if (stack != null) {
|
||||||
if (player.inventory.addItemStackToInventory(stack)) {
|
if (player.inventory.addItemStackToInventory(stack)) {
|
||||||
player.inventory.markDirty()
|
player.inventory.markDirty()
|
||||||
@ -377,7 +377,7 @@ object InventoryUtils {
|
|||||||
player.openContainer.detectAndSendChanges()
|
player.openContainer.detectAndSendChanges()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (stack.stackSize > 0) {
|
if (stack.stackSize > 0 && spawnInWorld) {
|
||||||
player.dropPlayerItemWithRandomChoice(stack, false)
|
player.dropPlayerItemWithRandomChoice(stack, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user