Start
Plugin + Workspace uploded
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
package benkralex.pvptoggle;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.Instant;
|
||||
|
||||
public class Config {
|
||||
public static void createConfig() {
|
||||
FileConfiguration config = Pvptoggle.pvptoggle.getConfig();
|
||||
config.options().copyDefaults();
|
||||
config.addDefault("pvp-time-hit-back", 60);
|
||||
Pvptoggle.pvptoggle.saveConfig();
|
||||
}
|
||||
|
||||
public static int getpvptime() {
|
||||
FileConfiguration config = Pvptoggle.pvptoggle.getConfig();
|
||||
return config.getInt("pvp-time-hit-back");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package benkralex.pvptoggle;
|
||||
|
||||
import dev.jorel.commandapi.CommandAPI;
|
||||
import dev.jorel.commandapi.CommandAPICommand;
|
||||
import dev.jorel.commandapi.executors.CommandArguments;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.persistence.PersistentDataContainer;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
|
||||
public class PvpCommand {
|
||||
public static void createPvpCommand() {
|
||||
//Create PVP-Command with Command-API
|
||||
new CommandAPICommand("pvp").
|
||||
withSubcommand(new CommandAPICommand("toggle").
|
||||
executesPlayer((sender, args)->{
|
||||
pvpToggle(sender, args);
|
||||
}).
|
||||
withPermission("pvp.toggle").
|
||||
withUsage("/pvp toggle").
|
||||
withHelp("PvP damage für sich an/auschalten.", "Du kannst damit an/ausschalten, ob du geschlagen werden kannst.")).
|
||||
register();
|
||||
}
|
||||
|
||||
public static void pvpToggle(Player sender, CommandArguments args) {
|
||||
PersistentDataContainer pdc = sender.getPersistentDataContainer();
|
||||
if (pdc.has(new NamespacedKey(Pvptoggle.pvptoggle, "pvptoggle"), PersistentDataType.BOOLEAN)) {
|
||||
pdc.set(new NamespacedKey(Pvptoggle.pvptoggle, "pvptoggle"), PersistentDataType.BOOLEAN,
|
||||
!pdc.get(new NamespacedKey(Pvptoggle.pvptoggle, "pvptoggle"), PersistentDataType.BOOLEAN));
|
||||
sender.sendMessage("Dein PvP-Schutz ist jetzt " + (pdc.get(new NamespacedKey(Pvptoggle.pvptoggle, "pvptoggle"), PersistentDataType.BOOLEAN)?"an":"aus"));
|
||||
} else {
|
||||
pdc.set(new NamespacedKey(Pvptoggle.pvptoggle, "pvptoggle"), PersistentDataType.BOOLEAN, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
package benkralex.pvptoggle;
|
||||
|
||||
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.persistence.PersistentDataAdapterContext;
|
||||
import org.bukkit.persistence.PersistentDataContainer;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
import sun.reflect.generics.tree.ArrayTypeSignature;
|
||||
|
||||
import java.sql.Array;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class PvpEvent implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public static void pvpListener(EntityDamageByEntityEvent event) {
|
||||
Entity damager = event.getDamager();
|
||||
Entity victim = event.getEntity();
|
||||
|
||||
if (damager instanceof Player && victim instanceof Player) {
|
||||
List<PersistentDataContainer> pvpvictimsList;
|
||||
List<PersistentDataContainer> pvpvictimsListdamager;
|
||||
PersistentDataContainer pdc = victim.getPersistentDataContainer();
|
||||
PersistentDataContainer pdcdamager = damager.getPersistentDataContainer();
|
||||
PersistentDataContainer[] pvpvictims = pdc.get(new NamespacedKey(Pvptoggle.pvptoggle, "pvpvictims"), PersistentDataType.TAG_CONTAINER_ARRAY);
|
||||
PersistentDataContainer[] pvpvictimsdamager = pdcdamager.get(new NamespacedKey(Pvptoggle.pvptoggle, "pvpvictims"), PersistentDataType.TAG_CONTAINER_ARRAY);
|
||||
boolean canpvp = false;
|
||||
String victimuuid = victim.getUniqueId().toString();
|
||||
|
||||
if (pvpvictims != null) {
|
||||
pvpvictimsList = new ArrayList<PersistentDataContainer>(Arrays.asList(pvpvictims));
|
||||
} else {
|
||||
pvpvictimsList = new ArrayList<PersistentDataContainer>();
|
||||
}
|
||||
|
||||
if (pvpvictimsdamager != null) {
|
||||
pvpvictimsListdamager = new ArrayList<PersistentDataContainer>(Arrays.asList(pvpvictimsdamager));
|
||||
} else {
|
||||
pvpvictimsListdamager = new ArrayList<PersistentDataContainer>();
|
||||
}
|
||||
|
||||
for (int i = 0; i<pvpvictimsListdamager.size(); i++) {
|
||||
PersistentDataContainer pdcfor = pvpvictimsListdamager.get(i);
|
||||
if (pdcfor.get(new NamespacedKey(Pvptoggle.pvptoggle, "time"), PersistentDataType.LONG) >= Instant.now().getEpochSecond() - Config.getpvptime()) {
|
||||
if (pdcfor.get(new NamespacedKey(Pvptoggle.pvptoggle, "uuid"), PersistentDataType.STRING).equals(victimuuid)) {
|
||||
canpvp = true;
|
||||
}
|
||||
} else {
|
||||
pvpvictimsListdamager.remove(i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
if (pdc.has(new NamespacedKey(Pvptoggle.pvptoggle, "pvptoggle"), PersistentDataType.BOOLEAN) &&
|
||||
pdc.get(new NamespacedKey(Pvptoggle.pvptoggle, "pvptoggle"), PersistentDataType.BOOLEAN) &&
|
||||
!canpvp) {
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
} else {
|
||||
PersistentDataContainer pdcupdated = pdc.getAdapterContext().newPersistentDataContainer();
|
||||
String uuid = damager.getUniqueId().toString();
|
||||
pdcupdated.set(new NamespacedKey(Pvptoggle.pvptoggle, "uuid"), PersistentDataType.STRING, uuid);
|
||||
pdcupdated.set(new NamespacedKey(Pvptoggle.pvptoggle, "time"), PersistentDataType.LONG, Instant.now().getEpochSecond());
|
||||
pvpvictimsList.add(pdcupdated);
|
||||
pvpvictims = pvpvictimsList.toArray(new PersistentDataContainer[pvpvictimsList.size()]);
|
||||
pdc.set(new NamespacedKey(Pvptoggle.pvptoggle, "pvpvictims"), PersistentDataType.TAG_CONTAINER_ARRAY, pvpvictims);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//pdc.getAdapterContext().newPersistentDataContainer()
|
||||
@@ -0,0 +1,26 @@
|
||||
package benkralex.pvptoggle;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
public final class Pvptoggle extends JavaPlugin {
|
||||
|
||||
public static Pvptoggle pvptoggle;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
// Plugin enable logic
|
||||
pvptoggle = this;
|
||||
Bukkit.getPluginManager().registerEvents(new PvpEvent(), this);
|
||||
PvpCommand.createPvpCommand();
|
||||
Config.createConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
// Plugin shutdown logic
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user