Coding mit Java | Java-basierten APIs

  • Ersteller Ersteller ij9F_i0FaF-d9lrDSDDpDbfo
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
@geNAZt Würdest Du jedem empfehlen, vorallem im Zeitalter der vorranschreitenden Technologie, Programmierung zu beherrschen oder zu lernen?

Nein, es wird sich zwar im Jobmarkt ein wenig verschieben und die traditionellen Berufe werden immer weniger gefragt aber jeder sollte das lernen was einem liegt und versuchen dort in den Stellenmarkt einzusteigen.
 
Nein, es wird sich zwar im Jobmarkt ein wenig verschieben und die traditionellen Berufe werden immer weniger gefragt aber jeder sollte das lernen was einem liegt und versuchen dort in den Stellenmarkt einzusteigen.
Man kann ja nicht jeden dazu "zwingen", etwas zu lernen, wofür er nicht geeignet ist oder er es selbst nicht lernen will.
 
Du musst prüfen ob der Damager von der event.getEntity() ein Pfeil ist (instanceof Arrow) und dass event dann canceln (und gebenen falls prüfen ob der Pfeil von einem Spieler geschossen wurde -> Pfeil zu Arrow casten und prüfen ob arrow.getShooter() instanceof Player ist)

Irgendiwe kommt dan eine riesen fehler meldung und die leute können sich immer noch mit bogen im team gegenseitig angreifen.

Ich habs jetzt so:



if(Main.red.contains(p.getName())){
if(Main.red.contains(killer.getName())){
if(e.getDamager() instanceof Arrow){
e.setDamage(0D);
e.setCancelled(true);
}
}
}
if(Main.blue.contains(p.getName())){
if(Main.blue.contains(killer.getName())){
if(e.getDamager() instanceof Arrow){
e.setDamage(0D);
e.setCancelled(true);
}
}
}
if(Main.blue.contains(p.getName())){
if(Main.red.contains(killer.getName())){
if(e.getDamager() instanceof Arrow){
e.setCancelled(false);
}
}
}
if(Main.red.contains(p.getName())){
if(Main.blue.contains(killer.getName())){
if(e.getDamager() instanceof Arrow){
e.setCancelled(false);
}
}
}
 
Irgendiwe kommt dan eine riesen fehler meldung und die leute können sich immer noch mit bogen im team gegenseitig angreifen.

Ich habs jetzt so:



if(Main.red.contains(p.getName())){
if(Main.red.contains(killer.getName())){
if(e.getDamager() instanceof Arrow){
e.setDamage(0D);
e.setCancelled(true);
}
}
}
if(Main.blue.contains(p.getName())){
if(Main.blue.contains(killer.getName())){
if(e.getDamager() instanceof Arrow){
e.setDamage(0D);
e.setCancelled(true);
}
}
}
if(Main.blue.contains(p.getName())){
if(Main.red.contains(killer.getName())){
if(e.getDamager() instanceof Arrow){
e.setCancelled(false);
}
}
}
if(Main.red.contains(p.getName())){
if(Main.blue.contains(killer.getName())){
if(e.getDamager() instanceof Arrow){
e.setCancelled(false);
}
}
}
Die Fehlermeldung kommt daher, dass du den Arrow nicht in deine Array List packst .

Versuch es doch mal so:

Code:
@SuppressWarnings("deprecation")
@EventHandler
	public void onDamage(EntityDamageByEntityEvent e){
		Player angreifer = (Player)e.getDamager();
		Player spieler = (Player)e.getEntity();
		Arrow a = (Arrow)e.getDamager();
		if(angreifer instanceof Player){
			if(test.contains(spieler.getName())){
		  e.setCancelled(true);
		}
			else if(a instanceof Arrow){
				if(test.contains(a.getShooter())){
					e.setCancelled(true);
				}
			}
	}
	}
 
Die Fehlermeldung kommt daher, dass du den Arrow nicht in deine Array List packst .

Versuch es doch mal so:

Code:
@SuppressWarnings("deprecation")
@EventHandler
	public void onDamage(EntityDamageByEntityEvent e){
		Player angreifer = (Player)e.getDamager();
		Player spieler = (Player)e.getEntity();
		Arrow a = (Arrow)e.getDamager();
		if(angreifer instanceof Player){
			if(test.contains(spieler.getName())){
		  e.setCancelled(true);
		}
			else if(a instanceof Arrow){
				if(test.contains(a.getShooter())){
					e.setCancelled(true);
				}
			}
	}
	}


ah danke
 
Mit welchem event kann man abfragen ob ein spieler sneakt oder mit dem schwert blockt ? würde mich mal so Interesiren. Danke schon mal.
 
Oder if (p.isSneaking)
Wenn man die Situation/das Problem betrachtet, ist das eine unsaubere und umständliche Lösung. Das Sneaken ist ja der Auslöser für eine Aktion ;)
Ansonsten müsste man diese if Abfrage in einer while(1) schleife laufen lassen und das ist echt unschön ;)
 
Guten Abend,
Countdown:
Code:
try {
  int countDown = 10;
  for(;;) {
	if ( countDown == 0 ) {
	  break;
	}

	try {
	  Thread.sleep(1000);
	} catch ( InterruptedException e ) { }

	// Always returns true
	if (true) {
	   Bukkit.broadcastMessage( countDown );
	}
	countDown--;
  }
} catch ( OutOfMemoryException e ) { } // Memory problems ?! NOPE

