Jump to content

Diskettenprüfung bei ComputerCraft funktioniert nicht mehr richtig


Player X

Empfohlene Beiträge

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 zu diesem Kommentar
Auf anderen Seiten teilen

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. 😉

 

bearbeitet von Player X
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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?

bearbeitet von Player X
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D

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 zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B