You are not logged in.

  • Login
Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

Dear visitor, welcome to Nitrado.net Prepaid Gameserver Community-Support - Archiv. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

FilipZocktan

User / Kunde

  • "FilipZocktan" is male
  • "FilipZocktan" started this thread

Posts: 28

Location: Dortmund

Occupation: Schüler (Gymnasium)

  • Send private message

1

Monday, February 27th 2017, 6:12pm

Plugin unloaden ohne Server zu reloaden oder zu restarten

Hey Leute,

ich arbeite momentan an einem Plugin für ein Projekt, welches sich an Varo und The Hunger Games anlehnt.
Für den besseren Spielfluss würde ich allerdings gerne (über ein 2. Plugin) das Core-Plugin entladen und danach wieder neu einladen (letzteres geht ja über

Source code

1
Bukkit.getServer().getPluginManager().loadPlugin(PluginFile);
meint zumindest die Eclipse-Autovervollständigung...)

Nur weiß ich leider nicht wie ich das Plugin entlade, also nicht nur disablen (so dass es da in rot steht aber noch registriert ist).

Geht das? Und wenn ja, wie...

LG
Filip Zocktan
Lerne aus den Fehlern anderer! Du hast nicht die Zeit sie selbst zu machen.

LynxPlay

User / Kunde

Posts: 122

  • Send private message

2

Monday, February 27th 2017, 6:17pm

Java source code

1
Bukkit.getPluginManager().disablePlugin(yourPluginInstance);
Never stop lerning or u will fall behind

PS: Electro Swing is just godlike (1931 - 1953)

FilipZocktan

User / Kunde

  • "FilipZocktan" is male
  • "FilipZocktan" started this thread

Posts: 28

Location: Dortmund

Occupation: Schüler (Gymnasium)

  • Send private message

3

Monday, February 27th 2017, 7:14pm

@LynxPlay Da passiert nichts, außerdem will ich es ja entladen nicht disablen...
Lerne aus den Fehlern anderer! Du hast nicht die Zeit sie selbst zu machen.

GGad

User / Kunde

  • "GGad" is male

Posts: 348

Location: localhost in dritter Generation

Thanks: 16

  • Send private message

4

Monday, February 27th 2017, 7:39pm

Hey,

habe wenig Zeit :D

Hier, was bei mir funktioniert.
Reload:

Java source code

1
2
3
4
5
6
7
8
9
10
11
12
private boolean reloadPlugin(String pluginName) throws Exception {
    	boolean unload = this.unloadPlugin(pluginName);
    	boolean load = this.loadPlugin(pluginName);
   	
    	if (unload && load) {
        	
    	} else {
       	
        	return false;
    	}
    	return true;
	}


Dazu:

Load:

Java source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private boolean loadPlugin(String pluginName) {
    	try {
        	PluginManager manager = this.getServer().getPluginManager();
        	Plugin plugin = manager.loadPlugin(new File("plugins", pluginName + ".jar"));
        	if (plugin == null) {
           	
        	}
        	plugin.onLoad();
        	manager.enablePlugin(plugin);
    	}
    	catch (Exception e) {
        	
    	}
   	
   	
    	return true;
	}


Unload:

Java source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
@SuppressWarnings("rawtypes")
	private boolean unloadPlugin(String pluginName) throws Exception {
    	PluginManager manager = this.getServer().getPluginManager();
    	SimplePluginManager spmanager = (SimplePluginManager)manager;
    	if (spmanager != null) {
        	Field pluginsField = spmanager.getClass().getDeclaredField("plugins");
        	pluginsField.setAccessible(true);
        	List plugins = (List)pluginsField.get((Object)spmanager);
        	Field lookupNamesField = spmanager.getClass().getDeclaredField("lookupNames");
        	lookupNamesField.setAccessible(true);
        	Map lookupNames = (Map)lookupNamesField.get((Object)spmanager);
        	Field commandMapField = spmanager.getClass().getDeclaredField("commandMap");
        	commandMapField.setAccessible(true);
        	SimpleCommandMap commandMap = (SimpleCommandMap)commandMapField.get((Object)spmanager);
        	Field knownCommandsField = null;
        	Map knownCommands = null;
        	if (commandMap != null) {
            	knownCommandsField = commandMap.getClass().getDeclaredField("knownCommands");
            	knownCommandsField.setAccessible(true);
            	knownCommands = (Map)knownCommandsField.get((Object)commandMap);
        	}
        	for (Plugin plugin : manager.getPlugins()) {
            	if (!plugin.getDescription().getName().equalsIgnoreCase(pluginName)) continue;
            	manager.disablePlugin(plugin);
            	if (plugins != null && plugins.contains((Object)plugin)) {
                	plugins.remove((Object)plugin);
            	}
            	if (lookupNames != null && lookupNames.containsKey(pluginName)) {
                	lookupNames.remove(pluginName);
            	}
            	if (commandMap == null) continue;
            	Iterator it = knownCommands.entrySet().iterator();
            	while (it.hasNext()) {
                	PluginCommand command;
                	Map.Entry entry = (Entry) it.next();
                	if (!(entry.getValue() instanceof PluginCommand) || (command = (PluginCommand)entry.getValue()).getPlugin() != plugin) continue;
                	command.unregister((CommandMap)commandMap);
                	it.remove();
            	}
        	}
    	} else {
      	
        	return true;
    	}
    	
    	
    	return true;
	}


