Coding mit Java | Java-basierten APIs

  • Ersteller Ersteller ij9F_i0FaF-d9lrDSDDpDbfo
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
Weißt du auch zufällig wie der dann funktionieren soll
Nicht genau, aber sehr wahrscheinlich werden die scheduler in einer Liste gespeichert und jeden Server tick wird durch diese Liste iteriert und jeder einzelne scheduler ausgeführt, nachdem er soundso viele ticks übersprungen hat (seine repeat time). Wenn du willst könnte ich dir mal ein Code Beispiel dafür erstellen, wenn ich wieder an meinem pc bin.
 
Weißt du auch zufällig wie der dann funktionieren soll
Zufällig weiß Ich das. Da MineCraft nicht in Millisekunden läuft sondern in Ticks, wird zunächst dies vom Scheduler übersetzt. Außerdem wird er Synchron ausgeführt, heißt, andere Tasks können zur gleichen Zeit runnen. Mehr kann man da doch nicht sagen.


Zusätzlich natürlich der Beitrag von @5zig, wobei Ich mir bei der Iteration einer Liste nicht sicher bin, da dies mehr Performance ziehen würde.
 
1.8 ist bei mir so gut wie "bugfrei". Und laggen tut es auch überhaupt nicht. Hol dir OptiFine oder 1.8.1.

=> Ich habe mit der 1.8 keine Probleme.
Es ist auch an sich bugfrei, bloß die Serverversionen sind halt wichtig bei Minecraft. Vorerst sollte es bei 1.7 bleiben, meiner Meinung nach. Das mit '<' ist aber sehr nervig.
 
Zusätzlich natürlich der Beitrag von @5zig, wobei Ich mir bei der Iteration einer Liste nicht sicher bin, da dies mehr Performance ziehen würde.
Natürlich würde das etwas Performance ziehen, aber anders könnte ich mir das nicht wirklich vorstellen. Wenn die Scheduler wirklich im selben Thread laufen sollen, müssen sie ja irgendwie dort auch alle ausgeführt werden, wo man um eine Iteration nicht dran vorbei kommt.
Sind aber alles nur Vermutungen von mir, kann das nicht wirklich zu 100% bestätigen, zumal man ja keinen access auf die craftbukkit/spigot repositories mehr hat...


EDIT: ich hab total vergessen, dass ja neuerdings der Source Code mit spigot 1.8 mitgeliefert wird. Werd's mir mal gleich anschauen :)
 
Zuletzt bearbeitet:
Natürlich würde das etwas Performance ziehen, aber anders könnte ich mir das nicht wirklich vorstellen. Wenn die Scheduler wirklich im selben Thread laufen sollen, müssen sie ja irgendwie dort auch alle ausgeführt werden, wo man um eine Iteration nicht dran vorbei kommt.
Sind aber alles nur Vermutungen von mir, kann das nicht wirklich zu 100% bestätigen, zumal man ja keinen access auf die craftbukkit/spigot repositories mehr hat...
Es gibt nen Programm das hab ich aufn Rechner wo man einfach ne jar reinziehen muss und dann die dateien DECOMPILIERT mit packages und allem drum und dran angezeigt werden und das funktioniert auch mit der spigot jar
 
Es gibt nen Programm das hab ich aufn Rechner wo man einfach ne jar reinziehen muss und dann die dateien DECOMPILIERT mit packages und allem drum und dran angezeigt werden und das funktioniert auch mit der spigot jar
Mit JDGui kann man aber nicht nach Methoden etc. suchen :P
 
Zuletzt bearbeitet:
Es gibt nen Programm das hab ich aufn Rechner wo man einfach ne jar reinziehen muss und dann die dateien DECOMPILIERT mit packages und allem drum und dran angezeigt werden und das funktioniert auch mit der spigot jar
Ja , allerdings ist die Craftbukkit | Spigot.jar obfuscated und somit nicht verständlich zu lesen (Quelle: @Sheigutn). IntelliJ hat nen mitgelieferten Compiler.
 
