Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Minecraft
You last visited: Today at 17:43

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Minecraft Java Plugin Block neu Spawnen

Discussion on Minecraft Java Plugin Block neu Spawnen within the Minecraft forum part of the Other Online Games category.

Reply
 
Old   #1
 
nawiat100's Avatar
 
elite*gold: 0
Join Date: Jan 2014
Posts: 60
Received Thanks: 2
Minecraft Java Plugin Block neu Spawnen

Hey Leute ^^

Mal was einfaches diesmal, aber ich stehe vor einer Wand iwi .

Ich frage unten durch ein Event ab welcher Block zerstört wurde, dann noch wo genau er stand. Danach soll er "replaced" werden, also genau dort wo der alte war neu Spawnen.

geht nur iwi noch net XD jemand ne Idee? wenn net ist auch nich schlimm

bei "b.setTypeID" sagt er:

"The method setTypeID(float, float, float, int) is undefined for the type Block"

Danke
Nawiat100
nawiat100 is offline  
Old 01/31/2014, 17:03   #2
Moderator


 
elite*gold: 558
Join Date: Feb 2010
Posts: 6,546
Received Thanks: 1,418
Wie wäre es denn mit "b.setTypeID(19);"?
Die eigenen Koordinaten kennt der Block doch wohl und deshalb wird er die auch kaum als Parameter erwarten.



Edit:
Noch besser wäre "b.setType(org.bukkit.Material.SPONGE);"
ComputerBaer is offline  
Old 01/31/2014, 17:07   #3
 
nawiat100's Avatar
 
elite*gold: 0
Join Date: Jan 2014
Posts: 60
Received Thanks: 2
naja nur ist der block dann einfach weg XD er wird nicht erneut danach gespawnt! deswegen wollte ich die Kords. abspeichern und den block ne sekunde danach Spwanen ^^
nawiat100 is offline  
Old 01/31/2014, 17:15   #4
Administrator
 
lordsill's Avatar
 
elite*gold: 26516
Join Date: May 2011
Posts: 21,005
Received Thanks: 2,352
zum Beispiel so:

Code:
@EventHandler
public void onBreak(BlockBreakEvent event)
{
  final Location loc = event.getBlock().getLocation();
  final Block block = event.getBlock();
  this.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
      @Override
      public void run() {
           Block b = loc.getBlock();
           b.setType(block.getType());
      }
    }, 20);
}
Die 20 ist der vorletzten Zeile sind die Ticks, bis der Block wieder "respawnen" soll.
20 Ticks = 1 Sekunde

# Enthält einen Fehler, den ich jetzt nicht nachkorregiere. Siehe für eine funktionierende Version einen Beitrag unter mir
lordsill is offline  
Thanks
1 User
Old 01/31/2014, 17:33   #5
Moderator


 
elite*gold: 558
Join Date: Feb 2010
Posts: 6,546
Received Thanks: 1,418
Da habe ich wohl gekonnt den wichtigsten Teil überlesen und mich nur auf die merkwürdige Verwendung von setTypeId konzentriert.

Ich denke bei lordsill ist noch ein kleiner Fehler drin und so ist es besser:
Code:
@EventHandler
public void onBreak(BlockBreakEvent event)
{
  final Location loc = event.getBlock().getLocation();
  final Material type = event.getBlock().getType();

  this.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
      @Override
      public void run() {
          Block b = loc.getBlock();
          b.setType(type);
      }
    }, 20);
}
Es macht eigentlich keinen Sinn sich den Typ des entfernten Blocks erst beim respawnen zu holen, weil der zu dem Zeitpunkt schon Luft ist und somit wäre der neue Block auch nur Luft.

Die 20 Ticks kannst du auch auf 1 reduzieren, wenn es nicht nach einer Sekunde sondern imgrunde sofort geschehen soll.

Edit:
Wenn meine Vermutung richtig ist, sollte das auch so funktionieren:
Code:
@EventHandler
public void onBreak(BlockBreakEvent event)
{
  final Block b = event.getBlock();
  final Material type = b.getType();

  this.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
      @Override
      public void run() {
         b.setType(type);
      }
    }, 20);
}
Da kannst du die Lösung wählen, die dir besser gefällt. Ich denke diese Zweite sollte ein ganz klein wenig besser sein als die Erste.
ComputerBaer is offline  
Thanks
1 User
Old 01/31/2014, 21:39   #6
 
