PerWorldPlugins

PerWorldPlugins


PerWorldPlugins v1.2.4

Limit plugins to certain worlds!

PerWorldPlugins v1.2+ was built with compatibility as a top priority. Because of this, we should be fully functional with other plugins. However, in the case that you do stumble upon an incompatibility, we urge you to create an informative ticket!

Plugin Creator: MylesC
Plugin Maintainer: Incomprehendable

What does this plugin do, and how does it work?

PerWorldPlugins will inject the Bukkit core with its own CommandMap as well as changing how the event system works using some neat (and totally not hacky in any way) tricks. This allows you to control which plugins receive the events needed to function, and more importantly, where they receive those events. Using this plugin, you can block plugins in certain worlds. If you're hosting a hybrid server, you're probably overflowing with excitement. Sick of people using mcMMO in your minigames? Block mcMMO in the minigames world! Don't like LWC in your hardcore world? Block that, too!

What's new?

We've updated our plugin to provide maximum compatibility, If you need the technical know-how, we've pushed the changes to our GitHub below. The biggest step in this update is the fact that we have stopped overriding Bukkit's PluginManager, meaning that all plugins should be compatible.

Configuration

This is an example of the config.

limit:
  WorldEdit:
    - world
    - world_nether
  ModReq: []

The configuration of PerWorldPlugins is simple and easy. Referring to the example above, WorldEdit would only work in the worlds 'world' and 'world_nether'. However, ModReq will work in any world.

REMEMBER: If a plugin has no world list, it will work in every world.

exempt-login-events is a self-explanatory feature. This controls whether or not PerWorldPlugins will allow login events to work in every world, no matter the limits. This is highly recommended to be true. It will cause some memory leaks. For example, most minigames plugins will save a player's inventory, so when they log out and log in, their inventory will be returned. If they return to a world that blocks the minigames plugin and this boolean is set to false, their inventory will be lost. Forever.

blocked-msg is also self-explanatory. This is just the string that is sent to players when they try a command from a plugin that is blocked in their current world. And no, there was no way to explain that easier.

You can also use these variables in the string:

  • %player% - The name of the player receiving the message
  • %world% - The name of the world that the player is currently in
  • %plugin% - The name of the plugin that is blocked in the world.