LG GGad

PS: Gerade keine Zeit irgendwas zu klären.

PPS: Der Code ist NICHT von mir!
Hype!! :thumbsup: 333 Beiträge!! 8o

FilipZocktan

User / Kunde

  • "FilipZocktan" is male
  • "FilipZocktan" started this thread

Posts: 28

Location: Dortmund

Occupation: Schüler (Gymnasium)

  • Send private message

5

Monday, February 27th 2017, 8:54pm

@GGad hab das schon wo anders gesehen, da brauchst du aber ein Plugin, dass es nicht mehr für die 1.10.2 gibt als API...
Lerne aus den Fehlern anderer! Du hast nicht die Zeit sie selbst zu machen.

GGad

User / Kunde

  • "GGad" is male

Posts: 348

Location: localhost in dritter Generation

Thanks: 16

  • Send private message

6

Monday, February 27th 2017, 9:01pm

Für mich geht es ohne einwandfrei

LG GGad

PS: Probier es einfach ;)
Hype!! :thumbsup: 333 Beiträge!! 8o

FilipZocktan

User / Kunde

  • "FilipZocktan" is male
  • "FilipZocktan" started this thread

Posts: 28

Location: Dortmund

Occupation: Schüler (Gymnasium)

  • Send private message

7

Monday, February 27th 2017, 9:37pm

Ok, auch wenn ich es eig. ohne APIs machen wollte... Ich werde es mal versuchen...
Lerne aus den Fehlern anderer! Du hast nicht die Zeit sie selbst zu machen.

MrAngel08

User / Kunde

  • "MrAngel08" is male

Posts: 339

Location: Deutschland

Occupation: Schüler

Thanks: 1

  • Send private message

8

Monday, February 27th 2017, 10:35pm

Für den Code oben benötigst du doch nur die Bukkit-API. Da kommt doch keine weitere dazu.

Oder bin ich gerade mal wieder blind?

FilipZocktan

User / Kunde

  • "FilipZocktan" is male
  • "FilipZocktan" started this thread

Posts: 28

Location: Dortmund

Occupation: Schüler (Gymnasium)

  • Send private message

9

Monday, February 27th 2017, 10:55pm

folgendes:

Source code

1
SimplePluginManager spmanager = (SimplePluginManager)manager;
Lerne aus den Fehlern anderer! Du hast nicht die Zeit sie selbst zu machen.

GGad

User / Kunde

  • "GGad" is male

Posts: 348

Location: localhost in dritter Generation

Thanks: 16

  • Send private message

10

Tuesday, February 28th 2017, 7:04am

PluginManager manager = this.getServer().getPluginManager();
SimplePluginManager spmanager = (SimplePluginManager)manager;
Hey,

der Simple Plugin Manager wird aus einer Bukkit API Methode erzeugt! Somit ist es ohne API nutzbar ;)

LG GGad
Hype!! :thumbsup: 333 Beiträge!! 8o

FilipZocktan

User / Kunde

  • "FilipZocktan" is male
  • "FilipZocktan" started this thread

Posts: 28

Location: Dortmund

Occupation: Schüler (Gymnasium)

  • Send private message

11

Wednesday, March 1st 2017, 12:30am

Okay, ich schaue später mal...
Lerne aus den Fehlern anderer! Du hast nicht die Zeit sie selbst zu machen.

Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net