mirror of
https://github.com/nikdoof/bukkitxmpp.git
synced 2025-12-14 10:02:16 +00:00
Initial code import
This commit is contained in:
2
MANIFEST.MF
Normal file
2
MANIFEST.MF
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
Manifest-Version: 1.0
|
||||||
|
Class-Path: ../lib/smack.jar ../lib/smackx.jar
|
||||||
8
build.sh
Executable file
8
build.sh
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
rm -rf out; mkdir out;
|
||||||
|
rm bukkitxmpp.jar
|
||||||
|
|
||||||
|
export CLASSPATH=$CLASSPATH:./libs/
|
||||||
|
javac -cp ./lib/bukkit-0.0.1-SNAPSHOT.jar:./lib/smack.jar:./lib/smackx.jar -d ./out/ ./src/com/pleaseignore/BukkitXMPP/*.java
|
||||||
|
jar -cvfm bukkitxmpp.jar MANIFEST.MF -C out/ . -C resources/ .
|
||||||
6
resources/plugin.yml
Normal file
6
resources/plugin.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
name: BukkitXMPP
|
||||||
|
main: com.pleaseignore.BukkitXMPP.BukkitXMPP
|
||||||
|
version: 0.1
|
||||||
|
author: Matalok
|
||||||
|
description: Links Minecraft chat and a XMPP/Jabber MUC room.
|
||||||
|
website: https://github.com/nikdoof/bukkitxmpp
|
||||||
166
src/com/pleaseignore/BukkitXMPP/BukkitXMPP.java
Normal file
166
src/com/pleaseignore/BukkitXMPP/BukkitXMPP.java
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
package com.pleaseignore.BukkitXMPP;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.event.Event.Priority;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
|
import org.bukkit.plugin.PluginLoader;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.util.config.Configuration;
|
||||||
|
|
||||||
|
import org.jivesoftware.smack.XMPPConnection;
|
||||||
|
import org.jivesoftware.smack.packet.Packet;
|
||||||
|
import org.jivesoftware.smack.packet.Message;
|
||||||
|
import org.jivesoftware.smack.PacketListener;
|
||||||
|
import org.jivesoftware.smackx.muc.MultiUserChat;
|
||||||
|
import org.jivesoftware.smack.XMPPException;
|
||||||
|
import org.jivesoftware.smack.Chat;
|
||||||
|
import org.jivesoftware.smack.util.StringUtils;
|
||||||
|
import org.jivesoftware.smackx.muc.DiscussionHistory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BukkitXMPP for Bukkit
|
||||||
|
*
|
||||||
|
* @author Matalok
|
||||||
|
*/
|
||||||
|
public class BukkitXMPP extends JavaPlugin implements PacketListener {
|
||||||
|
private final BukkitXMPPPlayerListener playerListener = new BukkitXMPPPlayerListener(this);
|
||||||
|
|
||||||
|
private Logger log;
|
||||||
|
|
||||||
|
public XMPPConnection xmppconn;
|
||||||
|
public MultiUserChat muc;
|
||||||
|
|
||||||
|
private String nickname;
|
||||||
|
private Configuration conf;
|
||||||
|
|
||||||
|
private void loadConfig(File yamlfile) {
|
||||||
|
conf = new Configuration(yamlfile);
|
||||||
|
if(yamlfile.exists()) {
|
||||||
|
conf.load();
|
||||||
|
} else {
|
||||||
|
conf.setProperty("connection.server", "example.org");
|
||||||
|
conf.setProperty("connection.username", "exampleuser");
|
||||||
|
conf.setProperty("connection.password", "examplepass");
|
||||||
|
conf.setProperty("connection.channel", "examplechannel@talk.example.org");
|
||||||
|
conf.setProperty("connection.nickname", "MinecraftBot");
|
||||||
|
conf.getBoolean("general.autoconnect", false);
|
||||||
|
conf.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void connectAndJoin() {
|
||||||
|
|
||||||
|
String server = conf.getString("connection.server", "");
|
||||||
|
String username = conf.getString("connection.username", "");
|
||||||
|
String password = conf.getString("connection.password", "");
|
||||||
|
String channel = conf.getString("connection.channel", "");
|
||||||
|
String nickname = conf.getString("connection.nickname", "MinecraftBot");
|
||||||
|
|
||||||
|
if (!server.equals("") && !username.equals("") && !password.equals("") && !channel.equals("")) {
|
||||||
|
try {
|
||||||
|
log.info("Connecting to XMPP");
|
||||||
|
xmppconn = new XMPPConnection(server);
|
||||||
|
xmppconn.connect();
|
||||||
|
xmppconn.login(username, password);
|
||||||
|
|
||||||
|
log.info("Joining Room");
|
||||||
|
muc = new MultiUserChat(xmppconn, channel);
|
||||||
|
|
||||||
|
DiscussionHistory history = new DiscussionHistory();
|
||||||
|
history.setMaxStanzas(0);
|
||||||
|
|
||||||
|
muc.join(nickname, "", history, 2000);
|
||||||
|
muc.addMessageListener(this);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warning("Error connecting to XMPP server " + server);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.warning("Incomplete configration for XMPP server");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disconnect() {
|
||||||
|
|
||||||
|
if (muc instanceof MultiUserChat) {
|
||||||
|
muc.leave();
|
||||||
|
muc = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xmppconn instanceof XMPPConnection) {
|
||||||
|
xmppconn.disconnect();
|
||||||
|
xmppconn = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onEnable() {
|
||||||
|
|
||||||
|
log = getServer().getLogger();
|
||||||
|
|
||||||
|
final File yml = new File(getDataFolder(), "BukkitXMPP.yml");
|
||||||
|
log.info("Path to BukkitXMLPP.yml: " + yml.getPath());
|
||||||
|
loadConfig(yml);
|
||||||
|
|
||||||
|
// Register our events
|
||||||
|
PluginManager pm = getServer().getPluginManager();
|
||||||
|
pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Event.Priority.Normal, this);
|
||||||
|
|
||||||
|
// EXAMPLE: Custom code, here we just output some info so we can check all is well
|
||||||
|
PluginDescriptionFile pdfFile = this.getDescription();
|
||||||
|
log.info( pdfFile.getName() + " v" + pdfFile.getVersion() + " loaded" );
|
||||||
|
|
||||||
|
// Connect to XMPP
|
||||||
|
if (conf.getBoolean("general.autoconnect", true))
|
||||||
|
connectAndJoin();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onDisable() {
|
||||||
|
disconnect();
|
||||||
|
PluginDescriptionFile pdfFile = this.getDescription();
|
||||||
|
log.info( pdfFile.getName() + " version " + pdfFile.getVersion() + " disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Player> getListeners() {
|
||||||
|
List<Player> list = null;
|
||||||
|
for(World world: getServer().getWorlds()) {
|
||||||
|
if (list == null) {
|
||||||
|
list = world.getPlayers();
|
||||||
|
} else {
|
||||||
|
list.addAll(world.getPlayers());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendMCMessage(String msg) {
|
||||||
|
for(Player p: getListeners()) {
|
||||||
|
p.sendMessage(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void processPacket(Packet p)
|
||||||
|
{
|
||||||
|
if (p instanceof Message) {
|
||||||
|
final Message message = (Message) p;
|
||||||
|
if(message.getType() == Message.Type.groupchat) {
|
||||||
|
if(!StringUtils.parseResource(message.getFrom()).equalsIgnoreCase(nickname)) {
|
||||||
|
String outmsg = ChatColor.GRAY + "[" + ChatColor.DARK_GREEN + "XMPP" + ChatColor.GRAY + "] " + ChatColor.WHITE + StringUtils.parseResource(message.getFrom()) + ": " + message.getBody();
|
||||||
|
sendMCMessage(outmsg);
|
||||||
|
log.info(outmsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package com.pleaseignore.BukkitXMPP;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.player.PlayerChatEvent;
|
||||||
|
import org.bukkit.event.player.PlayerEvent;
|
||||||
|
import org.bukkit.event.player.PlayerListener;
|
||||||
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle events for all Player related events
|
||||||
|
* @author Matalok
|
||||||
|
*/
|
||||||
|
public class BukkitXMPPPlayerListener extends PlayerListener {
|
||||||
|
private final BukkitXMPP plugin;
|
||||||
|
|
||||||
|
public BukkitXMPPPlayerListener(BukkitXMPP instance) {
|
||||||
|
plugin = instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPlayerChat(PlayerChatEvent event) {
|
||||||
|
Player p = event.getPlayer();
|
||||||
|
String msg = event.getMessage();
|
||||||
|
try {
|
||||||
|
plugin.muc.sendMessage("[" + p.getDisplayName() + "] " + msg);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO: Error handling
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//Insert Player related code here
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user