Developers (You shouldn't need this v1.2.0+)

API: Currently we don't support one. If you want one, suggest the features you want!

If your plugin is incompatible, it is mainly because the plugin might extend to SimplePluginManager. PerWorldPlugins will not extend to that class due to its protection; how can you expect us to do so without some more l33t hacky code manipulation?

Here's an example on how to fix it:

Before: (incompatible)

SimplePluginManager spm = (SimplePluginManager)Bukkit.getServer().getPluginManager();
Field scmF = spm.getClass().getDeclaredField("commandMap");


After: (compatible!)

PluginManager pm = Bukkit.getServer().getPluginManager();
Field scmF = pm.getClass().getDeclaredField("commandMap");


Done! That's it. Even as a bonus, if someone decides to make another PluginManager, your plugin will already work with it.

Installation and Use

  1. Download PerWorldPlugins.
  2. Place PerWorldPlugins.jar into your plugin folder.
  3. Start up (or restart) your server.
  4. PerWorldPlugins should have created a folder, called "PerWorldPlugins". Go in there, and edit the configuration file. (server\plugins\PerWorldPlugins\config.yml)
  5. Type /pwp reload in-game, and enjoy the plugin!

Video Tutorials/Showcases

For russian https://www.youtube.com/watch?v=j-mWlh1zMyM

Bugs and Issues

  • PerWorldPlugins may appear in your stacktraces. This does not mean that PWP is the cause of that stacktrace, so we encourage that you are able to comprehend stacktraces. If you are confident that the issue may be our plugin, then please make a ticket!
  • May be bugs todo with aliases of commands, we're looking into it but isn't top priority as we're waiting for Bukkit 1.8 or the next stable platform.

Benefits

  • Fix up and prevent certain exploits and unfair tactics in places. (like the mcMMO/Minigames example)
  • Cut down on server lag; some plugins like SurvivalGames check player movement, which fires everywhere, costing you RAM and CPU usage.
  • Add more features and plugins into your server.

Metrics


This plugin utilises Hidendra's plugin metrics system, which means that the following information is collected and sent to mcstats.org:

  • A unique identifier
  • The server's version of Java
  • Whether the server is in offline or online mode
  • The plugin's version
  • The server's version
  • The OS version/name and architecture
  • The core count for the CPU
  • The number of players online
  • The Metrics version

Opting out of this service can be done by editing plugins/Plugin Metrics/config.yml and changing opt-out to true.

http://i.mcstats.org/PerWorldPlugins/Global+Statistics.borderless.png Produced by Metrics

Commands


/pwp version - Displays the version of the plugin.

/pwp reload - Reloads the config.

Permissions


pwp.admin - Gives access to reload and view the plugin's version.

Upcoming Features


  • Reversible configuration! Instead of whitelisting worlds, you can choose to blacklist them.
  • /pwp list E/D - list all of the plugins that are enabled/disabled in your current world.
  • /pwp add <plugin> <world> - configure the world whitelist/blacklist from in-game! Reloads automagically.
  • /pwp set <exemptLogin/blockedMsg/listMode - set configuration values from in-game! Reloads automagically.

Other Stuff

Source Code

YourKit supports this project with its full-featured Java Profiler. YourKit, LLC is the creator of YourKit Java Profiler and YourKit .NET Profiler, innovative and intelligent tools for profiling Java and .NET applications. We use it on this project to allow us optimise it for best experience. Check it out

You must login to post a comment. Don't have an account? Register to get one!

  • Avatar of angelmedevil angelmedevil Jan 23, 2015 at 15:44 UTC - 0 likes

    Very bad plugin, on each restart the configs get messed up, the devs dont respond to ticket, I suggest not to depend on this plugin which is dead.

  • Avatar of syberia97 syberia97 Jan 22, 2015 at 07:17 UTC - 0 likes

    Could not pass event LeavesDecayEvent to OtherDrops v2.8b.596 org.bukkit.event.EventException at us.Myles.PWP.TransparentListeners.PerWorldPluginLoader$1.execute(PerWorldPluginLoader.java:122) [?:?] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) [spigot1.7.10.jar:git-Spigot-1604] at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:36) [spigot1.7.10.jar:git-Spigot-1604] at us.Myles.PWP.TransparentListeners.PWPTimedRegisteredListener.callEvent(PWPTimedRegisteredListener.java:30) [PerWorldPlugins.jar:?] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot1.7.10.jar:git-Spigot-1604] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot1.7.10.jar:git-Spigot-1604] at net.minecraft.server.v1_7_R4.BlockLeaves.e(BlockLeaves.java:127) [spigot1.7.10.jar:git-Spigot-1604] at net.minecraft.server.v1_7_R4.BlockLeaves.a(BlockLeaves.java:118) [spigot1.7.10.jar:git-Spigot-1604] at net.minecraft.server.v1_7_R4.WorldServer.g(WorldServer.java:433) [spigot1.7.10.jar:git-Spigot-1604] at net.minecraft.server.v1_7_R4.WorldServer.doTick(WorldServer.java:215) [spigot1.7.10.jar:git-Spigot-1604] at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:690) [spigot1.7.10.jar:git-Spigot-1604] at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:289) [spigot1.7.10.jar:git-Spigot-1604] at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:584) [spigot1.7.10.jar:git-Spigot-1604] at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:490) [spigot1.7.10.jar:git-Spigot-1604] at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [spigot1.7.10.jar:git-Spigot-1604] Caused by: java.lang.IncompatibleClassChangeError: Found class com.sk89q.worldguard.protection.ApplicableRegionSet, but interface was expected at com.gmail.zariust.otherdrops.listener.OdBlockListener.checkWorldguardLeafDecayPermission(OdBlockListener.java:62) [?:?] at com.gmail.zariust.otherdrops.listener.OdBlockListener.onLeavesDecay(OdBlockListener.java:78) [?:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [?:1.7.0_65] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [?:1.7.0_65] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [?:1.7.0_65] at java.lang.reflect.Method.invoke(Method.java:606) [?:1.7.0_65] at us.Myles.PWP.TransparentListeners.PerWorldPluginLoader$1.execute(PerWorldPluginLoader.java:120) [?:?] ... 14 more

  • Avatar of mca93teck mca93teck Jan 19, 2015 at 21:58 UTC - 0 likes

    i cant get this plugin to work with factions? plss help

  • Avatar of cmz1675 cmz1675 Jan 19, 2015 at 05:23 UTC - 0 likes

    Please update! My server depends on you!

  • Avatar of budopey budopey Jan 16, 2015 at 17:28 UTC - 0 likes
    <<reply 2450449="">> Nice, I'll have to give it a go once I finish stabilizing this server more. Before it seemed like it was creating conflicts with WorldGuard but I discovered its the new WorldGuard 6 that sucks and had to undo its update. The new regions/flags in WorldGuard6 suck and break everything so I had to find the 5.9 version for Spigot 1.8 to recover stability to the server. Works good now just have to redo regions and some setups then I'll be ready for PWP so I can add specific content to my multiverse. This plugin is a genius idea and I don't understand why plugins don't just add a node to their configs for per world usage? Seems like an important option to me!
    -BuDoPeY-
    -Hack the planet, not my server!
    -Seek a good Admin to help build your servers? PM me for details! I can provide customization to your server and help install up-to-date plugins to help you acquire the content you seek for your server!
  • Avatar of portapipe portapipe Jan 16, 2015 at 15:22 UTC - 0 likes

    Is 1.2.4 compatible with 1.7.2 / 1.7.4 versions?

    Thanks :)

  • Avatar of Cammo009 Cammo009 Jan 14, 2015 at 07:22 UTC - 0 likes

    i started using this plugin and found if i follow the instuction on how the config needs to be lay out like this

    essentials: -world -world2

    the config wipes to default on the reload. i have to do it like this to make it work.

    essentials: [world,world2] vanish: [creative,world1]

    using spigot 1.8 and 1.7.9's lastest version Perworldplugin. But still works great with the working layout

    Last edited Jan 14, 2015 by Cammo009
  • Avatar of frizzbee30 frizzbee30 Jan 12, 2015 at 17:55 UTC - 0 likes

    @budopey: Go

    No 1.8 fix is needed? It works fine ,we use it with 1.8 might need a tweak or two, but no obvious issues we have experienced. Just some plugins don't play well if under it's control so we don't world restrict those ones.

    Last edited Jan 12, 2015 by frizzbee30

    http://www.minecraftsigs.com/banners/934016794199124.png

  • Avatar of frizzbee30 frizzbee30 Jan 12, 2015 at 17:53 UTC - 0 likes

    @syberia97: Go

    Looks like your using the patch for HoloGraph displays, but running 1.8? the two don't go together.

    From the patch website:-

    " The patch isn't needed anymore. Spigot 1.8 is released, a compatible Holographic Displays version has been released.

    Note: If you're not using Spigot with the 1.7/1.8 protocol hack, you don't need to install this plugin! "

  • Avatar of syberia97 syberia97 Jan 12, 2015 at 17:46 UTC - 0 likes

    bugs:

    Could not pass event PlayerJoinEvent to HolographicDisplaysPatch v1.0.7 org.bukkit.event.EventException at us.Myles.PWP.TransparentListeners.PerWorldPluginLoader$1.execute(PerWorldPluginLoader.java:122) [?:?] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) [spigot1.8.jar:git-Spigot-13716d9-0899683] at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:36) [spigot1.8.jar:git-Spigot-13716d9-0899683] at us.Myles.PWP.TransparentListeners.PWPTimedRegisteredListener.callEvent(PWPTimedRegisteredListener.java:30) [PerWorldPlugins.jar:?] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot1.8.jar:git-Spigot-13716d9-0899683] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.PlayerList.onPlayerJoin(PlayerList.java:263) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.PlayerList.a(PlayerList.java:148) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.LoginListener.b(LoginListener.java:109) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.LoginListener.c(LoginListener.java:41) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.NetworkManager.a(NetworkManager.java:159) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.ServerConnection.c(ServerConnection.java:82) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:785) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:316) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:623) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:526) [spigot1.8.jar:git-Spigot-13716d9-0899683] at java.lang.Thread.run(Thread.java:745) [?:1.7.0_65] Caused by: java.lang.NoClassDefFoundError: org/bukkit/craftbukkit/v1_7_R4/entity/CraftPlayer at com.gmail.filoghost.holograms.patch.HologramsPatch.onJoin(HologramsPatch.java:59) [?:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [?:1.7.0_65] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [?:1.7.0_65] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [?:1.7.0_65] at java.lang.reflect.Method.invoke(Method.java:606) [?:1.7.0_65] at us.Myles.PWP.TransparentListeners.PerWorldPluginLoader$1.execute(PerWorldPluginLoader.java:120) [?:?] ... 16 more Caused by: java.lang.ClassNotFoundException: org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:91) [spigot1.8.jar:git-Spigot-13716d9-0899683] at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:86) [spigot1.8.jar:git-Spigot-13716d9-0899683] at java.lang.ClassLoader.loadClass(ClassLoader.java:425) [?:1.7.0_65] at java.lang.ClassLoader.loadClass(ClassLoader.java:358) [?:1.7.0_65] at com.gmail.filoghost.holograms.patch.HologramsPatch.onJoin(HologramsPatch.java:59) [?:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [?:1.7.0_65] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [?:1.7.0_65] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [?:1.7.0_65] at java.lang.reflect.Method.invoke(Method.java:606) [?:1.7.0_65] at us.Myles.PWP.TransparentListeners.PerWorldPluginLoader$1.execute(PerWorldPluginLoader.java:120) [?:?] ... 16 more [18:29:54] [Server thread/ERROR]: THIS IS NOT AN ISSUE TO DO WITH PER WORLD PLUGINS Could not pass event PlayerTeleportEvent to PlotMe v0.13f org.bukkit.event.EventException at us.Myles.PWP.TransparentListeners.PerWorldPluginLoader$1.execute(PerWorldPluginLoader.java:122) [?:?] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) [spigot1.8.jar:git-Spigot-13716d9-0899683] at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:36) [spigot1.8.jar:git-Spigot-13716d9-0899683] at us.Myles.PWP.TransparentListeners.PWPTimedRegisteredListener.callEvent(PWPTimedRegisteredListener.java:30) [PerWorldPlugins.jar:?] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot1.8.jar:git-Spigot-13716d9-0899683] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java:462) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java:453) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.PlayerList.a(PlayerList.java:150) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.LoginListener.b(LoginListener.java:109) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.LoginListener.c(LoginListener.java:41) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.NetworkManager.a(NetworkManager.java:159) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.ServerConnection.c(ServerConnection.java:82) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:785) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:316) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:623) [spigot1.8.jar:git-Spigot-13716d9-0899683] at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:526) [spigot1.8.jar:git-Spigot-13716d9-0899683] at java.lang.Thread.run(Thread.java:745) [?:1.7.0_65] Caused by: java.lang.NoSuchMethodError: com.sk89q.worldedit.LocalSession.getMask()Lcom/sk89q/worldedit/masks/Mask; at com.worldcretornica.plotme.PlotWorldEdit.setMask(PlotWorldEdit.java:61) [?:?] at com.worldcretornica.plotme.PlotWorldEdit.setMask(PlotWorldEdit.java:18) [?:?] at com.worldcretornica.plotme.listener.PlotWorldEditListener.onPlayerTeleport(PlotWorldEditListener.java:107) [?:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [?:1.7.0_65] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [?:1.7.0_65] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [?:1.7.0_65] at java.lang.reflect.Method.invoke(Method.java:606) [?:1.7.0_65] at us.Myles.PWP.TransparentListeners.PerWorldPluginLoader$1.execute(PerWorldPluginLoader.java:120) [?:?] ... 17 more

Facts

Date created
Jun 12, 2013
Categories
Last update
Aug 26, 2014
Development stage
Release
Language
  • enUS
License
Public Domain
Curse link
PerWorldPlugins
Downloads
44,301
Recent files

Authors