BukkitIRCd
BukkitIRCd by Jdbye
- A standalone IRC server plugin for Bukkit
Latest Version: v0.9.3
Features:
- Runs as either a standalone IRC server, or a IRC link to any InspIRCd server.
- Standalone IRC server with ingame chat, easily integrated with website using a IRC widget or applet.
- Whois for both IRC and ingame players, shows current world. Also works ingame.
- Nickname suffix for ingame players to differentiate between IRC and normal players.
- Nick changing on IRC, shows up ingame.
- Public chat from IRC to game, and game to IRC.
- Private messaging from game to IRC, IRC to game, and IRC to IRC.
- Kicking, banning and listing IRC users and setting topic from IRC and ingame.
- Reply quickly to messages using /ircreply
- Ingame users show as separate users on IRC.
- Execute server commands from IRC. (oper only)
- IRC notices from IRC to game, and IRC to IRC.
- IRC joins/quits show up ingame, and vice versa.
- Customizable MOTD read from motd.txt
- Customizable messages read from messages.yml
- User modes (op, protect, voice, etc.) based on permissions nodes.
- Customizable color code conversion between IRC<->Game.
- IRC formatting codes are supported ingame using ^B for bold, ^I for italic, ^U for underline, ^O for normal and ^K for color, and are stripped from ingame chat.
- Dynmap support - IRC messages show up on Dynmap, and vice versa.
Coming soon:
- HeroChat/Towny support
- UnrealIRCd linking support.
Commands: (arguments enclosed in parenthesis are optional)
- /irckick nick (reason) - Kicks someone from IRC. Aliases: /ikick
- /ircban (type) nick/ip/fullhost (reason) - Bans a online user from IRC by their host, IP, nick or ident, or offline user by IP or full hostmask. (type) means you can type either one of host/ip/ident/nick to choose the type of ban. This is optional and it will use the config file setting if it's omitted. Aliases: /iban
- /ircunban ip/fullhost - Unbans a user from IRC. Aliases: /iunban
- /irclist - Lists all users currently on IRC. Aliases: /ilist
- /ircwhois nick - Looks up any user currently on IRC. Aliases: /iwhois
- /ircmsg nick message - Private messages any user currently on IRC. Aliases: /imsg, /im
- /ircreply message - Reply to the last message you received from IRC. Aliases: /ireply, /ir
- /irctopic newtopic - Changes the IRC topic. Aliases: /itopic
- /irclink - Attempts to link to the remote IRC server if in linking mode. Aliases: /ilink
- /ircreload - Reloads the configuration file. Aliases: /ireload
- /rawsend command - For debugging purposes only. Sends a raw server command in linking mode. Disabled by default in the config file.
- !players - IRC command to list online players.
Permission Nodes (Permissions 2.x/Superperms):
- bukkitircd.kick - Permission for /irckick
- bukkitircd.ban - Permission for /ircban
- bukkitircd.unban - Permission for /ircunban
- bukkitircd.list - Permission for /irclist
- bukkitircd.whois - Permission for /ircwhois
- bukkitircd.msg - Permission for /ircmsg
- bukkitircd.reply - Permission for /ircreply
- bukkitircd.topic - Permission for /irctopic
- bukkitircd.link - Permission for /irclink
- bukkitircd.reload - Permission for /ircreload
- bukkitircd.* - Gives the player permission to all of the above.
- bukkitircd.oper - Gives the player IRC Operator status. Currently doesn't do anything apart from show it in /whois
- bukkitircd.mode.owner, bukkitircd.mode.protect, bukkitircd.mode.op, bukkitircd.mode.halfop, bukkitircd.mode.voice - Gives the player the corresponding IRC user mode.
- bukkitircd.mode.* - Gives the player every IRC user mode. (except oper)
Source is included in the JAR file and is licensed under GPLv3 GNU General Public License. This means you are free to release modified versions as long as the source is included.
<<reply 684466="">>
Would it be possible to create an additional channel called #spy accessible to operators where all the private messages (and herochat channel messages and faction chat messages when you support them) are shown?
<<reply 694903="">>
I ran into another permissions related problem where only users in a certain group could see the messages coming from IRC. This is not a bug, but I want to share the solution in hopes it helps someone else.
I had everyone with -bukkit. and my Admins group with bukkit. which made the Admins the only ones able to see the messages. I changed these to -bukkit.command. and bukkit.command. and restarted the server and now everyone can see the messages coming from IRC.
<<reply 684466="">>
I was able to get it working by setting "chatTagRelationColored": false in Factions/conf.json
This can be done in-game with /factions config chatTagRelationColored false
@bondiblueos9
I will attempt to fix this soon!
This plugin is great because in-game users are their own separate nicknames in IRC.
A guide on how to set up inspircd so that the two bukkitircd channels function the same as they do in the standalone server would be very helpful.
BukkitIRCd seems to not play well with Factions. IRC messages can be seen in-game, but in-game messages cannot be seen in IRC. It is probably the same problem as HeroChat.
cant wait for herochat support! oh and unrealircd support too
you seem to have the only irc plugin that gives users their own irc nick instead of sending ingame chat thru a bot
much better than the rest imo
Hi, I'm having a problem setting up BukkitIRCd. I want to link to an InspIRCd server, but I keep getting this error when trying to connect. Any help appreciated :-)
13:52:09 [INFO] [BukkitIRCd] Attempting connection to REMOVED:1234
13:52:09 [INFO] [BukkitIRCd] Connected to REMOVED:1234
13:52:09 [WARNING] [BukkitIRCd] Server link failed: java.io.IOException: Lost connection to server before sending handshake!
Thanks! :)
Would loooove to see the new 1.2.4 chat features (i.e. bold, italic, strikethru, underline) integrated into this.
Hey there, I was just curious if you had any plans on supporting IRCU leafs.
Not sure if it's a bug in the current version or something I'm doing but I can't find a config file after running.. If I execute /ircreload it says "Creating default configuration file -..." again (and every time).
Am I missing something?
Also, although it knows that PermissionsEX is my permissions plugin, it fails to recognize that it is running. I'm currently guessing that this is something I haven't configured in my non-existent config file.
Hi, great plugin!
I have a feature request, maybee you find it a good idea for an upcomming version.
Add the players current world as prefix for the irc chat messages, or a irc change nick when a user changes world, user/minecraft/worldname (add world name to the nick suffix)
a question, when i join #staff with a irc user(netadmin), and i type !help, i get a permission denied. how can i give an irc user permissions to execute console commands trough irc in the console chan?
(i have linked the BukkitIRCD to my inspircd irc server, the user i am talkin about, is connected to the main irc server where BukkitIRCD is linked to)
Another comment.... the config.yml is saved(or added) when the bukkit server stops, is this an "Un documented feature" :) or is it meant to be do that.
Deadlocked:
Found one Java-level deadlock:
"Thread-3": waiting to lock monitor 0x00007f0d0c0658e0 (object 0x00000004802aa4a8, a org.bukkit.plugin.SimplePluginManager), which is held by "Server thread" "Server thread": waiting to lock monitor 0x00007f0d0c026468 (object 0x000000049ab26888, a com.Jdbye.BukkitIRCd.IRCd$CriticalSection), which is held by "Thread-BukkitIRCd-InspIRCd" "Thread-BukkitIRCd-InspIRCd": waiting to lock monitor 0x00007f0d0c0658e0 (object 0x00000004802aa4a8, a org.bukkit.plugin.SimplePluginManager), which is held by "Server thread"
Java stack information for the threads listed above:
"Thread-3": at org.bukkit.plugin.SimplePluginManager.getPlugins(SimplePluginManager.java:341) - waiting to lock <0x00000004802aa4a8> (a org.bukkit.plugin.SimplePluginManager) at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:391) at org.bukkit.craftbukkit.CraftServer.disablePlugins(CraftServer.java:245) at net.minecraft.server.MinecraftServer.stop(MinecraftServer.java:402) at org.bukkit.craftbukkit.util.ServerShutdownThread.run(ServerShutdownThread.java:14) "Server thread": at com.Jdbye.BukkitIRCd.IRCd.getBukkitUser(IRCd.java:1255) - waiting to lock <0x000000049ab26888> (a com.Jdbye.BukkitIRCd.IRCd$CriticalSection) at com.Jdbye.BukkitIRCd.BukkitIRCdPlayerListener.onPlayerMove(BukkitIRCdPlayerListener.java:103) at sun.reflect.GeneratedMethodAccessor311.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:301) at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:459) - locked <0x00000004802aa4a8> (a org.bukkit.plugin.SimplePluginManager) at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:213) at net.minecraft.server.Packet10Flying.handle(SourceFile:126) at net.minecraft.server.NetworkManager.b(NetworkManager.java:229) at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:117) at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78) at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:554) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:452) at net.minecraft.server.ThreadServerApplication.run(SourceFile:490) "Thread-BukkitIRCd-InspIRCd": at org.bukkit.plugin.SimplePluginManager.getPlugin(SimplePluginManager.java:337) - waiting to lock <0x00000004802aa4a8> (a org.bukkit.plugin.SimplePluginManager) at ru.tehkode.permissions.bukkit.PermissionsEx.getPermissionManager(PermissionsEx.java:147) at ru.tehkode.permissions.bukkit.PermissionsEx.getUser(PermissionsEx.java:157) at ru.tehkode.permissions.bukkit.superperms.PermissiblePEX.performCheck(PermissiblePEX.java:123) at ru.tehkode.permissions.bukkit.superperms.PermissiblePEX.checkPermission(PermissiblePEX.java:109) at ru.tehkode.permissions.bukkit.superperms.PermissiblePEX.hasPermission(PermissiblePEX.java:101) at org.bukkit.craftbukkit.entity.CraftHumanEntity.hasPermission(CraftHumanEntity.java:102) at org.bukkit.craftbukkit.CraftServer.broadcast(CraftServer.java:958) at org.bukkit.craftbukkit.CraftServer.broadcastMessage(CraftServer.java:322) at com.Jdbye.BukkitIRCd.IRCd.parseLinkCommand(IRCd.java:2285) - locked <0x000000049ab26888> (a com.Jdbye.BukkitIRCd.IRCd$CriticalSection) at com.Jdbye.BukkitIRCd.IRCd.run(IRCd.java:400) at java.lang.Thread.run(Thread.java:722)
Found 1 deadlock.
Can I just host my own IRCd server? Hoping I can. Really Hoping.
Sweet baby Jesus yes! I look forward to the (hopefully soon) IRCu support.
Wooo! 1.2.3 ready now :D
Jdbye, are you still working on this project? I hope you are :x Does anyone have a 1.2.3 working version?
I look forward to the UnrealIRCd addition, this seems like it's going to make my world complete. Hope to see an update soon :D If you need a tester or anything feel free to give me a shout.
Looking forward to a 1.2.3 release :D I can't handle not having this amazing plugin.
I found the deadlock via jstack:
Found one Java-level deadlock:
"Thread-BukkitIRCd-InspIRCd": waiting to lock monitor 0x00007fe890000970 (object 0x00000004890f8010, a org.bukkit.plugin.SimplePluginManager), which is held by "Server thread" "Server thread": waiting to lock monitor 0x00007fe8ac008418 (object 0x0000000488581368, a com.Jdbye.BukkitIRCd.IRCd$CriticalSection), which is held by "Thread-BukkitIRCd-InspIRCd"
Java stack information for the threads listed above:
"Thread-BukkitIRCd-InspIRCd": at org.bukkit.plugin.SimplePluginManager.getPlugin(SimplePluginManager.java:336) - waiting to lock <0x00000004890f8010> (a org.bukkit.plugin.SimplePluginManager) at ru.tehkode.permissions.bukkit.PermissionsEx.getPermissionManager(PermissionsEx.java:152) at ru.tehkode.permissions.bukkit.PermissionsEx.getUser(PermissionsEx.java:162) at ru.tehkode.permissions.bukkit.superperms.PermissiblePEX.performCheck(PermissiblePEX.java:123) at ru.tehkode.permissions.bukkit.superperms.PermissiblePEX.checkPermission(PermissiblePEX.java:109) at ru.tehkode.permissions.bukkit.superperms.PermissiblePEX.hasPermission(PermissiblePEX.java:101) at org.bukkit.craftbukkit.entity.CraftHumanEntity.hasPermission(CraftHumanEntity.java:66) at org.bukkit.craftbukkit.CraftServer.broadcast(CraftServer.java:860) at org.bukkit.craftbukkit.CraftServer.broadcastMessage(CraftServer.java:271) at com.Jdbye.BukkitIRCd.IRCd.parseLinkCommand(IRCd.java:2283) - locked <0x0000000488581368> (a com.Jdbye.BukkitIRCd.IRCd$CriticalSection) at com.Jdbye.BukkitIRCd.IRCd.run(IRCd.java:400) at java.lang.Thread.run(Thread.java:722) "Server thread": at com.Jdbye.BukkitIRCd.IRCd.getBukkitUser(IRCd.java:1255) - waiting to lock <0x0000000488581368> (a com.Jdbye.BukkitIRCd.IRCd$CriticalSection) at com.Jdbye.BukkitIRCd.IRCd.addBukkitUser(IRCd.java:1155) at com.Jdbye.BukkitIRCd.BukkitIRCdPlayerListener.onPlayerJoin(BukkitIRCdPlayerListener.java:35) at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:270) at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:61) at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:460) - locked <0x00000004890f8010> (a org.bukkit.plugin.SimplePluginManager) at net.minecraft.server.ServerConfigurationManager.c(ServerConfigurationManager.java:131) at net.minecraft.server.NetLoginHandler.b(NetLoginHandler.java:121) at net.minecraft.server.NetLoginHandler.a(NetLoginHandler.java:40) at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:61) at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:537) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:435) at net.minecraft.server.ThreadServerApplication.run(SourceFile:465)
Found 1 deadlock.
When using this plugin after around 24 hours, my server just hangs requiring me to kill -9 bukkit. The CPU is near 0 percent during this period. I'm using this in inspircd mode.