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

Server crasht bei math.Random

To_Bii

Minecrafter
Registriert
27 Januar 2014
Beiträge
14
Diamanten
0
Hallo zusammen....

Ich hab da nen Problem mit nem eigenem Plugin...

Die stelle um die es geht ist folgende:
Code:
  private int getAttribut(boolean isArmor) {
		  int attribut = this.giveRandom(13);
		  while(!isArmor&&(attribut!=3||attribut<9)){
			attribut= this.giveRandom(13);  
		  }
		  while(isArmor&&(attribut==3||attribut>9)){
				attribut= this.giveRandom(13);  
			  }
		  return attribut;
		 }
	 private int giveRandom(int scale){
		 return (int) (Math.random() * scale + 1);
	 }

Der Fehler der nach dem Servercrash kommt ist folgender:
Code:
[12:28:48 ERROR]: The server has stopped responding!
[12:28:48 ERROR]: Please report this to http://www.spigotmc.org/
[12:28:48 ERROR]: Be sure to include ALL relevant console errors and Minecraft crash reports
[12:28:48 ERROR]: Spigot version: git-Spigot-1360 (MC: 1.7.5)
[12:28:48 ERROR]: ------------------------------
[12:28:48 ERROR]: Server thread dump (Look for plugins here before reporting to Spigot!):
[12:28:48 ERROR]: ------------------------------
[12:28:48 ERROR]: Current Thread: Server thread
[12:28:48 ERROR]:       PID: 13 | Suspended: false | Native: false | State: RUNNABLE
[12:28:48 ERROR]:       Stack:
[12:28:48 ERROR]:               java.util.Random.next(Random.java:189)
[12:28:48 ERROR]:               java.util.Random.nextDouble(Random.java:444)
[12:28:48 ERROR]:               java.lang.Math.random(Math.java:716)
[12:28:48 ERROR]:               com.faldoria.rpg.item.ItemCalculator.giveRandom(ItemCalculator.java:748)
[12:28:48 ERROR]:               com.faldoria.rpg.item.ItemCalculator.getAttribut(ItemCalculator.java:733)
[12:28:48 ERROR]:               com.faldoria.rpg.item.ItemCalculator.getAttribute(ItemCalculator.java:722)
[12:28:48 ERROR]:               com.faldoria.rpg.item.ItemCalculator.giveItemAttributes(ItemCalculator.java:196)
[12:28:48 ERROR]:               com.faldoria.rpg.item.ItemCalculator.giveDrop(ItemCalculator.java:752)
[12:28:48 ERROR]:               com.faldoria.rpg.listener.RPGListener.onKillEntity(RPGListener.java:165)
[12:28:48 ERROR]:               sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[12:28:48 ERROR]:               sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[12:28:48 ERROR]:               sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[12:28:48 ERROR]:               java.lang.reflect.Method.invoke(Method.java:601)
[12:28:48 ERROR]:               org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292)
[12:28:48 ERROR]:               org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
[12:28:48 ERROR]:               org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:30)
[12:28:48 ERROR]:               org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502)
[12:28:48 ERROR]:               org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487)
[12:28:48 ERROR]:               org.bukkit.craftbukkit.v1_7_R2.event.CraftEventFactory.callEntityDeathEvent(CraftEventFactory.java:349)
[12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.EntityChicken.dropDeathLoot(EntityChicken.java:106)
[12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.EntityLiving.die(EntityLiving.java:791)
[12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.EntityLiving.damageEntity(EntityLiving.java:739)
[12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.EntityAnimal.damageEntity(SourceFile:145)
[12:28:48 ERROR]:               org.bukkit.craftbukkit.v1_7_R2.entity.CraftLivingEntity.damage(CraftLivingEntity.java:203)
[12:28:48 ERROR]:               org.bukkit.craftbukkit.v1_7_R2.entity.CraftLivingEntity.damage(CraftLivingEntity.java:188)
[12:28:48 ERROR]:               com.faldoria.rpg.skills.skills.DanceOfDagger.use(DanceOfDagger.java:40)
[12:28:48 ERROR]:               com.faldoria.rpg.skills.types.ActiveSkill.handleU(ActiveSkill.java:131)
[12:28:48 ERROR]:               com.faldoria.rpg.player.PlayerObject.handleSlotUse(PlayerObject.java:123)
[12:28:48 ERROR]:               com.faldoria.rpg.listener.RPGListener.onPlayerInteractEvent(RPGListener.java:54)
[12:28:48 ERROR]:               sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
[12:28:48 ERROR]:               sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[12:28:48 ERROR]:               java.lang.reflect.Method.invoke(Method.java:601)
[12:28:48 ERROR]:               org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292)
[12:28:48 ERROR]:               org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
[12:28:48 ERROR]:               org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:30)
[12:28:48 ERROR]:               org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502)
[12:28:48 ERROR]:               org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487)
[12:28:48 ERROR]:               org.bukkit.craftbukkit.v1_7_R2.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:212)
[12:28:48 ERROR]:               org.bukkit.craftbukkit.v1_7_R2.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:182)
[12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.PlayerConnection.a(PlayerConnection.java:617)
[12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.PacketPlayInBlockPlace.a(SourceFile:60)
[12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.PacketPlayInBlockPlace.handle(SourceFile:9)
[12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.NetworkManager.a(NetworkManager.java:148)
[12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.ServerConnection.c(ServerConnection.java:77)
[12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.MinecraftServer.v(MinecraftServer.java:703)
[12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.DedicatedServer.v(DedicatedServer.java:273)
[12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.MinecraftServer.u(MinecraftServer.java:566)
[12:28:48 ERROR]:       Stack:
[12:28:48 ERROR]:               java.lang.Object.wait(Native Method)
[12:28:48 ERROR]:               java.lang.Object.wait(Object.java:503)
[12:28:48 ERROR]:               java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
[12:28:48 ERROR]: ------------------------------
[12:28:48 INFO]: Startup script './start.sh' does not exist! Stopping server.

Also es liegt an dieser Stelle...

hat jemand ne Ahnung warum der dort abschmiert?

grüße
 

skyshiny99

Redstoneengineer
Registriert
2 Oktober 2012
Beiträge
32
Diamanten
0
So, hab mir das nun angeschaut. Am giveRandom() liegts nicht!
Es geht eher um diesen netten Codeteil:

Code:
		  while(!isArmor&&(attribut!=3||attribut<9)){
			attribut= giveRandom(13);  
		  }

Trifft dementsprechend nur bei getAttribut(false) zu.

Genau genommen gehts da drum:
Code:
while(!isArmor ...)
isArmor wird natürlich nicht geändert, somit kann das nur in einer Endlosschleife resultieren. Gilt in der anderen while-Schleife genauso, hier ist isArmor nur true!

Das ist nun aber nicht das Einzige. Hier geht es weiter:
Code:
... (attribut!=3||attribut<9))
Solange das Attribut nicht 3 ist, wird die Schleife fortgesetzt. Wenn das Attribut aber auf 3 gesetzt ist, trifft die zweite Bedingung zu, da das Attribut unter der Zahl 9 ist. Resultat: Die nächste Endlosschleife^^

Wenn ich davon ausgehe, dass beide Bedingungen und nicht nur eine erfüllt sein sollen, ist es so richtig:

Code:
private int getAttribut(boolean isArmor) {
		int attribut = giveRandom(13);
		if (!isArmor) {
			while (attribut != 3 && attribut < 9) {
				attribut = giveRandom(13);
			}
		} else {
			while (attribut == 3 && attribut > 9) {
				attribut = giveRandom(13);
			}
		}
		return attribut;
	}

	private int giveRandom(int scale) {
		return (int) ((Math.random() * scale) + 1);
	}
 
Zuletzt bearbeitet:

ShareLock

Kuhfänger
Registriert
2 November 2011
Beiträge
66
Alter
58
Diamanten
0
return (int) (Math.random() * scale + 1);
return (int) ((Math.random() * scale) + 1);
Java unterscheidet keine Klammern, also ist dies äquivalent.

[Veralteter Inhalt entfernt]

Vielleicht liegts auch am "this"? Die Methode ist ja nicht statisch, vielleicht verwechsle ich hier aber auch etwas.
methode() wäre äquivalent zu this.methode();

Wahrscheinlich handelt es sich hier um einen Stackoverflow. Du generierst ein Attribut, aber die whileSchleife endet nie.

Sinnvoller wäre es hier einfach mal den Spagetti Code aufzuräumen und sowas nennt sich schon Programmierer? ^^ - Naja, das ist nicht mein Bier.
 
Zuletzt bearbeitet:
Oben