• 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!

Einige Fragen!

Masterfran99

Schafhirte
Gesperrt
Registriert
13 Oktober 2012
Beiträge
100
Diamanten
0
Hallo,

Ich habe da mal paar Fragen:

1. Wie kann ich aus der Klasse "run.class" den Scheduler in dieser Klasse stoppen "stop.class"??

2. Es wäre cool zu wissen wie man folgendes macht: Man benutzt einen Befehl es überprüft ob man einen Spieler anschaut oder nicht dann passiert etwas.

3. Welches Event damit jeder Spieler einen bestimmten Block nicht bauen kann.

4. Ist es möglich zu verhindern das ein Spieler im Kreativ Modus z.b. Bedrock aus dem Inventar nehmen kann?

5. Wie kann ich mit einen Befehl wo Argument 1 also /reiten <Name> den Spieler definieren?

Danke für jede hilfe!
Ich hab das Java Handbuch schon gelesenen aber ich teste lieber.
 

WaveMC

Minecrafter
Registriert
8 März 2014
Beiträge
2
Diamanten
0
Minecraft
lumagr99
Zu 3.

Du kannst dafür das Block Break Event verwenden, du musst nur abfragen welcher Block es ist und wenns der Block ist der nicht abgebaut werden soll das Event cancceln.

Beispiel:
Code:
	@EventHandler
	public void onBreak(BlockBreakEvent e){
		if(e.getBlock() == new ItemStack(Material.ANVIL)){
			
			e.setCancelled(true);
			e.getPlayer().sendMessage(this.plugin.prefix+"Don't destroy the map!");
		}
	}

Noch Fragen? Skype: lumagr2
 

Benutzer

Kuhfänger
Registriert
1 November 2012
Beiträge
56
Diamanten
0
zum 5ten Punkt:

Code:
if(cmd.getName().equalsIgnoreCase("XY")) {
   if(args.length >= 1) {
      if(Bukkit.getServer().getPlayer(args[0]) != null) {
          Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
      }
   }
}


MFG Benutzer
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
Zum 1.: Die Methode, die den Scheduler startet, gibt die ID des Schedulers zurück. Diese musst du dann nur süeichern.

Code:
final int id = getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
  public void run() {
    //Some code
    getServer().getScheduler().cancelTask(id);
  }, 20, 20);
-
Zum 2.: Ja, mit dem InventoryClickEvent:
Code:
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
  Player p = (Player) e.getWhoClicked();
  if (e.getCurrentItem().getType() == Material.BEDROCK && p.getGameMode() == GameMode.CREATIVE) {
   e.setCancelled(true);
   p.sendMessage("Du darfst im Creativemode kein Bedrock benutzen!");
  }
}
 
Zuletzt bearbeitet:

delta242

Kuhfänger
Registriert
28 Mai 2012
Beiträge
90
Diamanten
0
zu 5:
Kann man unterschiedlich machen. Du kannst bei jedem Inventar Anklicken überprüfen ob der Spieler Bedrock im Inventar hat und es dann ggf. entfernen. Du kannst auch in einem Scheduler einmal pro Tick/Sekunde das gleiche Überprüfen.
Am sinnvollsten wäre wenn du mit dem InventoryClickEvent arbeitest, dort kannst du alles dazu überprüfen.
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
Den Block, auf den ein Spieler schaut, bekommst du mit Player.getTargetBlock() (Deprecated), damit kannst du aber kein Entity bekommen.
@delta242: Habe ich bereits geschrieben. Und mit dem Scheduler jeden Tick jedes inventar zu durchsuchen, braucht viel zu viel Performance.

Wenn der Block nicht gesetzt werden darf, musts du das BlockPlaceEvent benutzen.
 
Zuletzt bearbeitet:

Masterfran99

Schafhirte
Gesperrt
Registriert
13 Oktober 2012
Beiträge
100
Diamanten
0
und nochwas gut das du da bist:
Code:
							MainClass.instance.scheduler = Bukkit.getScheduler().scheduleSyncRepeatingTask(this.plugin, new Runnable() {
								
								@Override
								public void run() {
									Random r = new Random();
									final int i = r.nextInt(8);
									if(i == 0){				
										w.dropItem(loc, new ItemStack(Material.CLAY_BRICK));
									}else if(i == 1){
										w.dropItem(loc, new ItemStack(Material.CLAY_BRICK));
									}else if(i == 2){	
										w.dropItem(loc, new ItemStack(Material.CLAY_BRICK));
									}else if(i == 3){
										w.dropItem(loc, new ItemStack(Material.IRON_INGOT));
									}else if(i == 4){	
										w.dropItem(loc, new ItemStack(Material.GOLD_INGOT));
									}else if(i == 5){	
										w.dropItem(loc, new ItemStack(Material.IRON_INGOT));
									}else if(i == 6){	
										w.dropItem(loc, new ItemStack(Material.CLAY_BRICK));
									}else if(i == 7){	
										w.dropItem(loc, new ItemStack(Material.CLAY_BRICK));
										}
								}
							}, 1L, 12L);

