ServerPlugin Chat auslesen

Dieses Thema im Forum "Programmierung" wurde erstellt von Basti07711, 19. April 2014.

  1. Basti07711
    Offline

    Basti07711 Ehem. Teammitglied

    Registriert seit:
    2. August 2012
    Beiträge:
    714
    Ort:
    Hinter dir
    Minecraft:
    Basti07711
    Hi Leute,
    ich habe eine kleine Frage bezüglich den Events.
    Ich wollte es bei mir gerne so machen, dass wenn ich auf ein Item in meine virtuellen Inventory klicke, dass die nächste Nachricht, die der Player schreibt, als Wert/String angesehen wird. Wie mache ich das?
    Ich probiere und grübel schon lange, doch och komme auf keine Lösung...
     
    #1
  2. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Du kannst dir ja ne boolean machen "NextmessageisString" wenn das auf true steht beim ChatEvent halt auslesen :)
     
    #2
  3. Basti07711
    Offline

    Basti07711 Ehem. Teammitglied

    Registriert seit:
    2. August 2012
    Beiträge:
    714
    Ort:
    Hinter dir
    Minecraft:
    Basti07711
    ok ich versuche es :)
     
    #3
  4. #4
  5. Basti07711
    Offline

    Basti07711 Ehem. Teammitglied

    Registriert seit:
    2. August 2012
    Beiträge:
    714
    Ort:
    Hinter dir
    Minecraft:
    Basti07711
    Ok habe es mal mit manf's Vorschlag getestet.
    Klappt nur nicht ganz. Er spuckt mir diesen Error aus:
    Code (Text):
    1. [17:48:03] [Server thread/ERROR]: Could not pass event InventoryClickEvent to MyEss v0.1
    2. org.bukkit.event.EventException
    3.     at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:320) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    4.     at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    5.     at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:30) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    6.     at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:487) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    7.     at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:472) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    8.     at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java:1403) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    9.     at net.minecraft.server.v1_7_R1.PacketPlayInWindowClick.a(SourceFile:32) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    10.     at net.minecraft.server.v1_7_R1.PacketPlayInWindowClick.handle(SourceFile:10) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    11.     at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:147) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    12.     at net.minecraft.server.v1_7_R1.ServerConnection.c(ServerConnection.java:77) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    13.     at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:700) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    14.     at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:273) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    15.     at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:562) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    16.     at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:469) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    17.     at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    18. Caused by: java.lang.NullPointerException
    19.     at Items.Conversation.onClick(Conversation.java:45) ~[?:?]
    20.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0]
    21.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0]
    22.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0]
    23.     at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0]
    24.     at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:318) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
    25.     ... 14 more
    Eigentlich weiss ich nicht was ich in meine Listener falsch gemacht habe.
    Hier ist er mal:
    Code (Text):
    1. package Items;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.Location;
    5. import org.bukkit.Material;
    6. import org.bukkit.World;
    7. import org.bukkit.command.Command;
    8. import org.bukkit.command.CommandSender;
    9. import org.bukkit.conversations.Conversable;
    10. import org.bukkit.conversations.ConversationContext;
    11. import org.bukkit.conversations.ConversationFactory;
    12. import org.bukkit.conversations.FixedSetPrompt;
    13. import org.bukkit.conversations.Prompt;
    14. import org.bukkit.entity.Player;
    15. import org.bukkit.event.EventHandler;
    16. import org.bukkit.event.Listener;
    17. import org.bukkit.event.inventory.InventoryClickEvent;
    18. import org.bukkit.plugin.Plugin;
    19.  
    20. public class Conversation implements Listener{
    21.    
    22.     private ConversationFactory conversationFactory;
    23.  
    24.     public void ConvoPlugin() {
    25.         this.conversationFactory = new ConversationFactory((Plugin) this)
    26.                 .withModality(true)
    27.                 .withFirstPrompt((Prompt) new WhichMobPrompt())
    28.                 .withEscapeSequence("Aufhoeren")
    29.                 .withTimeout(10)
    30.                 .thatExcludesNonPlayersWithMessage("Go away evil console!");
    31.     }
    32.    
    33.     @EventHandler
    34.     public void onClick(InventoryClickEvent event){
    35.         Player p = (Player) event.getWhoClicked();
    36.        
    37.         if(event.getInventory().getName().equalsIgnoreCase("Admin-Befehle")){
    38.             event.setCancelled(true);
    39.            
    40.             if(p.hasPermission("MyEss.Teleport")){
    41.                
    42.                 if(event.getCurrentItem().getType() == Material.ENDER_PEARL){
    43.                       conversationFactory.buildConversation((Conversable)p).begin();
    44.                       event.getView().close();
    45.                 }
    46.             }
    47.         }
    48.     }
    49.  
    50.     public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
    51.         if (commandSender instanceof Conversable) {
    52.             conversationFactory.buildConversation((Conversable)commandSender).begin();
    53.             return true;
    54.         } else {
    55.             return false;
    56.         }
    57.     }
    58.  
    59.     private class WhichMobPrompt extends FixedSetPrompt{
    60.         public WhichMobPrompt() {
    61.             super();
    62.         }
    63.  
    64.         public String getPromptText(ConversationContext context) {
    65.             return "Welcher Spieler solls sein? " + formatFixedSet();
    66.         }
    67.  
    68.         @Override
    69.         protected Prompt acceptValidatedInput(ConversationContext context, String s) {
    70.             if (s.equals("Keiner")) {
    71.                 return Prompt.END_OF_CONVERSATION;
    72.             }
    73.             context.setSessionData("type", s);
    74.             Player p1 = Bukkit.getPlayerExact(s);
    75.             Player p2 = (Player) context.getForWhom();
    76.             double x = p1.getLocation().getX();
    77.             double y = p1.getLocation().getY();
    78.             double z = p1.getLocation().getZ();
    79.             World world = p1.getWorld();
    80.             Location loc = new Location(world, x, y, z);
    81.            
    82.             p2.teleport(loc);
    83.             return null;
    84.         }
    85.     }
    86. }
    Wisst ihr wo mein Fehler liegt?
     
    #5
  6. games6471
    Online

    games6471

    Du greifst auf ein Objekt zu, das null ist. Der Fehler liegt in deiner "Conversation" Klasse in der Zeile 45. Da kein Code nicht mehr dem Zeitpunkt des Testens entspricht, kann das nur ein Rätselraten werden. Ich vermute mal, dass "conversationFactory" null ist, das dies nicht im Konstruktor initialisiert wird, sondern in einer eigenen Methode und dann noch zusätzlich mit einem Fehler, der zu einer ClassCastException führt.

    Zusätzlich musst du nicht immer zwingend casten. Wenn der gegeben Typ bereits die Funktion implementiert, ist dies völlig unnötig.
     
    #6