Coding mit Java | Java-basierten APIs

  • Ersteller Ersteller ij9F_i0FaF-d9lrDSDDpDbfo
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
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
 
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
Code:
for(Player pl : Bukkit.getOnlinePlayers()) {
	if(pl.getLocation().distance(deineLocation)  <= maximaleDistanzAlsDoubleVariable && pl.getLocation().getWorld().equals(deineLocation.getWorld()) {
		pl.setHealth(20.0);
	}
}
Habs nicht getestet, müsste aber funktionieren.
 
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

Erstell dir eine Objektreferenz von dieser abgespeckten Version einer meiner Klassen mit dem Mittelpunkt(Location) und dem Radius(Ganzzahl).

Code:
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;
	
	}

}

Ich kann dir jetzt spontan zwei Möglichkeiten Vorschlagen:

1. Einmaliges Heilen beim Betreten des Bereiches
Code:
//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());

	}

}

2. Regeneration über Zeit
Code:
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);
 
Zuletzt bearbeitet von einem Moderator:
Code:
for(Player pl : Bukkit.getOnlinePlayers()) {
	if(pl.getLocation().distance(deineLocation)  <= maximaleDistanzAlsDoubleVariable && pl.getLocation().getWorld().equals(deineLocation.getWorld()) {
		pl.setHealth(20.0);
	}
}
Habs nicht getestet, müsste aber funktionieren.

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 ;)
 
  • Like
Reaktionen: riggahCraft
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 ;)
Ich meinte den danach! :)
 
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
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.

MfG,
Galaone
 
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
Code:
@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);
	}
So würde ich es machen, keine Ahnung ob es funktioniert...
 
Wer natürlich sehr geiler Dorsch wenn das event auf die Explosion anspringt. Außerdem: sehr gute idee! Danke!

lg Sandwich[emoji106]
 
  • Like
Reaktionen: riggahCraft
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

So erstellst du die Explosion.
Code:
//2. Parameter ist die Stärke, 4f = TnT
world.createExplosion(location, 4f);

Die Methode createExplosion ruft das Event ohne Entity auf, d.h e.getEntity() gibt null zurück, darauf musst du achten ;)
So sicherst du die Glasblöcke im Explosionsradius:
Code:
	  @EventHandler
	  public void onExplode(EntityExplodeEvent e) {

		  Iterator<Block> it = e.blockList().iterator();
	 
		  while(it.hasNext()) {
		 
			  if(it.next().getType() == Material.GLASS) it.remove();
		 
		  }

	  }

So würde ich es machen, keine Ahnung ob es funktioniert...
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.
 
  • Like
Reaktionen: riggahCraft
Ok. Das event springt darauf an. Jut das probier ich aus. Danke![emoji38]
 
HI :)
Ich habe ein Nick-Plugin für den Server meines Freundes geschrieben :)
Allerdings habe ich versucht eine Permission einzubauen aber , wenn ich auf den server als Spieler gehen also ohne OP geht es trozdem :(. Vllt habe ich ja etwas flash gemacht :/. Bitte helft mir :*

Code (ohne Main-Class usw ;) )

package me.Trouble.HD;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.kitteh.tag.TagAPI;

public class Commands implements CommandExecutor {

alle plugin;
String prefix;

public Commands(alle plugin) {
this.plugin = plugin;
this.prefix = alle.prefix;
plugin.getCommand("name").setExecutor(this);
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

Player p = (Player)sender;

if(cmd.getName().equalsIgnoreCase("name")) {
if(p.hasPermission("changenick.change"))
if(args.length == 0) {
p.sendMessage(prefix + "§c§oBitte gebe den gewünschten Namen ein!");
return true;
}else{
p.sendMessage(prefix + "§c§oDir fehlt die Permission: changenick.change");
}
if(args.length == 1) {
if(p.hasPermission("changenick.change"))
for(Player all : Bukkit.getOnlinePlayers())
if(all.equals(args[0])) {
p.sendMessage(prefix + "§c§oDieser Name existiert bereits auf diesem Server! Wähle einen anderen!");
return true;
}else{
p.sendMessage(prefix + "§c§oDir fehlt die Permission: changenick.change");
}
if(p.hasPermission("changenick.change"))
p.setDisplayName(args[0]);
p.setPlayerListName(args[0]);
TagAPI.refreshPlayer(p);
p.sendMessage(prefix + "§6Dein Name lautet nun:");
p.sendMessage(prefix + "§a" + args[0] + "§a.");
return true;

}else{
p.sendMessage(prefix + "§c§oDir fehlt die Permission: changenick.change");
}
if(args.length > 1) {
if(p.hasPermission("changenick.change"))
p.sendMessage(prefix + "§c§oBitte gebe den gewünschten Namen ein!");
return true;

}else{
p.sendMessage(prefix + "§c§oDir fehlt die Permission: changenick.change");

}

}
return false;
}
}
 
Status
Für weitere Antworten geschlossen.

Soziale Medien

  • X
  • TikTok

Über uns

  • GommeHD.net ist einer der größten Minecraft-Server der Welt. Dir gefällt unser Server? Dann unterstütze uns durch einen Kauf im Shop!
  • Shop