added a couple of damage blockers and placing wither roses under players with pvp off

This commit is contained in:
YouHaveTrouble
2020-08-20 14:12:08 +02:00
parent c74135ed11
commit 638b40c083
9 changed files with 175 additions and 40 deletions
@@ -41,6 +41,8 @@ public final class TogglePvP extends JavaPlugin {
getServer().getPluginManager().registerEvents(new PlayerHitByFireworkListener(), this); getServer().getPluginManager().registerEvents(new PlayerHitByFireworkListener(), this);
getServer().getPluginManager().registerEvents(new FishingListener(), this); getServer().getPluginManager().registerEvents(new FishingListener(), this);
getServer().getPluginManager().registerEvents(new LavaDumpAndIgniteListener(), this); getServer().getPluginManager().registerEvents(new LavaDumpAndIgniteListener(), this);
getServer().getPluginManager().registerEvents(new PlayerPlaceWitherRoseListener(), this);
getServer().getPluginManager().registerEvents(new PlayerHitByExplosionListener(), this);
getServer().getPluginManager().registerEvents(new WolfTargettingListener(), this); getServer().getPluginManager().registerEvents(new WolfTargettingListener(), this);
getServer().getPluginManager().registerEvents(new WolfAttackPlayerListener(), this); getServer().getPluginManager().registerEvents(new WolfAttackPlayerListener(), this);
@@ -6,7 +6,8 @@ import org.bukkit.configuration.Configuration;
public class ConfigCache { public class ConfigCache {
@Getter private final boolean pvp_enabled_by_default, lava_and_fire_stopper_enabled; @Getter private final boolean pvp_enabled_by_default;
@Getter private final boolean lava_and_fire_stopper_enabled;
@Getter private final String pvp_enabled; @Getter private final String pvp_enabled;
@Getter private final String pvp_disabled; @Getter private final String pvp_disabled;
@Getter private final String cannot_attack_victim; @Getter private final String cannot_attack_victim;
@@ -16,6 +17,7 @@ public class ConfigCache {
@Getter private final String pvp_enabled_other; @Getter private final String pvp_enabled_other;
@Getter private final String pvp_disabled_other; @Getter private final String pvp_disabled_other;
@Getter private final double lava_and_fire_stopper_radius; @Getter private final double lava_and_fire_stopper_radius;
@Getter private final boolean channeling_enchant_disabled;
public ConfigCache() { public ConfigCache() {
@@ -27,6 +29,8 @@ public class ConfigCache {
this.lava_and_fire_stopper_enabled = config.getBoolean("settings.lava_and_fire_stopper.enabled", true); 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); this.lava_and_fire_stopper_radius = config.getDouble("settings.lava_and_fire_stopper.radius", 2.5);
this.channeling_enchant_disabled = config.getBoolean("channeling_enchant_disabled", true);
// Messages // Messages
this.pvp_enabled = config.getString("messages.pvp_enabled", "&cYou enabled PvP!"); this.pvp_enabled = config.getString("messages.pvp_enabled", "&cYou enabled PvP!");
this.pvp_disabled = config.getString("messages.pvp_disabled", "&cYou disabled PvP!"); this.pvp_disabled = config.getString("messages.pvp_disabled", "&cYou disabled PvP!");
@@ -2,8 +2,10 @@ package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvP; import eu.endermite.togglepvp.TogglePvP;
import eu.endermite.togglepvp.config.ConfigCache; import eu.endermite.togglepvp.config.ConfigCache;
import eu.endermite.togglepvp.util.BoundingBoxUtil;
import eu.endermite.togglepvp.util.PluginMessages; import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@@ -21,30 +23,33 @@ public class LavaDumpAndIgniteListener implements Listener {
if (!TogglePvP.getPlugin().getConfigCache().isLava_and_fire_stopper_enabled()) if (!TogglePvP.getPlugin().getConfigCache().isLava_and_fire_stopper_enabled())
return; return;
Location location = event.getBlockClicked().getLocation(); if (event.getBucket().equals(Material.LAVA_BUCKET) || event.getBucket().equals(Material.PUFFERFISH_BUCKET)) {
Player damager = event.getPlayer(); Location location = event.getBlockClicked().getLocation();
double radius = config.getLava_and_fire_stopper_radius(); Player damager = event.getPlayer();
BoundingBox boundingBox = getBoundingBox(location, radius); double radius = config.getLava_and_fire_stopper_radius();
BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius);
for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) { for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) {
if (entity instanceof Player) { if (entity instanceof Player) {
Player victim = (Player) entity; Player victim = (Player) entity;
if (victim != damager) { if (victim != damager) {
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
if (!damagerPvpEnabled) { if (!damagerPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
event.setCancelled(true); event.setCancelled(true);
return; return;
}
} }
} }
} }
} }
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onIgnite(org.bukkit.event.block.BlockIgniteEvent event) { public void onIgnite(org.bukkit.event.block.BlockIgniteEvent event) {
@@ -56,7 +61,7 @@ public class LavaDumpAndIgniteListener implements Listener {
Location location = event.getBlock().getLocation(); Location location = event.getBlock().getLocation();
Player damager = event.getPlayer(); Player damager = event.getPlayer();
double radius = config.getLava_and_fire_stopper_radius(); double radius = config.getLava_and_fire_stopper_radius();
BoundingBox boundingBox = getBoundingBox(location, radius); BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius);
for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) { for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) {
if (entity instanceof Player) { if (entity instanceof Player) {
Player victim = (Player) entity; Player victim = (Player) entity;
@@ -82,18 +87,6 @@ public class LavaDumpAndIgniteListener implements Listener {
} }
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);
}
} }
@@ -0,0 +1,52 @@
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.Bukkit;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.metadata.FixedMetadataValue;
import java.util.UUID;
public class PlayerHitByExplosionListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerHitEnderCrystal(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
if (event.getEntity() instanceof EnderCrystal && event.getDamager() instanceof Player) {
EnderCrystal enderCrystal = (EnderCrystal) event.getEntity();
enderCrystal.setMetadata("PLAYEREXPLODED", new FixedMetadataValue(TogglePvP.getPlugin(), event.getDamager().getUniqueId().toString()));
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerHitByExplosion(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
if (event.getEntity() instanceof Player) {
Player victim = (Player) event.getEntity();
try {
UUID playeruuid = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString());
Player damager = Bukkit.getPlayer(playeruuid);
if (victim != damager) {
ConfigCache config = TogglePvP.getPlugin().getConfigCache();
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;
}
}
} catch (NullPointerException ignored) {}
}
}
}
@@ -4,6 +4,7 @@ import eu.endermite.togglepvp.TogglePvP;
import org.bukkit.entity.LightningStrike; import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.weather.LightningStrikeEvent; import org.bukkit.event.weather.LightningStrikeEvent;
import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.FixedMetadataValue;
@@ -17,7 +18,7 @@ public class PlayerHitByLightningListener implements Listener {
/** /**
* Cancels damage from lightning strike caused by channeling for players with pvp off * Cancels damage from lightning strike caused by channeling for players with pvp off
*/ */
@EventHandler(ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerLightningDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) { public void onPlayerLightningDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof LightningStrike && event.getDamager().getMetadata("TRIDENT").size() >= 1 && event.getEntity() instanceof Player) { if (event.getDamager() instanceof LightningStrike && event.getDamager().getMetadata("TRIDENT").size() >= 1 && event.getEntity() instanceof Player) {
Player victim = (Player) event.getEntity(); Player victim = (Player) event.getEntity();
@@ -31,9 +32,15 @@ public class PlayerHitByLightningListener implements Listener {
/** /**
* Tags the lightning strike * Tags the lightning strike
*/ */
@EventHandler(ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onLightningStrike(LightningStrikeEvent event){ public void onLightningStrike(LightningStrikeEvent event){
if(event.getCause() == LightningStrikeEvent.Cause.TRIDENT){ if(event.getCause() == LightningStrikeEvent.Cause.TRIDENT){
if (TogglePvP.getPlugin().getConfigCache().isChanneling_enchant_disabled()) {
event.setCancelled(true);
return;
}
event.getLightning().setMetadata("TRIDENT", new FixedMetadataValue(TogglePvP.getPlugin(), event.getLightning().getLocation())); event.getLightning().setMetadata("TRIDENT", new FixedMetadataValue(TogglePvP.getPlugin(), event.getLightning().getLocation()));
} }
} }
@@ -4,7 +4,6 @@ import eu.endermite.togglepvp.TogglePvP;
import eu.endermite.togglepvp.config.ConfigCache; import eu.endermite.togglepvp.config.ConfigCache;
import eu.endermite.togglepvp.util.PluginMessages; import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@@ -12,8 +11,6 @@ import org.bukkit.event.Listener;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import java.util.Iterator;
public class PlayerHitBySplashPotionListener implements Listener { public class PlayerHitBySplashPotionListener implements Listener {
/** /**
@@ -0,0 +1,54 @@
package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvP;
import eu.endermite.togglepvp.config.ConfigCache;
import eu.endermite.togglepvp.util.BoundingBoxUtil;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.Location;
import org.bukkit.Material;
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 PlayerPlaceWitherRoseListener implements Listener {
private ConfigCache config = TogglePvP.getPlugin().getConfigCache();
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerWitherRosePlace(org.bukkit.event.block.BlockPlaceEvent event) {
if (!TogglePvP.getPlugin().getConfigCache().isLava_and_fire_stopper_enabled())
return;
if(event.getBlock().getType().equals(Material.WITHER_ROSE)) {
Location location = event.getBlockPlaced().getLocation();
double radius = config.getLava_and_fire_stopper_radius();
BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius);
for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) {
if (entity instanceof Player) {
Player damager = event.getPlayer();
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;
}
}
}
}
}
}
}
@@ -0,0 +1,22 @@
package eu.endermite.togglepvp.util;
import org.bukkit.Location;
import org.bukkit.util.BoundingBox;
public class BoundingBoxUtil {
public static 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);
}
}
+5 -1
View File
@@ -2,11 +2,15 @@ settings:
# Decides if pvp should be enabled or disabled by default # Decides if pvp should be enabled or disabled by default
pvp_enabled_by_default: false pvp_enabled_by_default: false
# Prevents dumping lava and lighting blocks on fire near players with pvp off # Prevents dumping lava and pufferfish bucket, placing wither roses and lighting blocks on fire near players with pvp off
lava_and_fire_stopper: lava_and_fire_stopper:
enabled: true enabled: true
radius: 2.5 radius: 2.5
# Disables channeling (trident enchant) lightning strike
# You may want to keep it disabled because players with pvp off can use it to attack players with pvp on
channeling_enchant_disabled: false
messages: messages:
pvp_enabled: "&cYou enabled PvP!" pvp_enabled: "&cYou enabled PvP!"
pvp_disabled: "&cYou disabled PvP!" pvp_disabled: "&cYou disabled PvP!"