Howaner's Avatar
 
elite*gold: 132
Join Date: Apr 2010
Posts: 2,864
Received Thanks: 2,008
Warum einen Scheduler machen, wenn man das Event doch einfach canceln kann?
Code:
@EventHandler (priority = EventPriority.LOW)
public void onBlockBreak(BlockBreakEvent event) {
	if (event.isCancelled()) return;
	Block block = event.getBlock();
	block.setType(Material.SPONGE);
	event.setCancelled(true);
}
Howaner is offline  
Thanks
1 User
Old 02/01/2014, 21:44   #7
 
nawiat100's Avatar
 
elite*gold: 0
Join Date: Jan 2014
Posts: 60
Received Thanks: 2
ich werde alles bei gelegenheit mal durchtesten ^^

danke

sollte denke ich gehen, danke euch. aber er sagt bei getServer

"The method getServer() is undefined for the type Listen"

@Howaner

dein code ging ^^ danke dir
nawiat100 is offline  
Old 02/01/2014, 22:53   #8
Moderator


 
elite*gold: 558
Join Date: Feb 2010
Posts: 6,546
Received Thanks: 1,418
Quote:
Originally Posted by nawiat100 View Post
"The method getServer() is undefined for the type Listen"
Ja, das liegt daran das getServer zum JavaPlugin und nicht zum Listener gehört.

Wenn du eine Referenz auf dein Hauptklasse hast könntest du es so machen:
Code:
  plugin.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
Hierbei enthält "plugin" die Refenz auf deine Hauptklasse (extends JavaPlugin). Diese solltest du im Konstruktor des Listeners mit übergeben haben.

Wenn du keine Referenz hast könntest du es auch so machen:
Code:
  Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
Quote:
Originally Posted by nawiat100 View Post
@Howaner

dein code ging ^^ danke dir
Der Code von lordsill und mir funktioniert auch, wenn du die letze Korrektur gemacht hast. Diesen "Fehler" kannst du aber weder uns, noch wir dir, zuschreiben.

Es ist nicht ganz klar geworden was du tun willst, daher sind diese zwei unterscheidlichen Lösungen entstanden.

Die Lösung von lordsill und mir respawnt den Block, so wie du es beschrieben hattest, nach einer Sekunde wieder, wobei ich jetzt im nachhinein sagen muss, dass der Code nur ein von vielen Möglichkeiten abdeckt was ein Block alles sein kann. (So wären z.B. Wollefarben, Schildtexte oder Kisteninhalte nicht wiederhergestellt worden)

Die Lösung von Howaner bricht einfach das Event ab und verhindert damit, dass der Block überhaupt abgebaut wird. Das entspricht zwar nicht genau dem was du beschrieben hattest, ist dafür aber auch von den Fehlern der anderen Lösung befreit.
ComputerBaer is offline  
Reply

Tags
java developer, minecraf, minecraft plugin


Similar Threads Similar Threads
Minecraft Java Plugin Event...
01/31/2014 - Minecraft - 5 Replies
Na Moin :p gibt es eine möglichkeit in der "main.java" onCommands zu erstellen die dann auf eine andere ".java" wie z.B. "Events.java" oder so zugreifen? Code: public boolean onCommand(CommandSender sender, Command cmd, String label, String args) { if (sender instanceof Player) { Player player = (Player) sender;
[S] Java Minecraft Plugin Coder
05/11/2013 - elite*gold Trading - 1 Replies
Biete e*g und eventuell noch PSCs Ein einziges Plugin :) Mehr Infos über Skype
minecraft(java) plugin problem
10/27/2012 - General Coding - 0 Replies
Hallo , ich Habe gerade angefangen Java zu lernen um plugins und spaeter Spiele zumachen . Aber ich habe im moment ein Problem . Ich habe habe einen Haupt command /info und jetzt habe ich auch noch einen Untercommand /info admins gemacht , biss da hin geht ja alles aber nun wollte ich den 3 command /info ts3 machen habe ich auch , in Eclipse bekomme ich auch keinen Fehler aber im spiel wenn ich /info ts3 machen kommt nix also keine reaktion , meine class wo das drin ist : Klick sieht jemand...



All times are GMT +1. The time now is 17:44.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.