• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

PlugIn Skript RegenArena Hilfe beim Blockreset.

Tregornad

Kuhfänger
Mitglied seit
29 März 2020
Beiträge
75
Diamanten
63
Ich habe ein Problem mit meinem Skript Code von dem Plugin Skript: https://skunity.com/downloads
Und Zwar folgendes ich habe Anhand dieses Tutorial Videos:

Mein Eigenes Ore Reset Skript geschrieben was für eine Region gilt indem Kohlerz ist. was innerhalb 30 sec sich regeneriert.
Das Script ansich funktioniert nur das mit der Zeit stimmt nicht ganz.
Nach ca 30 Sec werden alle Kohleerzblöcke wieder resettet was so aber nicht stimmt.
Es sollte so funktionieren das Jeder abgebaute Erzblock nach 30 Sec neu erscheint:.
Nur leider weis ich nicht was ich ändern muss damit dies geschieht:


Hier ist mein derzeitiger Code:

Arenareset:
options:
    # Trag bei Regionname deine Worlguard region ein. Hast du mehrere so trenne sie mit einem or zwischen den namen.
    # Beispiel: regionames: "region1" or "region2" usw.
    regionnames: "testregion"

function arenareset():
    loop {testregion::loc::*}:
        set {_loc} to first element out of {testregion::loc::*}                #Holt die Location des Blocks aus der Liste
        remove {_loc} from {testregion::loc::*}
        set {_block} to first element out of {testregion::loc::block::*}    #Holt den Block aus der Liste
        remove {_block} from {testregion::loc::block::*}
        set {_block} to {_block} parsed as item                            #Wichtig!
        set block at {_loc} to {_block}
    clear {testregion::*}

block break:
    "%region at event-block%" contains "testregion in world Myslaria"
    if "%region at block%" contains {@regionnames}:
        if "%type of event-block%" contains "ore":
            add event-location to {testregion::loc::*}
            add "%event-block%" to {testregion::loc::block::*}
            wait 0.5 minutes
            arenareset()
Wo muss ich was ändern damit dies auf jeden Abgebauten block zutrifft? nicht auf alle gleichzeitig.
Bin über eine Lösung sehr Dankbar

//edit:
Ich habe momentan eine Lösung gefunden bin aber nicht sicher ob diese Performance Einbüsend ist:
Was hab ich geändert?

ich habe bei der Abfrage block break diese zeile Entfernt:
wait 0.5 minutes
Sodass nur die Funktion nach dem Abbau aufgerufen wird also so:
Code:
block break:
    "%region at event-block%" contains "testregion in world Myslaria"
    if "%region at block%" contains {@regionnames}:
        if "%type of event-block%" contains "ore":
            add event-location to {testregion::loc::*}
            add "%event-block%" to {testregion::loc::block::*}
#            wait 10 second
            arenareset()

Danach habe ich 2 Zeilen in der Funktion arenareset() hinzugefügt
Einmal unter:
Code:
loop [testregion::loc::*]
Folgendes Eingefügt
Code:
        wait 30 second
und eine If Abfrage eingefügt welche die Variable wieder leert
Diese sieht so aus:
Code:
        if block at {_lock} is {_block}:
            clear {testregion::*}
Diese Befindet sich unterhalb:
set block at {_loc} to {_block}

Für meine Ansicht her funktionierts aber ihr habt bestimmt noch eine Bessere Variante die wüsste ich gerne.
Danke.
 
Zuletzt bearbeitet:

Malfrador

Threadripper
Mitglied seit
16 Juni 2013
Beiträge
1.389
Diamanten
201
Minecraft
Malfrador
Ich weiß nicht wer dieses Tutorial gemacht hat, aber wenn man das so kompliziert macht kann man auch einfach gleich Java nutzen.

Das ganze in sechs Zeilen:
Code:
on block break:
   "%regions at event-block%" contains  "testregion in world Myslaria"
    event-block is any ore
    set {_tmp} to type of event-block
    wait 30 seconds
    set event-block to {_tmp}
Ich sehe keinen Grund, die Blöcke in einer Liste zu speichern. Geht ja nicht um tausende Blöcke gleichzeitig.*
Gibt leider keinen schöneren Weg für die Regionen als den Vergleich eines Strings. Ist seit Ewigkeiten mehr oder weniger verbuggt.
An sich sollte man das Vergleichen von Text aber immer vermeiden, denn es ist langsam.

