Jump to content

Problem while developing a plugin


reschiram

Empfohlene Beiträge

Hey this is my programm code:

Event:

package me.reschiram;

import org.bukkit.Bukkit;

import org.bukkit.Location;

import org.bukkit.World;

import org.bukkit.entity.EntityType;

import org.bukkit.entity.Player;

import org.bukkit.entity.Snowball;

import org.bukkit.entity.Squid;

import org.bukkit.event.EventHandler;

import org.bukkit.event.Listener;

import org.bukkit.event.entity.ProjectileHitEvent;

public class Event implements Listener{

mainclass plugin;

Squid s;

public Event(mainclass plugin){

this.plugin = plugin;

plugin.getServer().getPluginManager().registerEvents(this, plugin);

}

//Tintenfischrakete

@EventHandler

public void Tintenfischrakete(ProjectileHitEvent e){

Player p = (Player) e.getEntity().getShooter();

for (int a = 0; a<plugin.Welten.size(); a++){

int b = a+2;

plugin.Welten.add((World) plugin.getConfig().get("Welt" + B));

if (p.getWorld() == plugin.Welten.get(a)){

if (e.getEntity() instanceof Snowball){

final Location ls = e.getEntity().getLocation();

final Location l = e.getEntity().getLocation();

l.setY(l.getY() + 30);

s = (Squid) p.getWorld().spawnEntity(l, EntityType.SQUID);

plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, new Runnable(){

@Override

public void run() {

l.setY(l.getY() -0.1);

s.teleport(l);

if ( l.getBlock() == ls.getBlock()){

e.getEntity().getWorld().createExplosion(l, 5, true);

p.sendMessage("aa");

}

}

}, 10, 10);

}

}

}

}

}

Mainclass:

package me.reschiram;

import java.util.ArrayList;

import org.bukkit.Bukkit;

import org.bukkit.ChatColor;

import org.bukkit.Location;

import org.bukkit.World;

import org.bukkit.command.Command;

import org.bukkit.command.CommandSender;

import org.bukkit.entity.Player;

import org.bukkit.entity.Squid;

import org.bukkit.event.entity.ProjectileHitEvent;

import org.bukkit.plugin.Plugin;

import org.bukkit.plugin.java.JavaPlugin;

public class mainclass extends JavaPlugin{

//Variablen

ArrayList<World> Welten = new ArrayList<World>();

Event e;

public void onEnable() {

initconfig();

new Event(this);

}

//Config

public void initconfig(){

this.reloadConfig();

this.getConfig().options().header("Bitte nicht dranrumschreiben");

this.getConfig().addDefault("Welt1", "world");

this.getConfig().options().copyDefaults(true);

this.saveConfig();

System.out.println(ChatColor.BOLD + "[bettwars+] " + ChatColor.WHITE + "succesfully (re)loaded");

}

mainclass plugin;

@Override

public boolean onCommand(CommandSender sender, Command cmd,

String label, String[] args) {

Player p = null;

if(sender instanceof Player){

p = (Player) sender;

}

if (cmd.getName().equalsIgnoreCase("addworld")){

if (p.hasPermission("Bettwars-plus.*")){

if(args.length==0){

Welten.add(p.getWorld());

p.sendMessage("true");

return true;

}else {

p.sendMessage("false");

return false;

}

}

}

return false;

}

}

My Problem:

I trought a snowball on the ground an a Squid appears 30 Blocks over it, but for a few seconds it moves it legs or how there are called and then the holle server crasched!

There were no explosion! :(

I found this error Log latter:

Could not pass event ProjectileHitEvent to Bettwars-plus v1.0

org.bukkit.event.EventException

at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:297) ~[craftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.craftbukkit.v1_8_R2.event.CraftEventFactory.callProjectileHitEvent(CraftEventFactory.java:729) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.EntityProjectile.t_(EntityProjectile.java:157) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.World.entityJoinedWorld(World.java:1420) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.World.g(World.java:1398) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.World.tickEntities(World.java:1269) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.WorldServer.tickEntities(WorldServer.java:560) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.MinecraftServer.A(MinecraftServer.java:724) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.DedicatedServer.A(DedicatedServer.java:336) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.MinecraftServer.z(MinecraftServer.java:626) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.MinecraftServer.run(MinecraftServer.java:534) [craftbukkit.jar:git-Bukkit-0a645a2]

at java.lang.Thread.run(Unknown Source) [?:1.8.0_31]

Caused by: java.lang.OutOfMemoryError: Java heap space

at java.util.Arrays.copyOf(Unknown Source) ~[?:1.8.0_31]

at java.util.Arrays.copyOf(Unknown Source) ~[?:1.8.0_31]

at java.util.ArrayList.grow(Unknown Source) ~[?:1.8.0_31]

at java.util.ArrayList.ensureExplicitCapacity(Unknown Source) ~[?:1.8.0_31]

at java.util.ArrayList.ensureCapacityInternal(Unknown Source) ~[?:1.8.0_31]

at java.util.ArrayList.add(Unknown Source) ~[?:1.8.0_31]

at me.reschiram.Event.Tintenfischrakete(Event.java:35) ~[?:?]

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_31]

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_31]

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_31]

