VulnerabilityPatcher/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Death_Potions.java
2019-01-20 01:33:46 +01:00

116 lines
4.3 KiB
Java

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<PotionEffect> 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<PotionEffect> 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;
}
}