Skip to content

Commit

Permalink
Implemented some commands..
Browse files Browse the repository at this point in the history
Even more to do :/
  • Loading branch information
Johannes13 authored and Johannes13 committed Mar 1, 2011
1 parent 9858a29 commit 97211f0
Show file tree
Hide file tree
Showing 7 changed files with 195 additions and 28 deletions.
35 changes: 34 additions & 1 deletion src/de/johannes13/minecraft/bukkit/chat/inspircd/IrcUser.java
@@ -1,8 +1,19 @@
package de.johannes13.minecraft.bukkit.chat.inspircd;

public class IrcUser {
import org.bukkit.Server;
import org.bukkit.command.CommandSender;

public class IrcUser implements CommandSender {

/**
* @param ircd
*/
public IrcUser(Ircd ircd) {
this.ircd = ircd;
}

String uid, nick;
final Ircd ircd;

/**
* @return the uid
Expand Down Expand Up @@ -31,4 +42,26 @@ public String getNick() {
public void setNick(String nick) {
this.nick = nick;
}

@Override
public Server getServer() {
// TODO Auto-generated method stub
return null;
}

@Override
public boolean isOp() {
return false;
}

@Override
public boolean isPlayer() {
return false;
}

@Override
public void sendMessage(String message) {
// TODO Auto-generated method stub

}
}
33 changes: 24 additions & 9 deletions src/de/johannes13/minecraft/bukkit/chat/inspircd/Ircd.java
Expand Up @@ -5,6 +5,7 @@
import java.net.InetAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Hashtable;
import java.util.List;
import java.util.Scanner;
Expand Down Expand Up @@ -176,6 +177,7 @@ private void parseCommands(String line, PrintStream w2) throws IOException {
case NICK:
IrcUser u = uid2meta.get(data[0]);
u.nick = data[2];
// TODO: send users a notify
break;
case SQUIT:
String rsid = data[2];
Expand Down Expand Up @@ -203,7 +205,7 @@ private void parseCommands(String line, PrintStream w2) throws IOException {
w2.println(line + " " + getTS() + "\r\n");
break;
case UID:
IrcUser iu = new IrcUser();
IrcUser iu = new IrcUser(this);
iu.uid = data[2];
iu.nick = data[4];
uid2meta.put(data[2], iu);
Expand All @@ -214,9 +216,10 @@ private void parseCommands(String line, PrintStream w2) throws IOException {
case PRIVMSG:
if (data[2].startsWith("#")) {
// do something stupid, relay it
// TODO: Parse CTCPs
ChannelMetadata ch = chmap.get(data[2]);
if (ch != null)
plugin.sendIrcMessage(uid2meta.get(data[0]).nick, ch, data[3]);
ch.sendMessage(uid2meta.get(data[0]).nick, data[3]);
} else {
PlayerMetadata pm = uid2player.get(data[2]);
System.out.println(pm);
Expand Down Expand Up @@ -278,7 +281,7 @@ private void parseCommands(String line, PrintStream w2) throws IOException {
if (!chmap.contains(cm)) continue;
w2.println(":" + sid + " FJOIN " + cm.getIrcRelay() + " " + cm.getTs() + " + :," + uid);
}
break;
break;
default:
// ignore
}
Expand Down Expand Up @@ -343,11 +346,8 @@ public void exit() {
}
}

public void sendMessage(PlayerMetadata metadata, String message) {
ChannelMetadata cm = plugin.getChannel(metadata.getCurrentChannel());
if (!chmap.contains(cm)) return;
System.out.println(":" + metadata.getUid() + " PRIVMSG " + cm.getIrcRelay() + " :" + message);
w.println(":" + metadata.getUid() + " PRIVMSG " + cm.getIrcRelay() + " :" + message);
public void sendMessage(PlayerMetadata metadata, String channel, String message) {
w.println(":" + metadata.getUid() + " PRIVMSG " + channel + " :" + message);
}

public void addPlayer(Player player) {
Expand Down Expand Up @@ -409,7 +409,22 @@ public void removePlayer(Player player, String string) {

public void removePlayer(Player player, String string, String string2) {
System.out.println("Ircd.removePlayer() Kicked: " + string2);
w.println(":" + plugin.getMetadata(player).getUid() + " OPERQUIT :Kicked: " + string2);
w.println(":" + sid + " OPERQUIT " + plugin.getMetadata(player).getUid() + " :Kicked: " + string2);
w.println(":" + plugin.getMetadata(player).getUid() + " QUIT :Quit: " + string);
}

public boolean isValid(String channel) {
if (channel == null) return false;
if (channel.equals("")) return false;
if (channel.charAt(0) != '#') return false;
return true;
}

public void sendAction(PlayerMetadata src, String channel, String message) {
w.println(":" + src.getUid() + " PRIVMSG " + channel + " :\u0001ACTION " + message + "\u0001");
}

public Collection<IrcUser> getUser() {
return uid2meta.values();
}
}
Expand Up @@ -15,6 +15,7 @@ public class ChannelMetadata {
boolean hidden;
int priority;
List<IrcUser> ircuser = new ArrayList<IrcUser>();
private ChatPlugin plugin;

/**
* @return the hidden
Expand Down Expand Up @@ -55,7 +56,8 @@ public ChannelMetadata() {
* @param allow
* @param publicName
*/
public ChannelMetadata(String name, String ircRelay, String publicName, boolean hidden, int priority) {
public ChannelMetadata(ChatPlugin p, String name, String ircRelay, String publicName, boolean hidden, int priority) {
this.plugin = p;
this.name = name;
this.ircRelay = ircRelay;
this.publicName = publicName;
Expand Down Expand Up @@ -134,8 +136,37 @@ public void setPriority(int priority) {

@Override
public String toString() {
// TODO Auto-generated method stub
return "Channel("+name+")";
}

public void sendMessage(PlayerMetadata src, String message) {
for(PlayerMetadata t : players) {
t.getPlayer().sendMessage("[" + publicName + "] " + src.getPlayer().getDisplayName() + ": " + message);
}
if (plugin.ircd.isValid(ircRelay)) {
plugin.ircd.sendMessage(src, ircRelay, message);
}
}
// msg from IRC
public void sendMessage(String src, String message) {
for(PlayerMetadata t : players) {
t.getPlayer().sendMessage("[" + ircRelay + "] " + src + ": " + message);
}
}

public void sendAction(PlayerMetadata src, String message) {
for(PlayerMetadata t : players) {
t.getPlayer().sendMessage("[" + publicName + "] * " + src.getPlayer().getDisplayName() + " " + message);
}
if (plugin.ircd.isValid(ircRelay)) {
plugin.ircd.sendAction(src, ircRelay, message);
}
}

public void sendAction(String src, String message) {
for(PlayerMetadata t : players) {
t.getPlayer().sendMessage("[" + ircRelay + "] * " + src + " " + message);
}
}

}
Expand Up @@ -2,6 +2,6 @@

public enum ChatCommands {

ME, MSG, CH, CHLIST, CHANNELS;
ME, MSG, CH, NAMES, MME;

}
12 changes: 3 additions & 9 deletions src/de/johannes13/minecraft/bukkit/chat/plugin/ChatListener.java
Expand Up @@ -17,17 +17,11 @@ public ChatListener(ChatPlugin chatPlugin) {
@Override
public void onPlayerChat(PlayerChatEvent event) {
if (event.isCancelled()) return;
System.out.println("ChatListener.onPlayerChat() " + String.format(event.getFormat(), event.getPlayer().getDisplayName(), event.getMessage()));
event.setCancelled(true);
PlayerMetadata pm = plugin.getMetadata(event.getPlayer());
if (pm.getCurrentChannel() == null) return;
if (pm.getCurrentChannel().equals("")) return;
plugin.ircd.sendMessage(pm, event.getMessage());
ChannelMetadata cm = plugin.cmeta.get(pm.getCurrentChannel());
System.out.println("Message goes to " +cm);
System.out.println("Public name for " +cm+ "=" + cm.publicName);
for(PlayerMetadata t : cm.players) {
t.getPlayer().sendMessage("[" + cm.publicName + "] " + pm.getPlayer().getDisplayName() + ": " + event.getMessage());
if (cm != null) {
cm.sendMessage(pm, event.getMessage());
event.setCancelled(true);
}
}

Expand Down
104 changes: 99 additions & 5 deletions src/de/johannes13/minecraft/bukkit/chat/plugin/ChatPlugin.java
Expand Up @@ -3,6 +3,7 @@
import java.io.File;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Hashtable;
Expand Down Expand Up @@ -70,7 +71,7 @@ public void onEnable() {
// parse config
List<ConfigurationNode> chs = getConfiguration().getNodeList("channels", empty);
for (ConfigurationNode conf : chs) {
cmeta.put(conf.getString("name"), new ChannelMetadata(conf.getString("name"), conf.getString("irc"), conf.getString("public-name"), conf.getBoolean("hidden", false), conf.getInt("priority", 0)));
cmeta.put(conf.getString("name"), new ChannelMetadata(this, conf.getString("name"), conf.getString("irc"), conf.getString("public-name"), conf.getBoolean("hidden", false), conf.getInt("priority", 0)));
}
System.out.println(cmeta);
ircd = new Ircd(getConfiguration().getNode("ircd"), this);
Expand Down Expand Up @@ -134,9 +135,101 @@ public boolean check(Player p, String perm) {

@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
System.out.println("ChatPlugin.onCommand("+sender+", "+cmd+", "+commandLabel+", "+java.util.Arrays.toString(args)+")");
if (sender instanceof Player) {
Player p = (Player) sender;
PlayerMetadata pm = umeta.get(p);
ChannelMetadata cm = cmeta.get(pm.getCurrentChannel());
try {
ChatCommands c = ChatCommands.valueOf(commandLabel.toUpperCase());
switch (c) {
case CH:
// TODO
break;
case ME:
if (args.length < 1) return false;
cm.sendAction(pm, joinArgs(args));
return true;
case MME:
if (args.length < 2) return false;
List<? extends CommandSender> res = findPlayer(args[0]);
if (res.size() > 1) {
p.sendMessage(ChatColor.RED + "User matched against:" + res);
return true;
} else {
CommandSender t = res.get(0);
if (t instanceof Player) {
t.sendMessage("(MSG) * " + p.getDisplayName() + " " + joinArgs(args));
} else if (t instanceof IrcUser) {
ircd.sendAction(pm, ((IrcUser) t).getUid(), joinArgs(args));
}
return true;
}
case MSG:
if (args.length < 2) return false;
res = findPlayer(args[0]);
if (res.size() > 1) {
p.sendMessage(ChatColor.RED + "User matched against:" + res);
return true;
} else {
CommandSender t = res.get(0);
if (t instanceof Player) {
t.sendMessage("(MSG) " + p.getDisplayName() + ": " + joinArgs(args));
} else if (t instanceof IrcUser) {
ircd.sendMessage(pm, ((IrcUser) t).getUid(), joinArgs(args));
}
return true;
}
case NAMES:
// TODO
break;

}
} catch (IllegalArgumentException e) {

}
}
return false;
}

public String joinArgs(String... args) {
String lmt = "";
StringBuilder msg = new StringBuilder(80);
for(String part : args) {
msg.append(lmt);
msg.append(part);
lmt = " ";
}
return msg.toString();
}

public List<? extends CommandSender> findPlayer(String nick) {
List<Player> plMatch = getServer().matchPlayer(nick);
ArrayList<IrcUser> plMatch2 = new ArrayList<IrcUser>();
for (IrcUser u : ircd.getUser()) {
if (u.getNick().startsWith(nick)) plMatch2.add(u);
}
if ((plMatch.size() + plMatch2.size()) > 1) {
// Check if args[0] is the full player name..
for (Player plm : plMatch) {
if (plm.getName().equalsIgnoreCase(nick))
return Arrays.asList(plm);
}
for (IrcUser iu : plMatch2) {
if (iu.getNick().equalsIgnoreCase(nick))
return Arrays.asList(iu);
}
ArrayList<CommandSender> res = new ArrayList<CommandSender>();
res.addAll(plMatch);
res.addAll(plMatch2);
}
if (plMatch.size() > 0) {
return plMatch;
}
if (plMatch2.size() > 0) {
return plMatch2;
}
return new ArrayList<CommandSender>();
}

public PlayerMetadata getMetadata(Player p) {
PlayerMetadata res = umeta.get(p);
Expand Down Expand Up @@ -186,7 +279,7 @@ public void forcePart(PlayerMetadata playerMetadata, ChannelMetadata channelMeta
if (playerMetadata.getCurrentChannel().equals(channelMetadata.name)) {
int max = -1;
String nch = "";
for(String ch:playerMetadata.getChannels()) {
for (String ch : playerMetadata.getChannels()) {
if (cmeta.get(ch).priority > max) {
max = cmeta.get(ch).priority;
nch = ch;
Expand Down Expand Up @@ -242,10 +335,11 @@ public void removePlayer(Player player) {
System.out.println(last == player);
PlayerMetadata pm = umeta.remove(player);
System.out.println(pm);
for(String s : pm.getChannels()) {
for (String s : pm.getChannels()) {
try {
cmeta.get(s).players.remove(pm);
} catch (Exception e) {}
} catch (Exception e) {
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/plugin.yml
Expand Up @@ -25,7 +25,7 @@ commands:
Example: /<command> - Lists all players and irc users in your current channel
Example: /<command> s - List all users in the channel s
mme:
description: sends a action to a player
description: sends a action to a player - /msg and /me in one command
usage: |
/<command> <player> <message>
Example: /<command> SlowPlayer is waiting for you - Sends "* Player is waiting for you" to SlowPlayer

0 comments on commit 97211f0

Please sign in to comment.