mirror of
https://github.com/AtlasMediaGroup/TotalFreedomMod.git
synced 2025-06-12 13:53:54 +00:00
Security & improvement update (#19)
This commit is contained in:
@ -3,6 +3,7 @@ package me.totalfreedom.totalfreedommod.blocking;
|
||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Projectile;
|
||||
@ -22,7 +23,6 @@ import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
||||
import org.bukkit.event.entity.FireworkExplodeEvent;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
|
||||
public class EventBlocker extends FreedomService
|
||||
|
@ -3,11 +3,17 @@ package me.totalfreedom.totalfreedommod.blocking;
|
||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.LingeringPotion;
|
||||
import org.bukkit.entity.ThrownPotion;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.PotionSplashEvent;
|
||||
import org.bukkit.event.entity.LingeringPotionSplashEvent;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
import java.util.Collection;
|
||||
|
||||
public class PotionBlocker extends FreedomService
|
||||
{
|
||||
@ -32,31 +38,55 @@ public class PotionBlocker extends FreedomService
|
||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||
public void onThrowPotion(PotionSplashEvent event)
|
||||
{
|
||||
ProjectileSource source = event.getEntity().getShooter();
|
||||
|
||||
if (!(source instanceof Player))
|
||||
ThrownPotion potion = event.getEntity();
|
||||
ProjectileSource projectileSource = potion.getShooter();
|
||||
Player player = null;
|
||||
if (projectileSource instanceof Player)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
player = (Player)projectileSource;
|
||||
}
|
||||
|
||||
Player thrower = (Player) source;
|
||||
|
||||
if (plugin.al.isAdmin(thrower))
|
||||
if (isDeathPotion(potion.getEffects()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : thrower.getWorld().getPlayers())
|
||||
{
|
||||
if (thrower.getLocation().distanceSquared(player.getLocation()) < POTION_BLOCK_RADIUS_SQUARED)
|
||||
if (player != null)
|
||||
{
|
||||
thrower.sendMessage(ChatColor.RED + "You cannot use splash potions close to other players.");
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
player.sendMessage(ChatColor.RED + "You are not allowed to use death potions.");
|
||||
}
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||
public void onThrowLingeringPotion(LingeringPotionSplashEvent event)
|
||||
{
|
||||
LingeringPotion potion = event.getEntity();
|
||||
ProjectileSource projectileSource = potion.getShooter();
|
||||
Player player = null;
|
||||
if (projectileSource instanceof Player)
|
||||
{
|
||||
player = (Player)projectileSource;
|
||||
}
|
||||
|
||||
if (isDeathPotion(potion.getEffects()))
|
||||
{
|
||||
if (player != null)
|
||||
{
|
||||
player.sendMessage(ChatColor.RED + "You are not allowed to use death potions.");
|
||||
}
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isDeathPotion(Collection<PotionEffect> effects)
|
||||
{
|
||||
for (PotionEffect effect : effects)
|
||||
{
|
||||
if (effect.getType().equals(PotionEffectType.HEAL) && effect.getAmplifier() == 125)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user