mirror of
https://github.com/YouHaveTrouble/PreventStabby.git
synced 2026-05-11 21:06:55 +00:00
Initial commit
This commit is contained in:
+113
@@ -0,0 +1,113 @@
|
|||||||
|
# User-specific stuff
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
out/
|
||||||
|
|
||||||
|
# Compiled class file
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# Log file
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# BlueJ files
|
||||||
|
*.ctxt
|
||||||
|
|
||||||
|
# Package Files #
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.nar
|
||||||
|
*.ear
|
||||||
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
*.rar
|
||||||
|
|
||||||
|
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||||
|
hs_err_pid*
|
||||||
|
|
||||||
|
*~
|
||||||
|
|
||||||
|
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||||
|
.fuse_hidden*
|
||||||
|
|
||||||
|
# KDE directory preferences
|
||||||
|
.directory
|
||||||
|
|
||||||
|
# Linux trash folder which might appear on any partition or disk
|
||||||
|
.Trash-*
|
||||||
|
|
||||||
|
# .nfs files are created when an open file is removed but is still being accessed
|
||||||
|
.nfs*
|
||||||
|
|
||||||
|
# General
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
# Icon must end with two \r
|
||||||
|
Icon
|
||||||
|
|
||||||
|
# Thumbnails
|
||||||
|
._*
|
||||||
|
|
||||||
|
# Files that might appear in the root of a volume
|
||||||
|
.DocumentRevisions-V100
|
||||||
|
.fseventsd
|
||||||
|
.Spotlight-V100
|
||||||
|
.TemporaryItems
|
||||||
|
.Trashes
|
||||||
|
.VolumeIcon.icns
|
||||||
|
.com.apple.timemachine.donotpresent
|
||||||
|
|
||||||
|
# Directories potentially created on remote AFP share
|
||||||
|
.AppleDB
|
||||||
|
.AppleDesktop
|
||||||
|
Network Trash Folder
|
||||||
|
Temporary Items
|
||||||
|
.apdisk
|
||||||
|
|
||||||
|
# Windows thumbnail cache files
|
||||||
|
Thumbs.db
|
||||||
|
Thumbs.db:encryptable
|
||||||
|
ehthumbs.db
|
||||||
|
ehthumbs_vista.db
|
||||||
|
|
||||||
|
# Dump file
|
||||||
|
*.stackdump
|
||||||
|
|
||||||
|
# Folder config file
|
||||||
|
[Dd]esktop.ini
|
||||||
|
|
||||||
|
# Recycle Bin used on file shares
|
||||||
|
$RECYCLE.BIN/
|
||||||
|
|
||||||
|
# Windows Installer files
|
||||||
|
*.cab
|
||||||
|
*.msi
|
||||||
|
*.msix
|
||||||
|
*.msm
|
||||||
|
*.msp
|
||||||
|
|
||||||
|
# Windows shortcuts
|
||||||
|
*.lnk
|
||||||
|
|
||||||
|
target/
|
||||||
|
|
||||||
|
pom.xml.tag
|
||||||
|
pom.xml.releaseBackup
|
||||||
|
pom.xml.versionsBackup
|
||||||
|
pom.xml.next
|
||||||
|
|
||||||
|
release.properties
|
||||||
|
dependency-reduced-pom.xml
|
||||||
|
buildNumber.properties
|
||||||
|
.mvn/timing.properties
|
||||||
|
.mvn/wrapper/maven-wrapper.jar
|
||||||
|
.flattened-pom.xml
|
||||||
|
|
||||||
|
# Common working directory
|
||||||
|
run/
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
<?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>eu.endermite</groupId>
|
||||||
|
<artifactId>TogglePvP</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<name>TogglePvP</name>
|
||||||
|
|
||||||
|
<description>PvP toggle plugin</description>
|
||||||
|
<properties>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.1</version>
|
||||||
|
<configuration>
|
||||||
|
<source>${java.version}</source>
|
||||||
|
<target>${java.version}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>3.2.4</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</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>
|
||||||
|
<repository>
|
||||||
|
<id>sonatype</id>
|
||||||
|
<url>https://oss.sonatype.org/content/groups/public/</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.spigotmc</groupId>
|
||||||
|
<artifactId>spigot-api</artifactId>
|
||||||
|
<version>1.16.1-R0.1-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.12</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
package eu.endermite.togglepvp;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.commands.MainCommand;
|
||||||
|
import eu.endermite.togglepvp.config.ConfigCache;
|
||||||
|
import eu.endermite.togglepvp.listeners.*;
|
||||||
|
import eu.endermite.togglepvp.listeners.player.*;
|
||||||
|
import eu.endermite.togglepvp.players.PlayerManager;
|
||||||
|
import eu.endermite.togglepvp.util.DatabaseSQLite;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public final class TogglePvP extends JavaPlugin {
|
||||||
|
|
||||||
|
@Getter private static TogglePvP plugin;
|
||||||
|
private ConfigCache configCache;
|
||||||
|
private PlayerManager playerManager;
|
||||||
|
private DatabaseSQLite sqLite;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
plugin = this;
|
||||||
|
reloadPluginConfig();
|
||||||
|
File dbFile = new File("plugins/TogglePvP");
|
||||||
|
sqLite = new DatabaseSQLite("jdbc:sqlite:plugins/TogglePvP/TogglePvP.db", dbFile);
|
||||||
|
sqLite.createDatabaseFile();
|
||||||
|
sqLite.testConnection();
|
||||||
|
playerManager = new PlayerManager();
|
||||||
|
|
||||||
|
getServer().getPluginManager().registerEvents(new PlayerJoinAndLeaveListener(), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new PlayerAttackListener(), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new PlayerHitByProjectileListener(), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new AreaEffectCloudApplyListener(), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new PlayerHitByLightningListener(), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new LightningBlockIgniteListener(), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new PlayerHitByFireworkListener(), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new FishingListener(), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new LavaDumpAndIgniteListener(), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new WolfTargettingListener(), this);
|
||||||
|
|
||||||
|
getCommand("pvp").setExecutor(new MainCommand());
|
||||||
|
getCommand("pvp").setTabCompleter(new MainCommand());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reloadPluginConfig() {
|
||||||
|
saveDefaultConfig();
|
||||||
|
reloadConfig();
|
||||||
|
configCache = new ConfigCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reloadPluginConfig(CommandSender commandSender) {
|
||||||
|
getServer().getScheduler().runTaskAsynchronously(this, () -> {
|
||||||
|
reloadPluginConfig();
|
||||||
|
commandSender.sendMessage("TogglePvP configuration reloaded.");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public ConfigCache getConfigCache() {
|
||||||
|
return configCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerManager getPlayerManager() {
|
||||||
|
return playerManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DatabaseSQLite getSqLite() {return sqLite;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package eu.endermite.togglepvp.commands;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import eu.endermite.togglepvp.util.PluginMessages;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class HelpCommand {
|
||||||
|
|
||||||
|
public static void help(CommandSender sender, String[] args) {
|
||||||
|
Bukkit.getScheduler().runTaskAsynchronously(TogglePvP.getPlugin(), () -> {
|
||||||
|
|
||||||
|
List<String> helpPage = new ArrayList<>();
|
||||||
|
|
||||||
|
helpPage.add(PluginMessages.parseMessage("&b&m &bTogglePvP Help&b&m "));
|
||||||
|
helpPage.add(PluginMessages.parseMessage("&9/pvp &b&lhelp &f- shows this message"));
|
||||||
|
if (sender.hasPermission("togglepvp.command.toggle")) {
|
||||||
|
helpPage.add(PluginMessages.parseMessage("&9/pvp &b&l[on/off] &f- enables or disables PvP"));
|
||||||
|
helpPage.add(PluginMessages.parseMessage("&9/pvp &b<oggle &f- toggles PvP status"));
|
||||||
|
}
|
||||||
|
String[] helpReady = helpPage.toArray(new String[0]);
|
||||||
|
sender.sendMessage(helpReady);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
package eu.endermite.togglepvp.commands;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import eu.endermite.togglepvp.util.PluginMessages;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MainCommand implements TabExecutor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
|
||||||
|
if (sender.hasPermission("togglepvp.command"))
|
||||||
|
if (args.length >= 1) {
|
||||||
|
switch (args[0].toLowerCase()) {
|
||||||
|
case "help":
|
||||||
|
HelpCommand.help(sender, args);
|
||||||
|
break;
|
||||||
|
case "toggle":
|
||||||
|
PvpToggleCommand.toggle(sender, args);
|
||||||
|
break;
|
||||||
|
case "on":
|
||||||
|
case "enable":
|
||||||
|
PvpToggleCommand.enable(sender, args);
|
||||||
|
break;
|
||||||
|
case "off":
|
||||||
|
case "disable":
|
||||||
|
PvpToggleCommand.disable(sender, args);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sender.sendMessage(PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getNo_such_command()));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
List<String> commands = new ArrayList<>();
|
||||||
|
String arg1 = args[0].toLowerCase();
|
||||||
|
|
||||||
|
List<String> noPerm = new ArrayList<>();
|
||||||
|
noPerm.add("help");
|
||||||
|
|
||||||
|
List<String> togglePerm = new ArrayList<>();
|
||||||
|
togglePerm.add("toggle");
|
||||||
|
togglePerm.add("on");
|
||||||
|
togglePerm.add("enable");
|
||||||
|
togglePerm.add("off");
|
||||||
|
togglePerm.add("disable");
|
||||||
|
|
||||||
|
if (args.length == 1) {
|
||||||
|
if (sender.hasPermission("togglepvp.command.toggle")) {
|
||||||
|
for (String noPermCmd : noPerm) {
|
||||||
|
if (noPermCmd.startsWith(arg1))
|
||||||
|
commands.add(noPermCmd);
|
||||||
|
}
|
||||||
|
for (String togglePermCmd : togglePerm) {
|
||||||
|
if (togglePermCmd.startsWith(arg1))
|
||||||
|
commands.add(togglePermCmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return commands;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
package eu.endermite.togglepvp.commands;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import eu.endermite.togglepvp.util.PluginMessages;
|
||||||
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class PvpToggleCommand {
|
||||||
|
|
||||||
|
public static void toggle(CommandSender sender, String[] args) {
|
||||||
|
|
||||||
|
Bukkit.getScheduler().runTaskAsynchronously(TogglePvP.getPlugin(), () -> {
|
||||||
|
|
||||||
|
if (!sender.hasPermission("togglepvp.command.toggle")) {
|
||||||
|
String message = TogglePvP.getPlugin().getConfigCache().getNo_permission();
|
||||||
|
BaseComponent[] component = TextComponent.fromLegacyText(message);
|
||||||
|
sender.spigot().sendMessage(component);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.length == 1) {
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
Player player = (Player) sender;
|
||||||
|
boolean currentState = TogglePvP.getPlugin().getPlayerManager().togglePlayerPvpState(player);
|
||||||
|
|
||||||
|
String message = "";
|
||||||
|
if (currentState) {
|
||||||
|
message = PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getPvp_enabled());
|
||||||
|
} else {
|
||||||
|
message = PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getPvp_disabled());
|
||||||
|
}
|
||||||
|
BaseComponent[] component = TextComponent.fromLegacyText(message);
|
||||||
|
player.spigot().sendMessage(ChatMessageType.CHAT, component);
|
||||||
|
} else {
|
||||||
|
sender.sendMessage("Try /pvp toggle <player>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void enable(CommandSender sender, String[] args) {
|
||||||
|
if (!sender.hasPermission("togglepvp.command.toggle")) {
|
||||||
|
String message = TogglePvP.getPlugin().getConfigCache().getNo_permission();
|
||||||
|
BaseComponent[] component = TextComponent.fromLegacyText(message);
|
||||||
|
sender.spigot().sendMessage(component);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (args.length == 1) {
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
Player player = (Player) sender;
|
||||||
|
TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player, true);
|
||||||
|
String message = PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getPvp_enabled());
|
||||||
|
BaseComponent[] component = TextComponent.fromLegacyText(message);
|
||||||
|
player.spigot().sendMessage(ChatMessageType.CHAT, component);
|
||||||
|
} else {
|
||||||
|
sender.sendMessage("Try /pvp enable <player>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void disable(CommandSender sender, String[] args) {
|
||||||
|
if (!sender.hasPermission("togglepvp.command.toggle")) {
|
||||||
|
String message = TogglePvP.getPlugin().getConfigCache().getNo_permission();
|
||||||
|
BaseComponent[] component = TextComponent.fromLegacyText(message);
|
||||||
|
sender.spigot().sendMessage(component);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (args.length == 1) {
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
Player player = (Player) sender;
|
||||||
|
TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player, false);
|
||||||
|
String message = PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getPvp_disabled());
|
||||||
|
BaseComponent[] component = TextComponent.fromLegacyText(message);
|
||||||
|
player.spigot().sendMessage(ChatMessageType.CHAT, component);
|
||||||
|
} else {
|
||||||
|
sender.sendMessage("Try /pvp disable <player>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package eu.endermite.togglepvp.config;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bukkit.configuration.Configuration;
|
||||||
|
|
||||||
|
public class ConfigCache {
|
||||||
|
|
||||||
|
@Getter private final boolean pvp_enabled_by_default, lava_and_fire_stopper_enabled;
|
||||||
|
@Getter private final String pvp_enabled, pvp_disabled, cannot_attack_victim, cannot_attack_attacker, no_permission, no_such_command;
|
||||||
|
@Getter private final double lava_and_fire_stopper_radius;
|
||||||
|
|
||||||
|
public ConfigCache() {
|
||||||
|
|
||||||
|
Configuration config = TogglePvP.getPlugin().getConfig();
|
||||||
|
|
||||||
|
// Settings
|
||||||
|
this.pvp_enabled_by_default = config.getBoolean("settings.pvp_enabled_by_default", false);
|
||||||
|
|
||||||
|
this.lava_and_fire_stopper_enabled = config.getBoolean("settings.lava_and_fire_stopper.enabled", true);
|
||||||
|
this.lava_and_fire_stopper_radius = config.getDouble("settings.lava_and_fire_stopper.radius", 2.5);
|
||||||
|
|
||||||
|
// Messages
|
||||||
|
this.pvp_enabled = config.getString("messages.pvp_enabled", "&cYou enabled PvP!");
|
||||||
|
this.pvp_disabled = config.getString("messages.pvp_disabled", "&cYou disabled PvP!");
|
||||||
|
this.cannot_attack_victim = config.getString("messages.cannot_attack_victim", "&cYou can't attack players that have PvP turned off!");
|
||||||
|
this.cannot_attack_attacker = config.getString("messages.cannot_attack_attacker", "&cYou can't attack players while you have PvP turned off!");
|
||||||
|
this.no_permission = config.getString("messages.no_permission", "&cYou don't have permission to use that.");
|
||||||
|
this.no_such_command = config.getString("messages.no_such_command", "&cNo such command.");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package eu.endermite.togglepvp.listeners;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import org.bukkit.entity.Fox;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.Wolf;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
public class WolfTargettingListener implements Listener {
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onWolfTarget(org.bukkit.event.entity.EntityTargetEvent event) {
|
||||||
|
if (event.getEntity() instanceof Wolf) {
|
||||||
|
Wolf wolf = (Wolf) event.getEntity();
|
||||||
|
if (wolf.getOwner() != null) {
|
||||||
|
if (event.getTarget() instanceof Player) {
|
||||||
|
Player victim = (Player) event.getTarget();
|
||||||
|
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||||
|
if (!victimPvpEnabled) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (event.getEntity() instanceof Fox) {
|
||||||
|
Fox fox = (Fox) event.getEntity();
|
||||||
|
if (fox.getFirstTrustedPlayer() != null) {
|
||||||
|
if (event.getTarget() instanceof Player) {
|
||||||
|
Player victim = (Player) event.getTarget();
|
||||||
|
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||||
|
if (!victimPvpEnabled) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+62
@@ -0,0 +1,62 @@
|
|||||||
|
package eu.endermite.togglepvp.listeners.player;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import eu.endermite.togglepvp.config.ConfigCache;
|
||||||
|
import eu.endermite.togglepvp.util.PluginMessages;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.entity.AreaEffectCloudApplyEvent;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
public class AreaEffectCloudApplyListener implements Listener {
|
||||||
|
|
||||||
|
@EventHandler(ignoreCancelled = true)
|
||||||
|
public void onCloudEffects(AreaEffectCloudApplyEvent event) {
|
||||||
|
|
||||||
|
PotionEffectType potionEffectType = event.getEntity().getBasePotionData().getType().getEffectType();
|
||||||
|
|
||||||
|
if (potionEffectType == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(event.getEntity().getSource() instanceof Player) {
|
||||||
|
if (potionEffectType.equals(PotionEffectType.BLINDNESS) ||
|
||||||
|
potionEffectType.equals(PotionEffectType.CONFUSION) ||
|
||||||
|
potionEffectType.equals(PotionEffectType.HARM) ||
|
||||||
|
potionEffectType.equals(PotionEffectType.HUNGER) ||
|
||||||
|
potionEffectType.equals(PotionEffectType.POISON) ||
|
||||||
|
potionEffectType.equals(PotionEffectType.SLOW_DIGGING) ||
|
||||||
|
potionEffectType.equals(PotionEffectType.WEAKNESS) ||
|
||||||
|
potionEffectType.equals(PotionEffectType.WITHER)) {
|
||||||
|
|
||||||
|
Iterator<LivingEntity> it = event.getAffectedEntities().iterator();
|
||||||
|
while(it.hasNext()) {
|
||||||
|
LivingEntity entity = it.next();
|
||||||
|
if(entity instanceof Player) {
|
||||||
|
Player damager = (Player) event.getEntity().getSource();
|
||||||
|
Player victim = (Player) entity;
|
||||||
|
|
||||||
|
ConfigCache config = TogglePvP.getPlugin().getConfigCache();
|
||||||
|
|
||||||
|
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||||
|
|
||||||
|
if (!damagerPvpEnabled) {
|
||||||
|
it.remove();
|
||||||
|
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||||
|
if (!victimPvpEnabled) {
|
||||||
|
it.remove();
|
||||||
|
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package eu.endermite.togglepvp.listeners.player;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import eu.endermite.togglepvp.config.ConfigCache;
|
||||||
|
import eu.endermite.togglepvp.util.PluginMessages;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
public class FishingListener implements Listener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevents hooking players with disabled pvp with fishing rod
|
||||||
|
*/
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onFish(org.bukkit.event.player.PlayerFishEvent event) {
|
||||||
|
if (event.getCaught() instanceof Player) {
|
||||||
|
Player damager = event.getPlayer();
|
||||||
|
Player victim = (Player) event.getCaught();
|
||||||
|
|
||||||
|
ConfigCache config = TogglePvP.getPlugin().getConfigCache();
|
||||||
|
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||||
|
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||||
|
if (!damagerPvpEnabled) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!victimPvpEnabled) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
package eu.endermite.togglepvp.listeners.player;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import eu.endermite.togglepvp.config.ConfigCache;
|
||||||
|
import eu.endermite.togglepvp.util.PluginMessages;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.util.BoundingBox;
|
||||||
|
|
||||||
|
public class LavaDumpAndIgniteListener implements Listener {
|
||||||
|
|
||||||
|
private ConfigCache config = TogglePvP.getPlugin().getConfigCache();
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onLavaDump(org.bukkit.event.player.PlayerBucketEmptyEvent event) {
|
||||||
|
|
||||||
|
if (!TogglePvP.getPlugin().getConfigCache().isLava_and_fire_stopper_enabled())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Location location = event.getBlockClicked().getLocation();
|
||||||
|
Player damager = event.getPlayer();
|
||||||
|
double radius = config.getLava_and_fire_stopper_radius();
|
||||||
|
BoundingBox boundingBox = getBoundingBox(location, radius);
|
||||||
|
|
||||||
|
for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) {
|
||||||
|
if (entity instanceof Player) {
|
||||||
|
Player victim = (Player) entity;
|
||||||
|
if (victim != damager) {
|
||||||
|
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||||
|
if (!damagerPvpEnabled) {
|
||||||
|
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||||
|
if (!victimPvpEnabled) {
|
||||||
|
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onIgnite(org.bukkit.event.block.BlockIgniteEvent event) {
|
||||||
|
|
||||||
|
if (!TogglePvP.getPlugin().getConfigCache().isLava_and_fire_stopper_enabled())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.getPlayer() !=null) {
|
||||||
|
Location location = event.getBlock().getLocation();
|
||||||
|
Player damager = event.getPlayer();
|
||||||
|
double radius = config.getLava_and_fire_stopper_radius();
|
||||||
|
BoundingBox boundingBox = getBoundingBox(location, radius);
|
||||||
|
for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) {
|
||||||
|
if (entity instanceof Player) {
|
||||||
|
Player victim = (Player) entity;
|
||||||
|
if (victim != damager) {
|
||||||
|
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||||
|
if (!damagerPvpEnabled) {
|
||||||
|
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||||
|
if (!victimPvpEnabled) {
|
||||||
|
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private BoundingBox getBoundingBox(Location location, double radius) {
|
||||||
|
|
||||||
|
double x1 = location.getX()+radius;
|
||||||
|
double y1 = location.getY()+radius;
|
||||||
|
double z1 = location.getZ()+radius;
|
||||||
|
|
||||||
|
double x2 = location.getX()-radius;
|
||||||
|
double y2 = location.getY()-radius;
|
||||||
|
double z2 = location.getZ()-radius;
|
||||||
|
|
||||||
|
return new BoundingBox(x1, y1, z1, x2, y2, z2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+36
@@ -0,0 +1,36 @@
|
|||||||
|
package eu.endermite.togglepvp.listeners.player;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.LightningStrike;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
public class LightningBlockIgniteListener implements Listener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lightning strikes from channeling enchant won't ignite blocks if player with pvp off is in radius
|
||||||
|
*/
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onBlockIgnite(org.bukkit.event.block.BlockIgniteEvent event) {
|
||||||
|
|
||||||
|
if (event.getIgnitingEntity() instanceof LightningStrike && event.getIgnitingEntity().getMetadata("TRIDENT").size() >= 1) {
|
||||||
|
LightningStrike lightningStrike = (LightningStrike) event.getIgnitingEntity();
|
||||||
|
|
||||||
|
for (Entity entity : lightningStrike.getNearbyEntities(2,2,2)) {
|
||||||
|
if (entity instanceof Player) {
|
||||||
|
Player player = (Player) entity;
|
||||||
|
|
||||||
|
if (!TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(player)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package eu.endermite.togglepvp.listeners.player;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import eu.endermite.togglepvp.config.ConfigCache;
|
||||||
|
import eu.endermite.togglepvp.util.PluginMessages;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
public class PlayerAttackListener implements Listener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancels basic attacks done to player with pvp off
|
||||||
|
*/
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onPlayerAttack(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
|
||||||
|
Entity damagerEntity = event.getDamager();
|
||||||
|
Entity victimEntity = event.getEntity();
|
||||||
|
|
||||||
|
if (damagerEntity instanceof Player && victimEntity instanceof Player) {
|
||||||
|
Player damager = (Player) damagerEntity;
|
||||||
|
Player victim = (Player) victimEntity;
|
||||||
|
|
||||||
|
ConfigCache config = TogglePvP.getPlugin().getConfigCache();
|
||||||
|
|
||||||
|
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||||
|
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||||
|
|
||||||
|
if (!damagerPvpEnabled) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!victimPvpEnabled) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
package eu.endermite.togglepvp.listeners.player;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import org.bukkit.entity.Firework;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
public class PlayerHitByFireworkListener implements Listener {
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onFireworkDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
|
||||||
|
if (event.getDamager() instanceof Firework && event.getEntity() instanceof Player) {
|
||||||
|
Player victim = (Player) event.getEntity();
|
||||||
|
Firework firework = (Firework) event.getDamager();
|
||||||
|
if (firework.getShooter() instanceof Player) {
|
||||||
|
Player damager = (Player) firework.getShooter();
|
||||||
|
if (damager == victim) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||||
|
if (!victimPvpEnabled) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
+41
@@ -0,0 +1,41 @@
|
|||||||
|
package eu.endermite.togglepvp.listeners.player;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import org.bukkit.entity.LightningStrike;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.weather.LightningStrikeEvent;
|
||||||
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listen for lightning strikes and tag the trident spawned ones.
|
||||||
|
* Idea from aasmus' PvPToggle plugin
|
||||||
|
*/
|
||||||
|
public class PlayerHitByLightningListener implements Listener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancels damage from lightning strike caused by channeling for players with pvp off
|
||||||
|
*/
|
||||||
|
@EventHandler(ignoreCancelled = true)
|
||||||
|
public void onPlayerLightningDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
|
||||||
|
if (event.getDamager() instanceof LightningStrike && event.getDamager().getMetadata("TRIDENT").size() >= 1 && event.getEntity() instanceof Player) {
|
||||||
|
Player victim = (Player) event.getEntity();
|
||||||
|
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||||
|
if (!victimPvpEnabled) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tags the lightning strike
|
||||||
|
*/
|
||||||
|
@EventHandler(ignoreCancelled = true)
|
||||||
|
public void onLightningStrike(LightningStrikeEvent event){
|
||||||
|
if(event.getCause() == LightningStrikeEvent.Cause.TRIDENT){
|
||||||
|
event.getLightning().setMetadata("TRIDENT", new FixedMetadataValue(TogglePvP.getPlugin(), event.getLightning().getLocation()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+51
@@ -0,0 +1,51 @@
|
|||||||
|
package eu.endermite.togglepvp.listeners.player;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import eu.endermite.togglepvp.config.ConfigCache;
|
||||||
|
import eu.endermite.togglepvp.util.PluginMessages;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.Projectile;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
public class PlayerHitByProjectileListener implements Listener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancels damage done by projectiles to player with pvp off
|
||||||
|
*/
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onPlayerHitProjectile(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
|
||||||
|
|
||||||
|
if (event.getEntity() instanceof Player && event.getDamager() instanceof Projectile) {
|
||||||
|
Projectile projectile = (Projectile) event.getDamager();
|
||||||
|
if (projectile.getShooter() instanceof Player) {
|
||||||
|
Player damager = (Player) projectile.getShooter();
|
||||||
|
Player victim = (Player) event.getEntity();
|
||||||
|
|
||||||
|
// Ender pearls and other self-damage
|
||||||
|
if (damager == victim) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfigCache config = TogglePvP.getPlugin().getConfigCache();
|
||||||
|
|
||||||
|
boolean damagerPvpEnabled = (boolean) TogglePvP.getPlugin().getPlayerManager().getPlayer(damager).get("pvpenabled");
|
||||||
|
boolean victimPvpEnabled = (boolean) TogglePvP.getPlugin().getPlayerManager().getPlayer(victim).get("pvpenabled");
|
||||||
|
|
||||||
|
if (!damagerPvpEnabled) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!victimPvpEnabled) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package eu.endermite.togglepvp.listeners.player;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class PlayerJoinAndLeaveListener implements Listener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This event is here to get players saved options on join
|
||||||
|
*/
|
||||||
|
@EventHandler(ignoreCancelled = true)
|
||||||
|
public void onPlayerJoin(org.bukkit.event.player.PlayerJoinEvent event) {
|
||||||
|
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
HashMap<String, Object> playerData;
|
||||||
|
playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(player);
|
||||||
|
TogglePvP.getPlugin().getPlayerManager().addPlayer(player, playerData);
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* This event is here to dump player's saved options from memory
|
||||||
|
*/
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerLeave(org.bukkit.event.player.PlayerQuitEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
TogglePvP.getPlugin().getSqLite().updatePlayerInfo(player, TogglePvP.getPlugin().getPlayerManager().getPlayer(player));
|
||||||
|
TogglePvP.getPlugin().getPlayerManager().removePlayer(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package eu.endermite.togglepvp.players;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class PlayerManager {
|
||||||
|
|
||||||
|
HashMap<Player, HashMap<String, Object>> playerList = new HashMap<>();
|
||||||
|
|
||||||
|
public PlayerManager() {
|
||||||
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
HashMap<String, Object> playerData;
|
||||||
|
playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(p);
|
||||||
|
playerList.put(p, playerData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public HashMap<String, Object> getPlayer(Player p) {
|
||||||
|
return playerList.get(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPlayer(Player player, HashMap<String,Object> data) {
|
||||||
|
playerList.put(player, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePlayer(Player player) {
|
||||||
|
playerList.remove(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getPlayerPvPState(Player p) {
|
||||||
|
return (boolean) playerList.get(p).get("pvpenabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPlayerPvpState(Player player, boolean state) {
|
||||||
|
playerList.get(player).replace("pvpenabled", state);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean togglePlayerPvpState(Player player) {
|
||||||
|
boolean currentState = (boolean) playerList.get(player).get("pvpenabled");
|
||||||
|
if (currentState) {
|
||||||
|
playerList.get(player).replace("pvpenabled", false);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
playerList.get(player).replace("pvpenabled", true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
package eu.endermite.togglepvp.util;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvP;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.sql.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class DatabaseSQLite {
|
||||||
|
|
||||||
|
private String url;
|
||||||
|
private File folder;
|
||||||
|
|
||||||
|
public DatabaseSQLite(String url, File folder) {
|
||||||
|
this.url = url;
|
||||||
|
this.folder = folder;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean createDatabaseFile() {
|
||||||
|
this.folder.mkdir();
|
||||||
|
try (Connection conn = DriverManager.getConnection(url)) {
|
||||||
|
if (conn != null) {
|
||||||
|
DatabaseMetaData meta = conn.getMetaData();
|
||||||
|
System.out.println("The driver name is " + meta.getDriverName());
|
||||||
|
Statement statement = conn.createStatement();
|
||||||
|
String sql = "CREATE TABLE IF NOT EXISTS `players` (`player_uuid` varchar(36) UNIQUE PRIMARY KEY, `pvpenabled` boolean);";
|
||||||
|
statement.execute(sql);
|
||||||
|
conn.close();
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
System.out.println(e.getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testConnection() {
|
||||||
|
Connection conn = null;
|
||||||
|
try {
|
||||||
|
conn = DriverManager.getConnection(url);
|
||||||
|
System.out.println("Connection to SQLite has been established.");
|
||||||
|
} catch (SQLException e) {
|
||||||
|
System.out.println(e.getMessage());
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (conn != null) {
|
||||||
|
conn.close();
|
||||||
|
}
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
System.out.println(ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public HashMap<String, Object> getPlayerInfo(Player p) {
|
||||||
|
HashMap<String, Object> dataHashMap = new HashMap<>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
Connection conn = DriverManager.getConnection(url);
|
||||||
|
Statement insertnewuser = conn.createStatement();
|
||||||
|
try {
|
||||||
|
String newuserdata = "INSERT OR IGNORE INTO `players` (player_uuid, pvpenabled) VALUES ('" + p.getUniqueId().toString() + "', " + TogglePvP.getPlugin().getConfigCache().isPvp_enabled_by_default() + ")";
|
||||||
|
insertnewuser.execute(newuserdata);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
if (e.getErrorCode() != 19) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Statement statement = conn.createStatement();
|
||||||
|
String sql = "SELECT * FROM `players` WHERE `player_uuid` = '" + p.getUniqueId().toString() + "';";
|
||||||
|
statement.execute(sql);
|
||||||
|
ResultSet result = statement.getResultSet();
|
||||||
|
dataHashMap.put("pvpenabled", result.getBoolean("pvpenabled"));
|
||||||
|
|
||||||
|
conn.close();
|
||||||
|
return dataHashMap;
|
||||||
|
} catch (SQLException throwables) {
|
||||||
|
throwables.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updatePlayerInfo(Player p, HashMap<String, Object> data) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
Connection conn = DriverManager.getConnection(url);
|
||||||
|
Statement insertnewuser = conn.createStatement();
|
||||||
|
try {
|
||||||
|
String newuserdata = "UPDATE `players` SET pvpenabled = "+data.get("pvpenabled")+" WHERE `player_uuid` = '"+p.getUniqueId().toString()+"';";
|
||||||
|
insertnewuser.execute(newuserdata);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
TogglePvP.getPlugin().getLogger().severe("Error while saving player data!");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
} catch (SQLException throwables) {
|
||||||
|
throwables.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package eu.endermite.togglepvp.util;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
|
||||||
|
public class PluginMessages {
|
||||||
|
|
||||||
|
public static String parseMessage(String message) {
|
||||||
|
//TODO PAPI support
|
||||||
|
return ChatColor.translateAlternateColorCodes('&', message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendActionBar(Player player, String message) {
|
||||||
|
BaseComponent[] component = TextComponent.fromLegacyText(parseMessage(message));
|
||||||
|
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, component);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
settings:
|
||||||
|
# Decides if pvp should be enabled or disabled by default
|
||||||
|
pvp_enabled_by_default: false
|
||||||
|
|
||||||
|
# Prevents dumping lava and lighting blocks on fire near players with pvp off
|
||||||
|
lava_and_fire_stopper:
|
||||||
|
enabled: true
|
||||||
|
radius: 2.5
|
||||||
|
|
||||||
|
messages:
|
||||||
|
pvp_enabled: "&cYou enabled PvP!"
|
||||||
|
pvp_disabled: "&cYou disabled PvP!"
|
||||||
|
cannot_attack_victim: "&cYou can't attack players that have PvP turned off!"
|
||||||
|
cannot_attack_attacker: "&cYou can't attack players while you have PvP turned off!"
|
||||||
|
no_permission: "&cYou don't have permission to use that."
|
||||||
|
no_such_command: "&cNo such command."
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
name: TogglePvP
|
||||||
|
version: ${project.version}
|
||||||
|
main: eu.endermite.togglepvp.TogglePvP
|
||||||
|
authors: [YouHaveTrouble]
|
||||||
|
api-version: 1.13
|
||||||
|
description: PvP toggle plugin
|
||||||
|
commands:
|
||||||
|
pvp:
|
||||||
|
usage: /pvp [args]
|
||||||
|
permissions:
|
||||||
|
togglepvp.command.toggle:
|
||||||
|
default: true
|
||||||
|
description: Allows usage of /pvp toggle/enable/disable command
|
||||||
Reference in New Issue
Block a user