T
TroubleCrafterHD
Unregistriert
Danke!!@TroubleCrafterHD
ItemStack, Inv getten, Item hinzufügen
Danke!!@TroubleCrafterHD
ItemStack, Inv getten, Item hinzufügen
Wie macht man einen Radius wenn man eine location hat. Also ich möchte das jeder der sich in einem gewissen Bereich befindet geheilt wird, also mit einer Location. Wie geht das?
MGF
elimenator1999
for(Player pl : Bukkit.getOnlinePlayers()) {
if(pl.getLocation().distance(deineLocation) <= maximaleDistanzAlsDoubleVariable && pl.getLocation().getWorld().equals(deineLocation.getWorld()) {
pl.setHealth(20.0);
}
}
Wie macht man einen Radius wenn man eine location hat. Also ich möchte das jeder der sich in einem gewissen Bereich befindet geheilt wird, also mit einer Location. Wie geht das?
MGF
elimenator1999
public class SphereRegion {
private Location center;
private int radius;
public SphereRegion(Location center, int radius) {
this.center = center;
this.radius = radius;
}
public boolean isInside(Location loc) {
if(loc.getWorld().getName() != center.getWorld().getName() || loc.getBlock().getLocation().distance(center.getBlock().getLocation()) > this.radius) return false;
return true;
}
public Location getCenter() {
return this.center;
}
public int getRadius() {
return this.radius;
}
public void setCenter(Location center) {
this.center = center;
}
public void setRadius(int radius) {
this.radius = radius;
}
}
//Du musst der Variable natürlich einen Wert zuweisen.
SphereRegion r;
@EventHandler
public void onEnterHealRegion(PlayerMoveEvent e) {
if(r != null && !e.getFrom().getBlock().getLocation().equals(e.getTo().getBlock().getLocation())) {
Player p = e.getPlayer();
if(r.isInside(e.getTo()) && !r.isInside(e.getFrom())) p.setHealth(p.getMaxHealth());
}
}
Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() {
@Override
public void run() {
Iterator<? extends Player> it = Bukkit.getOnlinePlayers().iterator();
while(it.hasNext()) {
Player p = it.next();
if(r.isInside(p.getLocation()) && p.getHealth() < p.getMaxHealth()) p.setHealth(p.getHealth() + 1);
}
}
}, 0, 20);
Die setzt du nicht per Plugin sondern in-Game bzw. auf der Map mit WorldEdit / WorldGuard. Es ist halt die einfachere, aber weniger effiziente Methode.@galaone ich hab es nur überflogen, aber wo setzt du die Regionen um den Spieler?![]()
Habs nicht getestet, müsste aber funktionieren.Code:for(Player pl : Bukkit.getOnlinePlayers()) { if(pl.getLocation().distance(deineLocation) <= maximaleDistanzAlsDoubleVariable && pl.getLocation().getWorld().equals(deineLocation.getWorld()) { pl.setHealth(20.0); } }
Ich meinte den danach!Ich finde diesen Code garnicht kompliziert.
Ich würde mich trotzdem als Anfänger bezeichnen :/
Das ist halt die leicht verstrickte Form von mehreren einfachen Codeschnipseln.
Nach meinem Wissen sollte der obige Code auch einwandfrei funktionieren.
So würde ich das jedenfalls machen![]()
Vom Ablauf her, würde ich per .createExplosion eine Explosion erstellen, davor aber erst nach @riggahCrafter s Methode , in einem Umkreis alle Grasblöcke mit .setType auf Obisidan setzten, die Explosion erschaffen und dann wieder auf Gras setzten. Da das ganze schnell abläuft, wird der Spieler davon herzlich wenig mitbekommen.Tach Leute,
Ich bin neu in der community und habe eine Frage zu diesem Thread:
Folgendes Problem:
Ich will eine explosion kreieren. Die alles außer glassblöcken zerlegt. Diese sollte möglichst fett sein.
Aber ich habe bisher nur eine normale große tnt explosion via
EntityExplodeEvent auf diese eigen schaften gepolt bekommen. Vllt gibt es auch eine Methode einen blöck für explosionsschaden unempfindlich zu machen.
Wie auch immer. Ich stehe auf dem Schlauch.
Hilfe!
lg Sandwich
Tach Leute,
Ich bin neu in der community und habe eine Frage zu diesem Thread:
Folgendes Problem:
Ich will eine explosion kreieren. Die alles außer glassblöcken zerlegt. Diese sollte möglichst fett sein.
Aber ich habe bisher nur eine normale große tnt explosion via
EntityExplodeEvent auf diese eigen schaften gepolt bekommen. Vllt gibt es auch eine Methode einen blöck für explosionsschaden unempfindlich zu machen.
Wie auch immer. Ich stehe auf dem Schlauch.
Hilfe!
lg Sandwich
@EventHandler
public void onExplode(EntityExplodeEvent ev) {
List<Block> newList = ev.blockList();
for(Block block : newList)
{
if(block.getType().equals(Material.GLASS))
{
newList.remove(block);
}
}
ev.setCancelled(true);
EntityExplodeEvent event = new EntityExplodeEvent(ev.getEntity(), ev.getLocation(), newList, ev.getYield());
Bukkit.getPluginManager().callEvent(event);
}
Tach Leute,
Ich bin neu in der community und habe eine Frage zu diesem Thread:
Folgendes Problem:
Ich will eine explosion kreieren. Die alles außer glassblöcken zerlegt. Diese sollte möglichst fett sein.
Aber ich habe bisher nur eine normale große tnt explosion via
EntityExplodeEvent auf diese eigen schaften gepolt bekommen. Vllt gibt es auch eine Methode einen blöck für explosionsschaden unempfindlich zu machen.
Wie auch immer. Ich stehe auf dem Schlauch.
Hilfe!
lg Sandwich
//2. Parameter ist die Stärke, 4f = TnT
world.createExplosion(location, 4f);
@EventHandler
public void onExplode(EntityExplodeEvent e) {
Iterator<Block> it = e.blockList().iterator();
while(it.hasNext()) {
if(it.next().getType() == Material.GLASS) it.remove();
}
}
Wenn du das selbe Event im Event aufrufst wird die Methode rekursiv und setzt sich ins unendliche fort, da sie sich immer wieder selbst aufruft.So würde ich es machen, keine Ahnung ob es funktioniert...
Ups, daran hab ich nicht gedachtWenn du das selbe Event im Event aufrufst wird die Methode rekursiv und setzt sich ins unendliche fort, da sie sich immer wieder selbst aufruft.