mirror of
https://github.com/YouHaveTrouble/PreventStabby.git
synced 2026-05-11 21:06:55 +00:00
added a couple of damage blockers and placing wither roses under players with pvp off
This commit is contained in:
@@ -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!");
|
||||||
|
|||||||
+26
-33
@@ -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);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+52
@@ -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) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
-2
@@ -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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -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 {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+54
@@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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!"
|
||||||
|
|||||||
Reference in New Issue
Block a user