package me.cooljwb.vulnerabilitypatcher.patches; import java.util.Collection; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import me.cooljwb.vulnerabilitypatcher.SMG; import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.LingeringPotionSplashEvent; import org.bukkit.event.entity.PotionSplashEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionEffect; /* * Copyright 2019 CoolJWB * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @author CoolJWB */ public class Death_Potions extends Patches implements Listener { private Logger log = Logger.getLogger("Minecraft"); public Death_Potions() {} @EventHandler(priority = EventPriority.HIGHEST) public void consumePotionEvent(PlayerItemConsumeEvent event) { if(event.getItem().getType().name().equalsIgnoreCase("POTION")) { PotionMeta meta = (PotionMeta) event.getItem().getItemMeta(); if(isDeathPotion(meta.getCustomEffects())) { event.setCancelled(true); Player player = event.getPlayer(); msg(player, SMG.ITEM.msg); notifyViolation(event.getPlayer(), "drink", "death potion", event.getPlayer().getLocation()); } } if(devmode) log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event))); } @EventHandler(priority = EventPriority.HIGHEST) public void splashEvent(PotionSplashEvent event) { if(isDeathPotion(event.getPotion().getEffects())) { event.setCancelled(true); Player player = null; if(event.getPotion().getShooter() instanceof CraftPlayer) { player = (Player) event.getEntity().getShooter(); msg(player, SMG.ITEM.msg); } notifyViolation(player, "splash", "death potion", player.getLocation()); } if(devmode) log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event))); } @EventHandler(priority = EventPriority.HIGHEST) public void lingeringSplashEvent(LingeringPotionSplashEvent event) { if(isDeathPotion(event.getAreaEffectCloud().getCustomEffects())) { event.setCancelled(true); Player player = null; if(event.getEntity().getShooter() instanceof CraftPlayer) { player = (Player) event.getEntity().getShooter(); msg(player, SMG.ITEM.msg); } notifyViolation(player, "splash", "death potion", player.getLocation()); } if(devmode) log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event))); } public static boolean isDeathPotion(List effects) { for(PotionEffect effect : effects) { if(effect.getType().getName().equalsIgnoreCase("HEAL") && (effect.getAmplifier() == 125 || effect.getAmplifier() == 93 || effect.getAmplifier() == 61 || effect.getAmplifier() == 29)) return true; } return false; } public static boolean isDeathPotion(Collection effects) { for(PotionEffect effect : effects) { if(effect.getType().getName().equalsIgnoreCase("HEAL") && (effect.getAmplifier() >= 125 || effect.getAmplifier() == 93 || effect.getAmplifier() == 61 || effect.getAmplifier() == 29)) return true; } return false; } }