Enderchest

Status
Für weitere Antworten geschlossen.
Guten Tag,

ich habe ein Command Programmiert womit der Spieler in die Enderchest des anderen schauen kann. Nun er kann die Items einfach herausziehen. Wie kann ich das verhindern? Am besten mit einer Permission
wahrscheinlich gibst du ja dem inventar einen namen, wenn der spieler den command ausführt. angenommen, das inventar heißt "Truhe von args[0]"

Code:
@EventHandler
public void onClick(InventoryClickEvent e){
Player p = (Player)e.getWhoClicked;

if(!e.getClickedInventory().getName().equals("Truhe von " + p.getName())){
if(!p.hasPermission("chest.other")){
e.setCancelled(true);
}
}
}

bin mir aber nicht zu 100% sicher, ob das richtig ist. habs nämlich am handy geschrieben. die permission und den namen des inventorys kannst du natürlich ändern
 
Zuletzt bearbeitet:
wahrscheinlich gibst du ja dem inventar einen namen, wenn der spieler den command ausführt. angenommen, das inventar heißt "Truhe von args[0]"

Code:
@EventHandler
public void onClick(InventoryClickEvent e){
Player p = (Player)e.getWhoClicked;

if(!e.getClickedInventory().getName().equals("Truhe von " + p.getName())){
if(!p.hasPermission("chest.other")){
e.setCancelled(true);
}
}
}

bin mir aber nicht zu 100% sicher, ob das richtig ist. habs nämlich am handy geschrieben. die permission und den namen des inventorys kannst du natürlich ändern
Ich öffne die Enderchest heißt es ist kein selbstgemachtes Inventar wie wir wissen heißt der Displayname von der Enderchest

Ender Chest

nun wenn der Spieler NUR /ec machen würde und ich den Displayname canceln würde, würde der Spieler nix mehr in seine Enderchest legen/rausnehmen können. Man muss irgendwie abfragen ob das die Enderchest eines anderen Spielers ist und nicht seiner eigene.
 
Ich öffne die Enderchest heißt es ist kein selbstgemachtes Inventar wie wir wissen heißt der Displayname von der Enderchest

Ender Chest

nun wenn der Spieler NUR /ec machen würde und ich den Displayname canceln würde, würde der Spieler nix mehr in seine Enderchest legen/rausnehmen können. Man muss irgendwie abfragen ob das die Enderchest eines anderen Spielers ist und nicht seiner eigene.
jedoch kannst du den namen des inventars ändern. und wenn du den namen des inventars änderst, sollte es doch kein problem mehr sein, oder doch?

mach es doch so:
Code:
if(arg.length == 0){
Inventory inv = Bukkit.createInventory(null, InventoryType.ENDER_CHEST, "Deine Truhe");


}else if(arg.length == 1){
Player target = Bukkit.getPlayer(args[0]);

if(target != null){
Inventory inv = Bukkit.createInventory(null, InventoryType.ENDER_CHEST, "Truhe von " + t.getName());

}
}

und dann halt das InventoryClickEvent:
Code:
EventHandler
public void onClick(InventoryClickEvent e){
Player p = (Player)e.getWhoClicked;

if(!e.getClickedInventory().getName().equals("Deine Truhe")){
if(!p.hasPermission("chest.other")){
e.setCancelled(true);
}
}
}

ganz simpel
 
Zuletzt bearbeitet:
Der saubere Weg wäre wohl, vom Inventoryview das obere inventar zu nehmen und sich den InventoryHolder des Inventars anzusehen.
Was definitiv nicht reicht, ist nur das angeklickte Inventar zu überprüfen - schonmal etwas von Shift-Klicks gehört?
 
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