Player X Posted October 13, 2019 Share Posted October 13, 2019 Hi, ich bin's wieder. Jetzt habe ich ein weiteres Problem. Und zwar bin ich im Moment dabei, anhand von Tutorials auf YouTube zu lernen, wie man ComputerCraft benutzt. Allerdings sind die Tutorials, die ich mir grade anschaue, mit CraftOS 1.3 gedreht worden, und die Version von ComputerCraft, die ich benutze (ComputerCraft1.80pr1.jar für Minecraft 1.12.2), hat das Betriebssystem CraftOS 1.8. Dass dort ein paar Befehle anders sind, ist ja nicht weiter schlimm, denn damit komme ich immer noch zurecht, aber das Problem ist: if disk.isPresent("right") == true then Damit soll der Computer prüfen, ob in dem Diskettenlaufwerk rechts neben ihm eine Diskette drin ist, aber selbst wenn keine Diskette drin ist, führt er trotzdem alles, was unter "then" steht, aus und somit eben das, was unter "else" steht, nie. Er erkennt den Wert nur dann als "false" an, wenn dort kein Diskettenlaufwerk steht, aber selbst wenn dort schon ein Diskettenlaufwerk ohne Diskette steht, erkennt er den Wert als "true" an. Ist das ein Bug, der behoben werden muss, oder kann man da noch etwas verändern, damit die Diskettenprüfung wieder richtig funktioniert, weil das möglicherweise extra so verändert wurde? Ich würde ja gerne auch eine ältere Version von ComputerCraft verwenden, aber dafür bräuchte ich leider auch eine ältere Version von Minecraft, da die letzte Version von ComputerCraft leider nur mit Minecraft 1.8.9 läuft, und damit könnte ich dann nicht mehr alle anderen Mods und auch keine erweiterten Befehlsblöcke mehr benutzen. Link to comment Share on other sites More sharing options...
TileEntity Posted October 14, 2019 Share Posted October 14, 2019 disk.isPresent ist ja bereits eine Boolean-Funktion - muss man die dort explizit auf true/false prüfen? Müsste es nicht gehen mit if disk.isPresent("right") then --> Mach was wenn TRUE else --> mach was wenn FALSE Link to comment Share on other sites More sharing options...
Player X Posted October 14, 2019 Author Share Posted October 14, 2019 Ne, tut mir leid. Auch dann ändert sich nix. 😔 Link to comment Share on other sites More sharing options...
TileEntity Posted October 14, 2019 Share Posted October 14, 2019 So sollte es klappen, oder? if disk.isPresent("right") and disk.hasData("right") then --> Mach was wenn TRUE else --> Mach was wenn FALSE end Link to comment Share on other sites More sharing options...
Player X Posted October 15, 2019 Author Share Posted October 15, 2019 (edited) YAY!!! Jetzt funktioniert's. Jetzt kann ich auch wieder den Tutorials weiterfolgen. Vielen Dank! 😊 Aber ich glaube, wenn schon "disk.hasData" prüft, ob eine Diskette drin ist, braucht man wohl "disk.isPresent" nicht mehr, denn "disk.isPresent" ist ja nur dann auf "false", wenn kein Diskettenlaufwerk da ist, und da zum Prüfen ja eins da sein muss, wird "disk.isPresent" wohl sicher immer auf "true" sein. 😉 Edited October 15, 2019 by Player X Link to comment Share on other sites More sharing options...
TileEntity Posted October 16, 2019 Share Posted October 16, 2019 Jop, das disk.isPresent kann man dann wirklich weglassen - in einem anderen Szenario wiederum, wo man mit disk.hasData prüfen möchte, ob eine Diskette beschrieben ist oder nicht, würde man wieder vor einem Problem stehen, da eine eingelegte Diskette, egal ob mit oder ohne Daten darauf immer TRUE zurückgibt 😄 Link to comment Share on other sites More sharing options...
Player X Posted October 16, 2019 Author Share Posted October 16, 2019 (edited) Hm... Welchen Befehl sollte man denn dann am besten nehmen? 🤔 Edited October 16, 2019 by Player X Link to comment Share on other sites More sharing options...
TileEntity Posted October 17, 2019 Share Posted October 17, 2019 So wie es aussieht, hat bzw. bekommt eine Disk beim Einlegen einen "disk"-Ordner, weswegen dann disk.hasData TRUE ist - evtl. kann man mehr machen, wenn dann eine Datei drin ist. Soweit ich weiß, kann man die mit file.readLine() ansteuern und somit prüfen, ob die beschrieben ist oder nicht Link to comment Share on other sites More sharing options...
Player X Posted October 17, 2019 Author Share Posted October 17, 2019 (edited) Hm... Ich hab's jetzt mal probiert, und ich glaube, dass es diesen Befehl gar nicht gibt. Ich habe sowohl file.readLine("right"), als auch file.readLine eingegeben, und bei beiden Befehlen stand plötzlich, als die Zeile damit dran war, startup.lua:3: attempt to index ? (a nil value) da, und auch bei der Eingabe wurde nix davon zur Vervollständigung vorgeschlagen. Wo hast Du den denn her? Ich hab' grade nochmal die Seite mit den ganzen Befehlen, die ich schonmal beim Durchsuchen des Internets gefunden habe, rausgesucht, und 1. wundert mich dort Folgendes (schon wieder) und 2. fängt dort alles mit disk. an. Dort steht nämlich, dass mit disk.isPresent("Richtung") geprüft wird, ob sich in dem Laufwerk überhaupt ein Item (egal, welches) befindet. Ich kann zwar verstehen, dass aus diesem Grund dort steht, dass mit disk.hasData("Richtung") geprüft wird, ob sich in dem Laufwerk eine Diskette befindet (also doch nix mit beschrieben oder so), aber wenn dort steht, dass mit disk.isPresent("Richtung") geprüft wird, ob sich in dem Laufwerk überhaupt ein Item (egal, welches) befindet, warum ist der Wert dann auch auf true, wenn das Laufwerk dort auch leer ist? Wird so nicht eher geprüft, ob dort ein Laufwerk ist, und wenn's dazu schon einen Befehl geben sollte, sollte dieser dann nicht eigentlich auch anders heißen? Ich kann zwar nicht verstehen, wie, weil's vorher ja auch noch richtig funktionierte, aber ich denke mal, dass dort irgendwie ein Bug reingerutscht ist und der Programmierer davon diesen wieder beheben sollte. Oder wurde das extra so verändert, sodass es vielleicht auch sein könnte, dass damals mit disk.hasData("Richtung") wirklich geprüft wurde, ob die Diskette nicht nur eingelegt, sondern auch beschrieben ist, und somit auch mit disk.isPresent("Richtung") geprüft wurde, ob das Item, das sich grade in dem Laufwerk befindet, auch eine Diskette ist? Edited October 17, 2019 by Player X Link to comment Share on other sites More sharing options...
TileEntity Posted October 17, 2019 Share Posted October 17, 2019 Ah, readLine gehört zur fs API https://computercraft.info/wiki/Fs.open Ka, wie sich verschiedene APIs kombinieren lassen bzw. ob das überhaupt geht 🤔 Das mit der Disk API klingt tatsächlich so, als wäre es ein Bug Link to comment Share on other sites More sharing options...
TileEntity Posted October 18, 2019 Share Posted October 18, 2019 Es gibt eine gefixte Version von ComputerCraft -> CC: Tweaked https://www.curseforge.com/minecraft/mc-mods/cc-tweaked Das ist eine weiterentwickelte Version von ComputerCraft, die auch alles enthält, was das bisherige ComputerCraft zu bieten hatte. Zusätzlich halt viele Buxfixes und Verbesserungen Da ist ua. der Fehler mit disk.isPresent behoben Die kontroverse zu disk.hasData bleibt aber wohl - die Wiki dazu sagt: "Checks if a disk drive has an item attached, and if that item is a floppy disk." Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now