ServerPlugin ItemClickEvent für ein Item Canceln!

Dieses Thema im Forum "Programmierung" wurde erstellt von CrackRudi, 2. Juli 2016.

  1. CrackRudi
    Offline

    CrackRudi

    Registriert seit:
    18. April 2016
    Beiträge:
    33
    Hey Liebes Forum ,

    ich bin grade dar bei ein Plugin für ein Freund zu coden! Ich will ein Item Canceln dass im Inventar eines Spielers ist , also dass man nur dieses eine Item im Inventar nicht mehr bewegen kann, aber alle anderen schon!

    Liebes Grüße,
    CrackRudi
     
    #1
  2. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Und was genau erwartest du jetzt von uns?
     
    #2
  3. Inkemann
    Offline

    Inkemann

    Registriert seit:
    3. Mai 2015
    Beiträge:
    341
    Ort:
    Aachen
    Minecraft:
    Inkemann
    Dann mach das doch, wenn du es willst. Oder fang an explizite Fragen zu etwas zu stellen und nicht zu sagen, was du willst, sondern was deine Probleme dabei sind bzw. was du schon hinbekommen hast.
     
    #3
    Verschraubt gefällt das.
  4. CrackRudi
    Offline

    CrackRudi

    Registriert seit:
    18. April 2016
    Beiträge:
    33
    Ich möchte, dass man im Player Inventar nur ein Item nicht bewegen kann aber alle anderen soll man bewegen können!

    könnt ihr mir helfen wie ich dass machen soll?
     
    #4
  5. Inkemann
    Offline

    Inkemann

    Registriert seit:
    3. Mai 2015
    Beiträge:
    341
    Ort:
    Aachen
    Minecraft:
    Inkemann
    Das InventoryClickEvent abhören, schauen ob das passiert ist was du möchtest und es dann abbrechen.
     
    #5
  6. CrackRudi
    Offline

    CrackRudi

    Registriert seit:
    18. April 2016
    Beiträge:
    33
    @SuppressWarnings("deprecation")
    @EventHandler
    public void invClick(InventoryClickEvent e) {
    Player p = (Player )e.getWhoClicked();
    if(e.getSlot() == 4) {
    if(e.getCurrentItem().getType() == (Material.WATCH)) {
    if(Main.ItemMove == false) {
    e.setCancelled(true);
    }

    }
    }
    p.updateInventory();
    }

    Dass geht bei mir nicht, dann kann ich nichts bewegen!
     
    #6
  7. Nightishaman
    Offline

    Nightishaman

    Registriert seit:
    3. Januar 2015
    Beiträge:
    51
    @CrackRudi ich hab ne super Idee für dich. Lerne erstmal Java und dann schau dir mal die Dokumentation der Bukkit/Spigot API. Danach kannst du das locker.
     
    #7
    jensIO gefällt das.
  8. BuildItFresh
    Offline

    BuildItFresh

    Registriert seit:
    9. Juli 2016
    Beiträge:
    2
    Lass das mal mit dem
    weg
     
    #8
  9. Drayke
    Offline

    Drayke

    Registriert seit:
    25. Juni 2015
    Beiträge:
    6
    Ort:
    public void
    Ich bin momentan ein wenig raus aus der BukkitAPI, aber gab es nicht bei diesem Event eine setResult() Methode? Ich würde diese der setCancelled() Methode vorziehen. Das wäre dann: e.setResult(Result.DENY); (Oder so ähnlich.. Deine IDE sollte schon das richtige finden für dich)
     
    #9
  10. UnityGaming
    Offline

    UnityGaming

    Registriert seit:
    25. Oktober 2015
    Beiträge:
    89
    Ort:
    Hohenfels
    Minecraft:
    FastFelix771
    Das mit den Results waren glaube ich die Login- und PreLogin Events.
    Mit dem jetzigen Code, wenn er überhaupt laufen täte, könnte keiner mehr eine Uhr nutzen...

    Füge dem NBT Tag des Items den schlüssel "pl_move" mit dem wert false hinzu - dann prüfe den Tag des Items beim Event.
    Null-checks nicht vergessen... der Slot und das Item könnten null sein, oder Material.AIR

    Ich verstehe nicht warum so viele an diesem ItemClickEvent versagen.. es ist eigentlich ganz simpel.

    https://github.com/FastFelix771/Tow...elix771/townywands/inventory/ItemWrapper.java
    Hier findest du ein paar Beispiele, wie man den NBT Tag eines Items manipulieren kann.
    Hab bissl geschlampert bei der Klasse, aber sie funktioniert tadellos von der 1.10 bis runter zur 1.6 (und vermutlich noch weiter).
     
    #10