Also, wie gesagt, der source code wird in Spigot 1.8 mitgeliefert.
Dort zu erkennen ist diese Methode in der 'CraftScheduler' Klasse: http://5zig.eu/p/PNGGUIKK (keine Werbung, nur mein eigenes Pastebin)
Diese wird jeden Tick ausgeführt und ist, wie man merkt, doch sehr verschachtelt und kompliziert aufgebaut.
Vereinfacht lässt sich dennoch sagen, dass die scheduler in ne liste gepackt werden, die im nächsten Tick ausgelesen/aus der Liste removed wird und sie dort dann ausgeführt werden. Anschließend scheint es, dass, wenn die scheduler öfter als ein mal ausgeführt werden sollen, sie wieder in die Liste hinzugefügt werden.
 
Ja , allerdings ist die Craftbukkit | Spigot.jar obfuscated und somit nicht verständlich zu lesen (Quelle: @Sheigutn). IntelliJ hat nen mitgelieferten Compiler.
Craftbukkit an sich ist nicht obfuscated (Beispiel, die CraftServer Klasse: http://5zig.eu/i/zWAHhPF). Das, was obfuscated ist, ist der NMS code, der ist aber selbst im Source-Code meines Wissens nach weitgehend noch obfuscated (zum Beispiel die Block-Klasse, die aus dem Minecraft Server dekompiliert wurde http://5zig.eu/i/dUM1qeo).
 
Zuletzt bearbeitet:
Hey (:
Ich will ein Hat-Plugin machen habe aber ein problem :(:
Wenn ich einem einen Block auf den Kopf setze (p.setHelmet(Istack)) kann er ihn ja wieder absetzen :( wie kann ich das beheben? :(
 
wie geht das genau genau? xD

o:
Nicht ganz :3
PHP:
@EventHandler
public void onInventoryClick( InventoryClickEvent ev )
{
    Player player = null; // Spieler definieren
       
    if( ev.getWhoClicked() instanceof Player ) // Eigentlich unnötig da es nur ein Spieler gewesen sein kann, aber ich geh gern auf Nummer sicher ;)
    {
        player = (Player) ev.getWhoClicked(); // Spieler casten
           
        if ( ev.getRawSlot() == 103 ) // Slot ID des Helm-Slots
        {
            if( !player.hasPermission( "helm.bewegen" ) ) // Wenn er NICHT die Permission "helm.bewegen" hat...
            {
                ev.setCancelled( true ); // Event canceln
            }
        }
    }
 }
 
Zuletzt bearbeitet:
  • Like
Reaktionen: TroubleCrafterHD
Nicht ganz :3
PHP:
@EventHandler
public void onInventoryClick( InventoryClickEvent ev )
{
    Player player = null; // Spieler definieren
      
    if( ev.getWhoClicked() instanceof Player ) // Eigentlich unnötig da es nur ein Spieler gewesen sein kann, aber ich geh gern auf Nummer sicher ;)
    {
        player = (Player) ev.getWhoClicked(); // Spieler casten
          
        if ( ev.getRawSlot() == 103 ) // Slot ID des Helm-Slots
        {
                if( !player.hasPermission( "helm.bewegen" ) ) // Wenn er NICHT die Permission "helm.bewegen" hat...
            {
                    ev.setCancelled( true ); // Event canceln
            }
        }
    }
}
Oh (: Danke :D bin net der beste xD <3
 
Hi dudes,
Ich habe das Problem, das jedes mal wenn ich mit diesem code einen Block mit dem Namen chatcolor.blue + "Zeitbombe" setzte einen Nullpointer in die Fresse geworfen bekomme :(



Von: Martin Bach
An: Martin Bach
Mo, 01.12.2014 17:03
lol

public static HashMap<Location, Integer> tbombs = new HashMap<Location, Integer>();



@EventHandler
public void onBlockPlace(BlockPlaceEvent ev){

Player p = ev.getPlayer();
Block b = ev.getBlock();
Location lb = b.getLocation();
World w = lb.getWorld();
ItemStack is = ev.getItemInHand();
String isn = is.getItemMeta().getDisplayName();

if(isn.equals(ChatColor.BLUE + "Zeitbombe")){

tbombs.put(lb, 1);


int time = 60;
}
}
 
Status
Für weitere Antworten geschlossen.

Soziale Medien

  • X
  • TikTok

Über uns

  • GommeHD.net ist einer der größten Minecraft-Server der Welt. Dir gefällt unser Server? Dann unterstütze uns durch einen Kauf im Shop!
  • Shop