Das ist mein Scheduler nur was muss ich ändern das ich mit Klasse.<scheduler><stoppen> benutzen kann?
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
"Das ist mein Scheduler nur was muss ich ändern das ich mit Klasse.<scheduler><stoppen> benutzen kann?"
Noch einmal, aber bitte etwas verständlicher. :p

Außerdem sollte deine MainClass nicht MainClass, sondern so, wie dein Plugin heißt, heißen.
 

Masterfran99

Schafhirte
Gesperrt
Registriert
13 Oktober 2012
Beiträge
100
Diamanten
0
Ich habe da grade noch ein Problem gefunden:

Ich finde nix wie ich im BlockBreakEvent bunte Wolle definiere ich habe es mit DyeColor und new Item Stack aber es kann garkein ItemStack sein weil die Anzahl z.b. man kann ja nur 1 Block gleichzeitig abbauen.

Code:
	@EventHandler
	public void kacka(BlockBreakEvent e){
		Block b = e.getBlock();
		Player p = e.getPlayer();
		if(ArrayLists.Rush.contains(p)){
			if(b.getType().equals(Material.WOOL)){
    			Wool w = (Wool)b;
    			w.setColor(DyeColor.RED);
    			Wool wb = (Wool)b;
    			w.setColor(DyeColor.BLUE);
				if(ArrayLists.RushRed.contains(p)){
					if(b.getType().equals(w)){
					e.setCancelled(true);
					}
				}else if(ArrayLists.RushBlue.contains(p)){
					if(b.getType().equals(wb)){
						e.setCancelled(true);	
					}
				}

				
				
				
				
			}

Es kommt die Meldung das Wool w = (Wool)b; falsch ist :(

- - - Aktualisiert - - -

Warum wie mein Plugin heißen?
Also ich möchte mit einer anderen Klasse auf den Scheduler zugreifen also z.b. Scheduler ist in der Klasse Scheduler.class aber in der Klasse Ende.class möchte ich ihn stoppen.
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
Dann musst du die ID in einer Variable der Klasse speichern, aus der du den Scheduler stoppen willst oder aus der Klasse, mit der du den Scheduler stoppen willst auf die Variable der Klasse mit dem Scheduler zugreifen, in der die ID des Schedulers gespeichert ist.
 

Masterfran99

Schafhirte
Gesperrt
Registriert
13 Oktober 2012
Beiträge
100
Diamanten
0
Ok ich habe jetzt in der Klasse oben public static int schedulerr = 0;
Die Klasse heißt: DropListener
Wenn ich in einer anderen Klasse DropListener.schedulerr schreibe geht es zwar nur da schedulerr als rot unterstrichen wird und es nicht weiter geht also wie stoppe ich den?

danke schonmal
 

Masterfran99

Schafhirte
Gesperrt
Registriert
13 Oktober 2012
Beiträge
100
Diamanten
0
Danke klappt ich habe aber statt -1 einfach 0 genommen.
Nun brauche ich folgendes damit mein Minigame fertig ist ich versteh nicht wie ich bunte wolle definiere mit ItemStack gehts nicht mit Wool w = plaplapla gehts auch nicht.

Beim BlockBreakEvent soll etwas besonderes passieren wenn man bunte Wolle abbaut.
Und wenn man z.b. einen Befehl benutzt soll an einer bestimmten Stelle ein bunter Wolleblock entstehen nur leider klappts nicht D:

Code:
	    			Location loc = new Location(p.getWorld(), 830, 40, 349);
	    			Wool w = (Wool)loc.getBlock();
	    			w.setColor(DyeColor.RED);
Damit sollte doch dann an der Location ein Block gemacht werden.
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
-1 zeigt meistens an, dass es keinen Fehler gibt. In dem Fall wurde der Scheduler noch nicht gestartet. In der Methode, mit der du den Scheduler stoppst, wird überprüft, ob die Scheduler ID aus deiner Scheduler-Start-Klasse schon geändert, bzw. größer oder gleich 0 ist. Nur dann wird der Scheduler gestoppt, da du einen Scheduler nicht stoppen kannst, wenn dieser nicht gestartet wurde.

Zu deinem Wolleproblem:
Code:
Block block = loc.getBlock();
block.setType(Material.WOOL);
block.setData(DyeColor.RED.getData());
 

Masterfran99

Schafhirte
Gesperrt
Registriert
13 Oktober 2012
Beiträge
100
Diamanten
0
ok danke klappt nur bei dem mit den Bedrock in Inventaren wieso passiert nix im Kreativ INventar erst wenn ich auch die eigene Item Leiste etwas lege kommt die nachricht nur das item wird nicht zurück gesetzt es soll am besten zu 0 air oder so gemacht werden sobald man bedrock anklickt.
 

Masterfran99

Schafhirte
Gesperrt
Registriert
13 Oktober 2012
Beiträge
100
Diamanten
0
Noch etwas zu Economy/Vault
Code:
lore2.add(econ.getBalance(p.getName()));
add wird rot unterstrichen.
ich möchte es so haben das in der lore halt das geld des spielers steht aber nur für den spieler nicht öffentlich.
Wie mache ich das oder eher was muss ich ändern?
 
Oben