package me.cooljwb.vulnerabilitypatcher.patches; import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.bukkit.block.Container; import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockDispenseEvent; import org.bukkit.inventory.ItemStack; import java.util.logging.Level; import java.util.logging.Logger; /* * 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 Crash_Egg extends Patches implements Listener { private Logger log = Logger.getLogger("Minecraft"); @EventHandler(priority = EventPriority.HIGHEST) public void onBlockDispenseEvent(BlockDispenseEvent event) { ItemStack item = event.getItem(); if(item != null) { if (isCrashEgg(item)) { event.setCancelled(true); Container container = (Container) event.getBlock().getState(); for(int c = 0; c < container.getInventory().getSize(); c++) { if(container.getInventory().getItem(c) != null) { if (container.getInventory().getItem(c).isSimilar(event.getItem())) container.getInventory().getItem(c).setItemMeta(null); } } notifyViolation(event.getBlock().getType().name(), "drop", "crash egg", event.getBlock().getLocation()); } } if(devmode) log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event))); } public boolean isCrashEgg(ItemStack item) { if(item != null) { net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item); if(nmsItemStack != null && nmsItemStack.getTag() != null) { if(nmsItemStack.getTag().getCompound("EntityTag").getString("id").equalsIgnoreCase("minecraft:lightning_bolt")) return true; } } return false; } }