ServerPlugin Schilder update

Dieses Thema im Forum "Programmierung" wurde erstellt von xXGamer_StyleXx, 18. Juli 2015.

  1. xXGamer_StyleXx
    Offline

    xXGamer_StyleXx

    Registriert seit:
    4. Mai 2015
    Beiträge:
    11
    Ich bin zurzeit dabei ein Skypvp Plugin zu programmieren und möchte einbauen das man sich für 15 Level 1 Netherstern kaufen kann und auch umgedreht. Das ganze soll über Schilder laufen.

    Code (Javascript):
    1. package eu.gmc.skypvp;
    2.  
    3. import org.bukkit.Material;
    4. import org.bukkit.block.Block;
    5. import org.bukkit.block.Sign;
    6. import org.bukkit.event.EventHandler;
    7. import org.bukkit.event.Listener;
    8. import org.bukkit.event.block.BlockPlaceEvent;
    9.  
    10.  
    11. public class BlockPlaceListener implements Listener {
    12.    
    13.     String line0 = "&b[SkyPvP]";
    14.     String line1 = "&6KAUFEN";
    15.     String line2 = "&41Netherstern";
    16.     String line3 = "&415XP";
    17.    
    18.    
    19.     @EventHandler
    20.     public void onPlace(BlockPlaceEvent e){
    21.        
    22.         Block b = e.getBlock();
    23.         Sign sign;
    24.        
    25.         if(b.getType() != Material.SIGN){
    26.             return;
    27.         }
    28.        
    29.         sign = (Sign) b;
    30.        
    31.         if(sign.getLine(0).equalsIgnoreCase("[kaufen]")){
    32.             sign.setLine(0, line0);
    33.             sign.setLine(1, line1);
    34.             sign.setLine(2, line2);
    35.             sign.setLine(3, line3);
    36.             sign.update();
    37.         }
    38.        
    39.         if(sign.getLine(0).equalsIgnoreCase("[verkaufen]")){
    40.            
    41.             line1 = "&6VERKAUFEN";
    42.             line2 = "&410XP";
    43.             line3 = "&41Netherstern";
    44.            
    45.             sign.setLine(0, line0);
    46.             sign.setLine(1, line1);
    47.             sign.setLine(2, line2);
    48.             sign.setLine(3, line3);
    49.             sign.update();
    50.         }
    51.        
    52.        
    53.        
    54.     }
    55.  
    56. }
    57.  
    Wenn ich jetzt jedoch ein Schild platziere wo in der 1. Zeile [kaufen] steht wird dieses nicht geupdatet und funktioniert dadurch nicht(Da in einer anderen Klasse die 2. Zeile abgefragt wird). Die Frage ist nun, was muss ich tun das dieses Schild geupdatet wird und der Text auch angezeigt wird.
     
    #1
  2. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Du müsstest das SignChangeEvent benutzen - Das ist der Moment, in dem Text auf das Schild geschrieben wurde. Den Text fängst du dann ab und veränderst ihn.
     
    #2
  3. LoganBwDE
    Offline

    LoganBwDE

    Registriert seit:
    26. November 2014
    Beiträge:
    184
    Ort:
    Abtsgmünd
    Minecraft:
    LoganBwDE
    Dazu ein kleiner Beißspiel-Code ;)
    Code (Text):
    1.  
    2. @EventHandler
    3.     public void onSignCreate(SignChangeEvent event)
    4.     {
    5.       Player p = event.getPlayer();
    6.       Sign schild = (Sign)event.getBlock().getState();
    7.       if (event.getLine(0).equalsIgnoreCase("[kaufen]"))
    8.       {
    9.            //hier dein Code, der die Zeilen setzt ;)
    10.       }
    11.     }
    12.  
     
    #3
  4. xXGamer_StyleXx
    Offline

    xXGamer_StyleXx

    Registriert seit:
    4. Mai 2015
    Beiträge:
    11
    werde es gleich mal testen wenn es wirklich daran liegt ist es ja ein verdammt peinlicher Fehler xD
     
    #4
  5. xXGamer_StyleXx
    Offline

    xXGamer_StyleXx

    Registriert seit:
    4. Mai 2015
    Beiträge:
    11
    Leider funktioniert das ganze immer noch nicht mein Aktueller Code:

    Code ( (Unknown Language)):
    1. package eu.gmc.skypvp;
    2.  
    3. import org.bukkit.block.Sign;
    4. import org.bukkit.event.EventHandler;
    5. import org.bukkit.event.Listener;
    6. import org.bukkit.event.block.SignChangeEvent;
    7.  
    8. public class SignChangeListener implements Listener {
    9.    
    10.    
    11.     String line0 = "&b[SkyPvP]";
    12.     String line1 = "&6KAUFEN";
    13.     String line2 = "&41Netherstern";
    14.     String line3 = "&415XP";
    15.    
    16.     @EventHandler
    17.     public void onChange(SignChangeEvent e){
    18.        
    19.         Sign sign = (Sign) e.getBlock().getState();
    20.        
    21.         if(sign.getLine(0).contentEquals("[kaufen]")){
    22.             sign.setLine(0, line0);
    23.             sign.setLine(1, line1);
    24.             sign.setLine(2, line2);
    25.             sign.setLine(3, line3);
    26.             sign.update();
    27.         }
    28.        
    29.         if(sign.getLine(0).equalsIgnoreCase("[verkaufen]")){
    30.            
    31.             line1 = "&6VERKAUFEN";
    32.             line2 = "&410XP";
    33.             line3 = "&41Netherstern";
    34.            
    35.             sign.setLine(0, line0);
    36.             sign.setLine(1, line1);
    37.             sign.setLine(2, line2);
    38.             sign.setLine(3, line3);
    39.             sign.update();
    40.         }
    41.        
    42.     }
    43.  
    44. }
    45.  
     
    #5
  6. LoganBwDE
    Offline

    LoganBwDE

    Registriert seit:
    26. November 2014
    Beiträge:
    184
    Ort:
    Abtsgmünd
    Minecraft:
    LoganBwDE
    Die Abfrage sowie das Setzen muss mit dem event (hier e) gemacht werden.
    Code (Text):
    1.  
    2. if (e.getLine(0).equalsIgnoreCase("[kaufen]"))
    3. {
    4.             e.setLine(0, line0);
    5.             e.setLine(1, line1);
    6.             e.setLine(2, line2);
    7.             e.setLine(3, line3);
    8.             sign.update(true);
    9. }
    10.  
    EDIT: Problem wird auch sein, wenn du ein "verkaufen" Schild erstellt hast, so kannst du kein "kaufen" Schild mehr erstellen, da die Werte oben nur definiert werden für kaufen, jedoch beim SignChangeEvent mit gesetzt werden müssen oder so, dass diese dann halt geändert werden wie bei "verkaufen".
     
    #6
  7. xXGamer_StyleXx
    Offline

    xXGamer_StyleXx

    Registriert seit:
    4. Mai 2015
    Beiträge:
    11
    Jetzt funktioniert alles :) Danke für die gute Hilfe und habe das mit dem verkaufen Schild gefixxt :D
     
    #7