Über das Tutorial kann ich mich allerdings noch endlos aufregen. Der nutzt ja für alles einen Textvergleich und den Unterschied zwischen einem Block & dem Typ eines Blockes hat er auch nicht verstanden. Ich würde dir empfehlen, andere Tutorials anzusehen, wenn das alles so ist - der hat kein Plan.

*
Skript macht es sich einfach und nutzt den BukkitScheduler, um Delays zu implementieren. Wenn der BukkitScheduler sich um mehrere tausende Tasks gleichzeitig kümmern muss, wird er traurig und der Server laggt eventuell. Ist im Zweifel bei so simplen Dingen selbst mit tausend Tasks kein Problem, aber es muss ja nicht sein. Wenn es aber wirklich nur um ein paar Erze geht, von denen vielleicht zur gleichen Zeit einige hundert auf Zurücksetzen warten, ist das absolut kein Performance-Problem und eine Liste die deutlich langsamere Lösung (inbesondere weil Skripts Listen auch nicht gerade flott sind).
 
Zuletzt bearbeitet:

Tregornad

Kuhfänger
Mitglied seit
29 März 2020
Beiträge
75
Diamanten
63
Ich weiß nicht wer dieses Tutorial gemacht hat, aber wenn man das so kompliziert macht kann man auch einfach gleich Java nutzen.

Das ganze in sechs Zeilen:
Code:
on block break:
   "%regions at event-block%" contains  "testregion in world Myslaria"
    event-block is any ore
    set {_tmp} to type of event-block
    wait 30 seconds
    set event-block to {_tmp}
Ich sehe keinen Grund, die Blöcke in einer Liste zu speichern. Geht ja nicht um tausende Blöcke gleichzeitig.*
Gibt leider keinen schöneren Weg für die Regionen als den Vergleich eines Strings. Ist seit Ewigkeiten mehr oder weniger verbuggt.
An sich sollte man das Vergleichen von Text aber immer vermeiden, denn es ist langsam.

Über das Tutorial kann ich mich allerdings noch endlos aufregen. Der nutzt ja für alles einen Textvergleich und den Unterschied zwischen einem Block & dem Typ eines Blockes hat er auch nicht verstanden. Ich würde dir empfehlen, andere Tutorials anzusehen, wenn das alles so ist - der hat kein Plan.

*
Skript macht es sich einfach und nutzt den BukkitScheduler, um Delays zu implementieren. Wenn der BukkitScheduler sich um mehrere tausende Tasks gleichzeitig kümmern muss, wird er traurig und der Server laggt eventuell. Ist im Zweifel bei so simplen Dingen selbst mit tausend Tasks kein Problem, aber es muss ja nicht sein. Wenn es aber wirklich nur um ein paar Erze geht, von denen vielleicht zur gleichen Zeit einige hundert auf Zurücksetzen warten, ist das absolut kein Performance-Problem und eine Liste die deutlich langsamere Lösung (inbesondere weil Skripts Listen auch nicht gerade flott sind).
Hmm ich danke dir für deine Rat und snippet ich werde es mal probieren ob es so funktioniert wie ich es wollte.
Nunja ich hab das Tutorial nur gefunden weil mir auf den Offiziellen DIscord Server dazu nicht wirklich geholfen wurde liegt vllt auch an meinen Mangel an Englisch deswegen Fand ich diese über die Youtube suche. und fand es für mich persönlich gut erklärt..

Wenn deine Version kürzer und genauso funktioniert kann ich diese ja dennoch nutzen das Problem ist aber dann das es irgendwann keine erze etc sind sondern irgendwann betriff es auch die forstwirtschaft. etc... deswegen die Methode mit dem textvergleich oder so es ist ja nicht so das meine Methode nicht funktioniert.
Sie ist halt für mich verständlich erklärt wurden im video :)

Ich werde mal eben deine Methode probieren mit einer anderen region :)
Aber erstmal danke falls du noch eine Andere Idee hast wie ich dies lösen kann bin ich dir sehr dankbar :)

@Malfrador Deine Methode funktioniert sogar besser als meine mit den vielen Sets etc naja ich lerne noch :)
 
Zuletzt bearbeitet:
Oben