Safeguarding Against Unchecked and Potentially Damaging Plugins

Discussion in 'Bukkit News' started by EvilSeph, Dec 19, 2012.

Thread Status:
Not open for further replies.
  1. Offline


    As Mojang continue to work towards the Minecraft Plugin API (cleaning up and rewriting the code), the code within Minecraft and CraftBukkit will undoubtedly shift. Fortunately, as the majority of the plugins available have been developed using only the Bukkit API (which was designed to be resilient and mostly update proof), this code shifting should not affect most of your servers.

    If, however, you happen to be running a plugin that uses code outside of the Bukkit API (like Minecraft or CraftBukkit code), those plugins are highly likely to break and bring down your servers with them - often without any advanced warning - whenever a Minecraft update is released. In response to this very real problem, we've had to make the difficult decision of forcing plugin developers that use Minecraft and/or CraftBukkit code within their plugins to re-evaluate their work with the release of every Minecraft update to ensure they are still functioning as intended.

    It is important to note that even if a plugin you have been using has been working fine across Minecraft updates until now, there is simply no way to guarantee that this will always be the case. Making the assumption that it will work with every update is like playing Russian roulette with your server.

    The problem:
    With the extensive work being done to Minecraft to accommodate the Minecraft Plugin API, the Minecraft code is now more unpredictable and volatile than ever before. These changes have made it clear that allowing plugins to run unchecked across Minecraft updates is a big mistake that puts your servers at significant risk of being silently damaged. Neither Bukkit nor plugin developers have any control over the Minecraft (and, as it is built upon Minecraft itself, CraftBukkit) code. Therefore, if a plugin uses code outside of the Bukkit API and it has not been verified to work on the Minecraft version your server is running, using it can only lead to unpredictable problems.

    What makes matters worse and more confusing is that there is no easy way for you, as a server admin, to tell if the plugins you are using utilise only the Bukkit API or unsupported code within Minecraft and/or CraftBukkit itself. As plugin developers have no incentive to do so, they have not been putting up a notice informing server admins that their plugins use more than just the Bukkit API and thus server admins are left in the dark. Without this important knowledge, server admins have been blindly running plugins that are not ensured to function as intended across Minecraft versions, potentially and unknowingly putting their servers at risk.

    Up until this safeguard was introduced, plugin developers were not required to verify that their plugins continued to function as they intended whenever a Minecraft update came out. As a result, potentially unstable plugins have been running unchecked on your server with no indication that they could damage your server at any time without any advanced warning. The fact of the matter is: plugins that depend on Minecraft or CraftBukkit code need to have their code verified whenever a Minecraft update is released before it can be said with absolute certainty that a plugin is safe to run on your server.

    In summary:
    - Mojang is cleaning up and rewriting the Minecraft code in anticipation for the Minecraft Plugin API.
    - Plugins that use Minecraft or CraftBukkit code will break in unpredictable ways.
    - You aren't told that a plugin is using unsupported and volatile code, so you likely aren't aware that plugins you are using could be silently breaking your servers.

    The solution:
    To address this problem, we've made the difficult decision of including a safeguard directly into CraftBukkit. This safeguard serves many purposes but the major ones are: it will help protect your server against unchecked plugins, it will make determining which plugins are breaking with every Minecraft updates and it will force plugin developers to take responsibility for what their plugins do to your server.

    With this safeguard in place, a potentially damaging plugin will not be able to run until it has been updated with a version that has been checked by the plugin developer. Granted, plugin developers have the option of completely bypassing this safeguard and putting your server at risk. However, if they choose to do this it will be very clear who was responsible for any damage done to your server and you'll know to avoid that developer's work in the future.

    Note: this safeguard is not intended to stop the use of code outside of the Bukkit API, but rather to promote more responsible use of it if a plugin developer decides to do so.

    So what does this safeguard mean for you?
    Server Admins:
    If you are a server admin that only uses plugins developed against the Bukkit API, this safeguard doesn't affect you at all. If you are a server admin that uses plugins which use Minecraft or CraftBukkit code (which we do not support or recommend using) then this safeguard means that those plugins will need to be updated with every Minecraft update.

    It is important to note that while this safeguard does force plugin developers to take some sort of action to get their plugins built against Minecraft or CraftBukkit working on a new Minecraft version, plugin developers have the option of bypassing it. They can blindly update a few lines in their code to mark it as working with a new Minecraft update or utilise a bypass to trick the safeguard into letting the plugin run. As such, we recommend that server admins be wary of plugin developers who decide to work around this, as they are willingly putting your server at risk.

    Plugin Developers:
    If you are a plugin developer that purely uses the Bukkit API this safeguard does not affect you in any way.

    If, however, you depend on the extremely volatile and unsupported CraftBukkit OR Minecraft code, you will now have to re-evaluate your plugins with every Minecraft update release. As this is what you should have been doing anyway as a responsible developer, this should not affect your update process in any way.

    We are not trying to make utilising Minecraft or CraftBukkit code within your plugins more difficult, we are simply trying to promote using it more responsibly if you have a need to do so within your plugins. If there is no way for you to avoid using the volatile and unsupported internals of Minecraft or CraftBukkit, we recommend trying to work with us to design an addition to the Bukkit API that removes this need.

    What if I'd rather take the risk?
    Server Admins:
    If you'd rather put your server at risk by running unchecked code, you are free to bypass this safeguard, however you will no longer receive support from us as a result. If you'd still like to bypass or disable this safeguard, you have the option of running an unofficial build or a tool to update the plugins you use. Unfortunately, since providing support for code we did not write is next to impossible, we still do not allow the discussion and distribution of unofficial builds within our community.

    Plugin Developers:
    Plugin developers bypassing this safeguard are willingly putting servers at risk with their unpredictable and unchecked code. If you as a plugin developer choose to bypass this safeguard bear in mind that you are taking full responsibility for anything your plugin does to a server and that this decision can affect your reputation as a developer.

    There are several ways to bypass this safeguard that I'm sure many of you will be discussing on these forums, however, we would like to make it clear that plugins using any bypass that includes dynamic code generation will be denied from BukkitDev without hesitation due to the inherent security risks it poses for servers.

    Whether you are a server admin or a plugin developer, you are free to discuss ways to get around this safeguard provided it does not involve an unofficial build. The issue with unofficial builds is that regardless of where people get them from, we almost inevitably end up having to provide support for them.

    We know that this safeguard might cause a few of you some headaches, however we feel that choosing to let servers burn in the coming weeks is not a viable option. Thank you for your continued support, cooperation and understanding in this matter. This was a difficult decision for us to make, but preventing unchecked plugins from silently destroying servers was a big incentive for us.
    Archarin, AlexMl, DanManB and 16 others like this.
  2. Offline


    BukkitDev approval times are being worked on - I think they're recruiting new staff.
  3. Offline


    If approval times are the only problem, we will have that mitigated soon due to staff applications being reviewed and new staff will be brought on shortly in the new year. Christmas kind of sidetracked us from handling that.

    Since updating is not the problem
    And approval times will be improved in the new year, we are left with administrators having to update their server, but since there hasn't been a single update that has gone by that I haven't needed to either update a few plugins, or run without them for a few days, this isn't a new problem at all. These plugins I need to update are always the ones that poke into NMS anyway.
    4am likes this.
  4. Offline


    when (and if) Mojang releases their API, we'll see if people are going to use it, or decline it. And even if its not a complete rewrite, it might not be a complete failure. who knows? I just want all the fighting to stop.... :3
  5. Offline


    Thanks for speaking out. This community seems to hate any form of disagreement with administration.

    There is certainly a need for some sort of "safeguard"- but are you guys taking it too far? Adding a warning and manual confirmation highly discourages server administrators with (1) mere psychological distrust [the result of unexperienced server administrators who don't understand what plugins are doing behind the scenes (most server administrators)]. As well, Bukkit (2) explicitly states future damage, and such is explicit discouragement of the usage of such a plugin regardless of how trustworthy the author may be. Such can seriously impact large servers as they simply cannot afford even the slightest possibility of damage. And for us developers, like rossfudgew had said, (3) we loose the critical ability to trace issues.

    My suggestion is rather than having some "safeguard" as such, have a nexus API, which allows developers to access Mojang/Bukkit code via an API. The API grants developers all possible usage while administrators might be able to define a custom set of rules (and with so, Bukkit may be able to distribute- default; rules that will not restrict plugin actions that can cause damage yet still block critical possible damage).
  6. Offline


    If anyone is having trouble updating NMS-dependent plugins written for 1.4.5 to work on 1.4.6, I've created this mapping which may be useful:

    CL: net/minecraft/server/CreativeModeTab10 net/minecraft/server/CreativeModeTab7
    CL: net/minecraft/server/CreativeModeTab11 net/minecraft/server/CreativeModeTab8
    CL: net/minecraft/server/CreativeModeTab12 net/minecraft/server/CreativeModeTab9
    CL: net/minecraft/server/CreativeModeTab2 net/minecraft/server/CreativeModeTab10
    CL: net/minecraft/server/CreativeModeTab3 net/minecraft/server/CreativeModeTab11
    CL: net/minecraft/server/CreativeModeTab4 net/minecraft/server/CreativeModeTab12
    CL: net/minecraft/server/CreativeModeTab5 net/minecraft/server/CreativeModeTab2
    CL: net/minecraft/server/CreativeModeTab6 net/minecraft/server/CreativeModeTab3
    CL: net/minecraft/server/CreativeModeTab7 net/minecraft/server/CreativeModeTab4
    CL: net/minecraft/server/CreativeModeTab8 net/minecraft/server/CreativeModeTab5
    CL: net/minecraft/server/CreativeModeTab9 net/minecraft/server/CreativeModeTab6
    CL: net/minecraft/server/DemoItemInWorldManager net/minecraft/server/DemoPlayerInteractManager
    CL: net/minecraft/server/EmptyClass net/minecraft/server/EmptyClass2
    CL: net/minecraft/server/EmptyClass2 net/minecraft/server/EmptyClass
    CL: net/minecraft/server/ItemInWorldManager net/minecraft/server/PlayerInteractManager
    CL: net/minecraft/server/NetHandler net/minecraft/server/Connection
    CL: net/minecraft/server/NetLoginHandler net/minecraft/server/PendingConnection
    CL: net/minecraft/server/NetServerHandler net/minecraft/server/PlayerConnection
    CL: net/minecraft/server/PlayerInstance net/minecraft/server/PlayerChunk
    CL: net/minecraft/server/PlayerManager net/minecraft/server/PlayerChunkMap
    CL: net/minecraft/server/RecipesArmorDye net/minecraft/server/RecipeArmorDye
    CL: net/minecraft/server/RecipesMapClone net/minecraft/server/RecipeMapClone
    CL: net/minecraft/server/RecipesMapExtend net/minecraft/server/RecipeMapExtend
    CL: net/minecraft/server/ServerConfigurationManager net/minecraft/server/DedicatedPlayerList
    CL: net/minecraft/server/ServerConfigurationManagerAbstract net/minecraft/server/PlayerList
    FD: net/minecraft/server/DataWatcher/a net/minecraft/server/DataWatcher/b
    FD: net/minecraft/server/DataWatcher/b net/minecraft/server/DataWatcher/c
    FD: net/minecraft/server/DataWatcher/c net/minecraft/server/DataWatcher/d
    FD: net/minecraft/server/DataWatcher/d net/minecraft/server/DataWatcher/e
    FD: net/minecraft/server/DemoItemInWorldManager/c net/minecraft/server/DemoPlayerInteractManager/c
    FD: net/minecraft/server/DemoItemInWorldManager/d net/minecraft/server/DemoPlayerInteractManager/d
    FD: net/minecraft/server/DemoItemInWorldManager/e net/minecraft/server/DemoPlayerInteractManager/e
    FD: net/minecraft/server/DemoItemInWorldManager/f net/minecraft/server/DemoPlayerInteractManager/f
    FD: net/minecraft/server/DemoWorldServer/K net/minecraft/server/DemoWorldServer/J
    FD: net/minecraft/server/EnchantmentProtection/A net/minecraft/server/EnchantmentProtection/C
    FD: net/minecraft/server/EnchantmentProtection/B net/minecraft/server/EnchantmentProtection/D
    FD: net/minecraft/server/EnchantmentProtection/C net/minecraft/server/EnchantmentProtection/E
    FD: net/minecraft/server/EnchantmentProtection/D net/minecraft/server/EnchantmentProtection/F
    FD: net/minecraft/server/EnchantmentWeaponDamage/A net/minecraft/server/EnchantmentWeaponDamage/C
    FD: net/minecraft/server/EnchantmentWeaponDamage/B net/minecraft/server/EnchantmentWeaponDamage/D
    FD: net/minecraft/server/EnchantmentWeaponDamage/C net/minecraft/server/EnchantmentWeaponDamage/E
    FD: net/minecraft/server/EnchantmentWeaponDamage/D net/minecraft/server/EnchantmentWeaponDamage/F
    FD: net/minecraft/server/Entity/aq net/minecraft/server/Entity/ar
    FD: net/minecraft/server/Entity/ar net/minecraft/server/Entity/as
    FD: net/minecraft/server/Entity/h net/minecraft/server/Entity/ap
    FD: net/minecraft/server/EntityArrow/as net/minecraft/server/EntityArrow/at
    FD: net/minecraft/server/EntityArrow/au net/minecraft/server/EntityArrow/av
    FD: net/minecraft/server/EntityEnderDragon/bI net/minecraft/server/EntityEnderDragon/bJ
    FD: net/minecraft/server/EntityEnderDragon/bJ net/minecraft/server/EntityEnderDragon/bK
    FD: net/minecraft/server/EntityEnderDragon/bK net/minecraft/server/EntityEnderDragon/bL
    FD: net/minecraft/server/EntityEnderDragon/bL net/minecraft/server/EntityEnderDragon/bM
    FD: net/minecraft/server/EntityEnderDragon/bM net/minecraft/server/EntityEnderDragon/bN
    FD: net/minecraft/server/EntityEnderDragon/bN net/minecraft/server/EntityEnderDragon/bO
    FD: net/minecraft/server/EntityEnderDragon/bO net/minecraft/server/EntityEnderDragon/bP
    FD: net/minecraft/server/EntityEnderDragon/bP net/minecraft/server/EntityEnderDragon/bQ
    FD: net/minecraft/server/EntityEnderDragon/bQ net/minecraft/server/EntityEnderDragon/bR
    FD: net/minecraft/server/EntityEnderDragon/bR net/minecraft/server/EntityEnderDragon/bS
    FD: net/minecraft/server/EntityFireball/as net/minecraft/server/EntityFireball/at
    FD: net/minecraft/server/EntityFishingHook/as net/minecraft/server/EntityFishingHook/at
    FD: net/minecraft/server/EntityFishingHook/at net/minecraft/server/EntityFishingHook/au
    FD: net/minecraft/server/EntityFishingHook/au net/minecraft/server/EntityFishingHook/av
    FD: net/minecraft/server/EntityFishingHook/av net/minecraft/server/EntityFishingHook/aw
    FD: net/minecraft/server/EntityFishingHook/aw net/minecraft/server/EntityFishingHook/ax
    FD: net/minecraft/server/EntityFishingHook/ax net/minecraft/server/EntityFishingHook/ay
    FD: net/minecraft/server/EntityFishingHook/ay net/minecraft/server/EntityFishingHook/az
    FD: net/minecraft/server/EntityHuman/bM net/minecraft/server/EntityHuman/bN
    FD: net/minecraft/server/EntityHuman/bN net/minecraft/server/EntityHuman/bO
    FD: net/minecraft/server/EntityHuman/bO net/minecraft/server/EntityHuman/bP
    FD: net/minecraft/server/EntityHuman/bP net/minecraft/server/EntityHuman/bQ
    FD: net/minecraft/server/EntityHuman/bR net/minecraft/server/EntityHuman/bS
    FD: net/minecraft/server/EntityHuman/bS net/minecraft/server/EntityHuman/bT
    FD: net/minecraft/server/EntityHuman/bT net/minecraft/server/EntityHuman/bU
    FD: net/minecraft/server/EntityHuman/bU net/minecraft/server/EntityHuman/bV
    FD: net/minecraft/server/EntityHuman/bV net/minecraft/server/EntityHuman/bW
    FD: net/minecraft/server/EntityHuman/bW net/minecraft/server/EntityHuman/bX
    FD: net/minecraft/server/EntityHuman/bX net/minecraft/server/EntityHuman/bY
    FD: net/minecraft/server/EntityHuman/bZ net/minecraft/server/EntityHuman/ca
    FD: net/minecraft/server/EntityHuman/ca net/minecraft/server/EntityHuman/cb
    FD: net/minecraft/server/EntityHuman/cb net/minecraft/server/EntityHuman/cc
    FD: net/minecraft/server/EntityHuman/cg net/minecraft/server/EntityHuman/ch
    FD: net/minecraft/server/EntityHuman/ch net/minecraft/server/EntityHuman/ci
    FD: net/minecraft/server/EntityItem/d net/minecraft/server/EntityItem/c
    FD: net/minecraft/server/EntityItem/e net/minecraft/server/EntityItem/d
    FD: net/minecraft/server/EntityLiving/aA net/minecraft/server/EntityLiving/aB
    FD: net/minecraft/server/EntityLiving/aB net/minecraft/server/EntityLiving/aC
    FD: net/minecraft/server/EntityLiving/aC net/minecraft/server/EntityLiving/aD
    FD: net/minecraft/server/EntityLiving/aD net/minecraft/server/EntityLiving/aE
    FD: net/minecraft/server/EntityLiving/aE net/minecraft/server/EntityLiving/aF
    FD: net/minecraft/server/EntityLiving/aG net/minecraft/server/EntityLiving/aH
    FD: net/minecraft/server/EntityLiving/aH net/minecraft/server/EntityLiving/aI
    FD: net/minecraft/server/EntityLiving/aI net/minecraft/server/EntityLiving/aJ
    FD: net/minecraft/server/EntityLiving/aJ net/minecraft/server/EntityLiving/aK
    FD: net/minecraft/server/EntityLiving/aK net/minecraft/server/EntityLiving/aL
    FD: net/minecraft/server/EntityLiving/aL net/minecraft/server/EntityLiving/aM
    FD: net/minecraft/server/EntityLiving/aM net/minecraft/server/EntityLiving/aN
    FD: net/minecraft/server/EntityLiving/aN net/minecraft/server/EntityLiving/aO
    FD: net/minecraft/server/EntityLiving/aO net/minecraft/server/EntityLiving/aP
    FD: net/minecraft/server/EntityLiving/aP net/minecraft/server/EntityLiving/aQ
    FD: net/minecraft/server/EntityLiving/aR net/minecraft/server/EntityLiving/aS
    FD: net/minecraft/server/EntityLiving/aS net/minecraft/server/EntityLiving/aT
    FD: net/minecraft/server/EntityLiving/aT net/minecraft/server/EntityLiving/aU
    FD: net/minecraft/server/EntityLiving/aV net/minecraft/server/EntityLiving/aW
    FD: net/minecraft/server/EntityLiving/aW net/minecraft/server/EntityLiving/aX
    FD: net/minecraft/server/EntityLiving/aZ net/minecraft/server/EntityLiving/ba
    FD: net/minecraft/server/EntityLiving/as net/minecraft/server/EntityLiving/at
    FD: net/minecraft/server/EntityLiving/au net/minecraft/server/EntityLiving/av
    FD: net/minecraft/server/EntityLiving/av net/minecraft/server/EntityLiving/aw
    FD: net/minecraft/server/EntityLiving/aw net/minecraft/server/EntityLiving/ax
    FD: net/minecraft/server/EntityLiving/ax net/minecraft/server/EntityLiving/ay
    FD: net/minecraft/server/EntityLiving/ay net/minecraft/server/EntityLiving/az
    FD: net/minecraft/server/EntityLiving/az net/minecraft/server/EntityLiving/aA
    FD: net/minecraft/server/EntityLiving/bA net/minecraft/server/EntityLiving/bB
    FD: net/minecraft/server/EntityLiving/bB net/minecraft/server/EntityLiving/bC
    FD: net/minecraft/server/EntityLiving/bC net/minecraft/server/EntityLiving/bD
    FD: net/minecraft/server/EntityLiving/bD net/minecraft/server/EntityLiving/bE
    FD: net/minecraft/server/EntityLiving/bE net/minecraft/server/EntityLiving/bF
    FD: net/minecraft/server/EntityLiving/bF net/minecraft/server/EntityLiving/bG
    FD: net/minecraft/server/EntityLiving/bG net/minecraft/server/EntityLiving/bH
    FD: net/minecraft/server/EntityLiving/bH net/minecraft/server/EntityLiving/bI
    FD: net/minecraft/server/EntityLiving/bM net/minecraft/server/EntityLiving/bN
    FD: net/minecraft/server/EntityLiving/bN net/minecraft/server/EntityLiving/bO
    FD: net/minecraft/server/EntityLiving/bO net/minecraft/server/EntityLiving/bP
    FD: net/minecraft/server/EntityLiving/bP net/minecraft/server/EntityLiving/bQ
    FD: net/minecraft/server/EntityLiving/bQ net/minecraft/server/EntityLiving/bR
    FD: net/minecraft/server/EntityLiving/bS net/minecraft/server/EntityLiving/bT
    FD: net/minecraft/server/EntityLiving/bU net/minecraft/server/EntityLiving/bV
    FD: net/minecraft/server/EntityLiving/bV net/minecraft/server/EntityLiving/bW
    FD: net/minecraft/server/EntityLiving/ba net/minecraft/server/EntityLiving/bb
    FD: net/minecraft/server/EntityLiving/bb net/minecraft/server/EntityLiving/bc
    FD: net/minecraft/server/EntityLiving/bc net/minecraft/server/EntityLiving/bd
    FD: net/minecraft/server/EntityLiving/bd net/minecraft/server/EntityLiving/be
    FD: net/minecraft/server/EntityLiving/be net/minecraft/server/EntityLiving/bf
    FD: net/minecraft/server/EntityLiving/bf net/minecraft/server/EntityLiving/bg
    FD: net/minecraft/server/EntityLiving/bg net/minecraft/server/EntityLiving/bh
    FD: net/minecraft/server/EntityLiving/bh net/minecraft/server/EntityLiving/bi
    FD: net/minecraft/server/EntityLiving/bk net/minecraft/server/EntityLiving/bl
    FD: net/minecraft/server/EntityLiving/bp net/minecraft/server/EntityLiving/bq
    FD: net/minecraft/server/EntityLiving/bq net/minecraft/server/EntityLiving/br
    FD: net/minecraft/server/EntityLiving/bs net/minecraft/server/EntityLiving/bt
    FD: net/minecraft/server/EntityLiving/bt net/minecraft/server/EntityLiving/bu
    FD: net/minecraft/server/EntityLiving/bu net/minecraft/server/EntityLiving/bv
    FD: net/minecraft/server/EntityLiving/bv net/minecraft/server/EntityLiving/bw
    FD: net/minecraft/server/EntityLiving/bw net/minecraft/server/EntityLiving/bx
    FD: net/minecraft/server/EntityLiving/bx net/minecraft/server/EntityLiving/by
    FD: net/minecraft/server/EntityLiving/by net/minecraft/server/EntityLiving/bz
    FD: net/minecraft/server/EntityMinecart/as net/minecraft/server/EntityMinecart/at
    FD: net/minecraft/server/EntityMinecart/at net/minecraft/server/EntityMinecart/au
    FD: net/minecraft/server/EntityMinecart/au net/minecraft/server/EntityMinecart/av
    FD: net/minecraft/server/EntityMinecart/av net/minecraft/server/EntityMinecart/aw
    FD: net/minecraft/server/EntityMinecart/aw net/minecraft/server/EntityMinecart/ax
    FD: net/minecraft/server/EntityPlayer/ck net/minecraft/server/EntityPlayer/cl
    FD: net/minecraft/server/EntityPlayer/cl net/minecraft/server/EntityPlayer/cm
    FD: net/minecraft/server/EntityPlayer/cm net/minecraft/server/EntityPlayer/cn
    FD: net/minecraft/server/EntityPlayer/cp net/minecraft/server/EntityPlayer/cq
    FD: net/minecraft/server/EntityPlayer/cq net/minecraft/server/EntityPlayer/cr
    FD: net/minecraft/server/EntityPlayer/cr net/minecraft/server/EntityPlayer/cs
    FD: net/minecraft/server/EntityPlayer/itemInWorldManager net/minecraft/server/EntityPlayer/playerInteractManager
    FD: net/minecraft/server/EntityPlayer/netServerHandler net/minecraft/server/EntityPlayer/playerConnection
    FD: net/minecraft/server/EntitySquid/bI net/minecraft/server/EntitySquid/bJ
    FD: net/minecraft/server/EntitySquid/bJ net/minecraft/server/EntitySquid/bK
    FD: net/minecraft/server/EntitySquid/bK net/minecraft/server/EntitySquid/bL
    FD: net/minecraft/server/EntitySquid/bL net/minecraft/server/EntitySquid/bM
    FD: net/minecraft/server/EntitySquid/bM net/minecraft/server/EntitySquid/bN
    FD: net/minecraft/server/EntitySquid/bN net/minecraft/server/EntitySquid/bO
    FD: net/minecraft/server/EntitySquid/bO net/minecraft/server/EntitySquid/bP
    FD: net/minecraft/server/EntityVillager/bI net/minecraft/server/EntityVillager/bJ
    FD: net/minecraft/server/EntityVillager/bJ net/minecraft/server/EntityVillager/bK
    FD: net/minecraft/server/EntityVillager/bK net/minecraft/server/EntityVillager/bL
    FD: net/minecraft/server/EntityVillager/bL net/minecraft/server/EntityVillager/bM
    FD: net/minecraft/server/EntityVillager/bM net/minecraft/server/EntityVillager/bN
    FD: net/minecraft/server/EntityVillager/bN net/minecraft/server/EntityVillager/bO
    FD: net/minecraft/server/EntityVillager/bO net/minecraft/server/EntityVillager/bP
    FD: net/minecraft/server/EntityWither/bI net/minecraft/server/EntityWither/bJ
    FD: net/minecraft/server/Item/cj net/minecraft/server/Item/cm
    FD: net/minecraft/server/Item/ck net/minecraft/server/Item/cn
    FD: net/minecraft/server/Item/cl net/minecraft/server/Item/co
    FD: net/minecraft/server/ItemArmor/cl net/minecraft/server/ItemArmor/co
    FD: net/minecraft/server/ItemArmor/cm net/minecraft/server/ItemArmor/cp
    FD: net/minecraft/server/ItemFood/cl net/minecraft/server/ItemFood/co
    FD: net/minecraft/server/ItemFood/cm net/minecraft/server/ItemFood/cp
    FD: net/minecraft/server/ItemFood/cn net/minecraft/server/ItemFood/cq
    FD: net/minecraft/server/ItemFood/co net/minecraft/server/ItemFood/cr
    FD: net/minecraft/server/ItemFood/cp net/minecraft/server/ItemFood/cs
    FD: net/minecraft/server/ItemFood/cq net/minecraft/server/ItemFood/ct
    FD: net/minecraft/server/ItemInWorldManager/currentTick net/minecraft/server/PlayerInteractManager/currentTick
    FD: net/minecraft/server/ItemInWorldManager/d net/minecraft/server/PlayerInteractManager/d
    FD: net/minecraft/server/ItemInWorldManager/f net/minecraft/server/PlayerInteractManager/f
    FD: net/minecraft/server/ItemInWorldManager/g net/minecraft/server/PlayerInteractManager/g
    FD: net/minecraft/server/ItemInWorldManager/gamemode net/minecraft/server/PlayerInteractManager/gamemode
    FD: net/minecraft/server/ItemInWorldManager/h net/minecraft/server/PlayerInteractManager/h
    FD: net/minecraft/server/ItemInWorldManager/j net/minecraft/server/PlayerInteractManager/j
    FD: net/minecraft/server/ItemInWorldManager/k net/minecraft/server/PlayerInteractManager/k
    FD: net/minecraft/server/ItemInWorldManager/l net/minecraft/server/PlayerInteractManager/l
    FD: net/minecraft/server/ItemInWorldManager/lastDigTick net/minecraft/server/PlayerInteractManager/lastDigTick
    FD: net/minecraft/server/ItemInWorldManager/m net/minecraft/server/PlayerInteractManager/m
    FD: net/minecraft/server/ItemInWorldManager/n net/minecraft/server/PlayerInteractManager/n
    FD: net/minecraft/server/ItemInWorldManager/o net/minecraft/server/PlayerInteractManager/o
    FD: net/minecraft/server/ItemInWorldManager/player net/minecraft/server/PlayerInteractManager/player
    FD: net/minecraft/server/ItemInWorldManager/world net/minecraft/server/PlayerInteractManager/world
    FD: net/minecraft/server/ItemTool/cl net/minecraft/server/ItemTool/co
    FD: net/minecraft/server/NetLoginHandler/c net/minecraft/server/PendingConnection/c
    FD: net/minecraft/server/NetLoginHandler/d net/minecraft/server/PendingConnection/d
    FD: net/minecraft/server/NetLoginHandler/g net/minecraft/server/PendingConnection/g
    FD: net/minecraft/server/NetLoginHandler/h net/minecraft/server/PendingConnection/h
    FD: net/minecraft/server/NetLoginHandler/i net/minecraft/server/PendingConnection/i
    FD: net/minecraft/server/NetLoginHandler/k net/minecraft/server/PendingConnection/l
    FD: net/minecraft/server/NetLoginHandler/logger net/minecraft/server/PendingConnection/logger
    FD: net/minecraft/server/NetLoginHandler/loginKey net/minecraft/server/PendingConnection/loginKey
    FD: net/minecraft/server/NetLoginHandler/networkManager net/minecraft/server/PendingConnection/networkManager
    FD: net/minecraft/server/NetLoginHandler/random net/minecraft/server/PendingConnection/random
    FD: net/minecraft/server/NetLoginHandler/server net/minecraft/server/PendingConnection/server
    FD: net/minecraft/server/NetServerHandler/checkMovement net/minecraft/server/PlayerConnection/checkMovement
    FD: net/minecraft/server/NetServerHandler/disconnected net/minecraft/server/PlayerConnection/disconnected
    FD: net/minecraft/server/NetServerHandler/f net/minecraft/server/PlayerConnection/f
    FD: net/minecraft/server/NetServerHandler/g net/minecraft/server/PlayerConnection/g
    FD: net/minecraft/server/NetServerHandler/h net/minecraft/server/PlayerConnection/h
    FD: net/minecraft/server/NetServerHandler/i net/minecraft/server/PlayerConnection/i
    FD: net/minecraft/server/NetServerHandler/j net/minecraft/server/PlayerConnection/j
    FD: net/minecraft/server/NetServerHandler/k net/minecraft/server/PlayerConnection/k
    FD: net/minecraft/server/NetServerHandler/l net/minecraft/server/PlayerConnection/l
    FD: net/minecraft/server/NetServerHandler/logger net/minecraft/server/PlayerConnection/logger
    FD: net/minecraft/server/NetServerHandler/m net/minecraft/server/PlayerConnection/m
    FD: net/minecraft/server/NetServerHandler/minecraftServer net/minecraft/server/PlayerConnection/minecraftServer
    FD: net/minecraft/server/NetServerHandler/networkManager net/minecraft/server/PlayerConnection/networkManager
    FD: net/minecraft/server/NetServerHandler/player net/minecraft/server/PlayerConnection/player
    FD: net/minecraft/server/NetServerHandler/q net/minecraft/server/PlayerConnection/q
    FD: net/minecraft/server/NetServerHandler/s net/minecraft/server/PlayerConnection/s
    FD: net/minecraft/server/NetServerHandler/x net/minecraft/server/PlayerConnection/x
    FD: net/minecraft/server/NetServerHandler/y net/minecraft/server/PlayerConnection/y
    FD: net/minecraft/server/NetServerHandler/z net/minecraft/server/PlayerConnection/z
    FD: net/minecraft/server/NetworkManager/packetListener net/minecraft/server/NetworkManager/connection
    FD: net/minecraft/server/Packet23VehicleSpawn/h net/minecraft/server/Packet23VehicleSpawn/j
    FD: net/minecraft/server/Packet23VehicleSpawn/i net/minecraft/server/Packet23VehicleSpawn/k
    FD: net/minecraft/server/PlayerInstance/b net/minecraft/server/PlayerChunk/b
    FD: net/minecraft/server/PlayerInstance/dirtyBlocks net/minecraft/server/PlayerChunk/dirtyBlocks
    FD: net/minecraft/server/PlayerInstance/dirtyCount net/minecraft/server/PlayerChunk/dirtyCount
    FD: net/minecraft/server/PlayerInstance/f net/minecraft/server/PlayerChunk/f
    FD: net/minecraft/server/PlayerInstance/location net/minecraft/server/PlayerChunk/location
    FD: net/minecraft/server/PlayerInstance/playerManager net/minecraft/server/PlayerChunk/playerChunkMap
    FD: net/minecraft/server/PlayerManager/c net/minecraft/server/PlayerChunkMap/c
    FD: net/minecraft/server/PlayerManager/d net/minecraft/server/PlayerChunkMap/d
    FD: net/minecraft/server/PlayerManager/e net/minecraft/server/PlayerChunkMap/e
    FD: net/minecraft/server/PlayerManager/f net/minecraft/server/PlayerChunkMap/f
    FD: net/minecraft/server/PlayerManager/managedPlayers net/minecraft/server/PlayerChunkMap/managedPlayers
    FD: net/minecraft/server/PlayerManager/world net/minecraft/server/PlayerChunkMap/world
    FD: net/minecraft/server/ServerConfigurationManager/e net/minecraft/server/DedicatedPlayerList/e
    FD: net/minecraft/server/ServerConfigurationManager/f net/minecraft/server/DedicatedPlayerList/f
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/a net/minecraft/server/PlayerList/a
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/banByIP net/minecraft/server/PlayerList/banByIP
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/banByName net/minecraft/server/PlayerList/banByName
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/d net/minecraft/server/PlayerList/d
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/e net/minecraft/server/PlayerList/e
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/hasWhitelist net/minecraft/server/PlayerList/hasWhitelist
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/m net/minecraft/server/PlayerList/m
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/maxPlayers net/minecraft/server/PlayerList/maxPlayers
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/n net/minecraft/server/PlayerList/n
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/o net/minecraft/server/PlayerList/o
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/operators net/minecraft/server/PlayerList/operators
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/playerFileData net/minecraft/server/PlayerList/playerFileData
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/players net/minecraft/server/PlayerList/players
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/server net/minecraft/server/PlayerList/server
    FD: net/minecraft/server/ServerConfigurationManagerAbstract/whitelist net/minecraft/server/PlayerList/whitelist
    FD: net/minecraft/server/StructurePieceTreasure/d net/minecraft/server/StructurePieceTreasure/c
    FD: net/minecraft/server/StructurePieceTreasure/e net/minecraft/server/StructurePieceTreasure/d
    FD: net/minecraft/server/ThreadLoginVerifier/netLoginHandler net/minecraft/server/ThreadLoginVerifier/pendingConnection
    FD: net/minecraft/server/World/I net/minecraft/server/World/H
    FD: net/minecraft/server/World/K net/minecraft/server/World/J
    FD: net/minecraft/server/World/L net/minecraft/server/World/K
    FD: net/minecraft/server/World/M net/minecraft/server/World/L
    FD: net/minecraft/server/World/N net/minecraft/server/World/M
    FD: net/minecraft/server/World/O net/minecraft/server/World/N
    FD: net/minecraft/server/World/P net/minecraft/server/World/O
    FD: net/minecraft/server/World/w net/minecraft/server/World/v
    FD: net/minecraft/server/WorldServer/M net/minecraft/server/WorldServer/L
    FD: net/minecraft/server/WorldServer/N net/minecraft/server/WorldServer/M
    FD: net/minecraft/server/WorldServer/O net/minecraft/server/WorldServer/N
    FD: net/minecraft/server/WorldServer/Q net/minecraft/server/WorldServer/P
    FD: net/minecraft/server/WorldServer/R net/minecraft/server/WorldServer/Q
    FD: net/minecraft/server/WorldServer/S net/minecraft/server/WorldServer/R
    FD: net/minecraft/server/WorldServer/T net/minecraft/server/WorldServer/S
    MD: net/minecraft/server/BlockFluids/d (I)F net/minecraft/server/BlockFluids/e (I)F
    MD: net/minecraft/server/BlockLever/d (I)I net/minecraft/server/BlockLever/e (I)I
    MD: net/minecraft/server/BlockMinecartTrack/d (I)Z net/minecraft/server/BlockMinecartTrack/e (I)Z
    MD: net/minecraft/server/DedicatedServer/getServerConfigurationManager ()Lnet/minecraft/server/ServerConfigurationManagerAbstract; net/minecraft/server/DedicatedServer/getPlayerList ()Lnet/minecraft/server/PlayerList;
    MD: net/minecraft/server/DemoItemInWorldManager/a ()V net/minecraft/server/DemoPlayerInteractManager/a ()V
    MD: net/minecraft/server/DemoItemInWorldManager/a (III)V net/minecraft/server/DemoPlayerInteractManager/a (III)V
    MD: net/minecraft/server/DemoItemInWorldManager/breakBlock (III)Z net/minecraft/server/DemoPlayerInteractManager/breakBlock (III)Z
    MD: net/minecraft/server/DemoItemInWorldManager/dig (IIII)V net/minecraft/server/DemoPlayerInteractManager/dig (IIII)V
    MD: net/minecraft/server/DemoItemInWorldManager/e ()V net/minecraft/server/DemoPlayerInteractManager/e ()V
    MD: net/minecraft/server/DemoItemInWorldManager/interact (Lnet/minecraft/server/EntityHuman;Lnet/minecraft/server/World;Lnet/minecraft/server/ItemStack;IIIIFFF)Z net/minecraft/server/DemoPlayerInteractManager/interact (Lnet/minecraft/server/EntityHuman;Lnet/minecraft/server/World;Lnet/minecraft/server/ItemStack;IIIIFFF)Z
    MD: net/minecraft/server/DemoItemInWorldManager/useItem (Lnet/minecraft/server/EntityHuman;Lnet/minecraft/server/World;Lnet/minecraft/server/ItemStack;)Z net/minecraft/server/DemoPlayerInteractManager/useItem (Lnet/minecraft/server/EntityHuman;Lnet/minecraft/server/World;Lnet/minecraft/server/ItemStack;)Z
    MD: net/minecraft/server/EntityHuman/bS ()F net/minecraft/server/EntityHuman/bR ()F
    MD: net/minecraft/server/EntityHuman/bT ()Lnet/minecraft/server/ItemStack; net/minecraft/server/EntityHuman/bS ()Lnet/minecraft/server/ItemStack;
    MD: net/minecraft/server/EntityHuman/bU ()V net/minecraft/server/EntityHuman/bT ()V
    MD: net/minecraft/server/EntityHuman/bW ()Z net/minecraft/server/EntityHuman/bV ()Z
    MD: net/minecraft/server/EntityHuman/ce ()Z net/minecraft/server/EntityHuman/cd ()Z
    MD: net/minecraft/server/EntityHuman/f (Z)Z net/minecraft/server/EntityHuman/g (Z)Z
    MD: net/minecraft/server/EntityItem/d ()V net/minecraft/server/EntityItem/g ()V
    MD: net/minecraft/server/Item/a (Lnet/minecraft/server/ItemStack;)I net/minecraft/server/Item/c_ (Lnet/minecraft/server/ItemStack;)I
    MD: net/minecraft/server/Item/c_ (Lnet/minecraft/server/ItemStack;)Ljava/lang/String; net/minecraft/server/Item/d (Lnet/minecraft/server/ItemStack;)Ljava/lang/String;
    MD: net/minecraft/server/Item/d_ (Lnet/minecraft/server/ItemStack;)Lnet/minecraft/server/EnumAnimation; net/minecraft/server/Item/b_ (Lnet/minecraft/server/ItemStack;)Lnet/minecraft/server/EnumAnimation;
    MD: net/minecraft/server/Item/g (Lnet/minecraft/server/ItemStack;)Ljava/lang/String; net/minecraft/server/Item/i (Lnet/minecraft/server/ItemStack;)Ljava/lang/String;
    MD: net/minecraft/server/Item/h (Lnet/minecraft/server/ItemStack;)Z net/minecraft/server/Item/j (Lnet/minecraft/server/ItemStack;)Z
    MD: net/minecraft/server/Item/i (Lnet/minecraft/server/ItemStack;)Ljava/lang/String; net/minecraft/server/Item/k (Lnet/minecraft/server/ItemStack;)Ljava/lang/String;
    MD: net/minecraft/server/Item/j (Lnet/minecraft/server/ItemStack;)Ljava/lang/String; net/minecraft/server/Item/l (Lnet/minecraft/server/ItemStack;)Ljava/lang/String;
    MD: net/minecraft/server/Item/k (Lnet/minecraft/server/ItemStack;)Z net/minecraft/server/Item/d_ (Lnet/minecraft/server/ItemStack;)Z
    MD: net/minecraft/server/ItemArmor/b_ (Lnet/minecraft/server/ItemStack;)Z net/minecraft/server/ItemArmor/a (Lnet/minecraft/server/ItemStack;)Z
    MD: net/minecraft/server/ItemBlock/c_ (Lnet/minecraft/server/ItemStack;)Ljava/lang/String; net/minecraft/server/ItemBlock/d (Lnet/minecraft/server/ItemStack;)Ljava/lang/String;
    ... truncated due to post size limitations.. continued at: ...
    + full list (including unchanged symbols) at:
    This was created by generating CB-to-obfuscated mappings using the mc-dev and vanilla server jars, for 1.4.5 and 1.4.6, and matching up the symbols with the same names in MCP using an automated script. It doesn't include the v1_4_5/6 version packages, but those changes should be obvious. May be possible to create a tool to automatically remap plugins using this mapping, if anyone wants to, though I'm not planning on writing one myself (actually I started to, but gave up on remapping symbols accessed through reflection).

    Also, this mapping shows the risks of naively bypassing the safeguard, e.g., by using a custom classloader to support loading unversioned symbols. Some symbols will resolve properly in both versions, but the 560 classes/methods/fields listed above will not – and this list includes both obfuscated and deobfuscated names. My 2¢: best to not try to work against this safeguard, and instead work with it, using for example mbax's Maven abstraction.
    mbaxter likes this.
  7. The interesting number is that for the case "same signature but different method/semantics". And more interesting for me: Have that for differing CraftBukkit versions, because they already do some things there. For the remaining bit i would want to find out, which classes tend to change most and which kind of methods (auxiliary methods usually not accessed from outside or methods that are used by plugins typically, public visibility!). Best still be automatic analysis for most (probably not realistic).

    That is the direction i would go, if i had time and motivation for it ...
  8. Offline


    This has been an interested change in events. I know that a lot of discussion has already passed and I'm happy to say that I was effected by this only with a one-time update. So yay, I don't really care about the change personally as I'm unaffected.

    Best of luck with the changes! Hopefully the modding API helps ease the woes of a lot of these newly found deeply burdened developers. I guess I'm just lucky this was my first time dealing with an API of any sorts so I never went in very deep because if I had some of the issues mentioned I could only imagine my frustration ^^.

  9. Offline

    mbaxter ʇıʞʞnq ɐ sɐɥ ı

    I do some very deep stuff in my private projects, and I can assure you that this change isn't a burden. If anything, it points out to me each spot in my code that I should be re-checking since minecraft's internals have changed and therefore my methods/classes etc may have changed name or functionality.
  10. Offline



    I'm glad that it's useful for you! I found similar use during my few short stints using NMS code.

    My comment is mostly directed in the hopes that some of the developers that are overburdened by this change will come back with the creation and release of the Official Modding API, as well me being grateful I am not in that category and get to remain a part of this awesome community.

    Stayin' strong!
  11. Offline


    So plugins can causing lags?
  12. Offline


    This the way I, a server administrator, am seeing this (I dont know all the fancy java stuff about hooks and libraries and stuff):

    Before now devs were able to make plugins which used events from vanilla, bukkit and craftbukkit. I assume they used vanilla and cb in conjunction with bukkit because bukkit didnt implement the 'features' they needed to make their plugin work. From what I have read, devs can request the 'features' they would like implemented over github. Now the bukkit team is saying 'Alright, we dont want you to use anything that isnt in bukkit because it will most likely cause problems, but we arent going to implement the features you use from other sources to make your plugins work'. If the required, unimplemented 'features' were added, this safeguard wouldn't be needed because as the staff have said; bukkit is built to withstand changes (not exactly what was said) and then if there was a sudden change in how things were used, bukkit would be able to support it would be their own error. The bukkit team and plugin devs are like the minecraft player and a tamed wolf (no offence intended, its just an analogy), wherever bukkit decides to go, the devs have to go with it, whatever bukkit decides to change, the devs have to change accordingly, for the plugin to work of course. If the minecraft player encounters a big hole (i.e a change in something the developers use in their plugins), they can jump over, leaving the wolf there stuck instead of fixing the problem like building a bridge. My point is, instead of making a change like this that plugin devs arent agreeing with, you should help them by adding what they need, then everyone can cooperate and we dont have useless arguments.

    If im not mistaken, bukkit was created to make life easier for people who would like to add to minecraft's multiplayer experience without having to make fully fledged mods. I can only think of one other reason why this project was founded, and that was to make money from the donations. Sure, this safeguard will probably benefit the bukkit team, and they assume it will benefit the community, but it obviously hasn't, and in my opinion one of the last things you want is a divided, constantly squabbling community.

    Just support the plugin developers' needs and there will be far less problems.

    And on a side note;
    TnT, in reference to a previous discussion you had on this thread, when you write wikis and FAQs, you try to make them as clear as possible for others to understand, but in the end, it just ends up being understandable to you and you assume others will understand it. You can't use 'The FAQs were written to be as clear as possible' as an excuse.
    vgmddg, blackwolf12333 and Smex like this.
  13. Offline


  14. Offline

    mbaxter ʇıʞʞnq ɐ sɐɥ ı

    destruktoid Problem is, what you're saying isn't true. We're not preventing usage of anything, just ensuring that when the plugin developer uses highly risky internal calls (not through Bukkit) those calls are version-specific, which should mean the developer has actually tested their risky code calls on that specific version. This only changes when the minecraft internals change.

    We accept requests for additions to Bukkit, and encourage developers to submit their own code additions to Bukkit so that they don't have to rely on these risky internals. We aren't stopping that, and are working toward streamlining the process of getting new awesome code into the project!

    The upset developers represent a small, vocal minority. Many of the devs I've talked with (who use the risky internals) are actually quite happy with or ambivalent about this change.
  15. Copy and paste fail... so in short...
    Sure you accept requests, your statement however mirrors what has happened so far: nothing significant.

    Instead we had boiler plate updating from 1.4.5 to 1.4.5 to 1.4.6, while most plugins would not have needed to change a single line. Sure i know what this commit does in addition to nothing, yet i think the post you respond to, has something to do with the how-its-done aspect.

    Sounds as if it was not worth mentioning. How about counting the percentage of a) servers affected b) players on affected servers. It might come to peoples minds that it could be that counting active developers more than dead ones will reveal some numbers. You might count in devs that decided to leave but have not yet left. It is not to be taken lightly, i think there should be some awareness in Bukkit staff that this was not a genious move, regarding all the side aspects like timing and how-its-done, disregarding for the moment if it will ever amortize.
    MyPictures and vgmddg like this.
  16. Offline


    That's because these were all fairly minor updates. You can expect a lot more than ~500 symbol renames, not to mention other more significant code changes, between major releases - 1.4 to 1.5, etc. 1.5 isn't even finished yet, but looking at the 13w02b snapshot confirms this is the case. Just to mention two notable changes: block access has been reworked, World/WorldServer no longer implement the same set block/metadata methods you may be familiar with -- the BlockChangeDelegate interface will probably have to be updated or implemented via wrappers instead of directly by World (setTypeIdAndData(int x, int y, int z, int typeId, int data) - now has an extra bitmask parameter). Minecarts have been completely refactored: the minecart entity class is now abstract, with subclasses for storage, powered, TNT, and rideable carts; the rail logic has also been refactored to work with the new activator rails. Any plugin hooking into NMS for minecarts (such as @bergerkiller's TrainCarts) will likely need to be refactored as well - not simply changing the package imports.
  17. You are saying what i am saying. This is related to the how-its-done aspect and the timing question.
  18. Offline


    bergerkiller Simple fix - don't use BukkitDev. If you do want to share your stuff with others and not have to wait or have it shared across affiliated websites or have corporate sponsorship plastered over it, even a simple Wordpress site would do the job. Most of the Forge modding community make do with things like Wordpress, Octopress, or wiki-driven sites that cost very little or nothing.
  19. Offline


    This is a lot to take in at once. But I'll adapt to it.
  20. Offline


    I am a "server admin" but for a tiny server. I do not know what my plugins are doing in the background. But at least I am aware of my lack of knowledge and understand the risks! I research things when something breaks and willing to take the risk of my server going corrupt and "unbackupable". This is because its just me and some friends playing. If I would have a more public server I would certainly read up a lot more and be more selective about what plugins to use. The server/serverworld I have now isnt that valuable yet.
    I dont understand if admins on big servers are aware of what risks they are taking (those who dont understand how it all work) or if they are clueless and will go "fuuu" if and when a potential serverpocalypse occurs.
    DanManB likes this.
  21. Offline


    Do you mean I am allowed to use CraftBukkit codes in my plugin if I update my plugin each time the Bukkit updates? That might not be hard, because I only use "CraftServer" class to implement dynamic commands. So what I have to do to support all bukkit version is to access CraftBukkit codes though Class and Field classes. However my plugin will get bigger and bigger because of compatibility, and using CraftBukkit codes will prevent my plugin from being used by other Bukkit. :(
  22. Offline


    Just a question, and this is probably stupid, but why doesn't Mojang simply give Bukkit the deobfuscated code? Dinnerbone, EvilSeph, Grum, etc are all on the Mojang team, and the server software is already freely available...
  23. Offline


Thread Status:
Not open for further replies.

Share This Page