Initial Commit
This commit is contained in:
		
						commit
						49a29a7420
					
				|  | @ -0,0 +1,32 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <classpath> | ||||
| 	<classpathentry kind="src" output="target/classes" path="src/main/java"> | ||||
| 		<attributes> | ||||
| 			<attribute name="optional" value="true"/> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> | ||||
| 		<attributes> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> | ||||
| 		<attributes> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | ||||
| 		<attributes> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="src" output="target/test-classes" path="src/test/java"> | ||||
| 		<attributes> | ||||
| 			<attribute name="optional" value="true"/> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 			<attribute name="test" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="output" path="target/classes"/> | ||||
| </classpath> | ||||
|  | @ -0,0 +1,2 @@ | |||
| /bin/ | ||||
| /target/ | ||||
|  | @ -0,0 +1,23 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <projectDescription> | ||||
| 	<name>FPChatX</name> | ||||
| 	<comment></comment> | ||||
| 	<projects> | ||||
| 	</projects> | ||||
| 	<buildSpec> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.jdt.core.javabuilder</name> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.m2e.core.maven2Builder</name> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 	</buildSpec> | ||||
| 	<natures> | ||||
| 		<nature>org.eclipse.m2e.core.maven2Nature</nature> | ||||
| 		<nature>org.eclipse.jdt.core.javanature</nature> | ||||
| 	</natures> | ||||
| </projectDescription> | ||||
|  | @ -0,0 +1,3 @@ | |||
| eclipse.preferences.version=1 | ||||
| encoding//src/main/java=UTF-8 | ||||
| encoding/src=UTF-8 | ||||
|  | @ -0,0 +1,13 @@ | |||
| eclipse.preferences.version=1 | ||||
| org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled | ||||
| org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 | ||||
| org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve | ||||
| org.eclipse.jdt.core.compiler.compliance=1.8 | ||||
| org.eclipse.jdt.core.compiler.debug.lineNumber=generate | ||||
| org.eclipse.jdt.core.compiler.debug.localVariable=generate | ||||
| org.eclipse.jdt.core.compiler.debug.sourceFile=generate | ||||
| org.eclipse.jdt.core.compiler.problem.assertIdentifier=error | ||||
| org.eclipse.jdt.core.compiler.problem.enumIdentifier=error | ||||
| org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | ||||
| org.eclipse.jdt.core.compiler.release=disabled | ||||
| org.eclipse.jdt.core.compiler.source=1.8 | ||||
|  | @ -0,0 +1,4 @@ | |||
| activeProfiles= | ||||
| eclipse.preferences.version=1 | ||||
| resolveWorkspaceProjects=true | ||||
| version=1 | ||||
|  | @ -0,0 +1,117 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | ||||
|   <modelVersion>4.0.0</modelVersion> | ||||
|   <groupId>FPChatX</groupId> | ||||
|   <artifactId>FPChatX</artifactId> | ||||
|   <version>1.0.0-BETA</version> | ||||
|   <build> | ||||
|     <sourceDirectory>src/main/java</sourceDirectory> | ||||
|     <resources> | ||||
|       <resource> | ||||
|         <filtering>true</filtering> | ||||
|         <directory>src/main/resources</directory> | ||||
|       </resource> | ||||
|     </resources> | ||||
|     <plugins> | ||||
|       <plugin> | ||||
|         <artifactId>maven-compiler-plugin</artifactId> | ||||
|         <version>3.8.0</version> | ||||
|         <configuration> | ||||
|           <source>1.8</source> | ||||
|           <target>1.8</target> | ||||
|           <encoding>UTF-8</encoding> | ||||
|         </configuration> | ||||
|       </plugin> | ||||
|       <plugin> | ||||
|         <artifactId>maven-shade-plugin</artifactId> | ||||
|         <version>3.0.0</version> | ||||
|         <executions> | ||||
|           <execution> | ||||
|             <phase>package</phase> | ||||
|             <goals> | ||||
|               <goal>shade</goal> | ||||
|             </goals> | ||||
|           </execution> | ||||
|         </executions> | ||||
|         <configuration> | ||||
|           <source>1.7</source> | ||||
|           <artifactSet> | ||||
|             <includes> | ||||
|               <include>org.apache.commons*:*</include> | ||||
|             </includes> | ||||
|           </artifactSet> | ||||
|           <relocations /> | ||||
|         </configuration> | ||||
|       </plugin> | ||||
|     </plugins> | ||||
|   </build> | ||||
|   <repositories> | ||||
|     <repository> | ||||
|       <id>spigot-repo</id> | ||||
|       <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url> | ||||
|     </repository> | ||||
|     <repository> | ||||
|       <id>jitpack.io</id> | ||||
|       <url>https://jitpack.io</url> | ||||
|     </repository> | ||||
|     <repository> | ||||
|       <id>bungeecord-repo</id> | ||||
|       <url>https://oss.sonatype.org/content/repositories/snapshots</url> | ||||
|     </repository> | ||||
|     <repository> | ||||
|       <id>placeholderapi</id> | ||||
|       <url>http://repo.extendedclip.com/content/repositories/placeholderapi/</url> | ||||
|     </repository> | ||||
|   </repositories> | ||||
|   <dependencies> | ||||
|     <dependency> | ||||
|       <groupId>org.spigotmc</groupId> | ||||
|       <artifactId>spigot-api</artifactId> | ||||
|       <version>1.15.1-R0.1-SNAPSHOT</version> | ||||
|       <scope>compile</scope> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>org.bukkit</groupId> | ||||
|       <artifactId>bukkit</artifactId> | ||||
|       <version>1.15.1-R0.1-SNAPSHOT</version> | ||||
|       <scope>compile</scope> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>net.md-5</groupId> | ||||
|       <artifactId>bungeecord-api</artifactId> | ||||
|       <version>1.15-SNAPSHOT</version> | ||||
|       <scope>provided</scope> | ||||
|       <exclusions> | ||||
|         <exclusion> | ||||
|           <artifactId>bungeecord-config</artifactId> | ||||
|           <groupId>net.md-5</groupId> | ||||
|         </exclusion> | ||||
|         <exclusion> | ||||
|           <artifactId>bungeecord-event</artifactId> | ||||
|           <groupId>net.md-5</groupId> | ||||
|         </exclusion> | ||||
|         <exclusion> | ||||
|           <artifactId>bungeecord-protocol</artifactId> | ||||
|           <groupId>net.md-5</groupId> | ||||
|         </exclusion> | ||||
|         <exclusion> | ||||
|           <artifactId>netty-transport-native-unix-common</artifactId> | ||||
|           <groupId>io.netty</groupId> | ||||
|         </exclusion> | ||||
|       </exclusions> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>com.github.MilkBowl</groupId> | ||||
|       <artifactId>VaultAPI</artifactId> | ||||
|       <version>1.7</version> | ||||
|       <scope>provided</scope> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>me.clip</groupId> | ||||
|       <artifactId>placeholderapi</artifactId> | ||||
|       <version>2.10.4</version> | ||||
|       <scope>provided</scope> | ||||
|     </dependency> | ||||
|   </dependencies> | ||||
| </project> | ||||
| 
 | ||||
|  | @ -0,0 +1,105 @@ | |||
| <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||
| 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
| 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
| 	<modelVersion>4.0.0</modelVersion> | ||||
| 	<groupId>FPChatX</groupId> | ||||
| 	<artifactId>FPChatX</artifactId> | ||||
| 	<version>1.0.0-BETA</version> | ||||
| 	<repositories> | ||||
| 		<repository> | ||||
| 			<id>spigot-repo</id> | ||||
| 			<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url> | ||||
| 		</repository> | ||||
| 		<repository> | ||||
| 			<id>jitpack.io</id> | ||||
| 			<url>https://jitpack.io</url> | ||||
| 		</repository> | ||||
| 		<repository> | ||||
| 			<id>bungeecord-repo</id> | ||||
| 			<url>https://oss.sonatype.org/content/repositories/snapshots</url> | ||||
| 		</repository> | ||||
| 		<repository> | ||||
| 			<id>placeholderapi</id> | ||||
| 			<url>http://repo.extendedclip.com/content/repositories/placeholderapi/</url> | ||||
| 		</repository> | ||||
| 	</repositories> | ||||
| 	<build> | ||||
| 		<sourceDirectory>src/main/java</sourceDirectory> | ||||
| 		<resources> | ||||
| 			<resource> | ||||
| 				<directory>src/main/resources</directory> | ||||
| 				<filtering>true</filtering> | ||||
| 			</resource> | ||||
| 		</resources> | ||||
| 		<plugins> | ||||
| 			<plugin> | ||||
| 				<artifactId>maven-compiler-plugin</artifactId> | ||||
| 				<version>3.8.0</version> | ||||
| 				<configuration> | ||||
| 					<source>1.8</source> | ||||
| 					<target>1.8</target> | ||||
| 					<encoding>UTF-8</encoding> | ||||
| 				</configuration> | ||||
| 			</plugin> | ||||
| 			<plugin> | ||||
| 				<groupId>org.apache.maven.plugins</groupId> | ||||
| 				<artifactId>maven-shade-plugin</artifactId> | ||||
| 				<version>3.0.0</version> | ||||
| 				<configuration> | ||||
| 					<source>1.7</source> | ||||
| 					<artifactSet> | ||||
| 						<includes> | ||||
| 							<include>org.apache.commons*:*</include> | ||||
| 						</includes> | ||||
| 					</artifactSet> | ||||
| 					<relocations> | ||||
| 					</relocations> | ||||
| 				</configuration> | ||||
| 				<executions> | ||||
| 					<execution> | ||||
| 						<phase>package</phase> | ||||
| 						<goals> | ||||
| 							<goal>shade</goal> | ||||
| 						</goals> | ||||
| 					</execution> | ||||
| 				</executions> | ||||
| 			</plugin> | ||||
| 		</plugins> | ||||
| 	</build> | ||||
| 	<dependencies> | ||||
| 		<dependency> | ||||
| 			<groupId>org.apache.commons</groupId> | ||||
| 			<artifactId>commons-lang3</artifactId> | ||||
| 			<version>3.0</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>org.spigotmc</groupId> | ||||
| 			<artifactId>spigot-api</artifactId> | ||||
| 			<version>1.15.1-R0.1-SNAPSHOT</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>org.bukkit</groupId> | ||||
| 			<artifactId>bukkit</artifactId> | ||||
| 			<version>1.15.1-R0.1-SNAPSHOT</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>net.md-5</groupId> | ||||
| 			<artifactId>bungeecord-api</artifactId> | ||||
| 			<version>1.15-SNAPSHOT</version> | ||||
| 			<type>jar</type> | ||||
| 			<scope>provided</scope> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>com.github.MilkBowl</groupId> | ||||
| 			<artifactId>VaultAPI</artifactId> | ||||
| 			<version>1.7</version> | ||||
| 			<scope>provided</scope> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>me.clip</groupId> | ||||
| 			<artifactId>placeholderapi</artifactId> | ||||
| 			<version>2.10.4</version> | ||||
| 			<scope>provided</scope> | ||||
| 		</dependency> | ||||
| 	</dependencies> | ||||
| </project> | ||||
|  | @ -0,0 +1,242 @@ | |||
| package com.fpghoti.fpchatx; | ||||
| 
 | ||||
| import java.util.logging.Level; | ||||
| import java.util.logging.Logger; | ||||
| 
 | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.plugin.PluginDescriptionFile; | ||||
| import org.bukkit.plugin.PluginManager; | ||||
| import org.bukkit.plugin.java.JavaPlugin; | ||||
| import org.bukkit.scheduler.BukkitRunnable; | ||||
| import org.bukkit.scheduler.BukkitTask; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.badge.BadgeList; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| import com.fpghoti.fpchatx.chat.ShoutChannel; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.command.commands.BadgeClearCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.BadgeEquipCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.BadgeListCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.BlacklistCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.DeleteCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.JoinCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.TalkCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.GiveBadgeCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.HelpCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.HushCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.IgnoreCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.IgnoreListCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.KickCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.LeaveCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.ChannelsCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.CreateCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.MessageCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.ReloadCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.ReplyCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.RevokeBadgeCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.ShoutCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.ShoutToggleCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.SpyCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.UnHushCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.UnignoreCommand; | ||||
| import com.fpghoti.fpchatx.command.commands.WhoCommand; | ||||
| import com.fpghoti.fpchatx.config.MainConfig; | ||||
| import com.fpghoti.fpchatx.config.PlayerCache; | ||||
| import com.fpghoti.fpchatx.listener.PlayerListener; | ||||
| import com.fpghoti.fpchatx.mysql.MySQLConnection; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.VaultUtil; | ||||
| 
 | ||||