at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_31]

at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:295) ~[craftbukkit.jar:git-Bukkit-0a645a2]

... 14 more

Sorry for my bad english i am german and not good in english :(

bearbeitet von reschiram
Link zu diesem Kommentar
Auf anderen Seiten teilen

das heißt der Code ist richtig ich hab nur zu wenig RAM? Kamm ich die RAM Anforderung auch irgendwie senken?

Trotzdem schon mal danke!

Ich wollte halt nur das mir auch andere Leute helfen, die kein deutsch können damit ich möglichst schnell eine Antwort bekommen :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

in deinem Crash-Log sind die 2 Zeilen für dich interessant:

Could not pass event ProjectileHitEvent to Bettwars-plus v1.0

Caused by: java.lang.OutOfMemoryError: Java heap space

Wieviel Speicher hast du denn zur Verfügung auf deinem Server und wieviel hast du deinem Bukkit zugewiesen?

Du hast doch sicher eine Batch-Datei (.bat) welche du zum starten von deinem Server nutzt. In dieser steht etwas wie

java -Xmx1024m -jar craftbukkit.jar

Der Wert bei -Xmx ist der zugewiesene maximale Arbeitsspeicher. Hier solltest du mal schauen, ob du diesen entsprechend höher setzt.

java -Xms512m -Xmx2048m -jar craftbukkit.jar

Hier ist noch ein min Wert (-Xms) angegeben, mit welchem der Server mindestens Starten soll, auch das kann man mit angeben.

Grundsätzlich kommt es immer darauf an, wieviele und welche Mods auf dem Server vorhanden sind. Teste einfach ein bischen.

-Yuki

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okey es liegt also nur am RAM! Danke!

Ps: ich hab das nur auf meinem Testserver probiert nicht auf dem mit 8 GB RAM da müsste es ja dann eigentlich funktionieren oder?

Aber vielen Dank

Nur noch eine Frage: wie kann ich das Thema rausnehmen ? Da ja jetzt alles geklärt ist

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

ich möchte jetzt nicht ausschließen, das es an deinem Plugin liegt, es kann gut sein, dass da etwas nicht ganz korrekt ist und deswegen der Speicher voll läuft, aber hier muß ich ehrlich zugeben das ich da nicht weiterhelfen kann.

Ich hab zwar selbst eine zeitlang programmiert damals mit VB dann C#.NET und dann halt Scripting mit PHP, aber Java hat mich nie interessiert, daher blick ich bei dem Code oben nicht wirklich durch. :P

Da müsste halt wirklich jemand drüber schauen, der hiervon Ahnung hat.

Teste es einfach mal auf einem System mit mehr Speicher, dann siehst du ja, was passiert. Sollte es dort das gleiche Problem geben, wird es wohl an deinem Plugin liegen.

-Yuki

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was genau soll dein Plugin denn machen? Du schießt einen Pfeil, und 30 Blöcke über dem Ort, wo er aufkommt, soll ein Tintenfisch spawnen?

Wenn das alles ist, habe ich das hier mal für dich geschrieben:https://minecraftforum.de/files/file/21-squidrocketjar/

Hier der Code:


package me.baustein.squidrocket;


import org.bukkit.Location;

import org.bukkit.entity.EntityType;

import org.bukkit.event.EventHandler;

import org.bukkit.event.Listener;

import org.bukkit.event.entity.ProjectileHitEvent;

import org.bukkit.plugin.java.JavaPlugin;


public class Main extends JavaPlugin implements Listener {


	public void onEnable() {

		getServer().getPluginManager().registerEvents(this, this);

	}


	@EventHandler

	public void onProjectileHit(ProjectileHitEvent e) {

		Location loc = e.getEntity().getLocation().add(0, 30, 0);

		loc.getWorld().spawnEntity(loc, EntityType.SQUID);

	}


}

Ich hoffe, ich habe deine Ansprüche richtig erkannt, ansonsten klär mich auf, sicherlich lässt sich das umsetzen.

Liebe Grüße,

Baustein

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

das sieht ja um einiges einfacher aus und das versteh ich sogar, wenn man damit noch nix gemacht hat.

Aber ich glaube, du hast die Explosion vergessen, die er oben in seinem Code noch drin hat. ;)

Sein Code: e.getEntity().getWorld().createExplosion(l, 5, true);

Wenn ich das richtig sehe an der Position des Squid.

-Yuki

bearbeitet von Yuki
Link zu diesem Kommentar
Auf anderen Seiten teilen

Also wen jemand einen Schneeball in einer bestimmten Welt wirft (als spezial Item von Bettwars gedacht) dann soll 30 Blöcke über ihm ein squid spawnen der sobald er wieder den Punkt wo der Ball aufkommt berührt explodiert

