Skip to content
This repository was archived by the owner on Jul 22, 2021. It is now read-only.

Commit c7fd2cc

Browse files
initial commit
0 parents  commit c7fd2cc

File tree

6 files changed

+99
-0
lines changed

6 files changed

+99
-0
lines changed

.gitignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Java
2+
*.class
3+
*.jar
4+
hs_err_pid*
5+
6+
# Maven
7+
target/
8+
9+
# IntelliJ
10+
.idea
11+
*.iml

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# SimpleCommandCooldown
2+
3+
Spigot plugin to block the excessive use of player chat commands.
4+
5+
## Source
6+
7+
- original plugin from [darki](https://github.com/DarkiBoi)

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<?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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>me.darki</groupId> <artifactId>SimpleCommandCooldown</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>SimpleCommandCooldown</name> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <defaultGoal>clean package</defaultGoal> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> <repositories> <repository> <id>spigotmc-repo</id> <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.spigotmc</groupId> <artifactId>spigot-api</artifactId> <version>1.15.2-R0.1-SNAPSHOT</version> <scope>provided</scope> </dependency> </dependencies></project>
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package me.darki.simplecommandcooldown;
2+
3+
import javafx.util.Pair;
4+
import org.bukkit.ChatColor;
5+
import org.bukkit.entity.Player;
6+
import org.bukkit.event.EventHandler;
7+
import org.bukkit.event.EventPriority;
8+
import org.bukkit.event.Listener;
9+
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
10+
import org.bukkit.event.player.PlayerQuitEvent;
11+
12+
import java.util.Map;
13+
import java.util.concurrent.ConcurrentHashMap;
14+
import java.util.concurrent.locks.ReentrantLock;
15+
16+
public class CommandListener implements Listener {
17+
final private ConcurrentHashMap<Pair<Player, String>, Long> cooldownMap;
18+
final private ReentrantLock mutex = new ReentrantLock();
19+
20+
public CommandListener() {
21+
cooldownMap = new ConcurrentHashMap<>();
22+
}
23+
24+
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
25+
public void onCommand(PlayerCommandPreprocessEvent event) {
26+
Player player = event.getPlayer();
27+
String commandName = event.getMessage().split(" ")[0];
28+
29+
Pair<Player, String> pair = new Pair<>(player, commandName);
30+
31+
try {
32+
this.mutex.lock();
33+
34+
if (this.cooldownMap.containsKey(pair)) {
35+
if (System.currentTimeMillis() - this.cooldownMap.get(pair) > SimpleCommandCooldown.cooldown) {
36+
this.cooldownMap.remove(pair);
37+
} else {
38+
player.sendMessage(ChatColor.RED + "Please wait a bit before using this command again!");
39+
event.setCancelled(true);
40+
}
41+
} else {
42+
this.cooldownMap.put(pair, System.currentTimeMillis());
43+
}
44+
} finally {
45+
this.mutex.unlock();
46+
}
47+
}
48+
49+
@EventHandler(ignoreCancelled = true)
50+
public void onPlayerQuit(PlayerQuitEvent event) {
51+
Player player = event.getPlayer();
52+
53+
for (Map.Entry<Pair<Player, String>, Long> entry : this.cooldownMap.entrySet()) {
54+
if (entry.getKey().getKey() == player)
55+
this.cooldownMap.remove(entry.getKey());
56+
}
57+
}
58+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package me.darki.simplecommandcooldown;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.plugin.java.JavaPlugin;
5+
6+
public final class SimpleCommandCooldown extends JavaPlugin {
7+
public static long cooldown = 0L;
8+
9+
public void onEnable() {
10+
getConfig().addDefault("cooldown", 3000);
11+
getConfig().options().copyDefaults(true);
12+
saveConfig();
13+
14+
Bukkit.getServer().getPluginManager().registerEvents(new CommandListener(), this);
15+
cooldown = getConfig().getLong("cooldown");
16+
}
17+
}

src/main/resources/plugin.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
name: SimpleCommandCooldown
2+
version: 1.0
3+
main: me.darki.simplecommandcooldown.SimpleCommandCooldown
4+
api-version: 1.13
5+
authors: [Darki, bierdosenhalter]

0 commit comments

Comments
 (0)