Ist das beeindruckend, einen Bot programmiert zu haben?
Seid gegrüßt liebe GuteFrage.net-Community,
es gab vor kurzem auf dem Minecraft-Server "GommeHD.net" ein r/place Event, bei welchem man alle 20 Sekunden einen Block platzieren kann. Nun gab es da eine gewisse Community, welcher ich angehöre, die ein bestimmtes Bild erschaffen möchte. Dieses Bild wurde mit den einzelnen Blöcken (jeweils 16x16 Pixel ein Block) hochgeladen. Jedoch wollte ich nicht meine ganze Abende damit verbringen, Blöcke zu platzieren und pro Block 20 Sekunden nichts zu machen.
So entschied ich mich einen Bot/Mod (was nicht erlaubt ist) zu programmieren, welcher das Bild analysiert und die einzelnen Blöcke mit den Minecraft-Texturen vergleicht, um den Block zu erhalten, welcher an die jeweilige Position (wo der Bot gerade steht) platziert werden muss. Der Bot läuft dann also im Spiel jeden Block ab und schaut, ob es schon der richtige ist und, wenn nicht, dann platziert er den richtigen. Somit brauchte ich nicht anwesend zu sein, um das Bild zu vervollständigen. Nach knapp über 500 Blöcken wurde ich dann (zurecht permanent) gebannt.
Nichtsdestotrotz habe ich von vielen (Nicht-Programmierern) gehört, dass sie das schon sehr beeindruckend finden, was ich da programmiert habe (hat "nur" 3 lange Nächte gedauert, den Mod zu programmieren, aber noch kürzer, wenn ich nicht so RELATIV perfektionistisch wäre; dafür ist der Code aber auch Quick and Dirty).
Was meint ihr? Ist das eine starke Leistung meinerseits oder hätte das jeder machen können? Für mich war es ein schönes Kurzprojekt, um einen Sinn meines Hobbys zu erkennen
13 Stimmen
5 Antworten
Nicht schlecht, aber das könnte ich auch, daher ist es für mich nicht allzu beeindruckend.
Habe vor einigen Jahren mal einen Bot geschrieben der automatisch ein Feld abläuft und die Pflanzen darauf entet und neu anpflanzt. Und zwar nicht nur die direkt unter ihm, sondern auch 4 Blöcke nach links und rechts. Vom Aufwand her dürfte das ähnlich gewesen sein wie dein Projekt.
Aber cool fand ich sowas schon immer.
Was hast du verwendet, um den Spieler genau einen Block weit gehen zu lassen?
Das fand ich immer am schwersten, das so punktgenau hinzubekommen.
Also soweit ich weiß musst du an den Server kein Inventory Update schicken. Das musst du einfach nur Client-Seitig selbst updaten (den Block den du plaziert hast entfernen).
Der Server weiß ja bereits, dass du den Block nicht mehr hast, weil du ihm ein "Use Item On Packet" oder "Block Place Packet", wie auch immer man es nennen will, (https://wiki.vg/Protocol#Use_Item_On) geschickt hast. Der Block den du noch im Inventar hast ist nur ein Ghost Block. Sonst könnte man ja Blöcke dupen indem man das Block-Plazieren-Paket sendet :D
Wenn du willst kann ich mal meinen alten PC rauskramen und nachkucken wie ich das Blöcke damals gemacht hab.
Man ist bei dem r/place Event im Kreativmodus und, wenn ich den Block ins Inventar tue, dann rafft der Server das noch nicht und daher habe diesen hässlichen Code geadded; man muss auch bedenken, dass ich da die setStack Methode (ach ja, verwende Fabric) auf das PlayerInventory angewendet habe.
Ich finde soetwas absolut nicht korrekt. Regeln sind nicht dazu da, um sie zu brechen. Auf solche Dinge sollte man meiner Meinung nach einfach nicht stolz sein.
Ich kenne mich nicht mit Programmieren aus, also für mich ist es definitiv sehr beeindruckend
Yo,
ich hatte mal einen Mini-Roboter mit meinem Vater gebaut und programmiert. Ich finde es sehr beeindruckend.
Grüße,
Fentilator
Klar ist doch ein cooles Projekt man hätte natürlich deutlich mehr draus machen können z.B. das er das Bild beim drüberfliegen analysiert und das er sich natürlich bewegt und kleine Pausen macht wie ein echter Spieler. Aber sonst coole Idee und einfach ungesetzt
Ich habe ihn nicht genau einen Block weit gehen lassen; ich habe dem Spieler nur die Koordinaten des nächsten Blocks gegeben, zu welchem er dann gehen muss und sobald er diesen anschaut, stoppt er in die Richtung zu laufen.
Man muss auch sagen, dass r/place etwas anders ist, da man einen Block platziert, indem man einen Block mit dem jeweiligen Block (der platziert werden soll) in der Hand zerstört.
Am meisten schäme ich mich aber für den Code, bei dem der Spieler sein Inventar für einen Gametick öffnet und wieder schließt, weil ich absolut gar keinen Weg gefunden habe, ein Inventory-Update an den Server zu schicken, nachdem der Block im Inventar platziert wird. Ich habe lediglich das Packet gefunden, welches beim Schließen gesendet wird, aber dieses hat mir nichts gebracht, da es das Inventar anscheinend nicht server-sided updated.