Oh und wenn ich schon dabei bin ich arbeite nebenbei noch an einem anderem Plugin, wo auch etwas nicht funktioniert(es scheint ich bekomme nie was auf die reihe :( ). ich hab versuch ein Cops and Robbers Plugin zu machen was aber anscheinend auch nicht so ganz funktioniert hat :(.

Dies ist der Error Log:

[14:58:23 ERROR]: Error occurred while enabling CopsandRobbers v1.0 (Is it up to

date?)

java.lang.NoSuchMethodError: me.reschiram.Event.<init>(Lme/reschiram/main;)V

at me.reschiram.main.onEnable(main.java:134) ~[?:?]

at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[c

raftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader

.java:327) [craftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage

r.java:404) [craftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.craftbukkit.v1_8_R2.CraftServer.loadPlugin(CraftServer.jav

a:341) [craftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.craftbukkit.v1_8_R2.CraftServer.enablePlugins(CraftServer.

java:313) [craftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.craftbukkit.v1_8_R2.CraftServer.reload(CraftServer.java:72

5) [craftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.Bukkit.reload(Bukkit.java:543) [craftbukkit.jar:git-Bukkit

-0a645a2]

at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:

25) [craftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:14

0) [craftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.craftbukkit.v1_8_R2.CraftServer.dispatchCommand(CraftServe

r.java:625) [craftbukkit.jar:git-Bukkit-0a645a2]

at org.bukkit.craftbukkit.v1_8_R2.CraftServer.dispatchServerCommand(Craf

tServer.java:611) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.DedicatedServer.aN(DedicatedServer.java:

372) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.DedicatedServer.A(DedicatedServer.java:3

37) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.MinecraftServer.z(MinecraftServer.java:6

26) [craftbukkit.jar:git-Bukkit-0a645a2]

at net.minecraft.server.v1_8_R2.MinecraftServer.run(MinecraftServer.java

:534) [craftbukkit.jar:git-Bukkit-0a645a2]

at java.lang.Thread.run(Unknown Source) [?:1.8.0_31]

Dies ist onEnable (kurz gefasst):

new Event(plugin);

loadSpawn();

loadDeath();

loadJailkeeperspawn();

loadwinbutton();

loadWorld();

initconfig();

Das hier ist die Classe event(das was für den error log wichtig ist):

package me.reschiram;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.util.ArrayList;

import java.util.Random;

import org.bukkit.ChatColor;

import org.bukkit.Location;

import org.bukkit.Material;

import org.bukkit.block.Block;

import org.bukkit.block.Sign;

import org.bukkit.entity.Player;

import org.bukkit.event.EventHandler;

import org.bukkit.event.Listener;

import org.bukkit.event.block.Action;

import org.bukkit.event.block.BlockBreakEvent;

import org.bukkit.event.block.SignChangeEvent;

import org.bukkit.event.entity.PlayerDeathEvent;

import org.bukkit.event.player.PlayerInteractEvent;

import org.bukkit.event.player.PlayerKickEvent;

import org.bukkit.event.player.PlayerQuitEvent;

import org.bukkit.inventory.ItemStack;

import org.bukkit.inventory.meta.ItemMeta;

import org.bukkit.material.Button;

public class Event implements Listener{

main plugin;

WarpManager WarpMgr;

ArrayList<Player> Winnes = new ArrayList<Player>();

public Event(main main) {

try {

this.plugin = main;

main.getServer().getPluginManager().registerEvents(this, main);

} finally {

System.out.println("[bob] wurde nicht geladen");

}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie sieht deine Main klasse komplett aus?

BTW Denk Daran dass die Packagenames dein plugin EINDEUTIG identifizieren sollen! Also me.reschiram ist NICHT eindeutig. me.reschiram.copsvsrobbers wäre eindeutig. Ohne das werden sich deine Klassen sehr schnell in die quere kommen.

bearbeitet von boomer41
Link zu diesem Kommentar
Auf anderen Seiten teilen

h

das war ein test XD

okey ich werde das mal ausprobieren danke!!

Oh und wie nutze ich den code-Spoiler

Meinst du so?:


package me.reschiram.copsvsrobbers;


public class Event implements Listener{


main plugin;

WarpManager WarpMgr;

ArrayList<Player> Winnes = new ArrayList<Player>();


public Event(main main) {

try {

this.plugin = main;

main.getServer().getPluginManager().registerEvents(this,  main);

} finally {

System.out.println("[bob] wurde nicht geladen");

}

}
bearbeitet von boomer41
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja genau das was mich verwirrt ich hab mir die Fehlermeldung durch gelesen und die hat immer auf diese eine Zeile verwiesen:

new Event(plugin);

(plugin ist eine Vraiable von Typ main(also imprenzip ist es das gleiche als würde ich this hinschreiben))

oder was ich auch probiert habe:

new Event(this);

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B