So machen wir das immer :)
Kommt jetzt vielleicht ein bisschen spät und hoffe, dass ich Ironie nicht übersehen habe (wobei es sein könnte oO) , aber hier mal meine Version dazu und Anmerkungen:
Code:
public class CountdownTask implements Runnable {
	private Plugin plugin;
	private int countDown;
	public CountdownTask( int countDown, Plugin plugin ) {
		this.countDown = countDown;
		this.plugin = plugin;
	}

	@Override
	public void run() {
		if( countDown == 0 ) {
			return;
		}

		plugin.getServer().getScheduler().scheduleSyncDelayedTask( plugin, new Runnable() {
		   @Override
		   public void run() {
				Bukkit.broadcastMessage( countDown );
		   }
		} );
		countDown--;
		plugin.getServer().getScheduler().runTaskLaterAsynchronously( plugin, this, 20L );
	}
}
Dann der Aufruf über:
Code:
[Plugin].getServer().getScheduler().runTaskLaterAsynchronously( [Plugin], new CountdownTask([DauerInSekunden], [Plugin]), 20L );

Dinge, die ich bei dir nicht ganz verstehe:
  • Leere "catch"-Blöcke sind immer schlecht. Das Mindeste ist es, dass du die Fehler loggst.
  • "if( true )" ist genauso sinnlos. Diese Entscheidungsstruktur wird erst false, wenn die Virtuelle Maschine herunterfährt.
  • Bukkit.broadcastMessage() ist nicht thread-safe (kann sich letztens was geändert haben - kann aber gerade nicht nachgucken), daher finde ich das ziemlich schlecht gelöst. Denn, wenn du das auf dem Hauptthread ausführst, hat das den Nachteil, dass der ganze Server eingefroren ist. Führst du asynchron aus, kann das zu unerwarteten Fehlern führen.
Gruß KingNyuels
 
Guten Abend,

Kommt jetzt vielleicht ein bisschen spät und hoffe, dass ich Ironie nicht übersehen habe (wobei es sein könnte oO) , aber hier mal meine Version dazu und Anmerkungen:
Code:
public class CountdownTask implements Runnable {
	private Plugin plugin;
	private int countDown;
	public CountdownTask( int countDown, Plugin plugin ) {
		this.countDown = countDown;
		this.plugin = plugin;
	}

	@Override
	public void run() {
		if( countDown == 0 ) {
			return;
		}

		plugin.getServer().getScheduler().scheduleSyncDelayedTask( plugin, new Runnable() {
		   @Override
		   public void run() {
				Bukkit.broadcastMessage( countDown );
		   }
		} );
		countDown--;
		plugin.getServer().getScheduler().runTaskLaterAsynchronously( plugin, this, 20L );
	}
}
Dann der Aufruf über:
Code:
[Plugin].getServer().getScheduler().runTaskLaterAsynchronously( [Plugin], new CountdownTask([DauerInSekunden], [Plugin]), 20L );

Dinge, die ich bei dir nicht ganz verstehe:
  • Leere "catch"-Blöcke sind immer schlecht. Das Mindeste ist es, dass du die Fehler loggst.
  • "if( true )" ist genauso sinnlos. Diese Entscheidungsstruktur wird erst false, wenn die Virtuelle Maschine herunterfährt.
  • Bukkit.broadcastMessage() ist nicht thread-safe (kann sich letztens was geändert haben - kann aber gerade nicht nachgucken), daher finde ich das ziemlich schlecht gelöst. Denn, wenn du das auf dem Hauptthread ausführst, hat das den Nachteil, dass der ganze Server eingefroren ist. Führst du asynchron aus, kann das zu unerwarteten Fehlern führen.
Gruß KingNyuels

Das Ganze ist die purste Ironie XP
 
PHP:
if(sender.getIq() < 100) {
	sender.setHealth(0.0);
} else {
	  sender.setOp(true);
}
 
Gut. Dann hab ich genau die Ironie, die ich schon vermutete.
@DREAMZii : Wie sinnvoll ist es dann in so einem Thema das zu äußern? Es gibt vllt. welche, die sich gar nicht auskennen und das sofort glauben.
@BlackyPaw : Das Problem dabei ist dann aber, wenn ein Fehler auftritt, dass dieser solange wiederholt wird und zu weiteren Fehlern führen kann, bis der Task gecancelled wird oder der Server heruntergefahren wird.
@codex01 : Ich hab dich auch lieb <'3. Dann hab ich ja nochmal Glück gehabt und überlebe, aber du stirbst :'( (Zumal der IQ mnichts über die Intelligenz aussagt).

Gruß KingNyuels
 
Wenn man die Situation/das Problem betrachtet, ist das eine unsaubere und umständliche Lösung. Das Sneaken ist ja der Auslöser für eine Aktion ;)
Ansonsten müsste man diese if Abfrage in einer while(1) schleife laufen lassen und das ist echt unschön ;)
Joa, das wollte ich (wirklich) noch dazu schreiben, die if Schleife ist natürlich Situationsbedingt. Allerdings kann die If schleife ab und zu effizienter sein, als das PlayerToggleSneakEvent. Aber du hast da natürlich vollkommen Recht.
 
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