| public class FPChat extends JavaPlugin { | ||||
| 
 | ||||
| 	private static Logger log = Logger.getLogger("Minecraft"); | ||||
| 	private static Logger chatLog = Logger.getLogger("FPChat"); | ||||
| 	private MainConfig config; | ||||
| 	private MySQLConnection sql; | ||||
| 	private static FPChat plugin; | ||||
| 	private int mysqlTimer = 1140; | ||||
| 	private BukkitTask refresh = null; | ||||
| 	private PlayerListener listener = null; | ||||
| 	private PlayerCache cache; | ||||
| 	 | ||||
| 	public void onEnable() { | ||||
| 		plugin = this; | ||||
| 		VaultUtil vault = new VaultUtil(this); | ||||
| 		vault.setupChat(); | ||||
| 		vault.setupEconomy(); | ||||
| 		vault.setupPermissions(); | ||||
| 		config = new MainConfig(this); | ||||
| 		if(config.mySQLEnabled()) { | ||||
| 			sql = new MySQLConnection(this); | ||||
| 			sql.generate(); | ||||
| 			startTimers(); | ||||
| 		} | ||||
| 		registerEvents(); | ||||
| 		registerCommands(); | ||||
| 
 | ||||
| 		PluginDescriptionFile desc = getDescription(); | ||||
| 
 | ||||
| 		ChatChannel.loadChannels(); | ||||
| 		ChatChannel.setShout(new ShoutChannel(this)); | ||||
| 		ChatChannel.setDefault(config.getDefaultChannel()); | ||||
| 		BadgeList.setupBadges(); | ||||
| 		for(int i : BadgeList.badgelist.keySet()) { | ||||
| 			BadgeList.badgelist.put(i, BadgeList.badgelist.get(i).replace("&", "§")); | ||||
| 		} | ||||
| 		cache = new PlayerCache(this); | ||||
| 		for(Player bp : Bukkit.getOnlinePlayers()){ | ||||
| 			FPlayer.getPlayer(bp); | ||||
| 		} | ||||
| 		log(Level.INFO, desc.getName() + " version " + desc.getVersion() + " enabled."); | ||||
| 	} | ||||
| 
 | ||||
| 	public void onDisable() { | ||||
| 		for(FPlayer p : FPlayer.getPlayers()) { | ||||
| 			p.cleanup(); | ||||
| 		} | ||||
| 		if(config.mySQLEnabled()) { | ||||
| 			sql.disconnect(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void reload() { | ||||
| 		Commands.blockCommands(); | ||||
| 		if(listener != null) { | ||||
| 			listener.disable(); | ||||
| 		} | ||||
| 		if(refresh != null) { | ||||
| 			refresh.cancel(); | ||||
| 		} | ||||
| 
 | ||||
| 		sql.disconnect(); | ||||
| 		for(FPlayer p : FPlayer.getPlayers()) { | ||||
| 			p.cleanup(); | ||||
| 		} | ||||
| 		BadgeList.purge(); | ||||
| 		FPlayer.purge(); | ||||
| 		config = new MainConfig(this); | ||||
| 		if(config.mySQLEnabled()) { | ||||
| 			sql = new MySQLConnection(this); | ||||
| 			sql.generate(); | ||||
| 			startTimers(); | ||||
| 		} | ||||
| 		ChatChannel.loadChannels(); | ||||
| 		ChatChannel.setShout(new ShoutChannel(this)); | ||||
| 		ChatChannel.setDefault(config.getDefaultChannel()); | ||||
| 		BadgeList.setupBadges(); | ||||
| 		for(int i : BadgeList.badgelist.keySet()) { | ||||
| 			BadgeList.badgelist.put(i, BadgeList.badgelist.get(i).replace("&", "§")); | ||||
| 		} | ||||
| 		cache = new PlayerCache(this); | ||||
| 		for(Player bp : Bukkit.getOnlinePlayers()){ | ||||
| 			FPlayer.getPlayer(bp); | ||||
| 		} | ||||
| 		if(listener != null) { | ||||
| 			listener.enable(); | ||||
| 		} | ||||
| 		Commands.allowCommands(); | ||||
| 		log(Level.INFO, "FPChatX reloaded."); | ||||
| 	} | ||||
| 
 | ||||
| 	private void registerEvents() { | ||||
| 		this.listener = new PlayerListener(); | ||||
| 		PluginManager pm = getServer().getPluginManager(); | ||||
| 		pm.registerEvents(listener, this); | ||||
| 	} | ||||
| 
 | ||||
| 	private void registerCommands() { | ||||
| 		Commands.register(new ReloadCommand(this)); | ||||
| 		Commands.register(new ShoutCommand(this)); | ||||
| 		Commands.register(new ShoutToggleCommand(this)); | ||||
| 		Commands.register(new MessageCommand(this)); | ||||
| 		Commands.register(new ReplyCommand(this)); | ||||
| 		Commands.register(new IgnoreCommand(this)); | ||||
| 		Commands.register(new UnignoreCommand(this)); | ||||
| 		Commands.register(new IgnoreListCommand(this)); | ||||
| 		Commands.register(new BadgeListCommand(this)); | ||||
| 		Commands.register(new BadgeEquipCommand(this)); | ||||
| 		Commands.register(new BadgeClearCommand(this)); | ||||
| 		Commands.register(new SpyCommand(this)); | ||||
| 		Commands.register(new ChannelsCommand(this)); | ||||
| 		Commands.register(new WhoCommand(this)); | ||||
| 		Commands.register(new TalkCommand(this)); | ||||
| 		Commands.register(new JoinCommand(this)); | ||||
| 		Commands.register(new LeaveCommand(this));; | ||||
| 		Commands.register(new CreateCommand(this)); | ||||
| 		Commands.register(new DeleteCommand(this)); | ||||
| 		Commands.register(new HushCommand(this)); | ||||
| 		Commands.register(new UnHushCommand(this)); | ||||
| 		Commands.register(new KickCommand(this)); | ||||
| 		Commands.register(new BlacklistCommand(this)); | ||||
| 		Commands.register(new HelpCommand(this)); | ||||
| 		Commands.register(new RevokeBadgeCommand(this)); | ||||
| 		Commands.register(new GiveBadgeCommand(this)); | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	public MainConfig getMainConfig() { | ||||
| 		return this.config; | ||||
| 	} | ||||
| 	 | ||||
| 	public PlayerCache getPlayerCache() { | ||||
| 		return this.cache; | ||||
| 	} | ||||
| 
 | ||||
| 	public MySQLConnection getMySQLConnection() { | ||||
| 		return this.sql; | ||||
| 	} | ||||
| 
 | ||||
| 	public void log(Level level, String msg) { | ||||
| 		log.log(level, "[FPChatX] " + msg.replaceAll("§[0-9A-FK-OR]", "")); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	public void logChat(String msg) { | ||||
| 		chatLog.info(msg.replaceAll("§[0-9A-FK-OR]", "")); | ||||
| 	} | ||||
| 
 | ||||
| 	public static FPChat getPlugin(){ | ||||
| 		return plugin; | ||||
| 	} | ||||
| 
 | ||||
| 	public static String logo() { | ||||
| 		return "" + ChatColor.DARK_RED + "[" + ChatColor.GREEN + ChatColor.BOLD + "FPChatX" + ChatColor.RESET + ChatColor.DARK_RED + "]" + ChatColor.RESET ; | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { | ||||
| 		return Commands.performCommand(sender, command, label, args); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	public void startTimers() { | ||||
| 		refresh = new BukkitRunnable(){ | ||||
| 			public void run() { | ||||
| 				if(config.shoutCooldownEnabled()) {      //shout cooldown | ||||
| 					for(FPlayer p : FPlayer.getPlayers()) { | ||||
| 						if(p != null) { | ||||
| 							int time = p.getShoutCooldown(); | ||||
| 							if(time > 0){ | ||||
| 								p.setShoutCooldown(time - 1); | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				if(config.mySQLEnabled()){     // mysql auto reconnect | ||||
| 					if(mysqlTimer >= 1200){ | ||||
| 						sql.reconnect(); | ||||
| 						mysqlTimer = 0; | ||||
| 					}else{ | ||||
| 						mysqlTimer++; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskTimerAsynchronously(this, 1*20, 1*20); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,49 @@ | |||
| package com.fpghoti.fpchatx.badge; | ||||
| 
 | ||||
| import java.util.UUID; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class BadgeGetter { | ||||
| 
 | ||||
| 	public static Integer[] getBadges(FPlayer p){ | ||||
| 		UUID id = p.getUniqueId(); | ||||
| 		String uuid = id.toString(); | ||||
| 		Integer badge1 = 0, badge2 = 0, badge3 = 0; | ||||
| 		Util.connect(); | ||||
| 		if(!FPChat.getPlugin().getMySQLConnection().itemExists("player_uuid", uuid, FPChat.getPlugin().getMainConfig().getChatFeatureTable())){ | ||||
| 			BadgeSet.createPlayer(p); | ||||
| 		} | ||||
| 		badge1 = (Integer) FPChat.getPlugin().getMySQLConnection().get("badge_slot1", "player_uuid", "=", uuid, FPChat.getPlugin().getMainConfig().getChatFeatureTable()); | ||||
| 		badge2 = (Integer)FPChat.getPlugin().getMySQLConnection().get("badge_slot2", "player_uuid", "=", uuid, FPChat.getPlugin().getMainConfig().getChatFeatureTable()); | ||||
| 		badge3 = (Integer)FPChat.getPlugin().getMySQLConnection().get("badge_slot3", "player_uuid", "=", uuid, FPChat.getPlugin().getMainConfig().getChatFeatureTable()); | ||||
| 		Integer[] badges = {badge1, badge2, badge3}; | ||||
| 		return badges; | ||||
| 	} | ||||
| 
 | ||||
| 	public static Boolean hasBadge(FPlayer p, int id){ | ||||
| 		if(id == 0) { | ||||
| 			return true; | ||||
| 		} | ||||
| 		return p.hasPermission("fpchat.badge" + BadgeList.badgeperm.get(id)) || p.isSynced(id); | ||||
| 	} | ||||
| 	 | ||||
| 	public static Boolean canUseSlot(FPlayer p, int slotid){ | ||||
| 		if(slotid == 1){ | ||||
| 			return p.hasPermission("fpchat.slot1"); | ||||
| 		}else if(slotid == 2){ | ||||
| 			if(hasBadge(p,33) || hasBadge(p,34) || hasBadge(p,35) || hasBadge(p,52)){ | ||||
| 				return true; | ||||
| 			} | ||||
| 			return p.hasPermission("fpchat.slot2"); | ||||
| 		}else if(slotid == 3){ | ||||
| 			if(hasBadge(p,53)){ | ||||
| 				return true; | ||||
| 			} | ||||
| 			return p.hasPermission("fpchat.slot3"); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,324 @@ | |||
| package com.fpghoti.fpchatx.badge; | ||||
| 
 | ||||
| import java.util.HashMap; | ||||
| import java.util.LinkedHashMap; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class BadgeList { | ||||
| 
 | ||||
| 
 | ||||
| 	public static HashMap<Integer, String> badgelist = new LinkedHashMap<>(); | ||||
| 	public static HashMap<Integer, String> badgename = new LinkedHashMap<>(); | ||||
| 	public static HashMap<Integer, String> badgeperm = new LinkedHashMap<>(); | ||||
| 
 | ||||
| 	public static HashMap<FPlayer, Integer> pageInstance = new HashMap<>(); | ||||
| 
 | ||||
| 	 | ||||
| 	public static void purge() { | ||||
| 		badgelist = new LinkedHashMap<>(); | ||||
| 		badgename = new LinkedHashMap<>(); | ||||
| 		badgeperm = new LinkedHashMap<>(); | ||||
| 
 | ||||
| 		pageInstance = new HashMap<>(); | ||||
| 	} | ||||
| 	 | ||||
| 	public static void badgeList(FPlayer p , int page){ | ||||
| 		p.sendMessage(""); | ||||
| 		p.sendMessage(ChatColor.RED + "HOW TO USE:" + ChatColor.YELLOW + " You can equip badges with " + ChatColor.DARK_AQUA + "/equip slot# badge#" + ChatColor.YELLOW +". To unequip all badges, use " + ChatColor.DARK_AQUA + "/badgesclear" + ChatColor.YELLOW + "."); | ||||
| 		p.sendMessage(ChatColor.AQUA + "------------------- Your Badges -------------------"); | ||||
| 		p.sendMessage(""); | ||||
| 		int eventnum = 0; | ||||
| 		//for(Integer item : badgelist.keySet()){ | ||||
| 		for(int i = 0; i < badgelist.size(); i++){ | ||||
| 				eventnum = eventnum + 1; | ||||
| 		} | ||||
| 		double dp = (float)eventnum / 10.0; | ||||
| 		int pagenum = (int)Math.ceil(dp); | ||||
| 		if(page <= pagenum && page > 0){ | ||||
| 			pageInstance.put(p,0); | ||||
| 			int pageten = (page * 10)- 10; | ||||
| 			for(Integer entry : badgelist.keySet()){ | ||||
| 				if(pageInstance.get(p) == pageten || pageInstance.get(p) == pageten + 1 || pageInstance.get(p) == pageten + 2 || pageInstance.get(p) == pageten + 3 || pageInstance.get(p) == pageten + 4 || pageInstance.get(p) == pageten + 5 || pageInstance.get(p) == pageten + 6 || pageInstance.get(p) == pageten + 7 || pageInstance.get(p) == pageten + 8 || pageInstance.get(p) == pageten + 9){ | ||||
| 					if(entry == 0){ | ||||
| 					}else if(p.hasPermission("fpchat.badge" + badgeperm.get(entry)) || p.isSynced(entry)){ | ||||
| 						p.sendMessage(badgelist.get(entry) + ChatColor.GOLD + " Badge #" + entry + ": " + ChatColor.GREEN + " - " + badgename.get(entry) + ChatColor.GOLD + " - UNLOCKED"); | ||||
| 					}else{ | ||||
| 						p.sendMessage(badgelist.get(entry) + ChatColor.GOLD + " Badge #" + entry + ": " + ChatColor.GREEN + " - " + badgename.get(entry) + ChatColor.RED + " - LOCKED"); | ||||
| 					} | ||||
| 				} | ||||
| 				pageInstance.put(p,(pageInstance.get(p)+1)); | ||||
| 			} | ||||
| 			p.sendMessage(ChatColor.AQUA + ""); | ||||
| 			p.sendMessage(ChatColor.YELLOW + "Page " + Integer.toString(page) + " of " + Integer.toString(pagenum)); | ||||
| 			p.sendMessage(ChatColor.AQUA + "---------------------------------------------------"); | ||||
| 			pageInstance.remove(p); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public static void setupBadges(){ | ||||
| 		 | ||||
| 		//DO NOT CHANGE ANY OF THE BADGEID NUMBERS. THIS WILL REALLY SCREW UP PEOPLES BADGE PERMISSIONS IN GAME. I WILL SOON ADD SOMETHING FOR PEOPLE TO MORE EASILY SEE THEIR UNLOCKED BADGES | ||||
| 		 | ||||
| 		//These are the designs used in game of each badge | ||||
| 		 | ||||
| 		badgelist.put(0, ""); | ||||
| 		badgelist.put(1, "&6{✮}"); | ||||
| 		badgelist.put(2, "&b{&7❂&b}"); | ||||
| 		badgelist.put(3, "&c[0G]"); | ||||
| 		badgelist.put(4, "&8{&9Ⓜ&8}"); | ||||
| 		badgelist.put(5, "&b(✌)"); | ||||
| 		badgelist.put(6, "&3{☹}"); | ||||
| 		badgelist.put(7, "&4<&8➳&4>"); | ||||
| 		badgelist.put(8, "&a(รɦṁ)"); | ||||
| 		badgelist.put(9, "&e[Ⓒ]"); | ||||
| 		badgelist.put(10, "&8[&f☠&8]"); | ||||
| 		badgelist.put(11, "&b{&f☃&b}"); | ||||
| 		badgelist.put(12, "&d{&6❀&d}"); | ||||
| 		badgelist.put(13, "&e<&a☣&e>"); | ||||
| 		badgelist.put(14, "&5(&3☔&5)"); | ||||
| 		badgelist.put(15, "&a{☎}"); | ||||
| 		badgelist.put(16, "&7{&b♫&7}"); | ||||
| 		badgelist.put(17, "&e<&6⚡&e>"); | ||||
| 		badgelist.put(18, "&3(&c⍤&3)"); | ||||
| 		badgelist.put(19, "&f[&c♛&f]"); | ||||
| 		badgelist.put(20, "&b[&a✦&b]"); | ||||
| 		badgelist.put(21, "&e[&7♜&e]"); | ||||
| 		badgelist.put(22, "&6[&7⚒&6]"); | ||||
| 		badgelist.put(23, "&3[&7❖&3]"); | ||||
| 		badgelist.put(24, "&2[&7⧈&2]"); | ||||
| 		badgelist.put(25, "&5(&d⚉&5)"); | ||||
| 		badgelist.put(26, "&1[&4β&1]"); | ||||
| 		badgelist.put(27, "&b{&3&lᴮᵀ&b}"); | ||||
| 		badgelist.put(28, "&c{&b&lᴴᴮᵀ&c}"); | ||||
| 		badgelist.put(29, "&8{&6&lᴮ&a&lᵒ&6&lᵒ&8}"); | ||||
| 		badgelist.put(30, "&3<&eᵒᵒᶠ&3>"); | ||||
| 		badgelist.put(31, "&b&l{&f&l✔&b&l}"); | ||||
| 		badgelist.put(32, "&a|PR0|"); | ||||
| 		badgelist.put(33, "&1⦅&b&lx2&r&1⦆"); | ||||
| 		badgelist.put(34, "&a«&2&lx2&r&a»"); | ||||
| 		badgelist.put(35, "&e⦉&6x2&e⦊"); | ||||
| 		badgelist.put(36, "&6﴾&cⰀ&6﴿"); | ||||
| 		badgelist.put(37, "&7﴾※﴿"); | ||||
| 		badgelist.put(38, "&7⌈&f◉&d⩐&f◉&7⌉"); | ||||
| 		badgelist.put(39, "&8[&7༗&8]"); | ||||
| 		badgelist.put(40, "&8[&bⒺ➀&8]"); | ||||
| 		badgelist.put(41, "&8[&eⒺ➁&8]"); | ||||
| 		badgelist.put(42, "&8[&2Ⓔ➂&8]"); | ||||
| 		badgelist.put(43, "&8[&6Ⓔ&c➃&8]"); | ||||
| 		badgelist.put(44, "&8[&bⒺ&a➄&8]"); | ||||
| 		badgelist.put(45, "&8[&cⒺ&b➅&8]"); | ||||
| 		badgelist.put(46, "&5{&dᴠɪᴘ&5}"); | ||||
| 		badgelist.put(47, "&5{&4ᴠ&eɪ&9ᴘ&a⁺&5}"); | ||||
| 		badgelist.put(48, "&6{&bᴠ&c⁺&a⁺&6}"); | ||||
| 		badgelist.put(49, "&3{&bᴛᴏᴘ&3}"); | ||||
| 		badgelist.put(50, "&6{&eᴘʟᴀᴛ&6}"); | ||||
| 		badgelist.put(51, "&8{&7ᴛɪ&8}"); | ||||
| 		badgelist.put(52, "&c⦉&4x2&c⦊"); | ||||
| 		badgelist.put(53, "&b⦅&1&lx3&r&b⦆"); | ||||
| 		badgelist.put(54, "&8[&5✥&8]"); | ||||
| 		badgelist.put(55, "&8{&bⒶ&8}"); | ||||
| 		badgelist.put(56, "&8{&3ᴼᴾ&8}"); | ||||
| 		badgelist.put(57, "&8{&4&l♔&8}"); | ||||
| 		badgelist.put(58, "&7{&9☯&7}"); | ||||
| 		badgelist.put(59, "&f⟦&6&o&l0G&8&f⟧"); | ||||
| 		badgelist.put(60, "&6ヽ( •_)ᕗ"); | ||||
| 		badgelist.put(61, "&c⦇&6☕&c⦈"); | ||||
| 		badgelist.put(62, "&b&l⦍&c&lF&b&l⦐"); | ||||
| 		badgelist.put(63, "&a⦇&e⧔⧕&d⦈"); | ||||
| 		badgelist.put(64, "&2[&c❒&2]"); | ||||
| 		badgelist.put(65, "&4{&e▼&4}"); | ||||
| 		badgelist.put(66, "&e{&d☞&e}"); | ||||
| 		badgelist.put(67, "&f<&7✄&f>"); | ||||
| 		badgelist.put(68, "&5⸨&d◕‿‿◕&5⸩"); | ||||
| 		badgelist.put(69, "&d⌇&4❤&d⌇"); | ||||
| 		badgelist.put(70, "&6ʕ•ᴥ•ʔ"); | ||||
| 		badgelist.put(71, "&f<&9☆彡&f>"); | ||||
| 		badgelist.put(72, "&a(&5✿&a}"); | ||||
| 		badgelist.put(73, "&a&k!&e&k!&c&k!&b&k!&c&k!&e&k!&a&k!&r"); | ||||
| 		badgelist.put(74, "&a[&f[&6Ⱑ&f]&a]"); | ||||
| 		badgelist.put(75, "&4]&8⸮&4["); | ||||
| 		badgelist.put(76, "&0【&7&l〆&r&0】"); | ||||
| 		badgelist.put(77, "&9[&2⸙&9]"); | ||||
| 		badgelist.put(78, "&8⸠⨷⸡"); | ||||
| 		badgelist.put(79, "&a⦑&4⚐&9⚑&a⦒"); | ||||
| 		badgelist.put(80, "p"); | ||||
| 		 | ||||
| 		// These are the badge names listed in the badge menu. | ||||
| 		// See notes here for possible badge uses | ||||
| 		 | ||||
| 		badgename.put(0, "Empty"); //Represents an empty badge slot. Equipping removes whatever badge is in that slot. | ||||
| 		badgename.put(1, "Gold Star"); //We have given these to people who win contests or in game events we have | ||||
| 		badgename.put(2, "Silver Star"); //We've used this as a voting reward in the past | ||||
| 		badgename.put(3, "Original Player"); //I've tried to reserve this one but people started giving it out, but we can still give this to old donors. | ||||
| 		badgename.put(4, "Staff"); //Staff only | ||||
| 		badgename.put(5, "Peace"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(6, "Boo-hoo"); //Obtainable by easter egg in one of the spawn vaults | ||||
| 		badgename.put(7, "Hunter"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(8, "Shmeckle"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(9, "Copyright"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(10, "Skull"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(11, "Snowman"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(12, "Flower"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(13, "Radioactive"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(14, "Rainy"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(15, "Telephone"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(16, "Music"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(17, "Lightning"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(18, "Wow"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(19, "Monarch"); //Give to old creative donor with Monarch | ||||
| 		badgename.put(20, "Baron"); //Give to old creative donor with Baron | ||||
| 		badgename.put(21, "Artificer"); // Give to old creative donor with Artificer | ||||
| 		badgename.put(22, "Craftsman"); // Give to old creative donor with Craftsman | ||||
| 		badgename.put(23, "Journeyman"); // Give to old creative donor with Journeyman | ||||
| 		badgename.put(24, "Carpenter"); // Give to old creative donor with Carpenter | ||||
| 		badgename.put(25, "Pig"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(26, "Beta"); // Reserve for contests or special gift from staff | ||||
| 		badgename.put(27, "Build Team"); // Reserve for Build team | ||||
| 		badgename.put(28, "Head Builder"); // May not have any use anymore, but not really something for players | ||||
| 		badgename.put(29, "Boo"); //Sell in-game or on the donor shop (OR give to players at Halloween) | ||||
| 		badgename.put(30, "OOF!"); //Obtainable easteregg | ||||
| 		badgename.put(31, "Trusted / Verified Player"); //Give to trusted/ex staff/ build team | ||||
| 		badgename.put(32, "Professional Player"); //Can make a reward for parkour. We've associated this badge with an achievement in the past | ||||
| 		badgename.put(33, "x2 Slots (Blue)"); // Anyone with this badge can equip a badge to a second slot | ||||
| 		badgename.put(34, "x2 Slots (Green)"); // Same as #33 but green | ||||
| 		badgename.put(35, "x2 Slots (Yellow)"); // same as #33 and #34 but yellow | ||||
| 		badgename.put(36, "Gilded Crest"); //I've typically only given this one to staff | ||||
| 		badgename.put(37, "Silver Crest"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(38, "Derp"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(39, "Hawk-Eye");//Sell in-game or on the donor shop | ||||
| 		badgename.put(40, "Expert Level 1"); // Survival can make unlockable with rank progression | ||||
| 		badgename.put(41, "Expert Level 2"); // Survival can make unlockable with rank progression | ||||
| 		badgename.put(42, "Expert Level 3"); // Survival can make unlockable with rank progression | ||||
| 		badgename.put(43, "Expert Level 4"); // Survival can make unlockable with rank progression | ||||
| 		badgename.put(44, "Expert Level 5"); // Survival can make unlockable with rank progression | ||||
| 		badgename.put(45, "Expert Level 6"); // Survival can make unlockable with rank progression | ||||
| 		badgename.put(46, "VIP"); // Give to old main donors | ||||
| 		badgename.put(47, "VIP+"); // Give to old main donors | ||||
| 		badgename.put(48, "VIP++"); // Give to old main donors | ||||
| 		badgename.put(49, "Topaz"); // Give to old main donors | ||||
| 		badgename.put(50, "Platinum"); // Give to old main donors | ||||
| 		badgename.put(51, "Titanium"); // Give to old main donors | ||||
| 		badgename.put(52, "x2 Slots (Red)"); // Same as #33, #34, and #35 but red | ||||
| 		badgename.put(53, "x3 Slots (Blue)"); // Anyone with this badge can equip 3 badges | ||||
| 		badgename.put(54, "Architect"); //Can make unlockable on creative | ||||
| 		badgename.put(55, "Admin"); // Reserved for staff | ||||
| 		badgename.put(56, "Operator"); // Reserved for staff | ||||
| 		badgename.put(57, "Owner"); // I wonder who this is for | ||||
| 		badgename.put(58, "PvP Legend"); // Can give to old PvP donors and maybe even kitpvp donors | ||||
| 		badgename.put(59, "Gold OG"); // Can give to old donors who had some of the higher ranks | ||||
| 		badgename.put(60, "Dab"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(61, "Coffee"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(62, "F"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(63, "Candy"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(64, "Box"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(65, "Pizza"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(66, "Pointer"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(67, "Scissors"); //Sell in-game or on the donor shop | ||||
| 		badgename.put(68, "Grin");//Sell in-game or on the donor shop | ||||
| 		badgename.put(69, "Heart"); //Can give away for Valentine's day | ||||
| 		badgename.put(70, "Bear");//Sell in-game or on the donor shop | ||||
| 		badgename.put(71, "Comet");//Sell in-game or on the donor shop | ||||
| 		badgename.put(72, "Tropical Flower");//Sell in-game or on the donor shop | ||||
| 		badgename.put(73, "Magic");//Sell in-game or on the donor shop | ||||
| 		badgename.put(74, "Sealed");//Sell in-game or on the donor shop | ||||
| 		badgename.put(75, "Backwards");//Sell in-game or on the donor shop | ||||
| 		badgename.put(76, "Dagger");//Sell in-game or on the donor shop | ||||
| 		badgename.put(77, "Leaf");//Sell in-game or on the donor shop | ||||
| 		badgename.put(78, "Starship");//Sell in-game or on the donor shop | ||||
| 		badgename.put(79, "Flags");//Sell in-game or on the donor shop | ||||
| 		badgename.put(80, "Stunned");//Sell in-game or on the donor shop | ||||
| 		 | ||||
| 		 | ||||
| 		// BADGE PERMS | ||||
| 		// These are the specific perm for each badge. They go like this: | ||||
| 		// fpchat.badge.<badgeperm>   I.E fpchat.badge.goldstar | ||||
| 		// See notes above for badges use ideas | ||||
| 		 | ||||
| 		badgeperm.put(0, ""); | ||||
| 		badgeperm.put(1, ".goldstar"); | ||||
| 		badgeperm.put(2, ".silverstar"); | ||||
| 		badgeperm.put(3, ".og"); | ||||
| 		badgeperm.put(4, ".staff"); | ||||
| 		badgeperm.put(5, ".peace"); | ||||
| 		badgeperm.put(6, ".boohoo"); | ||||
| 		badgeperm.put(7, ".hunter"); | ||||
| 		badgeperm.put(8, ".shmeckle"); | ||||
| 		badgeperm.put(9, ".copyright"); | ||||
| 		badgeperm.put(10, ".skull"); | ||||
| 		badgeperm.put(11, ".snowman"); | ||||
| 		badgeperm.put(12, ".flower"); | ||||
| 		badgeperm.put(13, ".radioactive"); | ||||
| 		badgeperm.put(14, ".rainy"); | ||||
| 		badgeperm.put(15, ".telephone"); | ||||
| 		badgeperm.put(16, ".music"); | ||||
| 		badgeperm.put(17, ".lightning"); | ||||
| 		badgeperm.put(18, ".wow"); | ||||
| 		badgeperm.put(19, ".monarch"); | ||||
| 		badgeperm.put(20, ".baron"); | ||||
| 		badgeperm.put(21, ".artificer"); | ||||
| 		badgeperm.put(22, ".craftsman"); | ||||
| 		badgeperm.put(23, ".journeyman"); | ||||
| 		badgeperm.put(24, ".carpenter"); | ||||
| 		badgeperm.put(25, ".pig"); | ||||
| 		badgeperm.put(26, ".fpn"); | ||||
| 		badgeperm.put(27, ".bt"); | ||||
| 		badgeperm.put(28, ".hbt"); | ||||
| 		badgeperm.put(29, ".boo"); | ||||
| 		badgeperm.put(30, ".oof"); | ||||
| 		badgeperm.put(31, ".verified"); | ||||
| 		badgeperm.put(32, ".pro"); | ||||
| 		badgeperm.put(33, ".2blue"); | ||||
| 		badgeperm.put(34, ".2green"); | ||||
| 		badgeperm.put(35, ".2yellow"); | ||||
| 		badgeperm.put(36, ".gildedcrest"); | ||||
| 		badgeperm.put(37, ".silvercrest"); | ||||
| 		badgeperm.put(38, ".derp"); | ||||
| 		badgeperm.put(39, ".hawkeye"); | ||||
| 		badgeperm.put(40, ".expert1"); | ||||
| 		badgeperm.put(41, ".expert2"); | ||||
| 		badgeperm.put(42, ".expert3"); | ||||
| 		badgeperm.put(43, ".expert4"); | ||||
| 		badgeperm.put(44, ".expert5"); | ||||
| 		badgeperm.put(45, ".expert6"); | ||||
| 		badgeperm.put(46, ".vip"); | ||||
| 		badgeperm.put(47, ".vip+"); | ||||
| 		badgeperm.put(48, ".vip++"); | ||||
| 		badgeperm.put(49, ".topaz"); | ||||
| 		badgeperm.put(50, ".platinum"); | ||||
| 		badgeperm.put(51, ".titanium"); | ||||
| 		badgeperm.put(52, ".2red"); | ||||
| 		badgeperm.put(53, ".3blue"); | ||||
| 		badgeperm.put(54, ".architect"); | ||||
| 		badgeperm.put(55, ".admin"); | ||||
| 		badgeperm.put(56, ".operator"); | ||||
| 		badgeperm.put(57, ".owner"); | ||||
| 		badgeperm.put(58, ".pvplegend"); | ||||
| 		badgeperm.put(59, ".goldog"); | ||||
| 		badgeperm.put(60, ".dab"); | ||||
| 		badgeperm.put(61, ".coffee"); | ||||
| 		badgeperm.put(62, ".f"); | ||||
| 		badgeperm.put(63, ".candy"); | ||||
| 		badgeperm.put(64, ".box"); | ||||
| 		badgeperm.put(65, ".pizza"); | ||||
| 		badgeperm.put(66, ".pointer"); | ||||
| 		badgeperm.put(67, ".scissors"); | ||||
| 		badgeperm.put(68, ".grin"); | ||||
| 		badgeperm.put(69, ".heart"); | ||||
| 		badgeperm.put(70, ".bear"); | ||||
| 		badgeperm.put(71, ".comet"); | ||||
| 		badgeperm.put(72, ".tropicalflower"); | ||||
| 		badgeperm.put(73, ".magic"); | ||||
| 		badgeperm.put(74, ".sealed"); | ||||
| 		badgeperm.put(75, ".backwards"); | ||||
| 		badgeperm.put(76, ".dagger"); | ||||
| 		badgeperm.put(77, ".leaf"); | ||||
| 		badgeperm.put(78, ".starship"); | ||||
| 		badgeperm.put(79, ".flags"); | ||||
| 		badgeperm.put(80, ".stunned"); | ||||
| 	} | ||||
| 	 | ||||
| 	 | ||||
| } | ||||
|  | @ -0,0 +1,32 @@ | |||
| package com.fpghoti.fpchatx.badge; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class BadgeSet { | ||||
| 
 | ||||
| 	public static void setBadge(FPlayer p, int slot, int badgeId){ | ||||
| 		if(slot > 3){ | ||||
| 			slot = 3; | ||||
| 		}else if(slot < 1){ | ||||
| 			slot = 1; | ||||
| 		} | ||||
| 		String uuid = p.getUniqueId().toString(); | ||||
| 		Util.connect(); | ||||
| 		if(!FPChat.getPlugin().getMySQLConnection().itemExists("player_uuid", uuid, FPChat.getPlugin().getMainConfig().getChatFeatureTable())){ | ||||
| 			createPlayer(p); | ||||
| 		} | ||||
| 		FPChat.getPlugin().getMySQLConnection().set("badge_slot" + String.valueOf(slot), badgeId, "player_uuid", "=", uuid,  FPChat.getPlugin().getMainConfig().getChatFeatureTable()); | ||||
| 		BadgeGetter.getBadges(p); | ||||
| 	} | ||||
| 
 | ||||
| 	public static void createPlayer(FPlayer p){ | ||||
| 		String uuid = p.getUniqueId().toString(); | ||||
| 		Util.connect(); | ||||
| 		if(!FPChat.getPlugin().getMySQLConnection().itemExists("player_uuid", uuid, FPChat.getPlugin().getMainConfig().getChatFeatureTable())){ | ||||
| 			FPChat.getPlugin().getMySQLConnection().insertInto("player_uuid, badge_slot1, badge_slot2, badge_slot3", " '" + uuid + "', '0', '0', '0' ",  FPChat.getPlugin().getMainConfig().getChatFeatureTable()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,46 @@ | |||
| package com.fpghoti.fpchatx.badge; | ||||
| 
 | ||||
| import java.util.UUID; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class SyncGetter { | ||||
| 
 | ||||
| 	public static void syncBadges(FPlayer p, boolean create){ | ||||
| 		UUID id = p.getUniqueId(); | ||||
| 		String uuid = id.toString(); | ||||
| 		Util.connect(); | ||||
| 		if(create && !FPChat.getPlugin().getMySQLConnection().itemExists("player_uuid", uuid, FPChat.getPlugin().getMainConfig().getPermSyncTable())){ | ||||
| 			SyncSet.createPlayer(p); | ||||
| 		} | ||||
| 		String raw = (String) FPChat.getPlugin().getMySQLConnection().get("badges", "player_uuid", "=", uuid, FPChat.getPlugin().getMainConfig().getPermSyncTable()); | ||||
| 		if(raw != null && raw.length() > 0 && raw.charAt(0) == ','){ | ||||
| 			raw = raw.substring(1); | ||||
| 		} | ||||
| 		if(raw != null && !raw.equals("")) { | ||||
| 			String list[] = Util.stripLast(raw).split(","); | ||||
| 			for(String item : list) { | ||||
| 				if(!item.equals("")) { | ||||
| 					Integer badgeId = Integer.parseInt(item); | ||||
| 					p.addSyncedBadge(badgeId); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public static Boolean syncExists(FPlayer p){ | ||||
| 		Boolean check = false; | ||||
| 		if(p == null) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		String uuid = p.getUniqueId().toString(); | ||||
| 		Util.connect(); | ||||
| 		if(FPChat.getPlugin().getMySQLConnection().itemExists("player_uuid", uuid, FPChat.getPlugin().getMainConfig().getPermSyncTable())){ | ||||
| 			check = true; | ||||
| 		} | ||||
| 		return check; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,126 @@ | |||
| package com.fpghoti.fpchatx.badge; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class SyncSet { | ||||
| 
 | ||||
| 	public static void update(FPlayer p) { | ||||
| 		update(p, true); | ||||
| 	} | ||||
| 
 | ||||
| 	public static void update(FPlayer p, boolean create){ | ||||
| 		String uuid = p.getUniqueId().toString(); | ||||
| 		Util.connect(); | ||||
| 		if(create && !FPChat.getPlugin().getMySQLConnection().itemExists("player_uuid", uuid, FPChat.getPlugin().getMainConfig().getPermSyncTable())){ | ||||
| 			createPlayer(p); | ||||
| 		} | ||||
| 		SyncGetter.syncBadges(p, false); | ||||
| 		String nl = ""; | ||||
| 		String nl2 = ""; | ||||
| 		String permstring = getBadgeString(p); | ||||
| 		String[] permids = permstring.split(","); | ||||
| 		for(String item : permids){ | ||||
| 			if(Util.isDigit(item)) { | ||||
| 				int id = Integer.parseInt(item); | ||||
| 				if(!p.isSynced(id)){ | ||||
| 					nl = nl + item + ","; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		for(int id : p.syncedList()){ | ||||
| 			String item = Integer.toString(id); | ||||
| 			nl2 = nl2 + item + ","; | ||||
| 		} | ||||
| 		nl = nl + nl2; | ||||
| 		FPChat.getPlugin().getMySQLConnection().set("badges", nl, "player_uuid", "=", uuid, FPChat.getPlugin().getMainConfig().getPermSyncTable()); | ||||
| 		SyncGetter.syncBadges(p,false); | ||||
| 	} | ||||
| 	 | ||||
| 	public static void revoke(FPlayer p) { | ||||
| 		revoke(p,true); | ||||
| 	} | ||||
| 
 | ||||
| 	public static void revoke(FPlayer p, boolean create) { | ||||
| 		String uuid = p.getUniqueId().toString(); | ||||
| 		Util.connect(); | ||||
| 		if(create && !FPChat.getPlugin().getMySQLConnection().itemExists("player_uuid", uuid, FPChat.getPlugin().getMainConfig().getPermSyncTable())){ | ||||
| 			createPlayer(p); | ||||
| 		} | ||||
| 		SyncGetter.syncBadges(p, false); | ||||
| 		String nl = ""; | ||||
| 		FPChat.getPlugin().getMySQLConnection().set("badges", nl, "player_uuid", "=", uuid, FPChat.getPlugin().getMainConfig().getPermSyncTable()); | ||||
| 		SyncGetter.syncBadges(p, false); | ||||
| 	} | ||||
| 	public static void revoke(FPlayer p, int badgeId){ | ||||
| 		revoke(p, badgeId, true); | ||||
| 	} | ||||
| 
 | ||||
| 	public static void revoke(FPlayer p, int badgeId, boolean create){ | ||||
| 		String uuid = p.getUniqueId().toString(); | ||||
| 
 | ||||
| 		Util.connect(); | ||||
| 		if(create && !FPChat.getPlugin().getMySQLConnection().itemExists("player_uuid", uuid, FPChat.getPlugin().getMainConfig().getPermSyncTable())){ | ||||
| 			createPlayer(p); | ||||
| 		} | ||||
| 		SyncGetter.syncBadges(p,  false); | ||||
| 		String nl = ""; | ||||
| 		String nl2 = ""; | ||||
| 		for(String item : revokeBadgeString(p, badgeId).split(",")){ | ||||
| 			if(Util.isDigit(item)) { | ||||
| 				int id = Integer.parseInt(item); | ||||
| 				if(p.isSynced(id)){ | ||||
| 					nl = nl + item + ","; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		for(int id : p.syncedList()){ | ||||
| 			String item = Integer.toString(id); | ||||
| 			if(id != badgeId){ | ||||
| 				nl2 = nl2 + item + ","; | ||||
| 			} | ||||
| 		} | ||||
| 		nl = nl + nl2; | ||||
| 		FPChat.getPlugin().getMySQLConnection().set("badges", nl, "player_uuid", "=", uuid, FPChat.getPlugin().getMainConfig().getPermSyncTable()); | ||||
| 		SyncGetter.syncBadges(p, false); | ||||
| 	} | ||||
| 
 | ||||
| 	public static String getBadgeString(FPlayer p){ | ||||
| 		String list = ""; | ||||
| 		for(int i = 1; i < BadgeList.badgeperm.size(); i++){ | ||||
| 			if(p.hasPermission("fpchat.badge" + BadgeList.badgeperm.get(i))){ | ||||
| 				String add = Integer.toString(i) + ","; | ||||
| 				list = list + add; | ||||
| 			}else if(p.getBadgeQueue().contains(i)) { | ||||
| 				String add = Integer.toString(i) + ","; | ||||
| 				list = list + add; | ||||
| 				p.unqueueBadge(i); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		return list; | ||||
| 	} | ||||
| 
 | ||||
| 	public static String revokeBadgeString(FPlayer p, int badgeId){ | ||||
| 		String list = ""; | ||||
| 		for(int i = 1; i < BadgeList.badgeperm.size(); i++){ | ||||
| 			if(p.hasPermission("fpchat.badge" + BadgeList.badgeperm.get(i))){ | ||||
| 				if(i != badgeId){ | ||||
| 					String add = Integer.toString(i) + ","; | ||||
| 					list = list + add; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		return list; | ||||
| 	} | ||||
| 
 | ||||
| 	public static void createPlayer(FPlayer p){ | ||||
| 		String uuid = p.getUniqueId().toString(); | ||||
| 		Util.connect(); | ||||
| 		if(!FPChat.getPlugin().getMySQLConnection().itemExists("player_uuid", uuid, FPChat.getPlugin().getMainConfig().getPermSyncTable())){ | ||||
| 			FPChat.getPlugin().getMySQLConnection().insertInto("player_uuid, badges", " '" + uuid + "', '' ", FPChat.getPlugin().getMainConfig().getPermSyncTable()); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,344 @@ | |||
| package com.fpghoti.fpchatx.chat; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.util.ArrayList; | ||||
| import java.util.UUID; | ||||
| import java.util.logging.Level; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.OfflinePlayer; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.badge.BadgeList; | ||||
| import com.fpghoti.fpchatx.config.ChannelFile; | ||||
| import com.fpghoti.fpchatx.customcodes.BubbleCode; | ||||
| import com.fpghoti.fpchatx.customcodes.Codify; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public abstract class ChatChannel { | ||||
| 
 | ||||
| 	private static ChatChannel defaultChannel = null; | ||||
| 	private static ArrayList<StandardChannel> channels; | ||||
| 	private static ArrayList<TempChannel> tempchannels; | ||||
| 	private static ChatChannel shout; | ||||
| 	private static final String[] reserved = {"shout"}; | ||||
| 
 | ||||
| 	private static ArrayList<String> loadChannelNames() { | ||||
| 		ArrayList<String> cnames = new ArrayList<String>(); | ||||
| 		for(File f : ChannelFile.getChannelFiles()) { | ||||
| 			String fname = f.getName(); | ||||
| 			cnames.add(fname.substring(0, fname.length()-4)); | ||||
| 		} | ||||
| 		return cnames; | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	public static StandardChannel loadChannel(String channelname) { | ||||
| 		if(ChannelFile.channelExists(channelname)) { | ||||
| 			return makeChannel(channelname); | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 	public static StandardChannel makeChannel(String channelname) { | ||||
| 		ChannelFile file = new ChannelFile(FPChat.getPlugin(), channelname); | ||||
| 		StandardChannel c = new StandardChannel(FPChat.getPlugin(), file); | ||||
| 		return c; | ||||
| 	} | ||||
| 
 | ||||
| 	public static TempChannel makeTempChannel(FPlayer owner, String channelname) { | ||||
| 		TempChannel t = new TempChannel(FPChat.getPlugin(), owner, channelname); | ||||
| 		t.setShortcut(channelname); | ||||
| 		tempchannels.add(t); | ||||
| 		return t; | ||||
| 	} | ||||
| 	 | ||||
| 	public static void setShout(ShoutChannel shoutchannel) { | ||||
| 		shout = shoutchannel; | ||||
| 	} | ||||
| 
 | ||||
| 	public static void deleteChannel(String channelname) { | ||||
| 		ChatChannel c = getChannel(channelname); | ||||
| 		boolean temp = false; | ||||
| 		if(c == null) { | ||||
| 			c = getTempChannel(channelname); | ||||
| 			temp = true; | ||||
| 		} | ||||
| 		if(c != null) { | ||||
| 			String cname = c.getName(); | ||||
| 			for(FPlayer pl : c.getPlayers()) { | ||||
| 				pl.leaveChannel(cname); | ||||
| 				FPlayer.dualMsg(pl, ChatColor.YELLOW + "The channel you were in " + ChatColor.WHITE + c.getName() + ChatColor.YELLOW + " was deleted."); | ||||
| 			} | ||||
| 			tempchannels.remove(c); | ||||
| 			channels.remove(c); | ||||
| 			if(!temp) { | ||||
| 				File cdir = new File(FPChat.getPlugin().getDataFolder() + File.separator + "channels"); | ||||
| 				cdir.mkdirs(); | ||||
| 				File configFile = new File(cdir, cname + ".yml"); | ||||
| 				if(configFile.delete()) { | ||||
| 					FPChat.getPlugin().log(Level.INFO, "Channel file for " + cname + " successfully deleted."); | ||||
| 				} else { | ||||
| 					FPChat.getPlugin().log(Level.SEVERE, "======================================================"); | ||||
| 					FPChat.getPlugin().log(Level.SEVERE, "| ------------------ FPCHATX ERROR ----------------- |"); | ||||
| 					FPChat.getPlugin().log(Level.SEVERE, "======================================================"); | ||||
| 					FPChat.getPlugin().log(Level.SEVERE, "| Channel not properly removed. File deletion error. |"); | ||||
| 					FPChat.getPlugin().log(Level.SEVERE, "| ---------- Check the file and try again. --------- |"); | ||||
| 					FPChat.getPlugin().log(Level.SEVERE, "======================================================"); | ||||
| 					return; | ||||
| 				} | ||||
| 			}else { | ||||
| 				FPChat.getPlugin().log(Level.INFO, "Temp Channel " + cname + " was deleted."); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public static ChatChannel getDefault() { | ||||
| 		return defaultChannel; | ||||
| 	} | ||||
| 	 | ||||
| 	public static void setDefault(String channel) { | ||||
| 		defaultChannel = getChannel(channel); | ||||
| 	} | ||||
| 
 | ||||
| 	public static ArrayList<ChatChannel> getChannels(){ | ||||
| 		ArrayList<ChatChannel> c = new ArrayList<ChatChannel>(); | ||||
| 		for(StandardChannel ch : channels) { | ||||
| 			c.add(ch); | ||||
| 		} | ||||
| 		for(TempChannel ch : tempchannels) { | ||||
| 			c.add(ch); | ||||
| 		} | ||||
| 		return c; | ||||
| 	} | ||||
| 
 | ||||
| 	public static ChatChannel getChannel(String name) { | ||||
| 		for(ChatChannel c : channels) { | ||||
| 			if(c.getName().equalsIgnoreCase(name)) { | ||||
| 				return c; | ||||
| 			} | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 	public static ChatChannel getTempChannel(String name) { | ||||
| 		for(ChatChannel c : tempchannels) { | ||||
| 			if(c.getName().equalsIgnoreCase(name)) { | ||||
| 				return c; | ||||
| 			} | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 	public static void loadChannels() { | ||||
| 		shout = (ChatChannel)(new ShoutChannel(FPChat.getPlugin())); | ||||
| 		channels = new ArrayList<StandardChannel>(); | ||||
| 		tempchannels = new ArrayList<TempChannel>(); | ||||
| 		for(String c : loadChannelNames()) { | ||||
| 			StandardChannel chan = loadChannel(c); | ||||
| 			if(chan != null) { | ||||
| 				channels.add(chan); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public static ChatChannel getShout() { | ||||
| 		return shout; | ||||
| 	} | ||||
| 
 | ||||
| 	public static boolean channelExists(String name) { | ||||
| 		for(ChatChannel c : getChannels()) { | ||||
| 			if(c.getName().equalsIgnoreCase(name)) { | ||||
| 				return true; | ||||
| 			} | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	public static boolean isReserved(String name) { | ||||
| 		if(channelExists(name)) { | ||||
| 			return true; | ||||
| 		} | ||||
| 		for(String s : reserved) { | ||||
| 			if(s.equalsIgnoreCase(name)) { | ||||
| 				return true; | ||||
| 			} | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static void addChannel(StandardChannel channel) { | ||||
| 		channels.add(channel); | ||||
| 	} | ||||
| 
 | ||||
| 	protected FPChat plugin; | ||||
| 	protected String name; | ||||
| 	protected String shortcut; | ||||
| 	protected String chatFormat; | ||||
| 	protected String distinguishedChatFormat; | ||||
| 	protected boolean isWhitelisted; | ||||
| 
 | ||||
| 	protected ArrayList<UUID> whitelist; | ||||
| 	protected ArrayList<UUID> banned; | ||||
| 
 | ||||
| 	public ChatChannel(FPChat plugin) { | ||||
| 		this.plugin = plugin; | ||||
| 		this.isWhitelisted = false; | ||||
| 		this.whitelist = new ArrayList<UUID>(); | ||||
| 	} | ||||
| 
 | ||||
| 	public void makeDefault() { | ||||
| 		ChatChannel.defaultChannel = this; | ||||
| 	} | ||||
| 
 | ||||
| 	public abstract boolean isTemp(); | ||||
| 
 | ||||
| 	public abstract boolean isDefault(); | ||||
| 
 | ||||
| 	public void setName(String name) { | ||||
| 		this.name = name; | ||||
| 	} | ||||
| 
 | ||||
| 	public String getName() { | ||||
| 		return this.name; | ||||
| 	} | ||||
| 
 | ||||
| 	public abstract void kick(FPlayer p); | ||||
| 
 | ||||
| 	public abstract void setShortcut(String shortcut); | ||||
| 
 | ||||
| 	public String getShortcut() { | ||||
| 		return this.shortcut; | ||||
| 	} | ||||
| 
 | ||||
| 	public abstract void setChatFormat(String chatFormat); | ||||
| 
 | ||||
| 	public String getChatFormat() { | ||||
| 		return this.chatFormat.replace("{channel}", name); | ||||
| 	} | ||||
| 
 | ||||
| 	public abstract void setDistinguishedChatFormat(String chatFormat); | ||||
| 
 | ||||
| 	public String getDistinguishedChatFormat() { | ||||
| 		return this.distinguishedChatFormat.replace("{channel}", name); | ||||
| 	} | ||||
| 
 | ||||
| 	public abstract void enableWhitelist(); | ||||
| 
 | ||||
| 	public abstract void disableWhitelist(); | ||||
| 
 | ||||
| 	public boolean whitelistEnabled() { | ||||
| 		return this.isWhitelisted; | ||||
| 	} | ||||
| 
 | ||||
| 	public void whitelistAdd(OfflinePlayer p) { | ||||
| 		whitelistAdd(p.getUniqueId()); | ||||
| 	} | ||||
| 
 | ||||
| 	public void whitelistAdd(Player p) { | ||||
| 		whitelistAdd(p.getUniqueId()); | ||||
| 	} | ||||
| 
 | ||||
| 	public void whitelistAdd(FPlayer p) { | ||||
| 		whitelistAdd(p.getUniqueId()); | ||||
| 	} | ||||
| 
 | ||||
| 	public abstract void whitelistAdd(UUID uuid); | ||||
| 
 | ||||
| 	public void whitelistRemove(OfflinePlayer p) { | ||||
| 		whitelistRemove(p.getUniqueId()); | ||||
| 	} | ||||
| 
 | ||||
| 	public void whitelistRemove(Player p) { | ||||
| 		whitelistRemove(p.getUniqueId()); | ||||
| 	} | ||||
| 
 | ||||
| 	public void whitelistRemove(FPlayer p) { | ||||
| 		whitelistRemove(p.getUniqueId()); | ||||
| 	} | ||||
| 
 | ||||
| 	public abstract void whitelistRemove(UUID uuid); | ||||
| 
 | ||||
| 	public abstract boolean isWhitelisted(FPlayer p); | ||||
| 
 | ||||
| 	public void log(String str) { | ||||
| 		plugin.log(Level.INFO, str); | ||||
| 	} | ||||
| 
 | ||||
| 	public abstract void enableRadius(); | ||||
| 
 | ||||
| 	public abstract void disableRadius(); | ||||
| 
 | ||||
| 	public abstract boolean hasRadius(); | ||||
| 
 | ||||
| 	public abstract void setRadius(int radius); | ||||
| 
 | ||||
| 	public abstract int getRadius(); | ||||
| 
 | ||||
| 	public boolean isBanned(FPlayer p) { | ||||
| 		return banned.contains(p.getUniqueId()); | ||||
| 	} | ||||
| 
 | ||||
| 	public abstract void addBanned(FPlayer p); | ||||
| 
 | ||||
| 	public abstract ArrayList<FPlayer> getPlayers(); | ||||
| 
 | ||||
| 	public abstract void removeBanned(FPlayer p); | ||||
| 
 | ||||
| 	public ArrayList<UUID> getBanned(){ | ||||
| 		return this.banned; | ||||
| 	} | ||||
| 	 | ||||
| 	public int playerCount() { | ||||
| 		int count = 0; | ||||
| 		for(FPlayer p : FPlayer.getPlayers()) { | ||||
| 			if(p.getChannels().contains(name) || p.getTempChannels().contains(name)) { | ||||
| 				count++; | ||||
| 			} | ||||
| 		} | ||||
| 		return count; | ||||
| 	} | ||||
| 
 | ||||
| 	public String format(FPlayer p, String msg) { | ||||
| 		String finalMessage = ""; | ||||
| 		String slot3 = "", slot2 = "", slot1 = ""; | ||||
| 		String stf = ""; | ||||
| 		if (Permission.canUseColor(p)) { | ||||
| 			msg = msg.replaceAll("&([0-9a-fk-or])", "§$1"); | ||||
| 		} else { | ||||
| 			msg = msg.replaceAll("§[0-9a-fk-or]", ""); | ||||
| 		} | ||||
| 		String header = PrepareChat.swapPlaceholders(p, this, msg); | ||||
| 		if(Permission.isStaff(p)){ | ||||
| 			stf = FPChat.getPlugin().getMainConfig().getStaffBadge(); | ||||
| 		} | ||||
| 		if(plugin.getMainConfig().mySQLEnabled()){ | ||||
| 			Integer[] badges = p.getBadges(); | ||||
| 			slot1 = BadgeList.badgelist.get(badges[0]); | ||||
| 			slot2 = BadgeList.badgelist.get(badges[1]); | ||||
| 			slot3 = BadgeList.badgelist.get(badges[2]); | ||||
| 		} | ||||
| 		String filler = ""; | ||||
| 		if(plugin.getMainConfig().chatFilterEnabled()){ | ||||
| 			filler = "word "; | ||||
| 		} | ||||
| 		if(Permission.canUseColor(p)){ | ||||
| 			String last = ChatFilter.filter(filler + msg); | ||||
| 			last = BubbleCode.bubblecode(Permission.canBubbleCode(p), Codify.changeFormatSign(last)); | ||||
| 			finalMessage = stf + slot3 + slot2 + slot1 + header + last; | ||||
| 		}else{ | ||||
| 			String newmsg = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('§', ChatFilter.filter(filler + msg))); | ||||
| 			finalMessage = stf + slot3 + slot2 + slot1 + Codify.removeBubbles(header + newmsg); | ||||
| 		} | ||||
| 		return finalMessage; | ||||
| 	} | ||||
| 
 | ||||
| 	public abstract void sendMessage(String msg, FPlayer from); | ||||
| 	 | ||||
| 	public void delete() { | ||||
| 		ChatChannel.deleteChannel(name); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,87 @@ | |||
| package com.fpghoti.fpchatx.chat; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| 
 | ||||
| public class ChatFilter { | ||||
| 
 | ||||
| 	public static ArrayList<String> filtered = null; | ||||
| 
 | ||||
| 	//CHAT FILTER | ||||
| 
 | ||||
| 	public static String filter(String sentence){  // THIS FUNCTION TAKES THE RAW CHAT MESSAGE AND SENDS EACH  | ||||
| 		String msg = sentence;                     // INDIVIDUAL WORD INTO THE FILTER WORD FUNCTION BELOW | ||||
| 		if(FPChat.getPlugin().getMainConfig().chatFilterEnabled()){ | ||||
| 			msg = ""; | ||||
| 			int i = 0; | ||||
| 			for(String s : sentence.split(" ")){ | ||||
| 				if(i != 0){ | ||||
| 					msg = msg + filterWord(s) + " "; | ||||
| 				} | ||||
| 				i++; | ||||
| 			} | ||||
| 		} | ||||
| 		return msg; | ||||
| 	} | ||||
| 
 | ||||
| 	public static String filterWord(String word){             // THIS TAKES THE WORD, LOWERCASES IT, | ||||
| 		String wordp = "";                                // AND REPLACES CHARACTERS "1" and "!" with "i", "5" with "s", "6" with "g", and | ||||
| 		if(FPChat.getPlugin().getMainConfig().chatFilterEnabled()){    // "3" with "e". It then compares it to the list of | ||||
| 			String word2 = word.toLowerCase();                // Naughty words and replaces it with "Frank" or "bleep" if a match is found | ||||
| 			String color = ChatColor.getLastColors(word2); | ||||
| 			if(word2.length() >= 2 && word2.charAt(word2.length() -1) == '!'){ | ||||
| 				for(int i = 0; i < word2.length() -1; i++ ){ | ||||
| 					wordp += word2.charAt(i); | ||||
| 				} | ||||
| 				word2 = wordp; | ||||
| 			} | ||||
| 			wordp = ""; | ||||
| 			for(int i = 0; i < word2.length(); i++ ){ | ||||
| 				if(word2.charAt(i) != '!'){ | ||||
| 					wordp += word2.charAt(i); | ||||
| 				}else{ | ||||
| 					wordp += 'i'; | ||||
| 				} | ||||
| 			} | ||||
| 			word2 = wordp; | ||||
| 			word2 = ChatColor.translateAlternateColorCodes('§', word2); | ||||
| 			word2 = ChatColor.translateAlternateColorCodes('&', word2); | ||||
| 			word2 = ChatColor.stripColor(word2); | ||||
| 			word2 = word2.replaceAll("\\p{Punct}+", "").replaceAll("1", "i").replaceAll("5", "s").replaceAll("6", "g").replaceAll("3", "e"); | ||||
| 			if(filtered == null) { | ||||
| 				filtered = new ArrayList<String>(); | ||||
| 				for(String s : FPChat.getPlugin().getMainConfig().getNaughtyWords().split(",")) { | ||||
| 					filtered.add(s); | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			for(String item : filtered){ | ||||
| 				if(ChatColor.stripColor(word2).equalsIgnoreCase(item) || ChatColor.stripColor(word2).equalsIgnoreCase(item + "s")){ | ||||
| 					if (word2.length() > 2) { | ||||
| 						if(word2.substring(word2.length() - 3).equalsIgnoreCase("ing")){ | ||||
| 							word = "bleeping"; | ||||
| 							if(FPChat.getPlugin().getMainConfig().frankModeEnabled()){ | ||||
| 								word = "Franking"; | ||||
| 							} | ||||
| 						}else{ | ||||
| 							word = "bleep"; | ||||
| 							if(FPChat.getPlugin().getMainConfig().frankModeEnabled()){ | ||||
| 								word = "Frank"; | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				word = color + word; | ||||
| 			} | ||||
| 			word2 = null; | ||||
| 		} | ||||
| 		return word; | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	// By the end of the loop, the sentence is reconstructed with the naughty words replaced | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,84 @@ | |||
| package com.fpghoti.fpchatx.chat; | ||||
| 
 | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.World; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.customcodes.BubbleCode; | ||||
| import com.fpghoti.fpchatx.customcodes.Codify; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.VaultUtil; | ||||
| 
 | ||||
| public class PrepareChat { | ||||
| 
 | ||||
| 	public static String swapPlaceholders(FPlayer p, ChatChannel channel, String msg) { | ||||
| 		return swapPlaceholders(p,channel,msg,"", false); | ||||
| 	} | ||||
| 
 | ||||
| 	public static String swapPlaceholders(FPlayer p, String recipient, String msg, boolean in) { | ||||
| 		return swapPlaceholders(p,null,msg,recipient,in); | ||||
| 	} | ||||
| 	 | ||||
| 	public static String swapPlaceholders(FPlayer p, String msg) { | ||||
| 		return swapPlaceholders(p,null,msg,"",false); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	private static String swapPlaceholders(FPlayer p, ChatChannel channel, String msg, String recipient, boolean in) { | ||||
| 		if(!p.isOnline()) { | ||||
| 			return ""; | ||||
| 		} | ||||
| 		Player sender = Bukkit.getPlayer(p.getUniqueId()); | ||||
| 		String prefix = ""; | ||||
| 		String suffix = ""; | ||||
| 		String group = ""; | ||||
| 		String groupPrefix = ""; | ||||
| 		String groupSuffix = ""; | ||||
| 		World world = sender.getWorld(); | ||||
| 		prefix = VaultUtil.chat.getPlayerPrefix(sender); | ||||
| 		prefix = BubbleCode.bubblecode(Permission.canBubbleCode(p), Codify.changeFormatSign(prefix)).replaceAll("&([0-9A-FK-OR])", "§$1").replace("&", "§"); | ||||
| 		suffix = VaultUtil.chat.getPlayerSuffix(sender); | ||||
| 		suffix = BubbleCode.bubblecode(Permission.canBubbleCode(p), Codify.changeFormatSign(suffix)).replaceAll("&([0-9A-FK-OR])", "§$1").replace("&", "§"); | ||||
| 		group = VaultUtil.permission.getPrimaryGroup(sender); | ||||
| 		groupPrefix = VaultUtil.chat.getGroupPrefix(world, group).replace("&", "§"); | ||||
| 		groupSuffix = VaultUtil.chat.getGroupSuffix(world, group).replace("&", "§"); | ||||
| 		String displayName = sender.getDisplayName(); | ||||
| 		displayName = BubbleCode.bubblecode(Permission.canBubbleCode(p), Codify.changeFormatSign(displayName)).replaceAll("&([0-9A-FK-OR])", "§$1").replace("&", "§"); | ||||
| 		String format = ""; | ||||
| 		if(channel != null) { | ||||
| 			if(Permission.isDistinguished(p)) { | ||||
| 				format = channel.getDistinguishedChatFormat(); | ||||
| 			}else { | ||||
| 				format = channel.getChatFormat(); | ||||
| 			} | ||||
| 		}else { | ||||
| 			if(recipient.equals("")) { | ||||
| 				format = FPChat.getPlugin().getMainConfig().getShoutFormat(); | ||||
| 			}else { | ||||
| 				if(in) { | ||||
| 					format = FPChat.getPlugin().getMainConfig().getInMsgFormat(); | ||||
| 				}else { | ||||
| 					format = FPChat.getPlugin().getMainConfig().getOutMsgFormat(); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		format = format.replaceAll("&([0-9a-fk-or])", "§$1"); | ||||
| 		format = format.replace("{prefix}", prefix); | ||||
| 		format = format.replace("{prefix}", prefix); | ||||
| 		format = format.replace("{suffix}", suffix); | ||||
| 		format = format.replace("{group}", group); | ||||
| 		format = format.replace("{groupprefix}", groupPrefix); | ||||
| 		format = format.replace("{groupSuffix}", groupSuffix); | ||||
| 		if (channel != null) { | ||||
| 			format = format.replace("{shortcut}", channel.getShortcut()); | ||||
| 			format = format.replace("{name}", channel.getName()); | ||||
| 		} | ||||
| 		format = format.replace("{player}", displayName); | ||||
| 		format = format.replace("{recipient}", recipient); | ||||
| 		format = format.replace("{world}", world.getName()); | ||||
| 
 | ||||
| 		return format; | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,158 @@ | |||
| package com.fpghoti.fpchatx.chat; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.UUID; | ||||
| import java.util.logging.Level; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class ShoutChannel extends ChatChannel{ | ||||
| 
 | ||||
| 	/* | ||||
| 	 * This is the shout channel | ||||
| 	 *  | ||||
| 	 * Shout is intended to act as a streamlined alternative | ||||
| 	 * to setting up a StandardChannel with the radius disabled. | ||||
| 	 *  | ||||
| 	 * It also provides the ability to restrict global message sending | ||||
| 	 * to a cooldown. | ||||
| 	 *  | ||||
| 	 * It also allows for a separate mute (hush) to be enforced. | ||||
| 	 *  | ||||
| 	 * Players can opt out of seeing shout. | ||||
| 	 *  | ||||
| 	 * Many functions here will do nothing. Shout extends ChatChannel | ||||
| 	 * for the sake of treating shouts as a form of chat message. | ||||
| 	*/ | ||||
| 	 | ||||
| 	public ShoutChannel(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		this.name = "Shout"; | ||||
| 		this.shortcut = "Shout"; | ||||
| 		this.chatFormat = plugin.getMainConfig().getShoutFormat(); | ||||
| 		this.distinguishedChatFormat = plugin.getMainConfig().getDistinguishedShout(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean isTemp() { | ||||
| 		// Shout will always be a registered channel while the plugin is enabled. | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean isDefault() { | ||||
| 		// Shout can only be spoken in by use of command, so cannot be default. | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void kick(FPlayer p) { | ||||
| 		// No real reason to use this. It will hush the player if called. | ||||
| 		// Leaving the shout channel is impossible. Standard channel should | ||||
| 		// be used if the ability to leave is required. | ||||
| 		 | ||||
| 		p.hush(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void setShortcut(String shortcut) { | ||||
| 		// Shout has a dedicated command, so a shortcut is not needed. | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void setChatFormat(String chatFormat) { | ||||
| 		this.chatFormat = plugin.getMainConfig().getShoutFormat(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void setDistinguishedChatFormat(String chatFormat) { | ||||
| 		this.distinguishedChatFormat = plugin.getMainConfig().getDistinguishedShout(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void enableWhitelist() { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void disableWhitelist() { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void whitelistAdd(UUID uuid) { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void whitelistRemove(UUID uuid) { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean isWhitelisted(FPlayer p) { | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void enableRadius() { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void disableRadius() { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean hasRadius() { | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void setRadius(int radius) { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public int getRadius() { | ||||
| 		return 0; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public ArrayList<FPlayer> getPlayers(){ | ||||
| 		return FPlayer.getPlayers(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void addBanned(FPlayer p) { | ||||
| 		// No real reason to use this. It will hush the player if called. | ||||
| 		// Leaving the shout channel is impossible. Standard channel should | ||||
| 		// be used if the ability to leave is required. | ||||
| 		 | ||||
| 		p.hush(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void removeBanned(FPlayer p) { | ||||
| 		// No real reason to use this. It will hush the player if called. | ||||
| 		// Leaving the shout channel is impossible. Standard channel should | ||||
| 		// be used if the ability to leave is required. | ||||
| 		 | ||||
| 		p.unhush(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void sendMessage(String msg, FPlayer from) { | ||||
| 		plugin.log(Level.INFO, "Shout: " + msg); | ||||
| 		for(FPlayer p : FPlayer.getPlayers()) { | ||||
| 			if(p.isShoutVisible() && !p.isIgnoring(from)) { | ||||
| 				p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&8[&4&lS&r&8]&r") + msg); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,358 @@ | |||
| package com.fpghoti.fpchatx.chat; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.util.ArrayList; | ||||
| import java.util.UUID; | ||||
| import java.util.logging.Level; | ||||
| 
 | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.scheduler.BukkitRunnable; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.config.ChannelFile; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class StandardChannel extends ChatChannel{ | ||||
| 
 | ||||
| 	private boolean hasRadius; | ||||
| 	private int chatRadius; | ||||
| 	private String permission; | ||||
| 	private ChannelFile file; | ||||
| 
 | ||||
| 	public StandardChannel(FPChat plugin, ChannelFile file) { | ||||
| 		super(plugin); | ||||
| 		this.file = file; | ||||
| 		setName(file.getName()); | ||||
| 		this.hasRadius = file.hasRadius(); | ||||
| 		this.permission = file.getWhitelistedPermissionNode(); | ||||
| 		this.banned = new ArrayList<UUID>(); | ||||
| 		if(!file.getBannedUUIDs().equals("")) { | ||||
| 			for(String s : file.getBannedUUIDs().split(",")) { | ||||
| 				UUID u = UUID.fromString(s); | ||||
| 				banned.add(u); | ||||
| 			} | ||||
| 		} | ||||
| 		this.whitelist = new ArrayList<UUID>(); | ||||
| 		if(!file.getWhitelistedUUIDs().equals("")) { | ||||
| 			for(String s : file.getWhitelistedUUIDs().split(",")) { | ||||
| 				UUID u = UUID.fromString(s); | ||||
| 				whitelist.add(u); | ||||
| 			} | ||||
| 		} | ||||
| 		this.shortcut = file.getShortcut(); | ||||
| 		this.distinguishedChatFormat = file.getDistinguishedChatFormat(); | ||||
| 		this.chatFormat = file.getChatFormat(); | ||||
| 		this.chatRadius = file.getRadius(); | ||||
| 		this.isWhitelisted = file.isWhitelisted(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean isTemp() { | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void enableRadius() { | ||||
| 		this.hasRadius = true; | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				try { | ||||
| 					file.saveHasRadius(true); | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void disableRadius() { | ||||
| 		this.hasRadius = false; | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				try { | ||||
| 					file.saveHasRadius(false); | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean hasRadius() { | ||||
| 		return this.hasRadius; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void setRadius(int radius) { | ||||
| 		this.chatRadius = radius; | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				try { | ||||
| 					file.saveRadius(radius); | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public int getRadius() { | ||||
| 		return this.chatRadius; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean isWhitelisted(FPlayer p)  { | ||||
| 		if(!whitelistEnabled()) { | ||||
| 			return true; | ||||
| 		} | ||||
| 		if(isDefault()){ | ||||
| 			return true; | ||||
| 		} | ||||
| 		if(whitelist.contains(p.getUniqueId())) { | ||||
| 			return true; | ||||
| 		} | ||||
| 		if(p.hasPermission(permission)) { | ||||
| 			return true; | ||||
| 		} | ||||
| 		return false;		 | ||||
| 	} | ||||
| 
 | ||||
| 	public void setPermission(String perm) { | ||||
| 		this.permission = perm; | ||||
| 	} | ||||
| 
 | ||||
| 	public String getPermission() { | ||||
| 		return this.permission; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean isDefault()  { | ||||
| 		return ChatChannel.getDefault() == this; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void kick(FPlayer p) { | ||||
| 		p.leaveChannel(getName()); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void setShortcut(String shortcut) { | ||||
| 		this.shortcut = shortcut; | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				try { | ||||
| 					file.saveShortcut(shortcut); | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void enableWhitelist() { | ||||
| 		this.isWhitelisted = true; | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				try { | ||||
| 					file.saveWhitelist(true); | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void disableWhitelist() { | ||||
| 		this.isWhitelisted = false; | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				try { | ||||
| 					file.saveWhitelist(false); | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void whitelistAdd(UUID uuid) { | ||||
| 		this.whitelist.add(uuid); | ||||
| 
 | ||||
| 		ArrayList<UUID> rl = this.whitelist; | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				try { | ||||
| 					String setting = ""; | ||||
| 					for(UUID u : rl) { | ||||
| 						String su = u.toString(); | ||||
| 						setting = setting + su + ","; | ||||
| 					} | ||||
| 					setting = StringUtils.chop(setting); | ||||
| 					file.saveWhitelistedUUIDs(setting); | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 
 | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void whitelistRemove(UUID uuid) { | ||||
| 		this.whitelist.remove(uuid); | ||||
| 		ArrayList<UUID> rl = this.whitelist; | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				try { | ||||
| 					String setting = ""; | ||||
| 					for(UUID u : rl) { | ||||
| 						String su = u.toString(); | ||||
| 						setting = setting + su + ","; | ||||
| 					} | ||||
| 					setting = StringUtils.chop(setting); | ||||
| 					file.saveWhitelistedUUIDs(setting); | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void setChatFormat(String chatFormat) { | ||||
| 		this.chatFormat = chatFormat; | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				try { | ||||
| 					file.saveChatFormat(chatFormat); | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public ArrayList<FPlayer> getPlayers(){ | ||||
| 		ArrayList<FPlayer> players = new ArrayList<FPlayer>(); | ||||
| 		for(FPlayer p : FPlayer.getPlayers()) { | ||||
| 			if(p.getChannels().contains(name)) { | ||||
| 				players.add(p); | ||||
| 			} | ||||
| 		} | ||||
| 		return players; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void addBanned(FPlayer p) { | ||||
| 		this.banned.add(p.getUniqueId()); | ||||
| 		ArrayList<UUID> rl = this.banned; | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				try { | ||||
| 					String setting = ""; | ||||
| 					for(UUID u : rl) { | ||||
| 						String su = u.toString(); | ||||
| 						setting = setting + su + ","; | ||||
| 					} | ||||
| 					setting = StringUtils.chop(setting); | ||||
| 					file.saveBannedUUIDs(setting); | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void removeBanned(FPlayer p) { | ||||
| 		this.banned.remove(p.getUniqueId()); | ||||
| 		ArrayList<UUID> rl = this.banned; | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				try { | ||||
| 					String setting = ""; | ||||
| 					for(UUID u : rl) { | ||||
| 						String su = u.toString(); | ||||
| 						setting = setting + su + ","; | ||||
| 					} | ||||
| 					setting = StringUtils.chop(setting); | ||||
| 					file.saveBannedUUIDs(setting); | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void setDistinguishedChatFormat(String chatFormat) { | ||||
| 		this.distinguishedChatFormat = chatFormat; | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				try { | ||||
| 					file.saveDistinguishedChatFormat(chatFormat); | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void sendMessage(String msg, FPlayer from) { | ||||
| 		Player pf = Util.getEP(from.getName()); | ||||
| 		plugin.log(Level.INFO, name + ": " + msg); | ||||
| 		for(FPlayer p : FPlayer.getPlayers()) { | ||||
| 			if(p.getChannels().contains(name) && !p.isIgnoring(from)) { | ||||
| 				if(hasRadius) { | ||||
| 					Player pp = Util.getEP(p.getName()); | ||||
| 					if(pp.getWorld() == pf.getWorld()) { | ||||
| 						if(pp.getLocation().distance(pf.getLocation()) < chatRadius){ | ||||
| 							p.sendMessage(msg); | ||||
| 						} | ||||
| 					} | ||||
| 				}else { | ||||
| 					p.sendMessage(msg); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void update(ChannelFile file) { | ||||
| 		this.file = file; | ||||
| 		setName(file.getName()); | ||||
| 		this.hasRadius = file.hasRadius(); | ||||
| 		this.permission = file.getWhitelistedPermissionNode(); | ||||
| 		this.banned = new ArrayList<UUID>(); | ||||
| 		for(String s : file.getBannedUUIDs().split(",")) { | ||||
| 			UUID u = UUID.fromString(s); | ||||
| 			banned.add(u); | ||||
| 		} | ||||
| 		this.shortcut = file.getShortcut(); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,157 @@ | |||
| package com.fpghoti.fpchatx.chat; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.UUID; | ||||
| import java.util.logging.Level; | ||||
| 
 | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.OfflinePlayer; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class TempChannel extends ChatChannel{ | ||||
| 	 | ||||
| 	private UUID owner; | ||||
| 	 | ||||
| 	public TempChannel(FPChat plugin, FPlayer owner, String name) { | ||||
| 		super(plugin); | ||||
| 		this.name = name; | ||||
| 		this.owner = owner.getUniqueId(); | ||||
| 		this.chatFormat = plugin.getMainConfig().getTempChannelFormat(); | ||||
| 		this.distinguishedChatFormat = plugin.getMainConfig().getTempChannelFormat(); | ||||
| 		this.banned = new ArrayList<UUID>(); | ||||
| 	} | ||||
| 	 | ||||
| 	public FPlayer getOwner() { | ||||
| 		OfflinePlayer p = Bukkit.getOfflinePlayer(owner); | ||||
| 		return FPlayer.getPlayer(p, !p.isOnline()); | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isOwner(FPlayer p) { | ||||
| 		return p.getUniqueId() == this.owner; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setOwner(FPlayer p) { | ||||
| 		this.owner = p.getUniqueId(); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isTemp() { | ||||
| 		return true; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean isWhitelisted(FPlayer p) { | ||||
| 		if(!whitelistEnabled()) { | ||||
| 			return true; | ||||
| 		} | ||||
| 		if(whitelist.contains(p.getUniqueId())) { | ||||
| 			return true; | ||||
| 		} | ||||
| 		return false;		 | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void enableRadius() { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void disableRadius() { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean hasRadius() { | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void setRadius(int radius) { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public int getRadius() { | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean isDefault() { | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void kick(FPlayer p) { | ||||
| 		p.leaveTempChannel(getName()); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void setShortcut(String shortcut) { | ||||
| 		this.shortcut = shortcut; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void enableWhitelist() { | ||||
| 		this.isWhitelisted = true; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void disableWhitelist() { | ||||
| 		this.isWhitelisted = false; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void whitelistAdd(UUID uuid){ | ||||
| 		this.whitelist.add(uuid); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void whitelistRemove(UUID uuid) { | ||||
| 		this.whitelist.remove(uuid); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void addBanned(FPlayer p) { | ||||
| 		this.banned.add(p.getUniqueId()); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void removeBanned(FPlayer p) { | ||||
| 		this.banned.remove(p.getUniqueId()); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void setChatFormat(String chatFormat) { | ||||
| 		this.chatFormat = chatFormat; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void setDistinguishedChatFormat(String chatFormat) { | ||||
| 		this.distinguishedChatFormat = chatFormat; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public ArrayList<FPlayer> getPlayers(){ | ||||
| 		ArrayList<FPlayer> players = new ArrayList<FPlayer>(); | ||||
| 		for(FPlayer p : FPlayer.getPlayers()) { | ||||
| 			if(p.getTempChannels().contains(name)) { | ||||
| 				players.add(p); | ||||
| 			} | ||||
| 		} | ||||
| 		return players; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void sendMessage(String msg, FPlayer from) { | ||||
| 		plugin.log(Level.INFO, "[TC] " + name + ": " + msg); | ||||
| 		for(FPlayer p : FPlayer.getPlayers()) { | ||||
| 			if(p.getTempChannels().contains(name) && !p.isIgnoring(from)) { | ||||
| 				p.sendMessage(msg); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,139 @@ | |||
| package com.fpghoti.fpchatx.command; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| 
 | ||||
| public abstract class Commands { | ||||
| 
 | ||||
| 	private static ArrayList<Commands> commands = new ArrayList<Commands>(); | ||||
| 
 | ||||
| 	public static void register(Commands cmd) { | ||||
| 		commands.add(cmd); | ||||
| 	} | ||||
| 	 | ||||
| 	public static ArrayList<Commands> getCommands(){ | ||||
| 		return commands; | ||||
| 	} | ||||
| 	 | ||||
| 	private static boolean blocked = false; | ||||
| 
 | ||||
| 	public static boolean performCommand(CommandSender sender, Command command, String label, String[] args) { | ||||
| 		if(blocked) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		String input = label + " "; | ||||
| 		for (String s : args) { | ||||
| 			input += s + " "; | ||||
| 		} | ||||
| 
 | ||||
| 		Commands match = null; | ||||
| 		String[] trim = null; | ||||
| 		StringBuilder lab = new StringBuilder(); | ||||
| 
 | ||||
| 		for(Commands cmd : commands) { | ||||
| 			StringBuilder l = new StringBuilder(); | ||||
| 			String[] temp = cmd.getArgs(input, l); | ||||
| 			if (l.length() > lab.length()) { | ||||
| 				lab = l; | ||||
| 				match = cmd; | ||||
| 				trim = temp; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if(match != null) { | ||||
| 			if (trim == null || (trim.length > 0 && trim[0].equals("?"))) { | ||||
| 				sender.sendMessage(ChatColor.RED + "Command:" + ChatColor.YELLOW + " " + match.getName()); | ||||
| 				sender.sendMessage(ChatColor.RED + "Description:" + ChatColor.YELLOW + " " + match.getDescription()); | ||||
| 				sender.sendMessage(ChatColor.RED + "Syntax:" + ChatColor.YELLOW + " " +  match.getSyntax()); | ||||
| 				ArrayList<String> notes = match.getMisc(); | ||||
| 				for (String note : notes) { | ||||
| 					sender.sendMessage(ChatColor.YELLOW + note); | ||||
| 				} | ||||
| 			} else { | ||||
| 				match.execute(sender, trim); | ||||
| 			} | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
| 	 | ||||
| 	public static void blockCommands() { | ||||
| 		blocked = true; | ||||
| 	} | ||||
| 	 | ||||
| 	public static void allowCommands() { | ||||
| 		blocked = false; | ||||
| 	} | ||||
| 
 | ||||
| 	protected FPChat plugin; | ||||
| 	protected String name; | ||||
| 	protected String syntax; | ||||
| 	protected String description; | ||||
| 	protected int minArgs; | ||||
| 	protected int maxArgs; | ||||
| 	protected ArrayList<String> labels; | ||||
| 	protected ArrayList<String> misc; | ||||
| 
 | ||||
| 	public Commands(FPChat plugin) { | ||||
| 		this.plugin = plugin; | ||||
| 		this.labels = new ArrayList<String>(); | ||||
| 		this.misc = new ArrayList<String>(); | ||||
| 	} | ||||
| 
 | ||||
| 	public String[] getArgs(String input, StringBuilder label) { | ||||
| 		boolean found = false; | ||||
| 		int count = 0; | ||||
| 		for(int i = 0; i < labels.size(); i++) { | ||||
| 			String lab = labels.get(i).toLowerCase(); | ||||
| 			if (input.toLowerCase().matches(lab + "(\\s+.*|\\s*)")) { | ||||
| 				if (lab.length() > labels.get(count).length() || !found) { | ||||
| 					count = i; | ||||
| 					found = true; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if (found) { | ||||
| 			label = label.append(labels.get(count)); | ||||
| 			String[] args = input.substring(label.length()).trim().split(" "); | ||||
| 			if (args[0].isEmpty()) { | ||||
| 				args = new String[0]; | ||||
| 			} | ||||
| 			if (args.length >= minArgs && args.length <= maxArgs) { | ||||
| 				return args; | ||||
| 			} | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	public ArrayList<String> getLabels() { | ||||
| 		return this.labels; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setlabels(ArrayList<String> labels) { | ||||
| 		this.labels = labels; | ||||
| 	} | ||||
| 
 | ||||
| 	public String getName() { | ||||
| 		return this.name; | ||||
| 	} | ||||
| 
 | ||||
| 	public String getSyntax() { | ||||
| 		return this.syntax; | ||||
| 	} | ||||
| 
 | ||||
| 	public String getDescription() { | ||||
| 		return this.description; | ||||
| 	} | ||||
| 
 | ||||
| 	public ArrayList<String> getMisc() { | ||||
| 		return this.misc; | ||||
| 	} | ||||
| 	 | ||||
| 	public abstract void execute(CommandSender sender, String[] args); | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,41 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.badge.BadgeSet; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class BadgeClearCommand extends Commands { | ||||
| 
 | ||||
| 	public BadgeClearCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "BadgeClear"; | ||||
| 		description = "Unequips all badges"; | ||||
| 		syntax = ChatColor.GRAY + "/badgeclear"; | ||||
| 		minArgs = 0; | ||||
| 		maxArgs = 0; | ||||
| 		labels.add("fpc badgeclear"); | ||||
| 		labels.add("fpchat badgeclear"); | ||||
| 		labels.add("ch badgeclear"); | ||||
| 		labels.add("badgeclear"); | ||||
| 		labels.add("badgesclear"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if(!(sender instanceof Player)) { | ||||
| 			FPlayer.errMsg(null, "This command is for players only."); | ||||
| 			return; | ||||
| 		} | ||||
| 		FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
| 		BadgeSet.setBadge(p, 1, 0); | ||||
| 		BadgeSet.setBadge(p, 2, 0); | ||||
| 		BadgeSet.setBadge(p, 3, 0); | ||||
| 		p.sendMessage(FPChat.logo() + ChatColor.YELLOW + " Unequipped all badges!"); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,56 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.badge.BadgeGetter; | ||||
| import com.fpghoti.fpchatx.badge.BadgeList; | ||||
| import com.fpghoti.fpchatx.badge.BadgeSet; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class BadgeEquipCommand extends Commands { | ||||
| 
 | ||||
| 	public BadgeEquipCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "BadgeEquip"; | ||||
| 		description = "Equips badges for use in chat"; | ||||
| 		syntax = ChatColor.GRAY + "/equip " + ChatColor.GOLD + "slot# badge#"; | ||||
| 		minArgs = 2; | ||||
| 		maxArgs = 2; | ||||
| 		labels.add("fpc badgeequip"); | ||||
| 		labels.add("fpchat badgeequip"); | ||||
| 		labels.add("ch badgeequip"); | ||||
| 		labels.add("badgeequip"); | ||||
| 		labels.add("equip"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if(!(sender instanceof Player)) { | ||||
| 			FPlayer.errMsg(null, "This command is for players only."); | ||||
| 			return; | ||||
| 		} | ||||
| 		 | ||||
| 		FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
| 		if(Util.isDigit(args[0]) && Util.isDigit(args[1])){ | ||||
| 
 | ||||
| 			Integer slot = Integer.parseInt(args[0]), badgeId = Integer.parseInt(args[1]); | ||||
| 			if(BadgeGetter.canUseSlot(p, slot)){ | ||||
| 				if(BadgeList.badgelist.containsKey(badgeId) && BadgeGetter.hasBadge(p, badgeId)){ | ||||
| 					BadgeSet.setBadge(p, slot, badgeId); | ||||
| 					p.updateBadges(slot, badgeId); | ||||
| 					p.sendMessage( FPChat.logo() + ChatColor.YELLOW + " You have equipped a badge!"); | ||||
| 				}else{ | ||||
| 					p.sendMessage(FPChat.logo() + ChatColor.YELLOW + " You do not have permission to equip this badge!"); | ||||
| 				} | ||||
| 			}else{ | ||||
| 				p.sendMessage(FPChat.logo() + ChatColor.YELLOW + " You do not have permission to equip a badge in this slot!"); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
|  | @ -0,0 +1,43 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.badge.BadgeList; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class BadgeListCommand extends Commands { | ||||
| 
 | ||||
| 	public BadgeListCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "BadgeList"; | ||||
| 		description = "Pulls up a list of badges you own"; | ||||
| 		syntax = ChatColor.GRAY + "/badgelist " + ChatColor.GOLD + "[page#]"; | ||||
| 		minArgs = 0; | ||||
| 		maxArgs = 1; | ||||
| 		labels.add("fpc badgelist"); | ||||
| 		labels.add("fpchat badgelist"); | ||||
| 		labels.add("ch badgelist"); | ||||
| 		labels.add("badges"); | ||||
| 		labels.add("badgelist"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if(!(sender instanceof Player)) { | ||||
| 			FPlayer.errMsg(null, "This command is for players only."); | ||||
| 			return; | ||||
| 		} | ||||
| 		FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
| 		if(args.length == 0 || !Util.isDigit(args[0])){ | ||||
| 			BadgeList.badgeList(p, 1); | ||||
| 		}else{ | ||||
| 			BadgeList.badgeList(p,  Integer.parseInt(args[0])); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,115 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import java.util.UUID; | ||||
| 
 | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| import com.fpghoti.fpchatx.chat.StandardChannel; | ||||
| import com.fpghoti.fpchatx.chat.TempChannel; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class BlacklistCommand extends Commands { | ||||
| 
 | ||||
| 	public BlacklistCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Blacklist"; | ||||
| 		description = "Toggles blacklisted status of a player in a specific channel"; | ||||
| 		syntax = ChatColor.GRAY + "/fpc blacklist " + ChatColor.GOLD + "channel player"; | ||||
| 		minArgs = 1; | ||||
| 		maxArgs = 2; | ||||
| 		labels.add("fpc blacklist"); | ||||
| 		labels.add("fpchat blacklist"); | ||||
| 		labels.add("ch blacklist"); | ||||
| 		labels.add("fpc ban"); | ||||
| 		labels.add("fpchat ban"); | ||||
| 		labels.add("ch ban"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 
 | ||||
| 		FPlayer p = null; | ||||
| 		if(sender instanceof Player) { | ||||
| 			p = FPlayer.getPlayer((Player)sender); | ||||
| 		} | ||||
| 
 | ||||
| 		ChatChannel c = ChatChannel.getChannel(args[0]); | ||||
| 
 | ||||
| 		if(c == null) { | ||||
| 			c = ChatChannel.getTempChannel(args[0]); | ||||
| 		} | ||||
| 
 | ||||
| 		if(c == ChatChannel.getDefault()) { | ||||
| 			FPlayer.errMsg(p, "You cannot blacklist a player from the default/fallback channel. If you wish to prevent someone from speaking in default, try muting instead."); | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		if (c != null) { | ||||
| 			if (args.length == 1) { | ||||
| 
 | ||||
| 				String msg = "There are no blacklisted players in this channel."; | ||||
| 				if (!c.getBanned().isEmpty()) { | ||||
| 					msg = c.getName() + " Blacklist: "; | ||||
| 					for (UUID uuid : c.getBanned()) { | ||||
| 						FPlayer bp = FPlayer.getPlayer(Bukkit.getOfflinePlayer(uuid)); | ||||
| 						String name = ChatColor.RED + bp.getName(); | ||||
| 						if(bp.isOnline()) { | ||||
| 							name = ChatColor.GREEN + bp.getName(); | ||||
| 						} | ||||
| 						msg = msg + name + ChatColor.WHITE + ", "; | ||||
| 					} | ||||
| 					msg = msg.substring(0, msg.length() - 2); | ||||
| 				} | ||||
| 				FPlayer.dualMsg(p, msg); | ||||
| 
 | ||||
| 			} else { | ||||
| 				if( p == null || (Permission.isAdmin(p) || Permission.canBan(p) || (c instanceof TempChannel && ((TempChannel)c).getOwner().equals(p)))) { | ||||
| 					FPlayer banned = FPlayer.getPlayer(args[1]); | ||||
| 					if(banned == null) { | ||||
| 						banned = FPlayer.getOfflinePlayer(args[1]); | ||||
| 					} | ||||
| 					if(banned != null) { | ||||
| 						String name = banned.getName(); | ||||
| 						if(p == null || !(Permission.isAdmin(banned) || Permission.canBan(banned))) { | ||||
| 							if(c.getBanned().contains(banned.getUniqueId())) { | ||||
| 								c.removeBanned(banned); | ||||
| 								FPlayer.goodMsg(p, ChatColor.YELLOW + name + ChatColor.GREEN + " has been removed from the blacklist of channel " + ChatColor.YELLOW + c.getName() + ChatColor.GREEN + "."); | ||||
| 							}else{ | ||||
| 								if(banned.getChannels().contains(c.getName()) || banned.getTempChannels().contains(c.getName())) { | ||||
| 									FPlayer.errMsg(banned, "You have been blacklisted from " + ChatColor.YELLOW + c.getName() + ChatColor.RED + "."); | ||||
| 								} | ||||
| 								c.addBanned(banned); | ||||
| 								c.kick(banned); | ||||
| 								FPlayer.goodMsg(p, ChatColor.YELLOW + name + ChatColor.GREEN + " has been blacklisted from " + ChatColor.YELLOW + c.getName() + ChatColor.GREEN + "."); | ||||
| 								banned.leaveChannel(c.getName()); | ||||
| 								if(c instanceof StandardChannel) { | ||||
| 									banned.setPrimaryChannel(ChatChannel.getDefault().getName()); | ||||
| 								} | ||||
| 								if(c instanceof TempChannel) { | ||||
| 									banned.stopTempSpeak(); | ||||
| 									banned.setPrimaryTempChannel(""); | ||||
| 								} | ||||
| 							} | ||||
| 						} else { | ||||
| 							FPlayer.errMsg(p, "Player cannot be removed from the channel."); | ||||
| 						} | ||||
| 					} else { | ||||
| 						FPlayer.errMsg(p, "Cannot find specified player."); | ||||
| 					} | ||||
| 				} else { | ||||
| 					FPlayer.errMsg(p, Permission.noPerm); | ||||
| 				} | ||||
| 			} | ||||
| 		} else { | ||||
| 			FPlayer.errMsg(p,  "That channel does not exist."); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,75 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| 
 | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| import com.fpghoti.fpchatx.chat.StandardChannel; | ||||
| import com.fpghoti.fpchatx.chat.TempChannel; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| import net.md_5.bungee.api.ChatColor; | ||||
| 
 | ||||
| public class ChannelsCommand extends Commands { | ||||
| 	public ChannelsCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Channels"; | ||||
| 		description = "Lists all open channels"; | ||||
| 		syntax = ChatColor.GRAY + "/fpc channels " + ChatColor.GOLD + "[page#]"; | ||||
| 		minArgs = 0; | ||||
| 		maxArgs = 1; | ||||
| 		labels.add("fpc channels"); | ||||
| 		labels.add("fpchat channels"); | ||||
| 		labels.add("ch channels"); | ||||
| 		labels.add("fpc list"); | ||||
| 		labels.add("fpchat list"); | ||||
| 		labels.add("ch list"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		FPlayer p = null; | ||||
| 		if(sender instanceof Player) { | ||||
| 			p = FPlayer.getPlayer((Player)sender); | ||||
| 		} | ||||
| 		int pg = 1; | ||||
| 		if (args.length > 0) { | ||||
| 			if(Util.isDigit(args[0])) { | ||||
| 				pg = Integer.parseInt(args[0]); | ||||
| 			}else { | ||||
| 				FPlayer.errMsg(p, syntax); | ||||
| 			} | ||||
| 		} | ||||
| 		ArrayList<String> channels = new ArrayList<String>(); | ||||
| 		for(ChatChannel c : ChatChannel.getChannels()) { | ||||
| 			if(p == null || p.canJoin(c)) { | ||||
| 				if(c instanceof StandardChannel) { | ||||
| 					String s = ChatColor.DARK_GREEN + "Channel: " + ChatColor.GREEN + c.getName(); | ||||
| 					channels.add(s); | ||||
| 				}else if(c instanceof TempChannel) { | ||||
| 					String s = ChatColor.DARK_AQUA + "TempChannel: " + ChatColor.AQUA + c.getName(); | ||||
| 					channels.add(s); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		int pageCount = (int) Math.ceil((double) channels.size() / 8); | ||||
| 		if (pg > pageCount) { | ||||
| 			pg = pageCount; | ||||
| 		} | ||||
| 
 | ||||
| 		FPlayer.plainMsg(p, ChatColor.GOLD + "[" + Integer.toString(pg) + "/" + Integer.toString(pageCount) + "] "  + ChatColor.YELLOW + "Open Channels:"); | ||||
| 		for (int i = 0; i < 8; i++) { | ||||
| 			int index = (pg - 1) * 8 + i; | ||||
| 			if (index < channels.size()) { | ||||
| 				String msg = channels.get(index); | ||||
| 				FPlayer.plainMsg(p, msg); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,182 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| import com.fpghoti.fpchatx.chat.ChatFilter; | ||||
| import com.fpghoti.fpchatx.chat.StandardChannel; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class CreateCommand extends Commands { | ||||
| 
 | ||||
| 	public CreateCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Create"; | ||||
| 		description = "Makes a new channel"; | ||||
| 		syntax = ChatColor.GRAY + "/fpc create " + ChatColor.GOLD + "<temp> name <flags>"; | ||||
| 		minArgs = 1; | ||||
| 		maxArgs = 2 + validflags.length; | ||||
| 		labels.add("fpc create"); | ||||
| 		labels.add("fpchat create"); | ||||
| 		labels.add("ch create"); | ||||
| 		misc.add("Possible Flags:"); | ||||
| 		misc.add("-w : Create with whitelist enabled"); | ||||
| 		misc.add("-a : Broadcast alert to all players when channel is made"); | ||||
| 		misc.add("-p : Set your primary channel to the new channel upon creation"); | ||||
| 	} | ||||
| 	 | ||||
| 	private static String[] validflags = {"-w", "-a", "-p"}; | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		FPlayer p = null; | ||||
| 		if (sender instanceof Player) { | ||||
| 			p = FPlayer.getPlayer((Player)sender); | ||||
| 		} | ||||
| 
 | ||||
| 		boolean canTemp = false; | ||||
| 		boolean canStandard = false; | ||||
| 		boolean canAlert = false; | ||||
| 		boolean isTemp = false; | ||||
| 		 | ||||
| 		boolean whitelist = false; | ||||
| 		boolean alert = false; | ||||
| 		boolean primary = false; | ||||
| 
 | ||||
| 		String name; | ||||
| 		ArrayList<String> flags = new ArrayList<String>(); | ||||
| 
 | ||||
| 		ChatChannel channel; | ||||
| 
 | ||||
| 		if(p == null) { | ||||
| 			canStandard = true; | ||||
| 			canAlert = true; | ||||
| 		}else { | ||||
| 			canTemp = Permission.canMakeTempChannel(p); | ||||
| 			canStandard = Permission.canMakeChannel(p); | ||||
| 			canAlert = Permission.canAlertMakeChannel(p); | ||||
| 		} | ||||
| 
 | ||||
| 		if(args[0].equalsIgnoreCase("temp")) { | ||||
| 			isTemp = true; | ||||
| 		} | ||||
| 
 | ||||
| 		if(isTemp && args.length  == 1) { | ||||
| 			FPlayer.errMsg(p, syntax); | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		if(isTemp && !canTemp) { | ||||
| 			if(p == null) { | ||||
| 				FPlayer.errMsg(p,"Temporary channels are designed for player use only."); | ||||
| 			}else { | ||||
| 				FPlayer.errMsg(p, "You do not have permission to create temporary channels."); | ||||
| 			} | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		if(!isTemp && !canStandard) { | ||||
| 			FPlayer.errMsg(p, "You do not have permission to create permanent channels."); | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		if(isTemp) { | ||||
| 			name = args[1]; | ||||
| 			if(args.length > 2) { | ||||
| 				for(int i = 2; i < args.length; i++) { | ||||
| 					flags.add(args[i]); | ||||
| 				} | ||||
| 			} | ||||
| 		}else { | ||||
| 			name = args[0]; | ||||
| 			if(args.length > 1) { | ||||
| 				for(int i = 1; i < args.length; i++) { | ||||
| 					flags.add(args[i]); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if(FPChat.getPlugin().getMainConfig().chatFilterEnabled()) { | ||||
| 			if(!ChatFilter.filterWord(name).equals(name)) { | ||||
| 				FPlayer.errMsg(p, "This channel name is not allowed on this server."); | ||||
| 				return; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		for(String s : flags) { | ||||
| 			if(!Util.contains(validflags, s.toLowerCase())) { | ||||
| 				FPlayer.errMsg(p, "You tried use an invalid flag."); | ||||
| 				return; | ||||
| 			} | ||||
| 			if(p == null && s.equalsIgnoreCase("-p")) { | ||||
| 				FPlayer.errMsg(p, "Console cannot set a primary chat channel."); | ||||
| 				return; | ||||
| 			} | ||||
| 			if(s.equalsIgnoreCase("-w")) { | ||||
| 				whitelist = true; | ||||
| 			} | ||||
| 			if(s.equalsIgnoreCase("-a")) { | ||||
| 				alert = true; | ||||
| 			} | ||||
| 			if(s.equalsIgnoreCase("-p")) { | ||||
| 				primary = true; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if(ChatChannel.isReserved(name)) { | ||||
| 			FPlayer.errMsg(p, "This name is unavailable. Please try something else."); | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		if(isTemp) { | ||||
| 			channel = ChatChannel.makeTempChannel(p, name); | ||||
| 			p.joinChannel(name); | ||||
| 			if(primary) { | ||||
| 				p.speakingInTemp(); | ||||
| 				p.setPrimaryTempChannel(name); | ||||
| 			} | ||||
| 		}else { | ||||
| 			channel = ChatChannel.makeChannel(name); | ||||
| 			StandardChannel loaded = ChatChannel.loadChannel(name); | ||||
| 			if(loaded != null) { | ||||
| 				ChatChannel.addChannel(loaded); | ||||
| 			} | ||||
| 			if(p != null) { | ||||
| 				p.joinChannel(name); | ||||
| 				if(primary) { | ||||
| 					p.stopTempSpeak(); | ||||
| 					p.setPrimaryChannel(name); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if(whitelist) { | ||||
| 			channel.enableWhitelist(); | ||||
| 		} | ||||
| 		if(alert) { | ||||
| 			if(canAlert) { | ||||
| 				String  creator = "CONSOLE"; | ||||
| 				if(p != null) { | ||||
| 					creator = p.getName(); | ||||
| 				} | ||||
| 				for(FPlayer player : FPlayer.getPlayers()) { | ||||
| 					FPlayer.plainMsg(player, ChatColor.YELLOW + creator + ChatColor.AQUA + " has created a new channel: " + ChatColor.WHITE + name); | ||||
| 				} | ||||
| 			}else { | ||||
| 				FPlayer.errMsg(p, "You do not have permission to send an alert."); | ||||
| 				return; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		FPlayer.goodMsg(p, "Channel created!"); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,76 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| import com.fpghoti.fpchatx.chat.TempChannel; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class DeleteCommand extends Commands { | ||||
| 
 | ||||
| 	public DeleteCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Delete"; | ||||
| 		description = "Deletes a channel"; | ||||
| 		syntax = ChatColor.GRAY + "/fpc delete " + ChatColor.GOLD + "channel"; | ||||
| 		minArgs = 1; | ||||
| 		maxArgs = 1; | ||||
| 		labels.add("fpc delete"); | ||||
| 		labels.add("fpchat delete"); | ||||
| 		labels.add("ch delete"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 
 | ||||
| 		FPlayer p = null; | ||||
| 		if(sender instanceof Player) { | ||||
| 			p = FPlayer.getPlayer((Player)sender); | ||||
| 		} | ||||
| 
 | ||||
| 		ChatChannel c = ChatChannel.getChannel(args[0]); | ||||
| 
 | ||||
| 		if(c == null) { | ||||
| 			c = ChatChannel.getTempChannel(args[0]); | ||||
| 		} | ||||
| 
 | ||||
| 		boolean allowed = false; | ||||
| 
 | ||||
| 		if(p == null) { | ||||
| 			allowed = true; | ||||
| 		}else { | ||||
| 			if(c instanceof TempChannel) { | ||||
| 				TempChannel temp = (TempChannel)c; | ||||
| 				if(temp.getOwner().equals(p)) { | ||||
| 					allowed = true; | ||||
| 				} | ||||
| 
 | ||||
| 			} | ||||
| 			if(Permission.canDeleteChannel(p)) { | ||||
| 				allowed = true; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if(!allowed) { | ||||
| 			FPlayer.errMsg(p, Permission.noPerm); | ||||
| 		} | ||||
| 
 | ||||
| 		if(c == ChatChannel.getDefault()) { | ||||
| 			FPlayer.errMsg(p, "You cannot delete the default/fallback channel. If you wish to delete this channel, try setting a different default channel first."); | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		if (c != null) { | ||||
| 			c.delete(); | ||||
| 			FPlayer.goodMsg(p,"Channel deleted."); | ||||
| 		} else { | ||||
| 			FPlayer.errMsg(p,  "That channel does not exist."); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,60 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.badge.BadgeList; | ||||
| import com.fpghoti.fpchatx.badge.SyncSet; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class GiveBadgeCommand extends Commands { | ||||
| 
 | ||||
| 	public GiveBadgeCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "GiveBadge"; | ||||
| 		description = "Give player a badge"; | ||||
| 		syntax = ChatColor.GRAY + "/givebadge " + ChatColor.GOLD + "player badge#"; | ||||
| 		minArgs = 2; | ||||
| 		maxArgs = 2; | ||||
| 		labels.add("fpc givebadge"); | ||||
| 		labels.add("fpchat givebadge"); | ||||
| 		labels.add("ch givebadge"); | ||||
| 		labels.add("givebadge"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		FPlayer p = null; | ||||
| 		Boolean console = true; | ||||
| 		if(sender instanceof Player){ | ||||
| 			console = false; | ||||
| 			p = FPlayer.getPlayer((Player) sender); | ||||
| 		} | ||||
| 
 | ||||
| 		if(console || Permission.isAdmin(p)){ | ||||
| 			FPlayer toGive = FPlayer.getPlayer(args[0]); | ||||
| 			if(toGive == null) { | ||||
| 				toGive = FPlayer.getPlayer(args[0]); | ||||
| 			} | ||||
| 			if(toGive == null) { | ||||
| 				FPlayer.errMsg(p,"That player cannot be found."); | ||||
| 				return; | ||||
| 			} | ||||
| 			if(Util.isDigit(args[1]) && BadgeList.badgeperm.containsKey(Integer.parseInt(args[1]))) { | ||||
| 				int id = Integer.parseInt(args[1]); | ||||
| 				toGive.queueBadgeAdd(id); | ||||
| 				SyncSet.update(toGive); | ||||
| 				toGive.addSyncedBadge(id); | ||||
| 				FPlayer.goodMsg(p, "Badge granted."); | ||||
| 			}else { | ||||
| 				 FPlayer.errMsg(p,"Wrong command usage."); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,95 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class HelpCommand extends Commands { | ||||
| 
 | ||||
| 	public HelpCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Help"; | ||||
| 		description = "Displays the help menu"; | ||||
| 		syntax = ChatColor.GRAY + "/fpc help " + ChatColor.GOLD + "page#"; | ||||
| 		minArgs = 0; | ||||
| 		maxArgs = 1; | ||||
| 		labels.add("fpc help"); | ||||
| 		labels.add("fpchat help"); | ||||
| 		labels.add("ch help"); | ||||
| 		labels.add("fpc"); | ||||
| 		labels.add("fpchat"); | ||||
| 		labels.add("ch"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		FPlayer p = null; | ||||
| 		if(sender instanceof Player) { | ||||
| 			p = FPlayer.getPlayer((Player)sender); | ||||
| 		} | ||||
| 
 | ||||
| 		int pg = 1; | ||||
| 		if (args.length > 0) { | ||||
| 			if(Util.isDigit(args[0])) { | ||||
| 				pg = Integer.parseInt(args[0]); | ||||
| 			}else { | ||||
| 				FPlayer.errMsg(p, syntax); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		ArrayList<Commands> commands = Commands.getCommands(); | ||||
| 
 | ||||
| 		int pageCount = (int) Math.ceil((double) commands.size() / 8); | ||||
| 		if (pg > pageCount) { | ||||
| 			pg = pageCount; | ||||
| 		} | ||||
| 		 | ||||
| 		FPlayer.plainMsg(p, ""); | ||||
| 		String name = ""; | ||||
| 		String ctype = "Normal"; | ||||
| 		if(Permission.isAdmin(p)) { | ||||
| 			name = name + ChatColor.AQUA + "[ADMIN] "; | ||||
| 		}else if(Permission.isStaff(p)) { | ||||
| 			name = name + ChatColor.BLUE + "[STAFF] "; | ||||
| 		} | ||||
| 		name = ChatColor.DARK_AQUA + "Player: " + name + ChatColor.GREEN + p.getName(); | ||||
| 		String cname = p.getPrimaryChannel().getName(); | ||||
| 		String ccount = Integer.toString(p.getPrimaryChannel().playerCount()); | ||||
| 		if(p.speakingInTemp() && p.getPrimaryTempChannel() != null) { | ||||
| 			ccount = Integer.toString(p.getPrimaryTempChannel().playerCount()); | ||||
| 			cname = p.getPrimaryTempChannel().getName(); | ||||
| 			ctype = "Temporary"; | ||||
| 		} | ||||
| 		String primary = ChatColor.DARK_AQUA + "Current Channel: " + ChatColor.GREEN + cname; | ||||
| 		ctype = ChatColor.DARK_AQUA + "Channel Type: " + ChatColor.GREEN + ctype; | ||||
| 		String online = ChatColor.DARK_AQUA + "Members Online: " + ChatColor.GREEN + ccount; | ||||
| 		if(args.length == 0) { | ||||
| 			FPlayer.plainMsg(p, ChatColor.GOLD + "[INFO] "  + ChatColor.YELLOW + "FPChatX:"); | ||||
| 			FPlayer.plainMsg(p,name); | ||||
| 			FPlayer.plainMsg(p,primary); | ||||
| 			FPlayer.plainMsg(p,ctype); | ||||
| 			FPlayer.plainMsg(p,online); | ||||
| 			FPlayer.plainMsg(p,ChatColor.GRAY + "Use " + ChatColor.WHITE + "/fpc who " + ChatColor.GRAY + "to see who is in this channel."); | ||||
| 			FPlayer.plainMsg(p, ChatColor.GRAY + "Use " + ChatColor.WHITE + "/fpc help page# " + ChatColor.GRAY + "for a list of commands."); | ||||
| 			return; | ||||
| 		} | ||||
| 		FPlayer.plainMsg(p, ChatColor.GOLD + "[" + Integer.toString(pg) + "/" + Integer.toString(pageCount) + "] "  + ChatColor.YELLOW + "FPChatX Commands:"); | ||||
| 		for (int i = 0; i < 8; i++) { | ||||
| 			int index = (pg - 1) * 8 + i; | ||||
| 			if (index < commands.size()) { | ||||
| 				String msg = ChatColor.GREEN + "- " + commands.get(index).getSyntax(); | ||||
| 				FPlayer.plainMsg(p, msg); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,51 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class HushCommand extends Commands { | ||||
| 
 | ||||
| 	public HushCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Hush"; | ||||
| 		description = "Prevents a player from shouting"; | ||||
| 		syntax = ChatColor.GRAY + "/hush " + ChatColor.GOLD + "player"; | ||||
| 		minArgs = 1; | ||||
| 		maxArgs = 1; | ||||
| 		labels.add("fpc hush"); | ||||
| 		labels.add("fpchat hush"); | ||||
| 		labels.add("ch hush"); | ||||
| 		labels.add("hush"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		FPlayer p = null; | ||||
| 		Boolean console = true; | ||||
| 		if(sender instanceof Player){ | ||||
| 			console = false; | ||||
| 			p = FPlayer.getPlayer((Player) sender); | ||||
| 		} | ||||
| 
 | ||||
| 		if(console || Permission.canHush(p)){ | ||||
| 			FPlayer hush = FPlayer.getPlayer(args[0]); | ||||
| 			if(hush == null) { | ||||
| 				hush = FPlayer.getPlayer(args[0]); | ||||
| 			} | ||||
| 			if(hush == null) { | ||||
| 				FPlayer.errMsg(p,"That player cannot be found."); | ||||
| 			}else{ | ||||
| 				hush.hush(); | ||||
| 				FPlayer.dualMsg(hush, "You have been hushed. Your shouts will no longer send."); | ||||
| 				FPlayer.goodMsg(p, "Player can no longer use shout."); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,64 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import java.util.UUID; | ||||
| 
 | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.OfflinePlayer; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class IgnoreCommand extends Commands { | ||||
| 
 | ||||
| 	public IgnoreCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Ignore"; | ||||
| 		description = "Ignores all messages from a player"; | ||||
| 		syntax = ChatColor.GRAY + "/ignore " + ChatColor.GOLD + "player"; | ||||
| 		minArgs = 1; | ||||
| 		maxArgs = 1; | ||||
| 		labels.add("fpc ignore"); | ||||
| 		labels.add("fpchat ignore"); | ||||
| 		labels.add("ch ignore"); | ||||
| 		labels.add("ignore"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if(sender instanceof Player) { | ||||
| 			FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
| 			if(Permission.canIgnore(p)) { | ||||
| 				UUID u = plugin.getPlayerCache().getUUID(args[0]); | ||||
| 				if(u == null) { | ||||
| 					FPlayer.errMsg(p, "Invalid player."); | ||||
| 					return; | ||||
| 				} | ||||
| 				OfflinePlayer o = Bukkit.getOfflinePlayer(u); | ||||
| 				 | ||||
| 				if(o != null) { | ||||
| 					FPlayer ignored = FPlayer.getPlayer(o, true); | ||||
| 					if(p.getIgnored().contains(u)) { | ||||
| 						FPlayer.errMsg(p, "This player is already ignored."); | ||||
| 						return; | ||||
| 					} | ||||
| 					boolean result = p.ignore(ignored); | ||||
| 					if(result) { | ||||
| 						FPlayer.goodMsg(p, "Player ignored."); | ||||
| 					}else { | ||||
| 						FPlayer.errMsg(p, "This player cannot be ignored."); | ||||
| 					} | ||||
| 				} else { | ||||
| 					FPlayer.errMsg(p, "Invalid player."); | ||||
| 				} | ||||
| 			} | ||||
| 		} else { | ||||
| 			FPlayer.errMsg(null, "You must be a player to use ignore."); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,74 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.UUID; | ||||
| 
 | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.OfflinePlayer; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class IgnoreListCommand extends Commands { | ||||
| 
 | ||||
| 	public IgnoreListCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Ignore List"; | ||||
| 		description = "Lists all players you have ignored"; | ||||
| 		syntax = ChatColor.GRAY + "/ignorelist " + ChatColor.GOLD + "[page#]"; | ||||
| 		minArgs = 0; | ||||
| 		maxArgs = 1; | ||||
| 		labels.add("fpc ignorelist"); | ||||
| 		labels.add("fpchat ignorelist"); | ||||
| 		labels.add("ch ignorelist"); | ||||
| 		labels.add("ignorelist"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if (sender instanceof Player) { | ||||
| 			FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
| 
 | ||||
| 			int pg = 1; | ||||
| 			if (args.length > 0) { | ||||
| 				if(Util.isDigit(args[0])) { | ||||
| 					pg = Integer.parseInt(args[0]); | ||||
| 				}else { | ||||
| 					FPlayer.errMsg(p, syntax); | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			ArrayList<UUID> players = p.getIgnored(); | ||||
| 			 | ||||
| 			if(players.size() == 0) { | ||||
| 				FPlayer.dualMsg(p, "Your ignore list is currently empty."); | ||||
| 				return; | ||||
| 			} | ||||
| 
 | ||||
| 			int pageCount = (int) Math.ceil((double) players.size() / 8); | ||||
| 			if (pg > pageCount) { | ||||
| 				pg = pageCount; | ||||
| 			} | ||||
| 
 | ||||
| 			FPlayer.plainMsg(p, ""); | ||||
| 			FPlayer.plainMsg(p, ChatColor.GOLD + "[" + Integer.toString(pg) + "/" + Integer.toString(pageCount) + "] "  + ChatColor.YELLOW + "Ignored Players:"); | ||||
| 			for (int i = 0; i < 8; i++) { | ||||
| 				int index = (pg - 1) * 8 + i; | ||||
| 				if (index < players.size()) { | ||||
| 					OfflinePlayer o = Bukkit.getOfflinePlayer(players.get(index)); | ||||
| 					String msg = ChatColor.GREEN + "- " + ChatColor.YELLOW + o.getName(); | ||||
| 					FPlayer.plainMsg(p, msg); | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 		}else{ | ||||
| 			FPlayer.errMsg(null, "This command is for players only."); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,42 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class JoinCommand extends Commands { | ||||
| 
 | ||||
| 	public JoinCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Join"; | ||||
| 		description = "Enters a channel"; | ||||
| 		syntax = ChatColor.GRAY + "/fpc join " + ChatColor.GOLD + "channel"; | ||||
| 		minArgs = 1; | ||||
| 		maxArgs = 1; | ||||
| 		labels.add("fpc join"); | ||||
| 		labels.add("fpchat join"); | ||||
| 		labels.add("ch join"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if (sender instanceof Player) { | ||||
| 			FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
| 			ChatChannel channel = ChatChannel.getChannel(args[0]); | ||||
| 			if(channel == null) { | ||||
| 				channel = ChatChannel.getTempChannel(args[0]); | ||||
| 			} | ||||
| 			if(channel == null) { | ||||
| 				FPlayer.errMsg(p, "The channel you are trying to join does not exist."); | ||||
| 				return; | ||||
| 			} | ||||
| 			p.joinChannel(channel.getName()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,84 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| import com.fpghoti.fpchatx.chat.StandardChannel; | ||||
| import com.fpghoti.fpchatx.chat.TempChannel; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class KickCommand extends Commands { | ||||
| 
 | ||||
| 	public KickCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Kick"; | ||||
| 		description = "Kicks a player from a channel"; | ||||
| 		syntax = ChatColor.GRAY + "/fpc kick " + ChatColor.GOLD + "channel player"; | ||||
| 		minArgs = 2; | ||||
| 		maxArgs = 2; | ||||
| 		labels.add("fpc kick"); | ||||
| 		labels.add("fpchat kick"); | ||||
| 		labels.add("ch kick"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 
 | ||||
| 		FPlayer p = null; | ||||
| 		if(sender instanceof Player) { | ||||
| 			p = FPlayer.getPlayer((Player)sender); | ||||
| 		} | ||||
| 
 | ||||
| 		ChatChannel c = ChatChannel.getChannel(args[0]); | ||||
| 
 | ||||
| 		if(c == null) { | ||||
| 			c = ChatChannel.getTempChannel(args[0]); | ||||
| 		} | ||||
| 
 | ||||
| 		if(c == ChatChannel.getDefault()) { | ||||
| 			FPlayer.errMsg(p, "You cannot kick a player from the default/fallback channel. If you wish to prevent someone from speaking in default, try muting instead."); | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		if (c != null) { | ||||
| 			if( p == null || (Permission.isAdmin(p) || Permission.canBan(p))) { | ||||
| 				FPlayer kicked = FPlayer.getPlayer(args[1]); | ||||
| 				if(kicked == null) { | ||||
| 					kicked = FPlayer.getOfflinePlayer(args[1]); | ||||
| 				} | ||||
| 				if(kicked != null) { | ||||
| 					String name = kicked.getName(); | ||||
| 					if(p == null || !(Permission.isAdmin(kicked) || Permission.canBan(kicked))) { | ||||
| 						if(kicked.getChannels().contains(c.getName())) { | ||||
| 							c.kick(kicked); | ||||
| 							FPlayer.goodMsg(p, ChatColor.YELLOW + name + ChatColor.GREEN + " has been kicked from " + c.getName()); | ||||
| 							FPlayer.errMsg(kicked, "You have been kicked from " + ChatColor.YELLOW + c.getName()); | ||||
| 							kicked.leaveChannel(c.getName()); | ||||
| 							if(c instanceof StandardChannel) { | ||||
| 								kicked.setPrimaryChannel(ChatChannel.getDefault().getName()); | ||||
| 							} | ||||
| 							if(c instanceof TempChannel) { | ||||
| 								kicked.stopTempSpeak(); | ||||
| 								kicked.setPrimaryTempChannel(""); | ||||
| 							} | ||||
| 						} | ||||
| 					} else { | ||||
| 						FPlayer.errMsg(p, "Player cannot be kicked from the channel."); | ||||
| 					} | ||||
| 				} else { | ||||
| 					FPlayer.errMsg(p, "Cannot find specified player."); | ||||
| 				} | ||||
| 			} else { | ||||
| 				FPlayer.errMsg(p, Permission.noPerm); | ||||
| 			} | ||||
| 		} else { | ||||
| 			FPlayer.errMsg(p,  "That channel does not exist."); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,41 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class LeaveCommand extends Commands { | ||||
| 
 | ||||
| 	public LeaveCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Leave"; | ||||
| 		description = "Leaves a channel"; | ||||
| 		syntax = ChatColor.GRAY + "/fpc leave " + ChatColor.GOLD + "channel"; | ||||
| 		minArgs = 1; | ||||
| 		maxArgs = 1; | ||||
| 		labels.add("fpc leave"); | ||||
| 		labels.add("fpchat leave"); | ||||
| 		labels.add("ch leave"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if (sender instanceof Player) { | ||||
| 			FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
| 			ChatChannel channel = ChatChannel.getChannel(args[0]); | ||||
| 			if(channel == null) { | ||||
| 				FPlayer.errMsg(p, "The channel you are trying to leave does not exist."); | ||||
| 				return; | ||||
| 			} | ||||
| 			p.leaveChannel(channel.getName()); | ||||
| 			p.leaveTempChannel(channel.getName()); | ||||
| 			FPlayer.goodMsg(p, "You left the channel."); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,72 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import java.util.logging.Level; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class MessageCommand extends Commands { | ||||
| 
 | ||||
| 	public MessageCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Message"; | ||||
| 		description = "Sends a private message to another player"; | ||||
| 		syntax = ChatColor.GRAY + "/msg " + ChatColor.GOLD + "player message"; | ||||
| 		minArgs = 2; | ||||
| 		maxArgs = 100000; | ||||
| 		labels.add("msg"); | ||||
| 		labels.add("fpc msg"); | ||||
| 		labels.add("fpchat msg"); | ||||
| 		labels.add("ch msg"); | ||||
| 		labels.add("tell"); | ||||
| 		labels.add("ch tell"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if(sender instanceof Player) { | ||||
| 			FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
| 			if(Permission.canPrivateMessage(p)) { | ||||
| 				Player tp = Util.getEP(args[0]); | ||||
| 				if(tp != null) { | ||||
| 					FPlayer target = FPlayer.getPlayer(tp); | ||||
| 					String msg =""; | ||||
| 		            String last = args[args.length - 1]; | ||||
| 		            for(int i = 1; i < args.length - 1; i++) { | ||||
| 		            	msg = msg + args[i] + " "; | ||||
| 		            } | ||||
| 		            msg = msg + last; | ||||
| 		            p.sendPM(target, msg); | ||||
| 				}else { | ||||
| 					FPlayer.errMsg(p, "Target player is not online."); | ||||
| 				} | ||||
| 			}else { | ||||
| 				FPlayer.errMsg(p, Permission.noPerm); | ||||
| 			} | ||||
| 		}else { | ||||
| 			String msg = ChatColor.GREEN + "PM from CONSOLE: " + ChatColor.GRAY; | ||||
|             String last = args[args.length - 1]; | ||||
|             for(int i = 1; i < args.length - 1; i++) { | ||||
|             	msg = msg + args[i] + " "; | ||||
|             } | ||||
|             msg = msg + last; | ||||
|              | ||||
|             Player target = Util.getEP(args[0]); | ||||
|             if(target == null) { | ||||
|             	FPlayer.errMsg(null,"Invalid player."); | ||||
|             }else { | ||||
|             	target.sendMessage(msg); | ||||
|             	plugin.log(Level.INFO, ChatColor.GREEN + "PM to " + target.getName() + ": " + ChatColor.GRAY + msg); | ||||
|             } | ||||
| 		} | ||||
| 
 | ||||
| 	}	 | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,46 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class ReloadCommand extends Commands { | ||||
| 
 | ||||
| 	public ReloadCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Reload"; | ||||
| 		description = "Reloads the plugin's configuration and data files."; | ||||
| 		syntax = "§7/fpc reload"; | ||||
| 		minArgs = 0; | ||||
| 		maxArgs = 0; | ||||
| 		labels.add("fpc reload"); | ||||
| 		labels.add("fpchat reload"); | ||||
| 		labels.add("ch reload"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		FPlayer p = null; | ||||
| 		boolean allowed = true; | ||||
| 		if(sender instanceof Player) { | ||||
| 			p = FPlayer.getPlayer((Player)sender); | ||||
| 			allowed = Permission.isAdmin(p); | ||||
| 		} | ||||
| 		 | ||||
| 		if(allowed) { | ||||
| 			 | ||||
| 			FPlayer.dualMsg(p,"Reloading config files..."); | ||||
| 			plugin.reload(); | ||||
| 			FPlayer.goodMsg(p,"Config files reloaded."); | ||||
| 			 | ||||
| 		}else { | ||||
| 			FPlayer.errMsg(p, Permission.noPerm); | ||||
| 		} | ||||
| 		 | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,51 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class ReplyCommand extends Commands { | ||||
| 
 | ||||
| 	public ReplyCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Reply"; | ||||
| 		description = "Reply to a PM from another player"; | ||||
| 		syntax = ChatColor.GRAY + "/r " + ChatColor.GOLD + "message"; | ||||
| 		minArgs = 1; | ||||
| 		maxArgs = 10000; | ||||
| 		labels.add("reply"); | ||||
| 		labels.add("fpc reply"); | ||||
| 		labels.add("fpchat reply"); | ||||
| 		labels.add("ch reply"); | ||||
| 		labels.add("r"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if (sender instanceof Player) { | ||||
| 			FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
| 			if(Permission.canPrivateMessage(p)) { | ||||
| 				FPlayer target = p.getLastMessage(); | ||||
| 				if(target != null) { | ||||
| 					String msg =""; | ||||
| 		            String last = args[args.length - 1]; | ||||
| 		            for(int i = 0; i < args.length - 1; i++) { | ||||
| 		            	msg = msg + args[i] + " "; | ||||
| 		            } | ||||
| 		            msg = msg + last; | ||||
| 		            p.sendPM(target, msg); | ||||
| 				}else { | ||||
| 					FPlayer.errMsg(p, "Target player is not online."); | ||||
| 				} | ||||
| 			}else { | ||||
| 				FPlayer.errMsg(p, Permission.noPerm); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,78 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import java.util.UUID; | ||||
| 
 | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.OfflinePlayer; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.badge.BadgeList; | ||||
| import com.fpghoti.fpchatx.badge.SyncGetter; | ||||
| import com.fpghoti.fpchatx.badge.SyncSet; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class RevokeBadgeCommand extends Commands { | ||||
| 
 | ||||
| 	public RevokeBadgeCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "RevokeBadge"; | ||||
| 		description = "Revokes badge from player"; | ||||
| 		syntax = ChatColor.GRAY + "/revokebadge " + ChatColor.GOLD + "player badge#"; | ||||
| 		minArgs = 2; | ||||
| 		maxArgs = 2; | ||||
| 		labels.add("fpc revokebadge"); | ||||
| 		labels.add("fpchat revokebadge"); | ||||
| 		labels.add("ch revokebadge"); | ||||
| 		labels.add("revokebadge"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		FPlayer p = null; | ||||
| 		Boolean console = true; | ||||
| 		if(sender instanceof Player){ | ||||
| 			console = false; | ||||
| 			p = FPlayer.getPlayer((Player) sender); | ||||
| 		} | ||||
| 
 | ||||
| 		if(console || Permission.isAdmin(p)){ | ||||
| 			UUID u = plugin.getPlayerCache().getUUID(args[0]); | ||||
| 			if(u == null) { | ||||
| 				FPlayer.errMsg(null, "Invalid player."); | ||||
| 				return; | ||||
| 			} | ||||
| 			OfflinePlayer o = Bukkit.getOfflinePlayer(u); | ||||
| 			if(o != null) { | ||||
| 				FPlayer toRevoke = FPlayer.getPlayer(o,true); | ||||
| 				if(SyncGetter.syncExists(toRevoke) && (Util.isDigit(args[1]) || args[1].equals("*") )){ | ||||
| 
 | ||||
| 					if(args[1].equals("*")) { | ||||
| 						SyncSet.revoke(toRevoke); | ||||
| 						FPlayer.goodMsg(p, "All badges revoked from the specified player."); | ||||
| 					}else { | ||||
| 
 | ||||
| 						if(Integer.parseInt(args[1]) < BadgeList.badgeperm.size()) { | ||||
| 							int id = Integer.parseInt(args[1]); | ||||
| 							SyncSet.revoke(toRevoke, id); | ||||
| 							toRevoke.removeSyncedBadge(id); | ||||
| 							toRevoke.clearUnownedBadges(); | ||||
| 							FPlayer.goodMsg(p, "Badge revoked from the specified player."); | ||||
| 						}else { | ||||
| 							FPlayer.errMsg(p, "Invalid badge."); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			}else { | ||||
| 				FPlayer.errMsg(p, "Invalid player."); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,48 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class ShoutCommand extends Commands { | ||||
| 
 | ||||
| 	public ShoutCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Shout"; | ||||
| 		description = "Sends a chat message to every online player"; | ||||
| 		syntax = ChatColor.GRAY + "/shout " + ChatColor.GOLD + "msg"; | ||||
| 		minArgs = 0; | ||||
| 		maxArgs = 100000; | ||||
| 		labels.add("fpc shout"); | ||||
| 		labels.add("fpchat shout"); | ||||
| 		labels.add("ch shout"); | ||||
| 		labels.add("fshout"); | ||||
| 		labels.add("fyell"); | ||||
| 		labels.add("shout"); | ||||
| 		labels.add("yell"); | ||||
| 		labels.add("y"); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if (sender instanceof Player) { | ||||
|             FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
|             String msg = ""; | ||||
|             String last = args[args.length - 1]; | ||||
|             for(int i = 0; i < args.length - 1; i++) { | ||||
|             	msg = msg + args[i] + " "; | ||||
|             } | ||||
|             msg = msg + last; | ||||
|             p.shout(msg); | ||||
| 		}else{ | ||||
|             FPlayer.errMsg(null, "This command is for players only."); | ||||
|         } | ||||
| 		 | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,50 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class ShoutToggleCommand extends Commands { | ||||
| 
 | ||||
|     public ShoutToggleCommand(FPChat plugin) { | ||||
|         super(plugin); | ||||
|         name = "ShoutToggle"; | ||||
|         description = "Temporarily enables or disables shout"; | ||||
|         syntax = ChatColor.GRAY + "/fpc shouttoggle " + ChatColor.GOLD + "channel"; | ||||
|         minArgs = 0; | ||||
|         maxArgs = 0; | ||||
|         labels.add("fpc shouttoggle"); | ||||
|         labels.add("fpchat shouttoggle"); | ||||
|         labels.add("ch shouttoggle"); | ||||
|         labels.add("shouttoggle"); | ||||
|         labels.add("frankoffshout"); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void execute(CommandSender sender, String[] args) { | ||||
| 		if (sender instanceof Player) { | ||||
| 			FPlayer p = FPlayer.getPlayer((Player) sender); | ||||
| 			if(Permission.canToggleShout(p)){ | ||||
| 				if(args.length == 0){ | ||||
| 					if(!p.isShoutVisible()){ | ||||
| 						p.showShout(); | ||||
| 						FPlayer.goodMsg(p,"Now showing shout!"); | ||||
| 					}else if(p.isShoutVisible()){ | ||||
| 						p.hideShout(); | ||||
| 						FPlayer.goodMsg(p,"Now hiding shout!"); | ||||
| 					} | ||||
| 				} | ||||
| 			}else{ | ||||
| 				FPlayer.errMsg(p, "You do not have permission to use this command!"); | ||||
| 			} | ||||
| 		}else{ | ||||
|             FPlayer.errMsg(null, "This command is for players only."); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,51 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class SpyCommand extends Commands{ | ||||
| 
 | ||||
| 	FPChat plugin; | ||||
| 
 | ||||
| 	public SpyCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Spy"; | ||||
| 		description = "Toggles Spy mode"; | ||||
| 		syntax = ChatColor.GRAY + "/spy " + ChatColor.GOLD + "on/off"; | ||||
| 		minArgs = 1; | ||||
| 		maxArgs = 1; | ||||
| 		labels.add("spy"); | ||||
| 		labels.add("fpc spy"); | ||||
| 		labels.add("fpchat spy"); | ||||
| 		labels.add("ch spy"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if (sender instanceof Player) { | ||||
| 			FPlayer p = FPlayer.getPlayer((Player) sender); | ||||
| 			if(Permission.canSpy(p)){ | ||||
| 				if(args.length == 1){ | ||||
| 					if(args[0].equalsIgnoreCase("true") || args[0].equalsIgnoreCase("on")){ | ||||
| 						p.enableSpy(); | ||||
| 						FPlayer.goodMsg(p,"PM Spy Enabled!"); | ||||
| 					}else if(args[0].equalsIgnoreCase("false") || args[0].equalsIgnoreCase("off")){ | ||||
| 						p.disableSpy(); | ||||
| 						FPlayer.goodMsg(p,"PM Spy Disabled!"); | ||||
| 					} | ||||
| 				} | ||||
| 			}else{ | ||||
| 				FPlayer.errMsg(p, "You do not have permission to use this command!"); | ||||
| 			} | ||||
| 		}else{ | ||||
|             FPlayer.errMsg(null, "This command is for players only."); | ||||
|         } | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
|  | @ -0,0 +1,82 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import java.util.HashSet; | ||||
| 
 | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.event.player.AsyncPlayerChatEvent; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| import com.fpghoti.fpchatx.chat.StandardChannel; | ||||
| import com.fpghoti.fpchatx.chat.TempChannel; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class TalkCommand extends Commands { | ||||
| 
 | ||||
| 	public TalkCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Talk"; | ||||
| 		description = "Talk in a specific channel"; | ||||
| 		syntax = ChatColor.GRAY + "/talk " + ChatColor.GOLD + "channel [msg]"; | ||||
| 		minArgs = 1; | ||||
| 		maxArgs = 100000; | ||||
| 		labels.add("fpc talk"); | ||||
| 		labels.add("fpchat talk"); | ||||
| 		labels.add("ch talk"); | ||||
| 		labels.add("fpc tk"); | ||||
| 		labels.add("fpchat tk"); | ||||
| 		labels.add("ch tk"); | ||||
| 		labels.add("talk"); | ||||
| 		labels.add("tk"); | ||||
| 		misc.add("Helpful alias: /tk"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if (sender instanceof Player) { | ||||
| 			FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
| 			ChatChannel channel = ChatChannel.getChannel(args[0]); | ||||
| 			if(channel == null) { | ||||
| 				channel = ChatChannel.getTempChannel(args[0]); | ||||
| 			} | ||||
| 			if(channel == null) { | ||||
| 				FPlayer.errMsg(p, "The channel you are trying to talk in does not exist."); | ||||
| 				return; | ||||
| 			} | ||||
| 			if(!p.getChannels().contains(channel.getName()) && !p.getTempChannels().contains(channel.getName())) { | ||||
| 				FPlayer.errMsg(p, "You are not currently in that channel."); | ||||
| 				return; | ||||
| 			} | ||||
| 			if(args.length == 1) { | ||||
| 				if(channel instanceof StandardChannel) { | ||||
| 					p.setPrimaryChannel(channel.getName()); | ||||
| 					p.stopTempSpeak(); | ||||
| 				}else if(channel instanceof TempChannel) { | ||||
| 					p.setPrimaryTempChannel(channel.getName()); | ||||
| 					p.speakInTemp(); | ||||
| 				} | ||||
| 				FPlayer.dualMsg(p,ChatColor.YELLOW + "Now speaking in " + ChatColor.GREEN + channel.getName() + ChatColor.YELLOW + "."); | ||||
| 			}else { | ||||
| 				String msg = ""; | ||||
| 	            String last = args[args.length - 1]; | ||||
| 	            for(int i = 1; i < args.length - 1; i++) { | ||||
| 	            	msg = msg + args[i] + " "; | ||||
| 	            } | ||||
| 	            msg = msg + last; | ||||
| 	            p.setTalk(true); | ||||
| 	            p.setTalkChannel(channel); | ||||
| 	            Player pl = Util.getEP(p.getName()); | ||||
| 	            AsyncPlayerChatEvent event = new AsyncPlayerChatEvent(false, pl, msg, new HashSet<Player>(Bukkit.getOnlinePlayers())); | ||||
| 				Bukkit.getPluginManager().callEvent(event); | ||||
| 			} | ||||
| 		}else{ | ||||
| 			FPlayer.errMsg(null, "This command is for players only."); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,51 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class UnHushCommand extends Commands { | ||||
| 
 | ||||
| 	public UnHushCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "UnHush"; | ||||
| 		description = "Unhushes a player"; | ||||
| 		syntax = ChatColor.GRAY + "/unhush " + ChatColor.GOLD + "player"; | ||||
| 		minArgs = 1; | ||||
| 		maxArgs = 1; | ||||
| 		labels.add("fpc unhush"); | ||||
| 		labels.add("fpchat unhush"); | ||||
| 		labels.add("ch unhush"); | ||||
| 		labels.add("unhush"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		FPlayer p = null; | ||||
| 		Boolean console = true; | ||||
| 		if(sender instanceof Player){ | ||||
| 			console = false; | ||||
| 			p = FPlayer.getPlayer((Player) sender); | ||||
| 		} | ||||
| 
 | ||||
| 		if(console || Permission.canHush(p)){ | ||||
| 			FPlayer hush = FPlayer.getPlayer(args[0]); | ||||
| 			if(hush == null) { | ||||
| 				hush = FPlayer.getPlayer(args[0]); | ||||
| 			} | ||||
| 			if(hush == null) { | ||||
| 				FPlayer.errMsg(p,"That player cannot be found."); | ||||
| 			}else{ | ||||
| 				hush.unhush(); | ||||
| 				FPlayer.dualMsg(hush, "You have been unhushed. Your shouts will now send."); | ||||
| 				FPlayer.goodMsg(p, "Player can now use shout."); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,52 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import java.util.UUID; | ||||
| 
 | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.OfflinePlayer; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class UnignoreCommand extends Commands { | ||||
| 
 | ||||
| 	public UnignoreCommand(FPChat plugin) { | ||||
| 		super(plugin); | ||||
| 		name = "Unignore"; | ||||
| 		description = "Unignores all messages from a player"; | ||||
| 		syntax = ChatColor.GRAY + "/unignore " + ChatColor.GOLD + "player"; | ||||
| 		minArgs = 1; | ||||
| 		maxArgs = 1; | ||||
| 		labels.add("fpc unignore"); | ||||
| 		labels.add("fpchat unignore"); | ||||
| 		labels.add("ch unignore"); | ||||
| 		labels.add("unignore"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void execute(CommandSender sender, String[] args) { | ||||
| 		if(sender instanceof Player) { | ||||
| 			FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
| 			UUID u = plugin.getPlayerCache().getUUID(args[0]); | ||||
| 			if(u == null) { | ||||
| 				FPlayer.errMsg(p, "Invalid player."); | ||||
| 				return; | ||||
| 			} | ||||
| 			OfflinePlayer o = Bukkit.getOfflinePlayer(u); | ||||
| 			if(o != null) { | ||||
| 				FPlayer unignored = FPlayer.getPlayer(o, true); | ||||
| 				p.unignore(unignored); | ||||
| 				FPlayer.goodMsg(p, "Player unignored."); | ||||
| 			} else { | ||||
| 				FPlayer.errMsg(p, "Invalid player."); | ||||
| 			} | ||||
| 		} else { | ||||
| 			FPlayer.errMsg(null, "You must be a player to use unignore."); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,80 @@ | |||
| package com.fpghoti.fpchatx.command.commands; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| import com.fpghoti.fpchatx.command.Commands; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| 
 | ||||
| public class WhoCommand extends Commands { | ||||
| 
 | ||||
|     public WhoCommand(FPChat plugin) { | ||||
|         super(plugin); | ||||
|         name = "Who"; | ||||
|         description = "Lists all players in your primary channel"; | ||||
|         syntax = ChatColor.GRAY + "/fpc who " + ChatColor.GOLD + "[page#]"; | ||||
|         minArgs = 0; | ||||
|         maxArgs = 1; | ||||
|         labels.add("fpc who"); | ||||
|         labels.add("fpchat who"); | ||||
|         labels.add("ch who"); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void execute(CommandSender sender, String[] args) { | ||||
|         if (sender instanceof Player) { | ||||
|             FPlayer p = FPlayer.getPlayer((Player)sender); | ||||
|             ChatChannel c = p.getPrimaryChannel(); | ||||
|             if(p.speakingInTemp()) { | ||||
|             	c = p.getPrimaryTempChannel(); | ||||
|             } | ||||
|             if (c != null) { | ||||
|             	 | ||||
|             	int pg = 1; | ||||
|         		if (args.length > 0) { | ||||
|         			if(Util.isDigit(args[0])) { | ||||
|         				pg = Integer.parseInt(args[0]); | ||||
|         			}else { | ||||
|         				FPlayer.errMsg(p, syntax); | ||||
|         			} | ||||
|         		} | ||||
|             	 | ||||
|                 ArrayList<FPlayer> players = c.getPlayers(); | ||||
|                  | ||||
|                 int pageCount = (int) Math.ceil((double) players.size() / 8); | ||||
|         		if (pg > pageCount) { | ||||
|         			pg = pageCount; | ||||
|         		} | ||||
|         		 | ||||
|         		FPlayer.plainMsg(p, ""); | ||||
|         		FPlayer.plainMsg(p, ChatColor.GOLD + "[" + Integer.toString(pg) + "/" + Integer.toString(pageCount) + "] "  + ChatColor.YELLOW + "Players in " + ChatColor.WHITE + c.getName() + ChatColor.YELLOW +":"); | ||||
|         		for (int i = 0; i < 8; i++) { | ||||
|         			int index = (pg - 1) * 8 + i; | ||||
|         			if (index < players.size()) { | ||||
|         				FPlayer member = players.get(index); | ||||
|         				String msg = ChatColor.GREEN + "- "; | ||||
|         				if(Permission.isAdmin(member)) { | ||||
|         					msg = msg + ChatColor.AQUA + "[ADMIN] "; | ||||
|         				}else if(Permission.isStaff(member)) { | ||||
|         					msg = msg + ChatColor.BLUE + "[STAFF] "; | ||||
|         				} | ||||
|         				msg = msg + ChatColor.YELLOW + member.getName(); | ||||
|         				FPlayer.plainMsg(p, msg); | ||||
|         			} | ||||
|         		} | ||||
|                  | ||||
|                  | ||||
|             } | ||||
|         }else{ | ||||
|             FPlayer.errMsg(null, "This command is for players only."); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,221 @@ | |||
| package com.fpghoti.fpchatx.config; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.FilenameFilter; | ||||
| import java.io.IOException; | ||||
| import java.util.ArrayList; | ||||
| 
 | ||||
| import org.bukkit.configuration.file.FileConfiguration; | ||||
| import org.bukkit.configuration.file.YamlConfiguration; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| 
 | ||||
| public class ChannelFile { | ||||
| 
 | ||||
| 	private FPChat plugin; | ||||
| 	private File configFile; | ||||
| 	private FileConfiguration config; | ||||
| 	private String filename; | ||||
| 	private String channel; | ||||
| 
 | ||||
| 	public ChannelFile(FPChat plugin, String channel) { | ||||
| 		this.channel = channel; | ||||
| 		this.filename = channel + ".yml"; | ||||
| 		this.plugin = plugin; | ||||
| 		File cdir = new File(this.plugin.getDataFolder() + File.separator + "channels"); | ||||
| 		cdir.mkdirs(); | ||||
| 		this.configFile = new File(cdir, filename); | ||||
| 		this.config = YamlConfiguration.loadConfiguration(configFile); | ||||
| 		try { | ||||
| 			generate(); | ||||
| 		} catch (IOException e) { | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		config = YamlConfiguration.loadConfiguration(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 	public static ArrayList<File> getChannelFiles(){ | ||||
| 		ArrayList<File> files = new ArrayList<File>(); | ||||
| 		File cdir = new File(FPChat.getPlugin().getDataFolder(), "channels"); | ||||
| 		if(!cdir.exists()) { | ||||
| 			cdir.mkdirs(); | ||||
| 			new ChannelFile(FPChat.getPlugin(), "Default"); | ||||
| 		} | ||||
| 		File[] foundfiles = cdir.listFiles(new FilenameFilter() { | ||||
| 			@Override public boolean accept(File dir, String name) { | ||||
| 				return name.toLowerCase().endsWith(".yml");  | ||||
| 			}  | ||||
| 		}); | ||||
| 		for(File f : foundfiles) { | ||||
| 			files.add(f); | ||||
| 		} | ||||
| 		return files; | ||||
| 	} | ||||
| 
 | ||||
| 	public static boolean channelExists(String c) { | ||||
| 		File cdir = new File(FPChat.getPlugin().getDataFolder() + File.separator + "channels"); | ||||
| 		if(!cdir.exists()) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		String fname = c + ".yml"; | ||||
| 		File file = new File(cdir, fname); | ||||
| 		return file.exists(); | ||||
| 	} | ||||
| 
 | ||||
| 	private void generate() throws IOException{ | ||||
| 		if (config.get("Name")==null) { | ||||
| 			config.createSection("Name"); | ||||
| 			config.set("Name", channel); | ||||
| 		} | ||||
| 		if (config.get("Shortcut")==null) { | ||||
| 			config.createSection("Shortcut"); | ||||
| 			config.set("Shortcut", channel); | ||||
| 		} | ||||
| 		if (config.get("ChatFormat")==null) { | ||||
| 			config.createSection("ChatFormat"); | ||||
| 			config.set("ChatFormat", "&8[{prefix}&8]{suffix}{player}&8:&7 "); | ||||
| 		} | ||||
| 		if (config.get("DistinguishedChatFormat")==null){ | ||||
| 			config.createSection("DistinguishedChatFormat"); | ||||
| 			config.set("DistinguishedChatFormat", "&8&l(&r{prefix}&8&l)&r{suffix}{player}&8&l - &r&7"); | ||||
| 		} | ||||
| 		if (config.get("Whitelist")==null) { | ||||
| 			config.createSection("Whitelist"); | ||||
| 			config.set("Whitelist", false); | ||||
| 		} | ||||
| 		if (config.get("WhitelistedUUIDs")==null) { | ||||
| 			config.createSection("WhitelistedUUIDs"); | ||||
| 			config.set("WhitelistedUUIDs", ""); | ||||
| 		} | ||||
| 		if (config.get("WhitelistedPermissionNode")==null) { | ||||
| 			config.createSection("WhitelistedPermissionNode"); | ||||
| 			config.set("WhitelistedPermissionNode", "fpchat.whitelisted." + channel); | ||||
| 		} | ||||
| 		if (config.get("HasRadius")==null) { | ||||
| 			config.createSection("HasRadius"); | ||||
| 			config.set("HasRadius", false); | ||||
| 		} | ||||
| 		if (config.get("Radius")==null) { | ||||
| 			config.createSection("Radus"); | ||||
| 			config.set("Radius", 300); | ||||
| 		} | ||||
| 		if (config.get("BannedUUIDs")==null) { | ||||
| 			config.createSection("BannedUUIDs"); | ||||
| 			config.set("BannedUUIDs", ""); | ||||
| 		} | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	public String getName() { | ||||
| 		return config.getString("Name"); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getShortcut() { | ||||
| 		return config.getString("Shortcut"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveShortcut(String shortcut) throws IOException{ | ||||
| 		if (config.get("Shortcut")==null) { | ||||
| 			config.createSection("Shortcut"); | ||||
| 		} | ||||
| 		config.set("Shortcut", shortcut); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getChatFormat() { | ||||
| 		return config.getString("ChatFormat"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveChatFormat(String format) throws IOException{ | ||||
| 		if (config.get("ChatFormat")==null) { | ||||
| 			config.createSection("ChatFormat"); | ||||
| 		} | ||||
| 		config.set("ChatFormat", format); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getDistinguishedChatFormat() { | ||||
| 		return config.getString("DistinguishedChatFormat"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveDistinguishedChatFormat(String format) throws IOException{ | ||||
| 		if (config.get("DistinguishedChatFormat")==null) { | ||||
| 			config.createSection("DistinguishedChatFormat"); | ||||
| 		} | ||||
| 		config.set("DistinguishedChatFormat", format); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean isWhitelisted() { | ||||
| 		return config.getBoolean("Whitelist"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveWhitelist(boolean whitelisted) throws IOException { | ||||
| 		if (config.get("Whitelist")==null) { | ||||
| 			config.createSection("Whitelist"); | ||||
| 		} | ||||
| 		config.set("Whitelist", whitelisted); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getWhitelistedUUIDs() { | ||||
| 		return config.getString("WhitelistedUUIDs"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveWhitelistedUUIDs(String uuids) throws IOException { | ||||
| 		if (config.get("WhitelistedUUIDs")==null) { | ||||
| 			config.createSection("WhitelistedUUIDs"); | ||||
| 		} | ||||
| 		config.set("WhitelistedUUIDs", uuids); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getWhitelistedPermissionNode() { | ||||
| 		return config.getString("WhitelistedPermissionNode"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveWhitelistedPermissionNode(String perm) throws IOException{ | ||||
| 		if (config.get("WhitelistedPermissionNode")==null) { | ||||
| 			config.createSection("WhitelistedPermissionNode"); | ||||
| 		} | ||||
| 		config.set("WhitelistedPermissionNode", perm); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean hasRadius() { | ||||
| 		return config.getBoolean("HasRadius"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveHasRadius(boolean b) throws IOException { | ||||
| 		if (config.get("HasRadius")==null) { | ||||
| 			config.createSection("HasRadius"); | ||||
| 		} | ||||
| 		config.set("HasRadius", b); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 	public int getRadius() { | ||||
| 		return config.getInt("Radius"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveRadius(int radius) throws IOException{ | ||||
| 		if (config.get("Radius")==null) { | ||||
| 			config.createSection("Radius"); | ||||
| 		} | ||||
| 		config.set("Radius", radius); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getBannedUUIDs() { | ||||
| 		return config.getString("BannedUUIDs"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveBannedUUIDs(String uuids) throws IOException { | ||||
| 		if (config.get("BannedUUIDs")==null) { | ||||
| 			config.createSection("BannedUUIDs"); | ||||
| 		} | ||||
| 		config.set("BannedUUIDs", uuids); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,242 @@ | |||
| package com.fpghoti.fpchatx.config; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.util.logging.Level; | ||||
| 
 | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.configuration.file.FileConfiguration; | ||||
| import org.bukkit.configuration.file.YamlConfiguration; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| 
 | ||||
| public class MainConfig { | ||||
| 
 | ||||
| 	private FPChat plugin; | ||||
| 	private File configFile; | ||||
| 	private FileConfiguration config; | ||||
| 
 | ||||
| 	public MainConfig(FPChat plugin) { | ||||
| 		this.plugin = plugin; | ||||
| 		this.configFile = new File(plugin.getDataFolder(), "config.yml"); | ||||
| 		this.config = YamlConfiguration.loadConfiguration(configFile); | ||||
| 		generate(); | ||||
| 	} | ||||
| 
 | ||||
| 	private void generate(){ | ||||
| 		if (config.get("MySQL")==null) { | ||||
| 			config.createSection("MySQL"); | ||||
| 			config.set("MySQL", false); | ||||
| 		} | ||||
| 		if (config.get("Host")==null) { | ||||
| 			config.createSection("Host"); | ||||
| 			config.set("Host", "0.0.0.0"); | ||||
| 		} | ||||
| 		if (config.get("Port")==null) { | ||||
| 			config.createSection("Port"); | ||||
| 			config.set("Port", "3306"); | ||||
| 		} | ||||
| 		if (config.get("User")==null) { | ||||
| 			config.createSection("User"); | ||||
| 			config.set("User", "Username"); | ||||
| 		} | ||||
| 		if (config.get("Password")==null) { | ||||
| 			config.createSection("Password"); | ||||
| 			config.set("Password", "blee"); | ||||
| 		} | ||||
| 		if (config.get("Database")==null) { | ||||
| 			config.createSection("Database"); | ||||
| 			config.set("Database", "mydb"); | ||||
| 		} | ||||
| 		if (config.get("Chat-Feature-Table")==null) { | ||||
| 			config.createSection("Chat-Feature-Table"); | ||||
| 			config.set("Chat-Feature-Table", "fpchat"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (config.get("PermSync-Table")==null) { | ||||
| 			config.createSection("PermSync-Table"); | ||||
| 			config.set("PermSync-Table", "fpchatsync"); | ||||
| 		} | ||||
| 		if (config.get("StaffBadgeEnabled")==null) { | ||||
| 			config.createSection("StaffBadgeEnabled"); | ||||
| 			config.set("StaffBadgeEnabled", false); | ||||
| 		} | ||||
| 		if (config.get("StaffBadge")==null) { | ||||
| 			config.createSection("StaffBadge"); | ||||
| 			config.set("StaffBadge", "&6&l⟪Տ⟫&r"); | ||||
| 		} | ||||
| 		if (config.get("ShoutCooldownEnabled")==null) { | ||||
| 			config.createSection("ShoutCooldownEnabled"); | ||||
| 			config.set("ShoutCooldownEnabled", false); | ||||
| 		} | ||||
| 		if (config.get("ShoutCooldownSeconds")==null) { | ||||
| 			config.createSection("ShoutCooldownSeconds"); | ||||
| 			config.set("ShoutCooldownSeconds", 45); | ||||
| 		} | ||||
| 		if (config.get("ShoutFormat")==null) { | ||||
| 			config.createSection("ShoutFormat"); | ||||
| 			config.set("ShoutFormat", "&8[{prefix}&8]{suffix}{player}&8:&f "); | ||||
| 		} | ||||
| 		if (config.get("In-Message-Format")==null) { | ||||
| 			config.createSection("In-Message-Format"); | ||||
| 			config.set("In-Message-Format", "&3[&a{player} &c -> &aMe&3]&f "); | ||||
| 		} | ||||
| 		if (config.get("Out-Message-Format")==null) { | ||||
| 			config.createSection("Out-Message-Format"); | ||||
| 			config.set("Out-Message-Format", "&3[&aMe &c -> &a{recipient}&3]&f "); | ||||
| 		} | ||||
| 		if (config.get("Temp-Channel-Format")==null) { | ||||
| 			config.createSection("Temp-Channel-Format"); | ||||
| 			config.set("Temp-Channel-Format", "&2[&6{channel}&2]&7{player}&2:&e "); | ||||
| 		} | ||||
| 		if (config.get("Filter")==null){ | ||||
| 			config.createSection("Filter"); | ||||
| 			config.set("Filter", false); | ||||
| 		} | ||||
| 		if (config.get("NaughtyWords")==null){ | ||||
| 			config.createSection("NaughtyWords"); | ||||
| 			config.set("NaughtyWords", "word1,word2,word3"); | ||||
| 		} | ||||
| 		if (config.get("FrankMode")==null){ | ||||
| 			config.createSection("FrankMode"); | ||||
| 			config.set("FrankMode", false); | ||||
| 		} | ||||
| 		if (config.get("DistinguishedShout")==null){ | ||||
| 			config.createSection("DistinguishedShout"); | ||||
| 			config.set("DistinguishedShout", "&8&l(&r{prefix}&8&l)&r{suffix}{player}&8&l - &r&f"); | ||||
| 		} | ||||
| 		if (config.get("DefaultChannel")==null){ | ||||
| 			config.createSection("DefaultChannel"); | ||||
| 			config.set("DefaultChannel", "Default"); | ||||
| 		}	 | ||||
| 		try { | ||||
| 			config.save(configFile); | ||||
| 		} catch (IOException e) { | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean mySQLEnabled() { | ||||
| 		return config.getBoolean("MySQL"); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getHost() { | ||||
| 		if(mySQLEnabled()) { | ||||
| 			return config.getString("Host"); | ||||
| 		}else { | ||||
| 			plugin.getLogger().log(Level.SEVERE, "Null SQL host. Is MySQL disabled?"); | ||||
| 			return null; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public String getPort() { | ||||
| 		if(mySQLEnabled()) { | ||||
| 			return config.getString("Port"); | ||||
| 		}else { | ||||
| 			plugin.getLogger().log(Level.SEVERE, "Null SQL port. Is MySQL disabled?"); | ||||
| 			return null; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public String getUser() { | ||||
| 		if(mySQLEnabled()) { | ||||
| 			return config.getString("User"); | ||||
| 		}else { | ||||
| 			plugin.getLogger().log(Level.SEVERE, "Null SQL user. Is MySQL disabled?"); | ||||
| 			return null; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public String getPassword() { | ||||
| 		if(mySQLEnabled()) { | ||||
| 			return config.getString("Password"); | ||||
| 		}else { | ||||
| 			plugin.getLogger().log(Level.SEVERE, "Null SQL password. Is MySQL disabled?"); | ||||
| 			return null; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public String getDatabase() { | ||||
| 		if(mySQLEnabled()) { | ||||
| 			return config.getString("Database"); | ||||
| 		}else { | ||||
| 			plugin.getLogger().log(Level.SEVERE, "Null SQL database. Is MySQL disabled?"); | ||||
| 			return null; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public String getChatFeatureTable() { | ||||
| 		if(mySQLEnabled()) { | ||||
| 			return config.getString("Chat-Feature-Table"); | ||||
| 		}else { | ||||
| 			plugin.getLogger().log(Level.SEVERE, "Null SQL chat feature table. Is MySQL disabled?"); | ||||
| 			return null; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public String getPermSyncTable() { | ||||
| 		if(mySQLEnabled()) { | ||||
| 			return config.getString("PermSync-Table"); | ||||
| 		}else { | ||||
| 			plugin.getLogger().log(Level.SEVERE, "Null SQL perm sync table. Is MySQL disabled?"); | ||||
| 			return null; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean staffBadgeEnabled() { | ||||
| 		return config.getBoolean("StaffBadgeEnabled"); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getStaffBadge() { | ||||
| 		if(staffBadgeEnabled()) { | ||||
| 			return ChatColor.translateAlternateColorCodes('&', config.getString("StaffBadge")); | ||||
| 		} | ||||
| 		return ""; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean shoutCooldownEnabled(){ | ||||
| 		return config.getBoolean("ShoutCooldownEnabled"); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	public int getShoutSeconds(){ | ||||
| 		return config.getInt("ShoutCooldownSeconds"); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getDefaultChannel() { | ||||
| 		return config.getString("DefaultChannel"); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getShoutFormat() { | ||||
| 		return config.getString("ShoutFormat"); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getInMsgFormat() { | ||||
| 		return config.getString("In-Message-Format"); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getOutMsgFormat() { | ||||
| 		return config.getString("Out-Message-Format"); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getTempChannelFormat() { | ||||
| 		return config.getString("Temp-Channel-Format"); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean chatFilterEnabled() { | ||||
| 		return config.getBoolean("Filter"); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getNaughtyWords() { | ||||
| 		return config.getString("NaughtyWords"); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean frankModeEnabled() { | ||||
| 		return config.getBoolean("FrankMode"); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getDistinguishedShout() { | ||||
| 		return config.getString("DistinguishedShout"); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,46 @@ | |||
| package com.fpghoti.fpchatx.config; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.util.UUID; | ||||
| 
 | ||||
| import org.bukkit.configuration.file.FileConfiguration; | ||||
| import org.bukkit.configuration.file.YamlConfiguration; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| 
 | ||||
| public class PlayerCache { | ||||
| 
 | ||||
| 	private FPChat plugin; | ||||
| 	private File configFile; | ||||
| 	private FileConfiguration config; | ||||
| 
 | ||||
| 	public PlayerCache(FPChat plugin) { | ||||
| 		this.plugin = plugin; | ||||
| 		configFile = new File(this.plugin.getDataFolder(), "playercache.yml"); | ||||
| 		this.config = YamlConfiguration.loadConfiguration(configFile); | ||||
| 		config = YamlConfiguration.loadConfiguration(configFile); // In case the player had changed their name and the config updated. | ||||
| 	} | ||||
| 
 | ||||
| 	public UUID getUUID(String name) { | ||||
| 		try { | ||||
| 			return UUID.fromString(config.getString(name.toLowerCase())); | ||||
| 		}catch(IllegalArgumentException ex) { | ||||
| 			return null; | ||||
| 		}catch(NullPointerException ex) { | ||||
| 			return null; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveUUID(String name, UUID uuid) throws IOException { | ||||
| 		name = name.toLowerCase(); | ||||
| 		if (config.get(name)==null) { | ||||
| 			config.createSection(name); | ||||
| 		} | ||||
| 		config.set(name, uuid.toString()); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,157 @@ | |||
| package com.fpghoti.fpchatx.config; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| import org.bukkit.OfflinePlayer; | ||||
| import org.bukkit.configuration.file.FileConfiguration; | ||||
| import org.bukkit.configuration.file.YamlConfiguration; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| 
 | ||||
| public class PlayerFile { | ||||
| 
 | ||||
| 	private FPChat plugin; | ||||
| 	private File configFile; | ||||
| 	private FileConfiguration config; | ||||
| 	private String filename; | ||||
| 	private OfflinePlayer player; | ||||
| 
 | ||||
| 	public PlayerFile(FPChat plugin, OfflinePlayer p) { | ||||
| 		this.player = p; | ||||
| 		filename = p.getUniqueId().toString() + ".yml"; | ||||
| 		this.plugin = plugin; | ||||
| 		File pdir = new File(this.plugin.getDataFolder(), "players"); | ||||
| 		pdir.mkdirs(); | ||||
| 		configFile = new File(pdir, filename); | ||||
| 		this.config = YamlConfiguration.loadConfiguration(configFile); | ||||
| 		try { | ||||
| 			generate(); | ||||
| 		} catch (IOException e) { | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		config = YamlConfiguration.loadConfiguration(configFile); // In case the player had changed their name and the config updated. | ||||
| 	} | ||||
| 
 | ||||
| 	private void generate() throws IOException{ | ||||
| 		if (config.get("UUID")==null) { | ||||
| 			config.createSection("UUID"); | ||||
| 			config.set("UUID", player.getUniqueId().toString()); | ||||
| 		} | ||||
| 		if (config.get("Name")==null) { | ||||
| 			config.createSection("Name"); | ||||
| 			config.set("Name", player.getName()); | ||||
| 		} | ||||
| 		if (config.get("CurrentChannel")==null) { | ||||
| 			config.createSection("CurrentChannel"); | ||||
| 			config.set("CurrentChannel", ChatChannel.getDefault().getName()); | ||||
| 		} | ||||
| 		if (config.get("Ignore")==null) { | ||||
| 			config.createSection("Ignore"); | ||||
| 			config.set("Ignore", ""); | ||||
| 		} | ||||
| 		if (config.get("Channels")==null) { | ||||
| 			config.createSection("Channels"); | ||||
| 			config.set("Channels", ChatChannel.getDefault().getName() + ","); | ||||
| 		} | ||||
| 		if (config.get("Spy")==null) { | ||||
| 			config.createSection("Spy"); | ||||
| 			config.set("Spy", false); | ||||
| 		} | ||||
| 		if (config.get("ShoutVisible")==null) { | ||||
| 			config.createSection("ShoutVisible"); | ||||
| 			config.set("ShoutVisible", true); | ||||
| 		} | ||||
| 		if (config.get("Hushed")==null) { | ||||
| 			config.createSection("Hushed"); | ||||
| 			config.set("Hushed", false); | ||||
| 		} | ||||
| 		config.set("Name", player.getName()); | ||||
| 
 | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	public String getUUID() { | ||||
| 		return config.getString("UUID"); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getName() { | ||||
| 		return config.getString("Name"); | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isSpy() { | ||||
| 		return config.getBoolean("Spy"); | ||||
| 	} | ||||
| 	 | ||||
| 	public void saveSpy(boolean spy) throws IOException { | ||||
| 		if (config.get("Spy")==null) { | ||||
| 			config.createSection("Spy"); | ||||
| 		} | ||||
| 		config.set("Spy", spy); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean shoutVisible() { | ||||
| 		return config.getBoolean("ShoutVisible"); | ||||
| 	} | ||||
| 	 | ||||
| 	public void saveShoutVisible(boolean visible) throws IOException { | ||||
| 		if (config.get("ShoutVisible")==null) { | ||||
| 			config.createSection("ShoutVisible"); | ||||
| 		} | ||||
| 		config.set("ShoutVisible", visible); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isHushed() { | ||||
| 		return config.getBoolean("Hushed"); | ||||
| 	} | ||||
| 	 | ||||
| 	public void saveHushed(boolean hushed) throws IOException { | ||||
| 		if (config.get("Hushed")==null) { | ||||
| 			config.createSection("Hushed"); | ||||
| 		} | ||||
| 		config.set("Hushed", hushed); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	public String getCurrentChannel() { | ||||
| 		return config.getString("CurrentChannel"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveCurrentChannel(String channel) throws IOException { | ||||
| 		if (config.get("CurrentChannel")==null) { | ||||
| 			config.createSection("CurrentChannel"); | ||||
| 		} | ||||
| 		config.set("CurrentChannel", channel); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getIgnore() { | ||||
| 		return config.getString("Ignore"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveIgnore(String ignore) throws IOException { | ||||
| 		if (config.get("Ignore")==null) { | ||||
| 			config.createSection("Ignore"); | ||||
| 		} | ||||
| 		config.set("Ignore", ignore); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getChannels() { | ||||
| 		return config.getString("Channels"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void saveChannels(String channels) throws IOException { | ||||
| 		if (config.get("Channels")==null) { | ||||
| 			config.createSection("Channels"); | ||||
| 		} | ||||
| 		config.set("Channels", channels); | ||||
| 		config.save(configFile); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,114 @@ | |||
| package com.fpghoti.fpchatx.customcodes; | ||||
| 
 | ||||
| public class BubbleCode { | ||||
| 
 | ||||
| 	public static String bubblecode(Boolean hasPerm, String msg) { | ||||
| 		String newmsg = msg; | ||||
| 		if(hasPerm) { | ||||
| 			newmsg = replaceChar(msg); | ||||
| 		} | ||||
| 		return newmsg; | ||||
| 	} | ||||
| 
 | ||||
| 	private static String replaceChar(String msg) { | ||||
| 		Boolean on = false; | ||||
| 		String newmsg = ""; | ||||
| 		int i = 0; | ||||
| 		 | ||||
| 		while(i < msg.length()) { | ||||
| 			if(msg.substring(i, i + 1).equals("§")) { | ||||
| 				String code = msg.substring(i + 1, i + 2); | ||||
| 				if(code.equals("r")) { | ||||
| 					on = false; | ||||
| 				} | ||||
| 				String wcode = "§" + code; | ||||
| 				newmsg = newmsg + wcode; | ||||
| 				i++; | ||||
| 			}else if(msg.substring(i, i + 1).equals("&")) { | ||||
| 				if(msg.substring(i + 1, i + 2).equals("w")) { | ||||
| 					on = true; | ||||
| 					i++; | ||||
| 				}else { | ||||
| 					newmsg = newmsg + "&"; | ||||
| 				} | ||||
| 				 | ||||
| 			}else{ | ||||
| 				String sub = msg.substring(i, i + 1); | ||||
| 				if(on) {				 | ||||
| 					sub = sub.replace('a', 'ⓐ'); | ||||
| 					sub = sub.replace('b', 'ⓑ'); | ||||
| 					sub = sub.replace('c', 'ⓒ'); | ||||
| 					sub = sub.replace('d', 'ⓓ'); | ||||
| 					sub = sub.replace('e', 'ⓔ'); | ||||
| 					sub = sub.replace('f', 'ⓕ'); | ||||
| 					sub = sub.replace('g', 'ⓖ'); | ||||
| 					sub = sub.replace('h', 'ⓗ'); | ||||
| 					sub = sub.replace('i', 'ⓘ'); | ||||
| 					sub = sub.replace('j', 'ⓙ'); | ||||
| 					sub = sub.replace('k', 'ⓚ'); | ||||
| 					sub = sub.replace('l', 'ⓛ'); | ||||
| 					sub = sub.replace('m', 'ⓜ'); | ||||
| 					sub = sub.replace('n', 'ⓝ'); | ||||
| 					sub = sub.replace('o', 'ⓞ'); | ||||
| 					sub = sub.replace('p', 'ⓟ'); | ||||
| 					sub = sub.replace('q', 'ⓠ'); | ||||
| 					sub = sub.replace('r', 'ⓡ'); | ||||
| 					sub = sub.replace('s', 'ⓢ'); | ||||
| 					sub = sub.replace('t', 'ⓣ'); | ||||
| 					sub = sub.replace('u', 'ⓤ'); | ||||
| 					sub = sub.replace('v', 'ⓥ'); | ||||
| 					sub = sub.replace('w', 'ⓦ'); | ||||
| 					sub = sub.replace('x', 'ⓧ'); | ||||
| 					sub = sub.replace('y', 'ⓨ'); | ||||
| 					sub = sub.replace('z', 'ⓩ'); | ||||
| 					sub = sub.replace('A', 'Ⓐ'); | ||||
| 					sub = sub.replace('B', 'Ⓑ'); | ||||
| 					sub = sub.replace('C', 'Ⓒ'); | ||||
| 					sub = sub.replace('D', 'Ⓓ'); | ||||
| 					sub = sub.replace('E', 'Ⓔ'); | ||||
| 					sub = sub.replace('F', 'Ⓕ'); | ||||
| 					sub = sub.replace('G', 'Ⓖ'); | ||||
| 					sub = sub.replace('H', 'Ⓗ'); | ||||
| 					sub = sub.replace('I', 'Ⓘ'); | ||||
| 					sub = sub.replace('J', 'Ⓙ'); | ||||
| 					sub = sub.replace('K', 'Ⓚ'); | ||||
| 					sub = sub.replace('L', 'Ⓛ'); | ||||
| 					sub = sub.replace('M', 'Ⓜ'); | ||||
| 					sub = sub.replace('N', 'Ⓝ'); | ||||
| 					sub = sub.replace('O', 'Ⓞ'); | ||||
| 					sub = sub.replace('P', 'Ⓟ'); | ||||
| 					sub = sub.replace('Q', 'Ⓠ'); | ||||
| 					sub = sub.replace('R', 'Ⓡ'); | ||||
| 					sub = sub.replace('S', 'Ⓢ'); | ||||
| 					sub = sub.replace('T', 'Ⓣ'); | ||||
| 					sub = sub.replace('U', 'Ⓤ'); | ||||
| 					sub = sub.replace('V', 'Ⓥ'); | ||||
| 					sub = sub.replace('W', 'Ⓦ'); | ||||
| 					sub = sub.replace('X', 'Ⓧ'); | ||||
| 					sub = sub.replace('Y', 'Ⓨ'); | ||||
| 					sub = sub.replace('Z', 'Ⓩ'); | ||||
| 					sub = sub.replace('1', '①'); | ||||
| 					sub = sub.replace('2', '②'); | ||||
| 					sub = sub.replace('3', '③'); | ||||
| 					sub = sub.replace('4', '④'); | ||||
| 					sub = sub.replace('5', '⑤'); | ||||
| 					sub = sub.replace('6', '⑥'); | ||||
| 					sub = sub.replace('7', '⑦'); | ||||
| 					sub = sub.replace('8', '⑧'); | ||||
| 					sub = sub.replace('9', '⑨'); | ||||
| 					sub = sub.replace('0', '⓪'); | ||||
| 				} | ||||
| 				newmsg = newmsg + sub; | ||||
| 			} | ||||
| 			i++; | ||||
| 		} | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 		return newmsg; | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,114 @@ | |||
| package com.fpghoti.fpchatx.customcodes; | ||||
| 
 | ||||
| public class Codify { | ||||
| 
 | ||||
| 	public static String changeFormatSign(String str) { | ||||
| 		String nstr = str; | ||||
| 		nstr = nstr.replace("&0", "§0"); | ||||
| 		nstr = nstr.replace("&1", "§1"); | ||||
| 		nstr = nstr.replace("&2", "§2"); | ||||
| 		nstr = nstr.replace("&3", "§3"); | ||||
| 		nstr = nstr.replace("&4", "§4"); | ||||
| 		nstr = nstr.replace("&5", "§5"); | ||||
| 		nstr = nstr.replace("&6", "§6"); | ||||
| 		nstr = nstr.replace("&7", "§7"); | ||||
| 		nstr = nstr.replace("&8", "§8"); | ||||
| 		nstr = nstr.replace("&9", "§9"); | ||||
| 		nstr = nstr.replace("&a", "§a"); | ||||
| 		nstr = nstr.replace("&b", "§b"); | ||||
| 		nstr = nstr.replace("&c", "§c"); | ||||
| 		nstr = nstr.replace("&d", "§d"); | ||||
| 		nstr = nstr.replace("&e", "§e"); | ||||
| 		nstr = nstr.replace("&f", "§f"); | ||||
| 		nstr = nstr.replace("&k", "§k"); | ||||
| 		nstr = nstr.replace("&l", "§l"); | ||||
| 		nstr = nstr.replace("&m", "§m"); | ||||
| 		nstr = nstr.replace("&n", "§n"); | ||||
| 		nstr = nstr.replace("&o", "§o"); | ||||
| 		nstr = nstr.replace("&r", "§r"); | ||||
| 		//nstr = nstr.replace("&w", "§w"); | ||||
| 		//nstr = nstr.replace("&x", "§x"); | ||||
| 		return nstr; | ||||
| 	} | ||||
| 	 | ||||
| 	public static String removeBubbles(String str) { | ||||
| 		String nstr = str; | ||||
| 		nstr = nstr.replace('ⓐ', 'a'); | ||||
| 		nstr = nstr.replace('ⓑ', 'b'); | ||||
| 		nstr = nstr.replace('ⓒ', 'c'); | ||||
| 		nstr = nstr.replace('ⓓ', 'd'); | ||||
| 		nstr = nstr.replace('ⓔ', 'e'); | ||||
| 		nstr = nstr.replace('ⓕ', 'f'); | ||||
| 		nstr = nstr.replace('ⓖ', 'g'); | ||||
| 		nstr = nstr.replace('ⓗ', 'h'); | ||||
| 		nstr = nstr.replace('ⓘ', 'i'); | ||||
| 		nstr = nstr.replace('ⓙ', 'j'); | ||||
| 		nstr = nstr.replace('ⓚ', 'k'); | ||||
| 		nstr = nstr.replace('ⓛ', 'l'); | ||||
| 		nstr = nstr.replace('ⓜ', 'm'); | ||||
| 		nstr = nstr.replace('ⓝ', 'n'); | ||||
| 		nstr = nstr.replace('ⓞ', 'o'); | ||||
| 		nstr = nstr.replace('ⓟ', 'p'); | ||||
| 		nstr = nstr.replace('ⓠ', 'q'); | ||||
| 		nstr = nstr.replace('ⓡ', 'r'); | ||||
| 		nstr = nstr.replace('ⓢ', 's'); | ||||
| 		nstr = nstr.replace('ⓣ', 't'); | ||||
| 		nstr = nstr.replace('ⓤ', 'u'); | ||||
| 		nstr = nstr.replace('ⓥ', 'v'); | ||||
| 		nstr = nstr.replace('ⓦ', 'w'); | ||||
| 		nstr = nstr.replace('ⓧ', 'x'); | ||||
| 		nstr = nstr.replace('ⓨ', 'y'); | ||||
| 		nstr = nstr.replace('ⓩ', 'z'); | ||||
| 		nstr = nstr.replace('Ⓐ', 'A'); | ||||
| 		nstr = nstr.replace('Ⓑ', 'B'); | ||||
| 		nstr = nstr.replace('Ⓒ', 'C'); | ||||
| 		nstr = nstr.replace('Ⓓ', 'D'); | ||||
| 		nstr = nstr.replace('Ⓔ', 'E'); | ||||
| 		nstr = nstr.replace('Ⓕ', 'F'); | ||||
| 		nstr = nstr.replace('Ⓖ', 'G'); | ||||
| 		nstr = nstr.replace('Ⓗ', 'H'); | ||||
| 		nstr = nstr.replace('Ⓘ', 'I'); | ||||
| 		nstr = nstr.replace('Ⓙ', 'J'); | ||||
| 		nstr = nstr.replace('Ⓚ', 'K'); | ||||
| 		nstr = nstr.replace('Ⓛ', 'L'); | ||||
| 		nstr = nstr.replace('Ⓜ', 'M'); | ||||
| 		nstr = nstr.replace('Ⓝ', 'N'); | ||||
| 		nstr = nstr.replace('Ⓞ', 'O'); | ||||
| 		nstr = nstr.replace('Ⓟ', 'P'); | ||||
| 		nstr = nstr.replace('Ⓠ', 'Q'); | ||||
| 		nstr = nstr.replace('Ⓡ', 'R'); | ||||
| 		nstr = nstr.replace('Ⓢ', 'S'); | ||||
| 		nstr = nstr.replace('Ⓣ', 'T'); | ||||
| 		nstr = nstr.replace('Ⓤ', 'U'); | ||||
| 		nstr = nstr.replace('Ⓥ', 'V'); | ||||
| 		nstr = nstr.replace('Ⓦ', 'W'); | ||||
| 		nstr = nstr.replace('Ⓧ', 'X'); | ||||
| 		nstr = nstr.replace('Ⓨ', 'Y'); | ||||
| 		nstr = nstr.replace('Ⓩ', 'Z'); | ||||
| 		nstr = nstr.replace('①', '1'); | ||||
| 		nstr = nstr.replace('②', '2'); | ||||
| 		nstr = nstr.replace('③', '3'); | ||||
| 		nstr = nstr.replace('④', '4'); | ||||
| 		nstr = nstr.replace('⑤', '5'); | ||||
| 		nstr = nstr.replace('⑥', '6'); | ||||
| 		nstr = nstr.replace('⑦', '7'); | ||||
| 		nstr = nstr.replace('⑧', '8'); | ||||
| 		nstr = nstr.replace('⑨', '9'); | ||||
| 		nstr = nstr.replace('⓪', '0'); | ||||
| 		return nstr; | ||||
| 	} | ||||
| 	 | ||||
| 	public static Boolean isCode(String c) { | ||||
| 		String code = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,k,l,m,n,o,r,w,x"; | ||||
| 		Boolean found = false; | ||||
| 		String[] codes = code.split(","); | ||||
| 		int size = codes.length; | ||||
| 		for(int i = 0; i < size; i++) { | ||||
| 			if(c.contains(codes[i])) { | ||||
| 				found = true; | ||||
| 			} | ||||
| 		} | ||||
| 		return found; | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
|  | @ -0,0 +1,78 @@ | |||
| package com.fpghoti.fpchatx.listener; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.event.EventHandler; | ||||
| import org.bukkit.event.EventPriority; | ||||
| import org.bukkit.event.Listener; | ||||
| import org.bukkit.event.player.AsyncPlayerChatEvent; | ||||
| import org.bukkit.event.player.PlayerJoinEvent; | ||||
| import org.bukkit.event.player.PlayerKickEvent; | ||||
| import org.bukkit.event.player.PlayerQuitEvent; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class PlayerListener implements Listener { | ||||
| 
 | ||||
| 	private boolean enabled = true; | ||||
| 
 | ||||
| 	@EventHandler (priority = EventPriority.HIGH) | ||||
| 	public void onPlayerChat(AsyncPlayerChatEvent event) { | ||||
| 		if(enabled) { | ||||
| 			if (event.isCancelled()) { | ||||
| 				return; | ||||
| 			} | ||||
| 			Player sender = event.getPlayer(); | ||||
| 			FPlayer p = FPlayer.getPlayer(sender); | ||||
| 			if(p.toTalk() && p.getTalkChannel() != null) { | ||||
| 				p.setTalk(false); | ||||
| 				ChatChannel c = p.getTalkChannel(); | ||||
| 				p.setTalkChannel(null); | ||||
| 				p.chat(c, event.getMessage()); | ||||
| 			}else { | ||||
| 				p.chat(event.getMessage()); | ||||
| 			} | ||||
| 			event.setCancelled(true); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	@EventHandler (priority = EventPriority.NORMAL) | ||||
| 	public void onPlayerJoin(PlayerJoinEvent event) { | ||||
| 		if(enabled) { | ||||
| 			try { | ||||
| 				FPChat.getPlugin().getPlayerCache().saveUUID(event.getPlayer().getName(), event.getPlayer().getUniqueId()); | ||||
| 			} catch (IOException e) { | ||||
| 				e.printStackTrace(); | ||||
| 			} | ||||
| 			FPlayer.getPlayer(event.getPlayer()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	@EventHandler (priority = EventPriority.NORMAL) | ||||
| 	public void onPlayerQuit(PlayerQuitEvent event) { | ||||
| 		if(enabled) { | ||||
| 			FPlayer p = FPlayer.getPlayer(event.getPlayer()); | ||||
| 			p.cleanup(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	@EventHandler (priority = EventPriority.NORMAL) | ||||
| 	public void onPlayerKick(PlayerKickEvent event) { | ||||
| 		if(enabled) { | ||||
| 			FPlayer p = FPlayer.getPlayer(event.getPlayer()); | ||||
| 			p.cleanup(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void enable() { | ||||
| 		this.enabled = true; | ||||
| 	} | ||||
| 
 | ||||
| 	public void disable() { | ||||
| 		this.enabled = false; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,233 @@ | |||
| package com.fpghoti.fpchatx.mysql; | ||||
| 
 | ||||
| import java.sql.Connection; | ||||
| import java.sql.DriverManager; | ||||
| import java.sql.ResultSet; | ||||
| import java.sql.SQLException; | ||||
| import java.sql.Statement; | ||||
| import java.util.logging.Level; | ||||
| 
 | ||||
| import org.bukkit.scheduler.BukkitRunnable; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.config.MainConfig; | ||||
| 
 | ||||
| 
 | ||||
| public class MySQLConnection{ | ||||
| 
 | ||||
| 	private FPChat plugin; | ||||
| 	private String host, user, password, database, port; | ||||
| 	private MainConfig config; | ||||
| 
 | ||||
| 	public MySQLConnection(FPChat plugin) { | ||||
| 		this.plugin = plugin; | ||||
| 		config = plugin.getMainConfig(); | ||||
| 		host = config.getHost(); | ||||
| 		user = config.getUser(); | ||||
| 		password = config.getPassword(); | ||||
| 		database = config.getDatabase(); | ||||
| 		port = config.getPort(); | ||||
| 	} | ||||
| 
 | ||||
| 	private Connection connection; | ||||
| 
 | ||||
| 	public Connection getConnection(){ | ||||
| 		return connection; | ||||
| 	} | ||||
| 
 | ||||
| 	public void generate() { | ||||
| 		if(config.mySQLEnabled()){ | ||||
| 			plugin.log(Level.INFO, "Connecting to MySQL..."); | ||||
| 			connect(); | ||||
| 			if(!tableExists(config.getChatFeatureTable())){ | ||||
| 				plugin.log(Level.INFO, "FPChat table not found. Creating new table..."); | ||||
| 				//createTable(config.getChatFeatureTable(), "player_uuid VARCHAR (36), badge_slot1 INT (11), badge_slot2 INT (11), badge_slot3 INT (11)"); | ||||
| 				update("CREATE TABLE " + config.getChatFeatureTable() + " (player_uuid VARCHAR (36), badge_slot1 INT (11), badge_slot2 INT (11), badge_slot3 INT (11), PRIMARY KEY(player_uuid))"); | ||||
| 				plugin.log(Level.INFO, "FPChat table created!"); | ||||
| 			} | ||||
| 			if(!tableExists(config.getPermSyncTable())){ | ||||
| 				//createTable(config.getPermSyncTable(), "player_uuid VARCHAR (36), badges TEXT"); | ||||
| 				update("CREATE TABLE " + config.getPermSyncTable() + " (player_uuid VARCHAR (36), badges TEXT, PRIMARY KEY(player_uuid))"); | ||||
| 			} | ||||
| 			plugin.log(Level.INFO, "FPChat successfully connected to MySQL!"); | ||||
| 			plugin.log(Level.INFO, "Badges have been enabled!"); | ||||
| 		}else{ | ||||
| 			plugin.log(Level.INFO, "Continuing without MySQL."); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void connect(){ | ||||
| 
 | ||||
| 		if (host.equalsIgnoreCase("") || host == null) { | ||||
| 			plugin.log(Level.SEVERE, "You have not specified a host in the FPChatX config!"); | ||||
| 		} else if (user.equalsIgnoreCase("") || user == null) { | ||||
| 			plugin.log(Level.SEVERE, "You have not specified a user in the FPChatX config!"); | ||||
| 		} else if (password.equalsIgnoreCase("") || password == null) { | ||||
| 			plugin.log(Level.SEVERE, "You have not specified a password in the FPChatX config!"); | ||||
| 		} else if (database.equalsIgnoreCase("") || database == null) { | ||||
| 			plugin.log(Level.SEVERE, "You have not specified a database in the FPChatX config!"); | ||||
| 		} else { | ||||
| 			login(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void disconnect(){ | ||||
| 		try{ | ||||
| 			if (getConnection() != null){ | ||||
| 				connection.close(); | ||||
| 			} | ||||
| 			else{ | ||||
| 				plugin.log(Level.SEVERE, "There was an issue with MySQL: FPChatX is not currently connected to a database."); | ||||
| 			} | ||||
| 		}catch(SQLException e){ | ||||
| 			plugin.log(Level.SEVERE, "There was an issue with MySQL: " + e.getMessage()); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		connection = null; | ||||
| 	} | ||||
| 
 | ||||
| 	public void reconnect(){ | ||||
| 		disconnect(); | ||||
| 		connect(); | ||||
| 	} | ||||
| 
 | ||||
| 	public void login(){ | ||||
| 		try{ | ||||
| 			if (getConnection() != null){ | ||||
| 				connection.close(); | ||||
| 			} | ||||
| 		} | ||||
| 		catch (Exception e){} | ||||
| 		connection = null; | ||||
| 		try{ | ||||
| 			connection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, user, password); | ||||
| 		}catch(SQLException e){ | ||||
| 			plugin.log(Level.SEVERE, "There was an issue with MySQL: " + e.getMessage()); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public ResultSet query(String query){ | ||||
| 		if (query == null) { | ||||
| 			return null; | ||||
| 		} | ||||
| 		connect(); | ||||
| 		ResultSet results = null; | ||||
| 		try{ | ||||
| 			Statement statement = getConnection().createStatement(); | ||||
| 			results = statement.executeQuery(query); | ||||
| 		}catch(SQLException e){ | ||||
| 			plugin.log(Level.SEVERE, "There has been an error:" + e.getMessage()); | ||||
| 			plugin.log(Level.SEVERE,"Failed Query in MySQL using the following query input:"); | ||||
| 			plugin.log(Level.SEVERE, query); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		return results; | ||||
| 	} | ||||
| 
 | ||||
| 	public void update(String input){ | ||||
| 		if (input == null){ | ||||
| 			return; | ||||
| 		} | ||||
| 		connect(); | ||||
| 		try{ | ||||
| 			Statement statement = getConnection().createStatement(); | ||||
| 			statement.executeUpdate(input); | ||||
| 			statement.close(); | ||||
| 		}catch(SQLException e){ | ||||
| 			plugin.log(Level.SEVERE, "There has been an error:" + e.getMessage()); | ||||
| 			plugin.log(Level.SEVERE,"Failed to update MySQL using the following update input:"); | ||||
| 			plugin.log(Level.SEVERE, input); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean tableExists(String tablename){ | ||||
| 		if (tablename == null) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		try{ | ||||
| 			if (getConnection() == null) { | ||||
| 				return false; | ||||
| 			} | ||||
| 			if (getConnection().getMetaData() == null) { | ||||
| 				return false; | ||||
| 			} | ||||
| 			ResultSet results = getConnection().getMetaData().getTables(null, null, tablename, null); | ||||
| 			if (results.next()) { | ||||
| 				return true; | ||||
| 			} | ||||
| 		}catch(SQLException e) { | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean itemExists(String column, String data, String table){ | ||||
| 		if (data != null) { | ||||
| 			data = "'" + data + "'"; | ||||
| 		} | ||||
| 		try{ | ||||
| 			ResultSet results = query("SELECT * FROM " + table + " WHERE " + column + "=" + data); | ||||
| 			while (results.next()) { | ||||
| 				if (results.getString(column) != null) { | ||||
| 					return true; | ||||
| 				} | ||||
| 			} | ||||
| 		}catch(SQLException e) { | ||||
| 			plugin.log(Level.SEVERE, "MYSQL itemExists error: " + e.getMessage()); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	public void createTable(String table, String columns){ | ||||
| 		if (!tableExists(table)) { | ||||
| 			update("CREATE TABLE " + table + " (" + columns + ")"); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void insertInto(final String columns, final String values, final String table){ | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				update("INSERT INTO " + table + " (" + columns + ") VALUES (" + values + ")"); | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	public void set(final String selected, final Object object, final String column, final String equality, final String data, final String table){ | ||||
| 		new BukkitRunnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				Object gobject = object; | ||||
| 				String gdata = data; | ||||
| 				if (gobject != null) { | ||||
| 					gobject = "'" + gobject + "'"; | ||||
| 				} | ||||
| 				if (gdata != null) { | ||||
| 					gdata = "'" + gdata + "'"; | ||||
| 				} | ||||
| 				update("UPDATE " + table + " SET " + selected + "=" + gobject + " WHERE " + column + equality + gdata + ";"); | ||||
| 			} | ||||
| 		}.runTaskAsynchronously(plugin); | ||||
| 	} | ||||
| 	 | ||||
| 	 | ||||
| 	public Object get(String selected, String column, String equality, String data, String table){ | ||||
| 		if (data != null) { | ||||
| 			data = "'" + data + "'"; | ||||
| 		} | ||||
| 		try{ | ||||
| 			ResultSet rs = query("SELECT * FROM " + table + " WHERE " + column + equality + data); | ||||
| 			if (rs.next()) { | ||||
| 				return rs.getObject(selected); | ||||
| 			} | ||||
| 		}catch(SQLException e) { | ||||
| 			plugin.log(Level.SEVERE, "MySQL get error: " + e.getMessage()); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,242 @@ | |||
| package com.fpghoti.fpchatx.permission; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.player.FPlayer; | ||||
| 
 | ||||
| public class Permission { | ||||
| 	 | ||||
| 	public static String noPerm = "You lack the permission required to perform this action."; | ||||
| 
 | ||||
| 	public static boolean canUseColor(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.colorcodes"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canUseColor(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canUseColor(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canShoutColor(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.shoutcolor"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canShoutColor(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canShoutColor(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canPMColor(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.pmcolor"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canPMColor(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canPMColor(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canBubbleCode(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.bubblecode"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canBubbleCode(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canBubbleCode(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canSpy(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.spy"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canSpy(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canSpy(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean isAdmin(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.admin"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean isAdmin(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return isAdmin(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canBan(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.ban"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canMakeChannel(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.makechannel"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canMakeChannel(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canMakeChannel(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canMakeTempChannel(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.maketempchannel"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canMakeTempChannel(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canMakeTempChannel(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canAlertMakeChannel(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.alertmakechannel"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canAlertMakeChannel(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canAlertMakeChannel(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canIgnore(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.ignore"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canIgnore(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canIgnore(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean isStaff(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.staff"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean isStaff(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return isStaff(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canKick(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.kick"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canKick(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canKick(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canMute(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.mute"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canMute(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canMute(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canHush(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.hush"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canHush(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canHush(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canShout(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.shout"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canShout(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canShout(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canToggleShout(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.toggleshout"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canToggleShout(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canToggleShout(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	 | ||||
| 	public static boolean isDistinguished(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.distinguished"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean isDistinguished(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return isDistinguished(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canDeleteChannel(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.deletechannel"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canDeleteChannel(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canDeleteChannel(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canPrivateMessage(FPlayer p) { | ||||
| 		return p.hasPermission("fpchat.privatemessage"); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean canPrivateMessage(String playername) { | ||||
| 		if(FPlayer.getPlayer(playername) != null) { | ||||
| 			FPlayer p = FPlayer.getPlayer(playername); | ||||
| 			return canPrivateMessage(p); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
|  | @ -0,0 +1,677 @@ | |||
| package com.fpghoti.fpchatx.player; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| import java.util.HashSet; | ||||
| import java.util.UUID; | ||||
| import java.util.logging.Level; | ||||
| 
 | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.OfflinePlayer; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.event.player.AsyncPlayerChatEvent; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| import com.fpghoti.fpchatx.badge.BadgeGetter; | ||||
| import com.fpghoti.fpchatx.badge.BadgeSet; | ||||
| import com.fpghoti.fpchatx.badge.SyncSet; | ||||
| import com.fpghoti.fpchatx.chat.ChatChannel; | ||||
| import com.fpghoti.fpchatx.chat.ChatFilter; | ||||
| import com.fpghoti.fpchatx.chat.PrepareChat; | ||||
| import com.fpghoti.fpchatx.chat.StandardChannel; | ||||
| import com.fpghoti.fpchatx.chat.TempChannel; | ||||
| import com.fpghoti.fpchatx.config.PlayerFile; | ||||
| import com.fpghoti.fpchatx.customcodes.BubbleCode; | ||||
| import com.fpghoti.fpchatx.customcodes.Codify; | ||||
| import com.fpghoti.fpchatx.permission.Permission; | ||||
| import com.fpghoti.fpchatx.util.Util; | ||||
| import com.fpghoti.fpchatx.util.VaultUtil; | ||||
| 
 | ||||
| public class FPlayer { | ||||
| 
 | ||||
| 	private static HashMap<UUID,FPlayer> players = new HashMap<UUID,FPlayer>(); | ||||
| 
 | ||||
| 	public static void purge() { | ||||
| 		players = new HashMap<UUID,FPlayer>(); | ||||
| 	} | ||||
| 
 | ||||
| 	public static ArrayList<FPlayer> getPlayers(){ | ||||
| 		ArrayList<FPlayer> temp = new ArrayList<FPlayer>(players.values()); | ||||
| 		return temp; | ||||
| 	} | ||||
| 
 | ||||
| 	public static FPlayer getPlayer(OfflinePlayer p) { | ||||
| 		return getPlayer(p,false); | ||||
| 	} | ||||
| 
 | ||||
| 	@SuppressWarnings("deprecation") // Needed in order to run command using name when player offline. Most people can't remember UUIDs!! | ||||
| 	public static FPlayer getOfflinePlayer(String name) { | ||||
| 		return getPlayer(Bukkit.getOfflinePlayer(name)); | ||||
| 	} | ||||
| 
 | ||||
| 	public static void dualMsg(FPlayer p, String msg) { // Messages FPlayer. If FPlayer NULL msges CONSOLE instead | ||||
| 		if(p == null) { | ||||
| 			FPChat.getPlugin().log(Level.INFO, msg); | ||||
| 		}else { | ||||
| 			p.sendMessage(FPChat.logo() + ChatColor.YELLOW + " " + msg); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public static void goodMsg(FPlayer p, String msg) { // Messages FPlayer. If FPlayer NULL msges CONSOLE instead | ||||
| 		if(p == null) { | ||||
| 			FPChat.getPlugin().log(Level.INFO, msg); | ||||
| 		}else { | ||||
| 			p.sendMessage(FPChat.logo() + ChatColor.YELLOW + " " + msg); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public static void errMsg(FPlayer p, String msg) { // Messages FPlayer. If FPlayer NULL msges CONSOLE instead | ||||
| 		if(p == null) { | ||||
| 			FPChat.getPlugin().log(Level.INFO, "" + ChatColor.RED + msg); | ||||
| 		}else { | ||||
| 			p.sendMessage(FPChat.logo() + ChatColor.RED + " " + msg); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public static void plainMsg(FPlayer p, String msg) { // Messages FPlayer. If FPlayer NULL msges CONSOLE instead | ||||
| 		if(p == null) { | ||||
| 			FPChat.getPlugin().log(Level.INFO, msg); | ||||
| 		}else { | ||||
| 			p.sendMessage(msg); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	public static FPlayer getPlayer(Player p) { | ||||
| 		return getPlayer(Bukkit.getOfflinePlayer(p.getUniqueId())); | ||||
| 	} | ||||
| 
 | ||||
| 	public static FPlayer getPlayer(String playername) { | ||||
| 		return getPlayer(Util.getEP(playername)); | ||||
| 	} | ||||
| 
 | ||||
| 	public static FPlayer getPlayer(OfflinePlayer p, Boolean temp) { | ||||
| 		UUID uuid = p.getUniqueId(); | ||||
| 		if(players.containsKey(uuid)) { | ||||
| 			return players.get(uuid); | ||||
| 		}else { | ||||
| 			FPlayer fplayer = new FPlayer(p); | ||||
| 			if(!temp) { | ||||
| 				players.put(uuid, fplayer); | ||||
| 			} | ||||
| 			return fplayer; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private String name; | ||||
| 	private UUID uuid; | ||||
| 	private PlayerFile pfile; | ||||
| 	private OfflinePlayer offlinePlayer; | ||||
| 	private ArrayList<UUID> ignored; | ||||
| 	private ArrayList<String> channels; | ||||
| 	private ArrayList<String> tempchannels; | ||||
| 	private boolean tempspeak; | ||||
| 	private String primaryChannel; | ||||
| 	private String primaryTempChannel; | ||||
| 	private int shoutCooldown; | ||||
| 	private Integer[] badges; | ||||
| 	private UUID lastMsg; | ||||
| 	private boolean spy; | ||||
| 	private boolean shoutVisible; | ||||
| 	private boolean hushed; | ||||
| 	private ArrayList<Integer> synced; | ||||
| 	private boolean toShout; | ||||
| 	private boolean toTalk; | ||||
| 	private ChatChannel talkChannel; | ||||
| 	private ArrayList<Integer> giveBadgeQueue; | ||||
| 
 | ||||
| 	private FPlayer(OfflinePlayer p) { | ||||
| 		this.toShout = false; | ||||
| 		this.toTalk = false; | ||||
| 		this.talkChannel = null; | ||||
| 		this.synced = new ArrayList<Integer>(); | ||||
| 		this.offlinePlayer = p; | ||||
| 		this.name = p.getName(); | ||||
| 		this.uuid = p.getUniqueId(); | ||||
| 		this.pfile = new PlayerFile(FPChat.getPlugin(),p); | ||||
| 		this.ignored = new ArrayList<UUID>(); | ||||
| 		this.shoutCooldown = 0; | ||||
| 		this.lastMsg = null; | ||||
| 		this.spy = pfile.isSpy(); | ||||
| 		this.shoutVisible = pfile.shoutVisible(); | ||||
| 		this.hushed = pfile.isHushed(); | ||||
| 		this.giveBadgeQueue = new ArrayList<Integer>(); | ||||
| 		String rawignore = pfile.getIgnore(); | ||||
| 		if(!rawignore.equals("")) { | ||||
| 			for(String s : rawignore.split(",")) { | ||||
| 				ignored.add(UUID.fromString(s)); | ||||
| 			} | ||||
| 		} | ||||
| 		String rawchannel = pfile.getCurrentChannel(); | ||||
| 		if(rawchannel.equals("default")) { | ||||
| 			this.primaryChannel = ChatChannel.getDefault().getName(); | ||||
| 		}else if(ChatChannel.getChannel(rawchannel) != null) { | ||||
| 			this.primaryChannel = rawchannel; | ||||
| 		}else { | ||||
| 			this.primaryChannel = ChatChannel.getDefault().getName(); | ||||
| 		} | ||||
| 		this.channels = new ArrayList<String>(); | ||||
| 		this.tempchannels = new ArrayList<String>(); | ||||
| 		channels.add(ChatChannel.getDefault().getName()); | ||||
| 		channels.add(primaryChannel); | ||||
| 		String rawchannels = pfile.getChannels(); | ||||
| 		if(!rawchannels.equals("")) { | ||||
| 			for(String s : rawchannels.split(",")) { | ||||
| 				ChatChannel chan = ChatChannel.getChannel(s); | ||||
| 				if(chan != null && !chan.getName().equals(ChatChannel.getDefault().getName()) && !chan.getName().equals(primaryChannel)) { | ||||
| 					this.channels.add(chan.getName()); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if(FPChat.getPlugin().getMainConfig().mySQLEnabled()) { | ||||
| 			Util.connect(); | ||||
| 			SyncSet.update(this); | ||||
| 			this.badges = BadgeGetter.getBadges(this); | ||||
| 		}else { | ||||
| 			Integer[] empt = {0,0,0}; | ||||
| 			this.badges = empt; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean equals(FPlayer p) { | ||||
| 		return this.uuid == p.getUniqueId(); | ||||
| 	} | ||||
| 
 | ||||
| 	public String getName() { | ||||
| 		return this.name; | ||||
| 	} | ||||
| 
 | ||||
| 	public void updateBadges(int slot, int id) { | ||||
| 		badges[slot-1] = id; | ||||
| 	} | ||||
| 
 | ||||
| 	public void clearUnownedBadges() { | ||||
| 		if(!BadgeGetter.hasBadge(this, badges[0])) { | ||||
| 			BadgeSet.setBadge(this, 1, 0); | ||||
| 			updateBadges(1,0); | ||||
| 		} | ||||
| 		if(!BadgeGetter.hasBadge(this, badges[1])) { | ||||
| 			BadgeSet.setBadge(this, 2, 0); | ||||
| 			updateBadges(2,0); | ||||
| 		} | ||||
| 		if(!BadgeGetter.hasBadge(this, badges[2])) { | ||||
| 			BadgeSet.setBadge(this, 3, 0); | ||||
| 			updateBadges(3,0); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void addSyncedBadge(Integer id) { | ||||
| 		if(!synced.contains(id)) { | ||||
| 			this.synced.add(id); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void removeSyncedBadge(Integer id) { | ||||
| 		this.synced.remove(id); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean isSynced(Integer id) { | ||||
| 		return this.synced.contains(id); | ||||
| 	} | ||||
| 
 | ||||
| 	public ArrayList<Integer> syncedList(){ | ||||
| 		return this.synced; | ||||
| 	} | ||||
| 
 | ||||
| 	public int getShoutCooldown() { | ||||
| 		return this.shoutCooldown; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setShoutCooldown(int time) { | ||||
| 		this.shoutCooldown = time; | ||||
| 	} | ||||
| 
 | ||||
| 	public UUID getUniqueId() { | ||||
| 		return this.uuid; | ||||
| 	} | ||||
| 
 | ||||
| 	public PlayerFile getFile() { | ||||
| 		return this.pfile; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean isOnline() { | ||||
| 		return offlinePlayer.isOnline(); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean isSpy() { | ||||
| 		return this.spy && Permission.canSpy(this); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean enableSpy() { | ||||
| 		if(Permission.canSpy(this)) { | ||||
| 			this.spy = true; | ||||
| 			return true; | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	public void disableSpy() { | ||||
| 		this.spy = false; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean isShoutVisible() { | ||||
| 		return this.shoutVisible; | ||||
| 	} | ||||
| 
 | ||||
| 	public void showShout() { | ||||
| 		this.shoutVisible = true; | ||||
| 	} | ||||
| 
 | ||||
| 	public void hideShout() { | ||||
| 		this.shoutVisible = false; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean isHushed() { | ||||
| 		return this.hushed; | ||||
| 	} | ||||
| 
 | ||||
| 	public void hush() { | ||||
| 		this.hushed = true; | ||||
| 	} | ||||
| 
 | ||||
| 	public void unhush() { | ||||
| 		this.hushed = false; | ||||
| 	} | ||||
| 
 | ||||
| 	public Integer[] getBadges() { | ||||
| 		return this.badges; | ||||
| 	} | ||||
| 
 | ||||
| 	public FPlayer getLastMessage() { | ||||
| 		if(this.lastMsg == null) { | ||||
| 			return null; | ||||
| 		} | ||||
| 		if(Bukkit.getOfflinePlayer(this.lastMsg).isOnline()) { | ||||
| 			return FPlayer.getPlayer(Bukkit.getPlayer(this.lastMsg)); | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean hasPermission(String permission) { | ||||
| 		if(isOnline()) { | ||||
| 			Player p = offlinePlayer.getPlayer(); | ||||
| 			return VaultUtil.permission.playerHas(p, permission); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setPrimaryChannel(String channel) { | ||||
| 		this.primaryChannel = channel; | ||||
| 	} | ||||
| 
 | ||||
| 	public ChatChannel getPrimaryChannel() { | ||||
| 		ChatChannel c = ChatChannel.getChannel(this.primaryChannel); | ||||
| 		if(c != null) { | ||||
| 			return c; | ||||
| 		} | ||||
| 		c = ChatChannel.getDefault(); | ||||
| 		this.primaryChannel = c.getName(); | ||||
| 		return c; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setPrimaryTempChannel(String channel) { | ||||
| 		this.primaryTempChannel = channel; | ||||
| 	} | ||||
| 
 | ||||
| 	public ChatChannel getPrimaryTempChannel() { | ||||
| 		ChatChannel c = ChatChannel.getTempChannel(this.primaryTempChannel); | ||||
| 		if(c != null) { | ||||
| 			return c; | ||||
| 		} | ||||
| 		this.tempspeak = false; | ||||
| 		return getPrimaryChannel(); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean speakingInTemp() { | ||||
| 		return this.tempspeak; | ||||
| 	} | ||||
| 
 | ||||
| 	public void speakInTemp() { | ||||
| 		this.tempspeak = true; | ||||
| 	} | ||||
| 
 | ||||
| 	public void stopTempSpeak() { | ||||
| 		this.tempspeak = false; | ||||
| 	} | ||||
| 
 | ||||
| 	public ArrayList<String> getChannels(){ | ||||
| 		return this.channels; | ||||
| 	} | ||||
| 
 | ||||
| 	public ArrayList<String> getTempChannels(){ | ||||
| 		return this.tempchannels; | ||||
| 	} | ||||
| 
 | ||||
| 	public void sendMessage(String message) { | ||||
| 		if(isOnline()) { | ||||
| 			Player p = Bukkit.getPlayer(uuid); | ||||
| 			p.sendMessage(message); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public Player getPlayer() { | ||||
| 		if(isOnline()) { | ||||
| 			return Util.getEP(name); | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean joinChannel(String channel) { | ||||
| 		ChatChannel cc = ChatChannel.getChannel(channel); | ||||
| 		if(cc == null) { | ||||
| 			cc = ChatChannel.getTempChannel(channel); | ||||
| 		} | ||||
| 		if(cc == null) { | ||||
| 			joinStandardChannel(ChatChannel.getDefault().getName()); | ||||
| 			FPlayer.errMsg(this, "You tried to join a channel that no longer exists. You have been placed in the default channel instead."); | ||||
| 			return false; | ||||
| 		} | ||||
| 		if(cc.isBanned(this)) { | ||||
| 			FPlayer.errMsg(this, "Unable to join. You are blacklisted from this channel."); | ||||
| 			return false; | ||||
| 		} | ||||
| 		if(cc instanceof StandardChannel) { | ||||
| 			return joinStandardChannel(cc.getName()); | ||||
| 		}else if(cc instanceof TempChannel) { | ||||
| 			return joinTempChannel(cc.getName()); | ||||
| 		} | ||||
| 		FPlayer.errMsg(this, "An error has occurred. Unable to join channel."); | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean joinStandardChannel(String channel) { | ||||
| 		ChatChannel cc = ChatChannel.getChannel(channel); | ||||
| 		if(cc == null || !(cc instanceof StandardChannel)) { | ||||
| 			joinStandardChannel(ChatChannel.getDefault().getName()); | ||||
| 			FPlayer.errMsg(this, "You tried to join a channel that no longer exists. You have been placed in the default channel instead."); | ||||
| 			return false; | ||||
| 		} | ||||
| 		StandardChannel c = (StandardChannel)cc; | ||||
| 		if(!c.whitelistEnabled() || c.isWhitelisted(this)) { | ||||
| 			channels.add(channel); | ||||
| 			FPlayer.goodMsg(this, "You have joined channel " + ChatColor.YELLOW + cc.getName() + ChatColor.GREEN + "."); | ||||
| 			return true; | ||||
| 		}else { | ||||
| 			FPlayer.errMsg(this, "Unable to join. Channel is whitelisted."); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	public void leaveChannel(String channel) { | ||||
| 		if(ChatChannel.getDefault().getName().equalsIgnoreCase(channel)) { | ||||
| 			FPlayer.errMsg(this, "You cannot leave the default channel."); | ||||
| 			return; | ||||
| 		} | ||||
| 		if(getPrimaryChannel().getName().equalsIgnoreCase(channel)) { | ||||
| 			setPrimaryChannel(ChatChannel.getDefault().getName()); | ||||
| 		} | ||||
| 		channels.remove(channel); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean joinTempChannel(String channel) { | ||||
| 		ChatChannel cc = ChatChannel.getTempChannel(channel); | ||||
| 		if(cc == null || !(cc instanceof TempChannel)) { | ||||
| 			joinStandardChannel(ChatChannel.getDefault().getName()); | ||||
| 			FPlayer.errMsg(this, "You tried to join a channel that no longer exists. You have been placed in the default channel instead."); | ||||
| 			return false; | ||||
| 		} | ||||
| 		TempChannel c = (TempChannel)cc; | ||||
| 		if(!c.whitelistEnabled() || c.isWhitelisted(this)) { | ||||
| 			tempchannels.add(channel); | ||||
| 			FPlayer.goodMsg(this, "You have joined temporary channel " + ChatColor.YELLOW + cc.getName() + ChatColor.GREEN + "."); | ||||
| 			return true; | ||||
| 		}else { | ||||
| 			FPlayer.errMsg(this, "Unable to join. Channel is whitelisted."); | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean canJoin(ChatChannel channel) { | ||||
| 		if(channel.isBanned(this)) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		if(channel.whitelistEnabled() && !channel.isWhitelisted(this)) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
| 
 | ||||
| 	public void leaveTempChannel(String channel) { | ||||
| 		if(getPrimaryTempChannel().getName().equalsIgnoreCase(channel)) { | ||||
| 			stopTempSpeak(); | ||||
| 			this.primaryTempChannel = null; | ||||
| 		} | ||||
| 		tempchannels.remove(channel); | ||||
| 	} | ||||
| 
 | ||||
| 	public String formatChat(String msg) { | ||||
| 		if(tempspeak) { | ||||
| 			return formatChat(getPrimaryTempChannel(),msg); | ||||
| 		} | ||||
| 		return formatChat(getPrimaryChannel(), msg); | ||||
| 	} | ||||
| 
 | ||||
| 	public String formatChat(ChatChannel channel, String msg) { | ||||
| 		return channel.format(this, msg); | ||||
| 	} | ||||
| 
 | ||||
| 	public void chat(ChatChannel channel, String msg) { | ||||
| 		channel.sendMessage(formatChat(channel,msg), this); | ||||
| 	} | ||||
| 
 | ||||
| 	public void chat(String msg) { | ||||
| 		if(toShout) { | ||||
| 			toShout = false; | ||||
| 			ChatChannel.getShout().sendMessage(formatChat(ChatChannel.getShout(),msg), this); | ||||
| 			if(FPChat.getPlugin().getMainConfig().shoutCooldownEnabled()) { | ||||
| 				shoutCooldown = FPChat.getPlugin().getMainConfig().getShoutSeconds(); | ||||
| 			} | ||||
| 		}else if(tempspeak) { | ||||
| 			getPrimaryTempChannel().sendMessage(formatChat(getPrimaryTempChannel(),msg), this); | ||||
| 		}else { | ||||
| 			getPrimaryChannel().sendMessage(formatChat(msg), this); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean shout(String message) { | ||||
| 		if(!hushed && FPChat.getPlugin().getMainConfig().shoutCooldownEnabled() && shoutCooldown > 0) { | ||||
| 			int i = shoutCooldown; | ||||
| 			String time = " seconds "; | ||||
| 			if(i == 1) { | ||||
| 				time = " second "; | ||||
| 			} | ||||
| 			FPlayer.errMsg(this, "You must wait " + Integer.toString(i) + time + "before you can shout again."); | ||||
| 		} | ||||
| 		 | ||||
| 		if(hushed) { | ||||
| 			FPlayer.errMsg(this, "You are hushed."); | ||||
| 		} | ||||
| 		 | ||||
| 		if(isOnline() && (shoutCooldown == 0 || !FPChat.getPlugin().getMainConfig().shoutCooldownEnabled() ) && !isHushed()) { | ||||
| 			if(Permission.canShout(this)) { | ||||
| 				Player p = Bukkit.getPlayer(uuid); | ||||
| 				toShout = true; | ||||
| 				AsyncPlayerChatEvent event = new AsyncPlayerChatEvent(false, p, message, new HashSet<Player>(Bukkit.getOnlinePlayers())); | ||||
| 				Bukkit.getPluginManager().callEvent(event); | ||||
| 				return true; | ||||
| 			}else { | ||||
| 				FPlayer.errMsg(this, Permission.noPerm); | ||||
| 			} | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean ignore(FPlayer p) { | ||||
| 		if(Permission.isAdmin(p) || Permission.isStaff(p)) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		ignored.add(p.getUniqueId()); | ||||
| 		return true; | ||||
| 	} | ||||
| 
 | ||||
| 	public void unignore(FPlayer p) { | ||||
| 		ignored.remove(p.getUniqueId()); | ||||
| 	} | ||||
| 
 | ||||
| 	public ArrayList<UUID> getIgnored(){ | ||||
| 		return ignored; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean isIgnoring(FPlayer p) { | ||||
| 		if(Permission.isAdmin(p) || Permission.isStaff(p)) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		return this.ignored.contains(p.getUniqueId()); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean reply(String msg) { | ||||
| 		if(getLastMessage() == null) { | ||||
| 			sendMessage(FPChat.logo() + ChatColor.RED + "There is nobody currently online who you can reply to."); | ||||
| 			return false; | ||||
| 		}else { | ||||
| 			FPlayer p = getLastMessage(); | ||||
| 			return sendPM(p,msg); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean toTalk() { | ||||
| 		return this.toTalk; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setTalk(boolean b) { | ||||
| 		toTalk = b; | ||||
| 	} | ||||
| 	public ChatChannel getTalkChannel() { | ||||
| 		return this.talkChannel; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setTalkChannel(ChatChannel c) { | ||||
| 		talkChannel = c; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean receivePM(FPlayer from, String msg) { | ||||
| 		if(!from.isIgnoring(this)) { | ||||
| 			String finalMessage = ""; | ||||
| 			String stf = ""; | ||||
| 			if (Permission.canPMColor(from)) { | ||||
| 				msg = msg.replaceAll("&([0-9a-fk-or])", "§$1"); | ||||
| 			} else { | ||||
| 				msg = msg.replaceAll("§[0-9a-fk-or]", ""); | ||||
| 			} | ||||
| 			String header = PrepareChat.swapPlaceholders(from, this.getName(), msg, true); | ||||
| 			if(Permission.isStaff(from)){ | ||||
| 				stf = FPChat.getPlugin().getMainConfig().getStaffBadge(); | ||||
| 			} | ||||
| 			String filler = ""; | ||||
| 			if(FPChat.getPlugin().getMainConfig().chatFilterEnabled()){ | ||||
| 				filler = "word "; | ||||
| 			} | ||||
| 			if(Permission.canPMColor(from)){ | ||||
| 				String last = ChatFilter.filter(filler + msg); | ||||
| 				last = BubbleCode.bubblecode(Permission.canBubbleCode(from), Codify.changeFormatSign(last)); | ||||
| 				finalMessage = stf + header + last; | ||||
| 			}else{ | ||||
| 				String newmsg = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('§', ChatFilter.filter(filler + msg))); | ||||
| 				finalMessage = stf + Codify.removeBubbles(header + newmsg); | ||||
| 			} | ||||
| 			sendMessage(finalMessage); | ||||
| 			lastMsg = from.getUniqueId(); | ||||
| 			return true; | ||||
| 		} | ||||
| 		return false; | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean sendPM(FPlayer to, String msg) { | ||||
| 		boolean received = to.receivePM(this, msg); | ||||
| 		if(to.isOnline() && received) { | ||||
| 			String finalMessage = ""; | ||||
| 			String stf = ""; | ||||
| 			if (Permission.canPMColor(this)) { | ||||
| 				msg = msg.replaceAll("&([0-9a-fk-or])", "§$1"); | ||||
| 			} else { | ||||
| 				msg = msg.replaceAll("§[0-9a-fk-or]", ""); | ||||
| 			} | ||||
| 			String header = PrepareChat.swapPlaceholders(this, to.getName(), msg, false); | ||||
| 			if(Permission.isStaff(this)){ | ||||
| 				stf = FPChat.getPlugin().getMainConfig().getStaffBadge(); | ||||
| 			} | ||||
| 			String filler = ""; | ||||
| 			if(FPChat.getPlugin().getMainConfig().chatFilterEnabled()){ | ||||
| 				filler = "word "; | ||||
| 			} | ||||
| 			if(Permission.canPMColor(this)){ | ||||
| 				String last = ChatFilter.filter(filler + msg); | ||||
| 				last = BubbleCode.bubblecode(Permission.canBubbleCode(this), Codify.changeFormatSign(last)); | ||||
| 				finalMessage = stf + header + last; | ||||
| 			}else{ | ||||
| 				String newmsg = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('§', ChatFilter.filter(filler + msg))); | ||||
| 				finalMessage = stf + Codify.removeBubbles(header + newmsg); | ||||
| 			} | ||||
| 			lastMsg = to.getUniqueId(); | ||||
| 			sendMessage(finalMessage); | ||||
| 			if(!Permission.isAdmin(this)) { | ||||
| 				for(FPlayer p: FPlayer.getPlayers()){ | ||||
| 					if(p.isSpy()){ | ||||
| 						p.sendMessage(ChatColor.DARK_GRAY + name + " --> " + to.getName() + ": " +  msg); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			return true; | ||||
| 		} | ||||
| 		sendMessage(FPChat.logo() + ChatColor.RED + "The person you are trying to send a message to is either offline or ignoring you."); | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	public void queueBadgeAdd(int id) { | ||||
| 		if(!BadgeGetter.hasBadge(this, id) && !giveBadgeQueue.contains(id)) { | ||||
| 			giveBadgeQueue.add(id); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void unqueueBadge(Integer id) { | ||||
| 		giveBadgeQueue.remove(id); | ||||
| 	} | ||||
| 
 | ||||
| 	public ArrayList<Integer> getBadgeQueue(){ | ||||
| 		return this.giveBadgeQueue; | ||||
| 	} | ||||
| 
 | ||||
| 	public void cleanup() { | ||||
| 		String ignorelist = ""; | ||||
| 		for(UUID id : ignored) { | ||||
| 			ignorelist = id.toString() + ","; | ||||
| 		} | ||||
| 		ignorelist = Util.stripLast(ignorelist); | ||||
| 		String chanlist = ""; | ||||
| 		for(String c : channels) { | ||||
| 			if(chanlist.equals("") || !Util.contains(Util.stripLast(chanlist).split(","), c)) { | ||||
| 				chanlist = chanlist + c + ","; | ||||
| 			} | ||||
| 		} | ||||
| 		chanlist = Util.stripLast(chanlist); | ||||
| 		try { | ||||
| 			pfile.saveIgnore(ignorelist); | ||||
| 			pfile.saveChannels(chanlist); | ||||
| 			pfile.saveCurrentChannel(getPrimaryChannel().getName()); | ||||
| 			pfile.saveSpy(spy); | ||||
| 			pfile.saveHushed(hushed); | ||||
| 		} catch (IOException e) { | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		players.remove(this.uuid); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,60 @@ | |||
| package com.fpghoti.fpchatx.util; | ||||
| 
 | ||||
| import java.util.UUID; | ||||
| 
 | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.entity.Player; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| 
 | ||||
| public class Util { | ||||
| 
 | ||||
| 	public static void connect(){ | ||||
| 		if(FPChat.getPlugin().getMySQLConnection().getConnection() == null){ | ||||
| 			FPChat.getPlugin().getMySQLConnection().reconnect(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public Player playerGet(String uuid){ | ||||
| 		UUID id = UUID.fromString(uuid); | ||||
| 		Player p = Bukkit.getPlayer(id); | ||||
| 		return p; | ||||
| 	} | ||||
| 
 | ||||
| 	public static String fixCodes(String s){ | ||||
| 		return s.replaceAll("&", "§"); | ||||
| 	} | ||||
| 
 | ||||
| 	public static Player getEP(String playername){ | ||||
| 		Player p = null; | ||||
| 		for(Player item : Bukkit.getOnlinePlayers()){ | ||||
| 			if(playername.equalsIgnoreCase(item.getName())){ | ||||
| 				p = item; | ||||
| 			} | ||||
| 		} | ||||
| 		return p; | ||||
| 	} | ||||
| 
 | ||||
| 	public static boolean isDigit(String s){ | ||||
| 		return s.matches("[0-9]+"); | ||||
| 	} | ||||
| 
 | ||||
| 	public static String stripLast(String s) { | ||||
| 		if (s.length() != 0) { | ||||
| 			s = s.substring(0, s.length()-1); | ||||
| 		} | ||||
| 		return s; | ||||
| 	} | ||||
| 
 | ||||
| 	public static Boolean contains(String[] list, String s) { | ||||
| 		Boolean check = false; | ||||
| 		for(String item: list){ | ||||
| 			if(item.equals(s)){ | ||||
| 				check = true; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		return check; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,52 @@ | |||
| package com.fpghoti.fpchatx.util; | ||||
| 
 | ||||
| import org.bukkit.plugin.RegisteredServiceProvider; | ||||
| 
 | ||||
| import com.fpghoti.fpchatx.FPChat; | ||||
| 
 | ||||
| import net.milkbowl.vault.chat.Chat; | ||||
| import net.milkbowl.vault.economy.Economy; | ||||
| import net.milkbowl.vault.permission.Permission; | ||||
| 
 | ||||
| public class VaultUtil { | ||||
| 
 | ||||
| 	public static Permission permission = null; | ||||
| 	public static Economy economy = null; | ||||
| 	public static Chat chat = null; | ||||
| 	private FPChat plugin; | ||||
| 
 | ||||
| 	public VaultUtil(FPChat plugin) { | ||||
| 		this.plugin = plugin; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean setupPermissions(){ | ||||
| 		RegisteredServiceProvider<Permission> permissionProvider = plugin.getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); | ||||
| 		if (permissionProvider != null) { | ||||
| 			permission = permissionProvider.getProvider(); | ||||
| 		} | ||||
| 		return (permission != null); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean setupChat(){ | ||||
| 		RegisteredServiceProvider<Chat> chatProvider = plugin.getServer().getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); | ||||
| 		if (chatProvider != null) { | ||||
| 			chat = chatProvider.getProvider(); | ||||
| 		} | ||||
| 
 | ||||
| 		return (chat != null); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean setupEconomy(){ | ||||
| 		RegisteredServiceProvider<Economy> economyProvider = plugin.getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); | ||||
| 		if (economyProvider != null) { | ||||
| 			economy = economyProvider.getProvider(); | ||||
| 		} | ||||
| 
 | ||||
| 		return (economy != null); | ||||
| 	} | ||||
| 
 | ||||
| 	public Chat getChat() { | ||||
| 		return chat; | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
|  | @ -0,0 +1,72 @@ | |||
| name: FPChatX | ||||
| version: ${project.version} | ||||
| main: com.fpghoti.fpchatx.FPChat | ||||
| description: Chat plugin for 1.12+ | ||||
| depend: [Vault] | ||||
| softdepend: [PlaceholderAPI] | ||||
| commands: | ||||
|   fpc: | ||||
|     aliases: [fpchat,ch] | ||||
|     description: Main FPChat command | ||||
|     usage: Wrong usage. For help, type /<command> help | ||||
|   shout: | ||||
|     aliases: [fyell, fshout, yell, y] | ||||
|     description: Send a global message to all players | ||||
|     usage: /shout message | ||||
|   spy: | ||||
|     description: Enables listening in on private messages | ||||
|     usage: /spy <on/off> | ||||
|   hush: | ||||
|     description: Disables a user's shout and tempchannel abilities | ||||
|     usage: /<command> player | ||||
|   unhush: | ||||
|     description: Re-enables a user's shout and tempchannel abilities | ||||
|     usage: /<command> player | ||||
|   badgelist: | ||||
|     aliases: [badges] | ||||
|     description: Pulls up a list of badges you own | ||||
|     usage: /<command> page# | ||||
|   badgeequip: | ||||
|     aliases: [equip] | ||||
|     description: equips a badge | ||||
|     usage: /<command> slot# badge# | ||||
|   badgeclear: | ||||
|     aliases: [badgesclear] | ||||
|     description: unequips all badges | ||||
|     usage: /<command> | ||||
|   msg: | ||||
|     aliases: [tell] | ||||
|     description: Starts or ends a private conversation | ||||
|     usage: /<command> player message | ||||
|   reply: | ||||
|     aliases: [r] | ||||
|     description: Replies to a private conversation | ||||
|     usage: /<command> message | ||||
|   ignore: | ||||
|     description: Ignores a player | ||||
|     usage: /<command> player | ||||
|   unignore: | ||||
|     description: Unignores a player. | ||||
|     usage: /<command> player | ||||
|   ignorelist: | ||||
|     description: Shows ignorelist | ||||
|     usage: /<command> | ||||
|   revokebadge: | ||||
|     description: Deletes synced badge in MySQL. | ||||
|     usage: /<command> player badge# | ||||
|   givebadge: | ||||
|     description: Grants player a badge. | ||||
|     usage: /<command> player badge# | ||||
|   shouttoggle: | ||||
|     aliases: [frankoffshout] | ||||
|     description: Toggles ability to see shout. | ||||
|     usage: /<command> player badge# | ||||
|   tempchat: | ||||
|     aliases: [tc] | ||||
|     description: Tempchat main command. | ||||
|     usage: /<command> | ||||
|   talk: | ||||
|     aliases: [tk] | ||||
|     description: Set main channel | ||||
|     usage: /<command> channel | ||||
| 
 | ||||
		Loading…
	
		Reference in New Issue