• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Schilder update

xXGamer_StyleXx

Minecrafter
Registriert
4 Mai 2015
Beiträge
11
Alter
27
Diamanten
0
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.

Javascript:
package eu.gmc.skypvp;

import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;


public class BlockPlaceListener implements Listener {
   
    String line0 = "&b[SkyPvP]";
    String line1 = "&6KAUFEN";
    String line2 = "&41Netherstern";
    String line3 = "&415XP";
   
   
    @EventHandler
    public void onPlace(BlockPlaceEvent e){
       
        Block b = e.getBlock();
        Sign sign;
       
        if(b.getType() != Material.SIGN){
            return;
        }
       
        sign = (Sign) b;
       
        if(sign.getLine(0).equalsIgnoreCase("[kaufen]")){
            sign.setLine(0, line0);
            sign.setLine(1, line1);
            sign.setLine(2, line2);
            sign.setLine(3, line3);
            sign.update();
        }
       
        if(sign.getLine(0).equalsIgnoreCase("[verkaufen]")){
           
            line1 = "&6VERKAUFEN";
            line2 = "&410XP";
            line3 = "&41Netherstern";
           
            sign.setLine(0, line0);
            sign.setLine(1, line1);
            sign.setLine(2, line2);
            sign.setLine(3, line3);
            sign.update();
        }
       
       
       
    }

}

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.
 

FelixKlauke

Erzengel
Ehem. Teammitglied
Registriert
5 Januar 2014
Beiträge
1.038
Diamanten
299
Minecraft
FelixKlauke
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.

Javascript:
package eu.gmc.skypvp;

import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;


public class BlockPlaceListener implements Listener {
  
    String line0 = "&b[SkyPvP]";
    String line1 = "&6KAUFEN";
    String line2 = "&41Netherstern";
    String line3 = "&415XP";
  
  
    @EventHandler
    public void onPlace(BlockPlaceEvent e){
      
        Block b = e.getBlock();
        Sign sign;
      
        if(b.getType() != Material.SIGN){
            return;
        }
      
        sign = (Sign) b;
      
        if(sign.getLine(0).equalsIgnoreCase("[kaufen]")){
            sign.setLine(0, line0);
            sign.setLine(1, line1);
            sign.setLine(2, line2);
            sign.setLine(3, line3);
            sign.update();
        }
      
        if(sign.getLine(0).equalsIgnoreCase("[verkaufen]")){
          
            line1 = "&6VERKAUFEN";
            line2 = "&410XP";
            line3 = "&41Netherstern";
          
            sign.setLine(0, line0);
            sign.setLine(1, line1);
            sign.setLine(2, line2);
            sign.setLine(3, line3);
            sign.update();
        }
      
      
      
    }

}

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.

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.
 

LoganBwDE

Miner
Registriert
26 November 2014
Beiträge
192
Diamanten
315
Minecraft
LoganBwDE
Dazu ein kleiner Beißspiel-Code ;)
Code:
@EventHandler
    public void onSignCreate(SignChangeEvent event)
    {
      Player p = event.getPlayer();
      Sign schild = (Sign)event.getBlock().getState();
      if (event.getLine(0).equalsIgnoreCase("[kaufen]"))
      {
           //hier dein Code, der die Zeilen setzt ;)
      }
    }
 

xXGamer_StyleXx

Minecrafter
Registriert
4 Mai 2015
Beiträge
11
Alter
27
Diamanten
0
Leider funktioniert das ganze immer noch nicht mein Aktueller Code:

Code:
package eu.gmc.skypvp;

import org.bukkit.block.Sign;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.SignChangeEvent;

public class SignChangeListener implements Listener {
   
   
    String line0 = "&b[SkyPvP]";
    String line1 = "&6KAUFEN";
    String line2 = "&41Netherstern";
    String line3 = "&415XP";
   
    @EventHandler
    public void onChange(SignChangeEvent e){
       
        Sign sign = (Sign) e.getBlock().getState();
       
        if(sign.getLine(0).contentEquals("[kaufen]")){
            sign.setLine(0, line0);
            sign.setLine(1, line1);
            sign.setLine(2, line2);
            sign.setLine(3, line3);
            sign.update();
        }
       
        if(sign.getLine(0).equalsIgnoreCase("[verkaufen]")){
           
            line1 = "&6VERKAUFEN";
            line2 = "&410XP";
            line3 = "&41Netherstern";
           
            sign.setLine(0, line0);
            sign.setLine(1, line1);
            sign.setLine(2, line2);
            sign.setLine(3, line3);
            sign.update();
        }
       
    }

}
 

LoganBwDE

Miner
Registriert
26 November 2014
Beiträge
192
Diamanten
315
Minecraft
LoganBwDE
Die Abfrage sowie das Setzen muss mit dem event (hier e) gemacht werden.
Code:
if (e.getLine(0).equalsIgnoreCase("[kaufen]"))
{
            e.setLine(0, line0);
            e.setLine(1, line1);
            e.setLine(2, line2);
            e.setLine(3, line3);
            sign.update(true);
}

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".
 
Oben