2011-02-07 21:42:14 +01:00
|
|
|
package com.bukkit.mcteam.factions.listeners;
|
2011-02-06 13:36:11 +01:00
|
|
|
|
2011-03-22 18:48:09 +01:00
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.HashSet;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Set;
|
2011-02-12 18:05:05 +01:00
|
|
|
import java.util.logging.Logger;
|
2011-02-06 13:36:11 +01:00
|
|
|
|
2011-03-08 13:06:52 +01:00
|
|
|
import org.bukkit.block.Block;
|
2011-03-22 18:48:09 +01:00
|
|
|
import org.bukkit.command.CommandSender;
|
|
|
|
import org.bukkit.entity.Player;
|
2011-02-06 13:36:11 +01:00
|
|
|
import org.bukkit.event.player.PlayerChatEvent;
|
|
|
|
import org.bukkit.event.player.PlayerEvent;
|
2011-03-08 13:06:52 +01:00
|
|
|
import org.bukkit.event.player.PlayerItemEvent;
|
2011-02-06 13:36:11 +01:00
|
|
|
import org.bukkit.event.player.PlayerListener;
|
|
|
|
import org.bukkit.event.player.PlayerMoveEvent;
|
|
|
|
|
2011-03-18 17:33:23 +01:00
|
|
|
import com.bukkit.mcteam.factions.Board;
|
|
|
|
import com.bukkit.mcteam.factions.Conf;
|
2011-03-22 18:48:09 +01:00
|
|
|
import com.bukkit.mcteam.factions.FLocation;
|
2011-03-18 17:33:23 +01:00
|
|
|
import com.bukkit.mcteam.factions.FPlayer;
|
|
|
|
import com.bukkit.mcteam.factions.Faction;
|
2011-02-07 21:42:14 +01:00
|
|
|
import com.bukkit.mcteam.factions.Factions;
|
2011-02-13 17:02:51 +01:00
|
|
|
import com.bukkit.mcteam.factions.util.TextUtil;
|
|
|
|
|
2011-02-06 13:36:11 +01:00
|
|
|
|
|
|
|
public class FactionsPlayerListener extends PlayerListener{
|
2011-03-08 13:06:52 +01:00
|
|
|
|
2011-02-06 13:36:11 +01:00
|
|
|
@Override
|
2011-03-22 18:48:09 +01:00
|
|
|
public void onPlayerChat(PlayerChatEvent event) {
|
|
|
|
if ((event.getMessage().startsWith(Factions.instance.getBaseCommand()+" ") || event.getMessage().equals(Factions.instance.getBaseCommand())) && Conf.allowNoSlashCommand) {
|
|
|
|
List<String> parameters = TextUtil.split(event.getMessage().trim());
|
|
|
|
parameters.remove(0);
|
|
|
|
CommandSender sender = event.getPlayer();
|
|
|
|
Factions.instance.handleCommand(sender, parameters);
|
2011-02-06 13:36:11 +01:00
|
|
|
event.setCancelled(true);
|
2011-03-22 18:48:09 +01:00
|
|
|
return;
|
2011-02-06 13:36:11 +01:00
|
|
|
}
|
2011-03-22 18:48:09 +01:00
|
|
|
|
2011-02-12 18:05:05 +01:00
|
|
|
if (event.isCancelled()) {
|
2011-03-22 18:48:09 +01:00
|
|
|
return;
|
2011-02-12 18:05:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
Player talkingPlayer = event.getPlayer();
|
2011-02-06 13:36:11 +01:00
|
|
|
String msg = event.getMessage();
|
|
|
|
|
2011-02-12 18:05:05 +01:00
|
|
|
// ... it was not a command. This means that it is a chat message!
|
2011-03-18 17:33:23 +01:00
|
|
|
FPlayer me = FPlayer.get(talkingPlayer);
|
2011-02-13 09:08:20 +01:00
|
|
|
|
|
|
|
// Is it a faction chat message?
|
|
|
|
if (me.isFactionChatting()) {
|
|
|
|
String message = String.format(Conf.factionChatFormat, me.getNameAndRelevant(me), msg);
|
2011-03-22 18:48:09 +01:00
|
|
|
me.getFaction().sendMessage(message);
|
2011-02-13 09:08:20 +01:00
|
|
|
Logger.getLogger("Minecraft").info("FactionChat "+me.getFaction().getTag()+": "+message);
|
|
|
|
event.setCancelled(true);
|
|
|
|
return;
|
|
|
|
}
|
2011-02-12 18:05:05 +01:00
|
|
|
|
|
|
|
// Are we to insert the Faction tag into the format?
|
|
|
|
// If we are not to insert it - we are done.
|
|
|
|
if ( ! Conf.chatTagEnabled) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
String formatStart = event.getFormat().substring(0, Conf.chatTagInsertIndex);
|
|
|
|
String formatEnd = event.getFormat().substring(Conf.chatTagInsertIndex);
|
|
|
|
|
|
|
|
String nonColoredMsgFormat = formatStart + me.getChatTag() + formatEnd;
|
|
|
|
|
|
|
|
// Relation Colored?
|
|
|
|
if (Conf.chatTagRelationColored) {
|
|
|
|
// We must choke the standard message and send out individual messages to all players
|
|
|
|
// Why? Because the relations will differ.
|
|
|
|
event.setCancelled(true);
|
|
|
|
|
2011-03-18 17:33:23 +01:00
|
|
|
for (Player listeningPlayer : Factions.instance.getServer().getOnlinePlayers()) {
|
|
|
|
FPlayer you = FPlayer.get(listeningPlayer);
|
2011-02-12 18:05:05 +01:00
|
|
|
String yourFormat = formatStart + me.getChatTag(you) + formatEnd;
|
|
|
|
listeningPlayer.sendMessage(String.format(yourFormat, talkingPlayer.getDisplayName(), msg));
|
2011-02-06 13:36:11 +01:00
|
|
|
}
|
2011-02-12 18:05:05 +01:00
|
|
|
|
|
|
|
// Write to the log... We will write the non colored message.
|
|
|
|
String nonColoredMsg = String.format(nonColoredMsgFormat, talkingPlayer.getDisplayName(), msg);
|
|
|
|
Logger.getLogger("Minecraft").info(nonColoredMsg);
|
|
|
|
} else {
|
|
|
|
// No relation color.
|
|
|
|
event.setFormat(nonColoredMsgFormat);
|
2011-02-06 13:36:11 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onPlayerJoin(PlayerEvent event) {
|
2011-03-22 18:48:09 +01:00
|
|
|
// Make sure that all online players do have a fplayer.
|
2011-03-22 20:36:33 +01:00
|
|
|
FPlayer me = FPlayer.get(event.getPlayer());
|
|
|
|
|
|
|
|
// Update the lastLoginTime for this fplayer
|
|
|
|
me.setLastLoginTime(System.currentTimeMillis());
|
|
|
|
|
|
|
|
// Run the member auto kick routine. Twice to getToTheAdmins...
|
|
|
|
FPlayer.autoLeaveOnInactivityRoutine();
|
|
|
|
FPlayer.autoLeaveOnInactivityRoutine();
|
2011-02-06 13:36:11 +01:00
|
|
|
}
|
|
|
|
|
2011-03-22 20:36:33 +01:00
|
|
|
|
2011-02-06 13:36:11 +01:00
|
|
|
@Override
|
|
|
|
public void onPlayerQuit(PlayerEvent event) {
|
2011-03-22 18:48:09 +01:00
|
|
|
// Save all players on player quit.
|
|
|
|
FPlayer.save();
|
2011-02-06 13:36:11 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onPlayerMove(PlayerMoveEvent event) {
|
2011-03-18 17:33:23 +01:00
|
|
|
FPlayer me = FPlayer.get(event.getPlayer());
|
2011-02-13 17:04:06 +01:00
|
|
|
|
2011-02-06 13:36:11 +01:00
|
|
|
// Did we change coord?
|
2011-03-22 18:48:09 +01:00
|
|
|
FLocation from = me.getLastStoodAt();
|
|
|
|
FLocation to = new FLocation(event.getTo());
|
|
|
|
|
|
|
|
if (from.equals(to)) {
|
2011-02-06 13:36:11 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Yes we did change coord (:
|
2011-03-22 18:48:09 +01:00
|
|
|
|
|
|
|
me.setLastStoodAt(to);
|
2011-02-13 11:18:08 +01:00
|
|
|
|
2011-02-06 13:36:11 +01:00
|
|
|
if (me.isMapAutoUpdating()) {
|
2011-03-22 18:48:09 +01:00
|
|
|
me.sendMessage(Board.getMap(me.getFaction(), to, me.getPlayer().getLocation().getYaw()));
|
2011-02-06 13:36:11 +01:00
|
|
|
} else {
|
|
|
|
// Did we change "host"(faction)?
|
2011-03-22 18:48:09 +01:00
|
|
|
Faction factionFrom = Board.getFactionAt(from);
|
|
|
|
Faction factionTo = Board.getFactionAt(to);
|
2011-02-06 13:36:11 +01:00
|
|
|
if ( factionFrom != factionTo) {
|
|
|
|
me.sendFactionHereMessage();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2011-03-08 13:06:52 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onPlayerItem(PlayerItemEvent event) {
|
2011-03-22 18:48:09 +01:00
|
|
|
if (event.isCancelled()) {
|
2011-03-08 13:06:52 +01:00
|
|
|
return;
|
2011-03-22 18:48:09 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (event.getBlockClicked() == null) {
|
2011-03-10 01:21:17 +01:00
|
|
|
return; // right-clicked on air, not a block; no worries then
|
2011-03-22 18:48:09 +01:00
|
|
|
}
|
2011-03-10 01:21:17 +01:00
|
|
|
|
2011-03-22 18:48:09 +01:00
|
|
|
if ( ! this.playerCanUseItemHere(event.getPlayer(), event.getBlockClicked(), event.getItem().getTypeId())) {
|
2011-03-08 13:06:52 +01:00
|
|
|
event.setCancelled(true);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2011-03-18 00:04:45 +01:00
|
|
|
//currently checking placement/use of: redstone, sign, flint&steel, beds (not currently detected by Bukkit), buckets (empty, water, lava), repeater (not currently detected by Bukkit)
|
2011-03-18 17:33:23 +01:00
|
|
|
private static Set<Integer> badItems = new HashSet<Integer>(Arrays.asList(
|
2011-03-08 13:06:52 +01:00
|
|
|
new Integer[] {331, 323, 259, 355, 325, 326, 327, 356}
|
|
|
|
));
|
|
|
|
|
|
|
|
public boolean playerCanUseItemHere(Player player, Block block, int itemId) {
|
|
|
|
|
2011-03-22 18:48:09 +01:00
|
|
|
if ( ! badItems.contains(new Integer(itemId))) {
|
2011-03-08 13:06:52 +01:00
|
|
|
return true; // Item isn't one we're preventing.
|
|
|
|
}
|
|
|
|
|
2011-03-22 18:48:09 +01:00
|
|
|
Faction otherFaction = Board.getFactionAt(new FLocation(block));
|
2011-03-08 13:06:52 +01:00
|
|
|
|
2011-03-22 18:48:09 +01:00
|
|
|
if (otherFaction == null || otherFaction.getId() == 0) {
|
2011-03-08 13:06:52 +01:00
|
|
|
return true; // This is not faction territory. Use whatever you like here.
|
|
|
|
}
|
|
|
|
|
2011-03-18 17:33:23 +01:00
|
|
|
FPlayer me = FPlayer.get(player);
|
2011-03-08 13:06:52 +01:00
|
|
|
Faction myFaction = me.getFaction();
|
|
|
|
|
|
|
|
// Cancel if we are not in our own territory
|
|
|
|
if (myFaction != otherFaction) {
|
2011-03-22 18:48:09 +01:00
|
|
|
me.sendMessage("You can't use that in the territory of "+otherFaction.getTag(myFaction));
|
2011-03-08 13:06:52 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
2011-02-06 13:36:11 +01:00
|
|
|
}
|