/* * This file is a part of the SteamWar software. * * Copyright (C) 2025 SteamWar.de-Serverteam * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package de.steamwar.fightsystem.utils; import de.steamwar.Reflection; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.function.Function; public class ReflectionWrapper8 implements ReflectionWrapper { private static final Class packetPlayOutExplosion = Reflection.getClass("net.minecraft.network.protocol.game.ClientboundExplodePacket"); private static final Reflection.Field explosionBlocks = Reflection.getField(packetPlayOutExplosion, List.class, 0); private static final Function explosionLocation = HullHider.posPacketToLocation(packetPlayOutExplosion, double.class, 1.0); @Override public Object explosionHider(Player player, Object packet, PacketHiderFunction packetHiderFunction) { if(explosionBlocks.get(packet).isEmpty()) return packetHiderFunction.hide(player, packet, explosionLocation.apply(packet)); return packet; } private static final Class itemStack = Reflection.getClass("net.minecraft.world.item.ItemStack"); private static final Reflection.Method asNMSCopy = Reflection.getTypedMethod(Reflection.getClass("org.bukkit.craftbukkit.inventory.CraftItemStack"), "asNMSCopy", itemStack, ItemStack.class); private static final Class nbtTagCompound = Reflection.getClass("net.minecraft.nbt.CompoundTag"); private static final Reflection.Method getTag = Reflection.getTypedMethod(itemStack, null, nbtTagCompound); private static final Reflection.Method getKeys = Reflection.getTypedMethod(nbtTagCompound, null, Set.class); @Override public boolean hasItems(ItemStack stack) { Set keys = new HashSet<>((Set) getKeys.invoke(getTag.invoke(asNMSCopy.invoke(null, stack)))); keys.remove("Enchantments"); keys.remove("Damage"); return !keys.isEmpty(); } }