// ================================================================== // This file is part of Player API. // // Player API is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // Player API 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 Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License and the GNU General Public License along with Player API. // If not, see <http://www.gnu.org/licenses/>. // ================================================================== package api.player.server; import java.io.*; import java.text.*; import java.util.*; import java.util.logging.*; import java.lang.reflect.*; public final class ServerPlayerAPI { private final static Class<?>[] Class = new Class[] { ServerPlayerAPI.class }; private final static Class<?>[] Classes = new Class[] { ServerPlayerAPI.class, String.class }; private static boolean isCreated; private static final Logger logger = Logger.getLogger("ServerPlayerAPI"); private static void log(String text) { System.out.println(text); logger.fine(text); } public static void register(String id, Class<?> baseClass) { register(id, baseClass, null); } public static void register(String id, Class<?> baseClass, ServerPlayerBaseSorting baseSorting) { try { register(baseClass, id, baseSorting); } catch(RuntimeException exception) { if(id != null) log("Server Player: failed to register id '" + id + "'"); else log("Server Player: failed to register ServerPlayerBase"); throw exception; } } private static void register(Class<?> baseClass, String id, ServerPlayerBaseSorting baseSorting) { if(!isCreated) { try { Method mandatory = net.minecraft.entity.player.EntityPlayerMP.class.getMethod("getServerPlayerBase", String.class); if (mandatory.getReturnType() != ServerPlayerBase.class) throw new NoSuchMethodException(ServerPlayerBase.class.getName() + " " + net.minecraft.entity.player.EntityPlayerMP.class.getName() + ".getServerPlayerBase(" + String.class.getName() + ")"); } catch(NoSuchMethodException exception) { String[] errorMessageParts = new String[] { "========================================", "The API \"Server Player\" version " + api.player.forge.PlayerAPIPlugin.Version + " of the mod \"Player API Core " + api.player.forge.PlayerAPIPlugin.Version + "\" can not be created!", "----------------------------------------", "Mandatory member method \"{0} getServerPlayerBase({3})\" not found in class \"{1}\".", "There are three scenarios this can happen:", "* Minecraft Forge is missing a Player API Core which Minecraft version matches its own.", " Download and install the latest Player API Core for the Minecraft version you were trying to run.", "* The code of the class \"{2}\" of Player API Core has been modified beyond recognition by another Minecraft Forge coremod.", " Try temporary deinstallation of other core mods to find the culprit and deinstall it permanently to fix this specific problem.", "* Player API Core has not been installed correctly.", " Deinstall Player API Core and install it again following the installation instructions in the readme file.", "========================================" }; String baseEntityPlayerMPClassName = ServerPlayerBase.class.getName(); String targetClassName = net.minecraft.entity.player.EntityPlayerMP.class.getName(); String targetClassFileName = targetClassName.replace(".", File.separator); String stringClassName = String.class.getName(); for(int i=0; i<errorMessageParts.length; i++) errorMessageParts[i] = MessageFormat.format(errorMessageParts[i], baseEntityPlayerMPClassName, targetClassName, targetClassFileName, stringClassName); for(String errorMessagePart : errorMessageParts) logger.severe(errorMessagePart); for(String errorMessagePart : errorMessageParts) System.err.println(errorMessagePart); String errorMessage = "\n\n"; for(String errorMessagePart : errorMessageParts) errorMessage += "\t" + errorMessagePart + "\n"; throw new RuntimeException(errorMessage, exception); } log("Server Player " + api.player.forge.PlayerAPIPlugin.Version + " Created"); isCreated = true; } if(id == null) throw new NullPointerException("Argument 'id' can not be null"); if(baseClass == null) throw new NullPointerException("Argument 'baseClass' can not be null"); Constructor<?> allreadyRegistered = allBaseConstructors.get(id); if(allreadyRegistered != null) throw new IllegalArgumentException("The class '" + baseClass.getName() + "' can not be registered with the id '" + id + "' because the class '" + allreadyRegistered.getDeclaringClass().getName() + "' has allready been registered with the same id"); Constructor<?> baseConstructor; try { baseConstructor = baseClass.getDeclaredConstructor(Classes); } catch (Throwable t) { try { baseConstructor = baseClass.getDeclaredConstructor(Class); } catch(Throwable s) { throw new IllegalArgumentException("Can not find necessary constructor with one argument of type '" + ServerPlayerAPI.class.getName() + "' and eventually a second argument of type 'String' in the class '" + baseClass.getName() + "'", t); } } allBaseConstructors.put(id, baseConstructor); if(baseSorting != null) { addSorting(id, allBaseBeforeLocalConstructingSuperiors, baseSorting.getBeforeLocalConstructingSuperiors()); addSorting(id, allBaseBeforeLocalConstructingInferiors, baseSorting.getBeforeLocalConstructingInferiors()); addSorting(id, allBaseAfterLocalConstructingSuperiors, baseSorting.getAfterLocalConstructingSuperiors()); addSorting(id, allBaseAfterLocalConstructingInferiors, baseSorting.getAfterLocalConstructingInferiors()); addDynamicSorting(id, allBaseBeforeDynamicSuperiors, baseSorting.getDynamicBeforeSuperiors()); addDynamicSorting(id, allBaseBeforeDynamicInferiors, baseSorting.getDynamicBeforeInferiors()); addDynamicSorting(id, allBaseOverrideDynamicSuperiors, baseSorting.getDynamicOverrideSuperiors()); addDynamicSorting(id, allBaseOverrideDynamicInferiors, baseSorting.getDynamicOverrideInferiors()); addDynamicSorting(id, allBaseAfterDynamicSuperiors, baseSorting.getDynamicAfterSuperiors()); addDynamicSorting(id, allBaseAfterDynamicInferiors, baseSorting.getDynamicAfterInferiors()); addSorting(id, allBaseBeforeAddExhaustionSuperiors, baseSorting.getBeforeAddExhaustionSuperiors()); addSorting(id, allBaseBeforeAddExhaustionInferiors, baseSorting.getBeforeAddExhaustionInferiors()); addSorting(id, allBaseOverrideAddExhaustionSuperiors, baseSorting.getOverrideAddExhaustionSuperiors()); addSorting(id, allBaseOverrideAddExhaustionInferiors, baseSorting.getOverrideAddExhaustionInferiors()); addSorting(id, allBaseAfterAddExhaustionSuperiors, baseSorting.getAfterAddExhaustionSuperiors()); addSorting(id, allBaseAfterAddExhaustionInferiors, baseSorting.getAfterAddExhaustionInferiors()); addSorting(id, allBaseBeforeAddExperienceSuperiors, baseSorting.getBeforeAddExperienceSuperiors()); addSorting(id, allBaseBeforeAddExperienceInferiors, baseSorting.getBeforeAddExperienceInferiors()); addSorting(id, allBaseOverrideAddExperienceSuperiors, baseSorting.getOverrideAddExperienceSuperiors()); addSorting(id, allBaseOverrideAddExperienceInferiors, baseSorting.getOverrideAddExperienceInferiors()); addSorting(id, allBaseAfterAddExperienceSuperiors, baseSorting.getAfterAddExperienceSuperiors()); addSorting(id, allBaseAfterAddExperienceInferiors, baseSorting.getAfterAddExperienceInferiors()); addSorting(id, allBaseBeforeAddExperienceLevelSuperiors, baseSorting.getBeforeAddExperienceLevelSuperiors()); addSorting(id, allBaseBeforeAddExperienceLevelInferiors, baseSorting.getBeforeAddExperienceLevelInferiors()); addSorting(id, allBaseOverrideAddExperienceLevelSuperiors, baseSorting.getOverrideAddExperienceLevelSuperiors()); addSorting(id, allBaseOverrideAddExperienceLevelInferiors, baseSorting.getOverrideAddExperienceLevelInferiors()); addSorting(id, allBaseAfterAddExperienceLevelSuperiors, baseSorting.getAfterAddExperienceLevelSuperiors()); addSorting(id, allBaseAfterAddExperienceLevelInferiors, baseSorting.getAfterAddExperienceLevelInferiors()); addSorting(id, allBaseBeforeAddMovementStatSuperiors, baseSorting.getBeforeAddMovementStatSuperiors()); addSorting(id, allBaseBeforeAddMovementStatInferiors, baseSorting.getBeforeAddMovementStatInferiors()); addSorting(id, allBaseOverrideAddMovementStatSuperiors, baseSorting.getOverrideAddMovementStatSuperiors()); addSorting(id, allBaseOverrideAddMovementStatInferiors, baseSorting.getOverrideAddMovementStatInferiors()); addSorting(id, allBaseAfterAddMovementStatSuperiors, baseSorting.getAfterAddMovementStatSuperiors()); addSorting(id, allBaseAfterAddMovementStatInferiors, baseSorting.getAfterAddMovementStatInferiors()); addSorting(id, allBaseBeforeAttackEntityFromSuperiors, baseSorting.getBeforeAttackEntityFromSuperiors()); addSorting(id, allBaseBeforeAttackEntityFromInferiors, baseSorting.getBeforeAttackEntityFromInferiors()); addSorting(id, allBaseOverrideAttackEntityFromSuperiors, baseSorting.getOverrideAttackEntityFromSuperiors()); addSorting(id, allBaseOverrideAttackEntityFromInferiors, baseSorting.getOverrideAttackEntityFromInferiors()); addSorting(id, allBaseAfterAttackEntityFromSuperiors, baseSorting.getAfterAttackEntityFromSuperiors()); addSorting(id, allBaseAfterAttackEntityFromInferiors, baseSorting.getAfterAttackEntityFromInferiors()); addSorting(id, allBaseBeforeAttackTargetEntityWithCurrentItemSuperiors, baseSorting.getBeforeAttackTargetEntityWithCurrentItemSuperiors()); addSorting(id, allBaseBeforeAttackTargetEntityWithCurrentItemInferiors, baseSorting.getBeforeAttackTargetEntityWithCurrentItemInferiors()); addSorting(id, allBaseOverrideAttackTargetEntityWithCurrentItemSuperiors, baseSorting.getOverrideAttackTargetEntityWithCurrentItemSuperiors()); addSorting(id, allBaseOverrideAttackTargetEntityWithCurrentItemInferiors, baseSorting.getOverrideAttackTargetEntityWithCurrentItemInferiors()); addSorting(id, allBaseAfterAttackTargetEntityWithCurrentItemSuperiors, baseSorting.getAfterAttackTargetEntityWithCurrentItemSuperiors()); addSorting(id, allBaseAfterAttackTargetEntityWithCurrentItemInferiors, baseSorting.getAfterAttackTargetEntityWithCurrentItemInferiors()); addSorting(id, allBaseBeforeCanBreatheUnderwaterSuperiors, baseSorting.getBeforeCanBreatheUnderwaterSuperiors()); addSorting(id, allBaseBeforeCanBreatheUnderwaterInferiors, baseSorting.getBeforeCanBreatheUnderwaterInferiors()); addSorting(id, allBaseOverrideCanBreatheUnderwaterSuperiors, baseSorting.getOverrideCanBreatheUnderwaterSuperiors()); addSorting(id, allBaseOverrideCanBreatheUnderwaterInferiors, baseSorting.getOverrideCanBreatheUnderwaterInferiors()); addSorting(id, allBaseAfterCanBreatheUnderwaterSuperiors, baseSorting.getAfterCanBreatheUnderwaterSuperiors()); addSorting(id, allBaseAfterCanBreatheUnderwaterInferiors, baseSorting.getAfterCanBreatheUnderwaterInferiors()); addSorting(id, allBaseBeforeCanHarvestBlockSuperiors, baseSorting.getBeforeCanHarvestBlockSuperiors()); addSorting(id, allBaseBeforeCanHarvestBlockInferiors, baseSorting.getBeforeCanHarvestBlockInferiors()); addSorting(id, allBaseOverrideCanHarvestBlockSuperiors, baseSorting.getOverrideCanHarvestBlockSuperiors()); addSorting(id, allBaseOverrideCanHarvestBlockInferiors, baseSorting.getOverrideCanHarvestBlockInferiors()); addSorting(id, allBaseAfterCanHarvestBlockSuperiors, baseSorting.getAfterCanHarvestBlockSuperiors()); addSorting(id, allBaseAfterCanHarvestBlockInferiors, baseSorting.getAfterCanHarvestBlockInferiors()); addSorting(id, allBaseBeforeCanPlayerEditSuperiors, baseSorting.getBeforeCanPlayerEditSuperiors()); addSorting(id, allBaseBeforeCanPlayerEditInferiors, baseSorting.getBeforeCanPlayerEditInferiors()); addSorting(id, allBaseOverrideCanPlayerEditSuperiors, baseSorting.getOverrideCanPlayerEditSuperiors()); addSorting(id, allBaseOverrideCanPlayerEditInferiors, baseSorting.getOverrideCanPlayerEditInferiors()); addSorting(id, allBaseAfterCanPlayerEditSuperiors, baseSorting.getAfterCanPlayerEditSuperiors()); addSorting(id, allBaseAfterCanPlayerEditInferiors, baseSorting.getAfterCanPlayerEditInferiors()); addSorting(id, allBaseBeforeCanTriggerWalkingSuperiors, baseSorting.getBeforeCanTriggerWalkingSuperiors()); addSorting(id, allBaseBeforeCanTriggerWalkingInferiors, baseSorting.getBeforeCanTriggerWalkingInferiors()); addSorting(id, allBaseOverrideCanTriggerWalkingSuperiors, baseSorting.getOverrideCanTriggerWalkingSuperiors()); addSorting(id, allBaseOverrideCanTriggerWalkingInferiors, baseSorting.getOverrideCanTriggerWalkingInferiors()); addSorting(id, allBaseAfterCanTriggerWalkingSuperiors, baseSorting.getAfterCanTriggerWalkingSuperiors()); addSorting(id, allBaseAfterCanTriggerWalkingInferiors, baseSorting.getAfterCanTriggerWalkingInferiors()); addSorting(id, allBaseBeforeClonePlayerSuperiors, baseSorting.getBeforeClonePlayerSuperiors()); addSorting(id, allBaseBeforeClonePlayerInferiors, baseSorting.getBeforeClonePlayerInferiors()); addSorting(id, allBaseOverrideClonePlayerSuperiors, baseSorting.getOverrideClonePlayerSuperiors()); addSorting(id, allBaseOverrideClonePlayerInferiors, baseSorting.getOverrideClonePlayerInferiors()); addSorting(id, allBaseAfterClonePlayerSuperiors, baseSorting.getAfterClonePlayerSuperiors()); addSorting(id, allBaseAfterClonePlayerInferiors, baseSorting.getAfterClonePlayerInferiors()); addSorting(id, allBaseBeforeDamageEntitySuperiors, baseSorting.getBeforeDamageEntitySuperiors()); addSorting(id, allBaseBeforeDamageEntityInferiors, baseSorting.getBeforeDamageEntityInferiors()); addSorting(id, allBaseOverrideDamageEntitySuperiors, baseSorting.getOverrideDamageEntitySuperiors()); addSorting(id, allBaseOverrideDamageEntityInferiors, baseSorting.getOverrideDamageEntityInferiors()); addSorting(id, allBaseAfterDamageEntitySuperiors, baseSorting.getAfterDamageEntitySuperiors()); addSorting(id, allBaseAfterDamageEntityInferiors, baseSorting.getAfterDamageEntityInferiors()); addSorting(id, allBaseBeforeDisplayGuiSuperiors, baseSorting.getBeforeDisplayGuiSuperiors()); addSorting(id, allBaseBeforeDisplayGuiInferiors, baseSorting.getBeforeDisplayGuiInferiors()); addSorting(id, allBaseOverrideDisplayGuiSuperiors, baseSorting.getOverrideDisplayGuiSuperiors()); addSorting(id, allBaseOverrideDisplayGuiInferiors, baseSorting.getOverrideDisplayGuiInferiors()); addSorting(id, allBaseAfterDisplayGuiSuperiors, baseSorting.getAfterDisplayGuiSuperiors()); addSorting(id, allBaseAfterDisplayGuiInferiors, baseSorting.getAfterDisplayGuiInferiors()); addSorting(id, allBaseBeforeDisplayGUIChestSuperiors, baseSorting.getBeforeDisplayGUIChestSuperiors()); addSorting(id, allBaseBeforeDisplayGUIChestInferiors, baseSorting.getBeforeDisplayGUIChestInferiors()); addSorting(id, allBaseOverrideDisplayGUIChestSuperiors, baseSorting.getOverrideDisplayGUIChestSuperiors()); addSorting(id, allBaseOverrideDisplayGUIChestInferiors, baseSorting.getOverrideDisplayGUIChestInferiors()); addSorting(id, allBaseAfterDisplayGUIChestSuperiors, baseSorting.getAfterDisplayGUIChestSuperiors()); addSorting(id, allBaseAfterDisplayGUIChestInferiors, baseSorting.getAfterDisplayGUIChestInferiors()); addSorting(id, allBaseBeforeDropOneItemSuperiors, baseSorting.getBeforeDropOneItemSuperiors()); addSorting(id, allBaseBeforeDropOneItemInferiors, baseSorting.getBeforeDropOneItemInferiors()); addSorting(id, allBaseOverrideDropOneItemSuperiors, baseSorting.getOverrideDropOneItemSuperiors()); addSorting(id, allBaseOverrideDropOneItemInferiors, baseSorting.getOverrideDropOneItemInferiors()); addSorting(id, allBaseAfterDropOneItemSuperiors, baseSorting.getAfterDropOneItemSuperiors()); addSorting(id, allBaseAfterDropOneItemInferiors, baseSorting.getAfterDropOneItemInferiors()); addSorting(id, allBaseBeforeDropPlayerItemWithRandomChoiceSuperiors, baseSorting.getBeforeDropPlayerItemWithRandomChoiceSuperiors()); addSorting(id, allBaseBeforeDropPlayerItemWithRandomChoiceInferiors, baseSorting.getBeforeDropPlayerItemWithRandomChoiceInferiors()); addSorting(id, allBaseOverrideDropPlayerItemWithRandomChoiceSuperiors, baseSorting.getOverrideDropPlayerItemWithRandomChoiceSuperiors()); addSorting(id, allBaseOverrideDropPlayerItemWithRandomChoiceInferiors, baseSorting.getOverrideDropPlayerItemWithRandomChoiceInferiors()); addSorting(id, allBaseAfterDropPlayerItemWithRandomChoiceSuperiors, baseSorting.getAfterDropPlayerItemWithRandomChoiceSuperiors()); addSorting(id, allBaseAfterDropPlayerItemWithRandomChoiceInferiors, baseSorting.getAfterDropPlayerItemWithRandomChoiceInferiors()); addSorting(id, allBaseBeforeFallSuperiors, baseSorting.getBeforeFallSuperiors()); addSorting(id, allBaseBeforeFallInferiors, baseSorting.getBeforeFallInferiors()); addSorting(id, allBaseOverrideFallSuperiors, baseSorting.getOverrideFallSuperiors()); addSorting(id, allBaseOverrideFallInferiors, baseSorting.getOverrideFallInferiors()); addSorting(id, allBaseAfterFallSuperiors, baseSorting.getAfterFallSuperiors()); addSorting(id, allBaseAfterFallInferiors, baseSorting.getAfterFallInferiors()); addSorting(id, allBaseBeforeGetAIMoveSpeedSuperiors, baseSorting.getBeforeGetAIMoveSpeedSuperiors()); addSorting(id, allBaseBeforeGetAIMoveSpeedInferiors, baseSorting.getBeforeGetAIMoveSpeedInferiors()); addSorting(id, allBaseOverrideGetAIMoveSpeedSuperiors, baseSorting.getOverrideGetAIMoveSpeedSuperiors()); addSorting(id, allBaseOverrideGetAIMoveSpeedInferiors, baseSorting.getOverrideGetAIMoveSpeedInferiors()); addSorting(id, allBaseAfterGetAIMoveSpeedSuperiors, baseSorting.getAfterGetAIMoveSpeedSuperiors()); addSorting(id, allBaseAfterGetAIMoveSpeedInferiors, baseSorting.getAfterGetAIMoveSpeedInferiors()); addSorting(id, allBaseBeforeGetBreakSpeedSuperiors, baseSorting.getBeforeGetBreakSpeedSuperiors()); addSorting(id, allBaseBeforeGetBreakSpeedInferiors, baseSorting.getBeforeGetBreakSpeedInferiors()); addSorting(id, allBaseOverrideGetBreakSpeedSuperiors, baseSorting.getOverrideGetBreakSpeedSuperiors()); addSorting(id, allBaseOverrideGetBreakSpeedInferiors, baseSorting.getOverrideGetBreakSpeedInferiors()); addSorting(id, allBaseAfterGetBreakSpeedSuperiors, baseSorting.getAfterGetBreakSpeedSuperiors()); addSorting(id, allBaseAfterGetBreakSpeedInferiors, baseSorting.getAfterGetBreakSpeedInferiors()); addSorting(id, allBaseBeforeGetDistanceSqSuperiors, baseSorting.getBeforeGetDistanceSqSuperiors()); addSorting(id, allBaseBeforeGetDistanceSqInferiors, baseSorting.getBeforeGetDistanceSqInferiors()); addSorting(id, allBaseOverrideGetDistanceSqSuperiors, baseSorting.getOverrideGetDistanceSqSuperiors()); addSorting(id, allBaseOverrideGetDistanceSqInferiors, baseSorting.getOverrideGetDistanceSqInferiors()); addSorting(id, allBaseAfterGetDistanceSqSuperiors, baseSorting.getAfterGetDistanceSqSuperiors()); addSorting(id, allBaseAfterGetDistanceSqInferiors, baseSorting.getAfterGetDistanceSqInferiors()); addSorting(id, allBaseBeforeGetBrightnessSuperiors, baseSorting.getBeforeGetBrightnessSuperiors()); addSorting(id, allBaseBeforeGetBrightnessInferiors, baseSorting.getBeforeGetBrightnessInferiors()); addSorting(id, allBaseOverrideGetBrightnessSuperiors, baseSorting.getOverrideGetBrightnessSuperiors()); addSorting(id, allBaseOverrideGetBrightnessInferiors, baseSorting.getOverrideGetBrightnessInferiors()); addSorting(id, allBaseAfterGetBrightnessSuperiors, baseSorting.getAfterGetBrightnessSuperiors()); addSorting(id, allBaseAfterGetBrightnessInferiors, baseSorting.getAfterGetBrightnessInferiors()); addSorting(id, allBaseBeforeGetEyeHeightSuperiors, baseSorting.getBeforeGetEyeHeightSuperiors()); addSorting(id, allBaseBeforeGetEyeHeightInferiors, baseSorting.getBeforeGetEyeHeightInferiors()); addSorting(id, allBaseOverrideGetEyeHeightSuperiors, baseSorting.getOverrideGetEyeHeightSuperiors()); addSorting(id, allBaseOverrideGetEyeHeightInferiors, baseSorting.getOverrideGetEyeHeightInferiors()); addSorting(id, allBaseAfterGetEyeHeightSuperiors, baseSorting.getAfterGetEyeHeightSuperiors()); addSorting(id, allBaseAfterGetEyeHeightInferiors, baseSorting.getAfterGetEyeHeightInferiors()); addSorting(id, allBaseBeforeHealSuperiors, baseSorting.getBeforeHealSuperiors()); addSorting(id, allBaseBeforeHealInferiors, baseSorting.getBeforeHealInferiors()); addSorting(id, allBaseOverrideHealSuperiors, baseSorting.getOverrideHealSuperiors()); addSorting(id, allBaseOverrideHealInferiors, baseSorting.getOverrideHealInferiors()); addSorting(id, allBaseAfterHealSuperiors, baseSorting.getAfterHealSuperiors()); addSorting(id, allBaseAfterHealInferiors, baseSorting.getAfterHealInferiors()); addSorting(id, allBaseBeforeIsEntityInsideOpaqueBlockSuperiors, baseSorting.getBeforeIsEntityInsideOpaqueBlockSuperiors()); addSorting(id, allBaseBeforeIsEntityInsideOpaqueBlockInferiors, baseSorting.getBeforeIsEntityInsideOpaqueBlockInferiors()); addSorting(id, allBaseOverrideIsEntityInsideOpaqueBlockSuperiors, baseSorting.getOverrideIsEntityInsideOpaqueBlockSuperiors()); addSorting(id, allBaseOverrideIsEntityInsideOpaqueBlockInferiors, baseSorting.getOverrideIsEntityInsideOpaqueBlockInferiors()); addSorting(id, allBaseAfterIsEntityInsideOpaqueBlockSuperiors, baseSorting.getAfterIsEntityInsideOpaqueBlockSuperiors()); addSorting(id, allBaseAfterIsEntityInsideOpaqueBlockInferiors, baseSorting.getAfterIsEntityInsideOpaqueBlockInferiors()); addSorting(id, allBaseBeforeIsInWaterSuperiors, baseSorting.getBeforeIsInWaterSuperiors()); addSorting(id, allBaseBeforeIsInWaterInferiors, baseSorting.getBeforeIsInWaterInferiors()); addSorting(id, allBaseOverrideIsInWaterSuperiors, baseSorting.getOverrideIsInWaterSuperiors()); addSorting(id, allBaseOverrideIsInWaterInferiors, baseSorting.getOverrideIsInWaterInferiors()); addSorting(id, allBaseAfterIsInWaterSuperiors, baseSorting.getAfterIsInWaterSuperiors()); addSorting(id, allBaseAfterIsInWaterInferiors, baseSorting.getAfterIsInWaterInferiors()); addSorting(id, allBaseBeforeIsInsideOfMaterialSuperiors, baseSorting.getBeforeIsInsideOfMaterialSuperiors()); addSorting(id, allBaseBeforeIsInsideOfMaterialInferiors, baseSorting.getBeforeIsInsideOfMaterialInferiors()); addSorting(id, allBaseOverrideIsInsideOfMaterialSuperiors, baseSorting.getOverrideIsInsideOfMaterialSuperiors()); addSorting(id, allBaseOverrideIsInsideOfMaterialInferiors, baseSorting.getOverrideIsInsideOfMaterialInferiors()); addSorting(id, allBaseAfterIsInsideOfMaterialSuperiors, baseSorting.getAfterIsInsideOfMaterialSuperiors()); addSorting(id, allBaseAfterIsInsideOfMaterialInferiors, baseSorting.getAfterIsInsideOfMaterialInferiors()); addSorting(id, allBaseBeforeIsOnLadderSuperiors, baseSorting.getBeforeIsOnLadderSuperiors()); addSorting(id, allBaseBeforeIsOnLadderInferiors, baseSorting.getBeforeIsOnLadderInferiors()); addSorting(id, allBaseOverrideIsOnLadderSuperiors, baseSorting.getOverrideIsOnLadderSuperiors()); addSorting(id, allBaseOverrideIsOnLadderInferiors, baseSorting.getOverrideIsOnLadderInferiors()); addSorting(id, allBaseAfterIsOnLadderSuperiors, baseSorting.getAfterIsOnLadderSuperiors()); addSorting(id, allBaseAfterIsOnLadderInferiors, baseSorting.getAfterIsOnLadderInferiors()); addSorting(id, allBaseBeforeIsPlayerSleepingSuperiors, baseSorting.getBeforeIsPlayerSleepingSuperiors()); addSorting(id, allBaseBeforeIsPlayerSleepingInferiors, baseSorting.getBeforeIsPlayerSleepingInferiors()); addSorting(id, allBaseOverrideIsPlayerSleepingSuperiors, baseSorting.getOverrideIsPlayerSleepingSuperiors()); addSorting(id, allBaseOverrideIsPlayerSleepingInferiors, baseSorting.getOverrideIsPlayerSleepingInferiors()); addSorting(id, allBaseAfterIsPlayerSleepingSuperiors, baseSorting.getAfterIsPlayerSleepingSuperiors()); addSorting(id, allBaseAfterIsPlayerSleepingInferiors, baseSorting.getAfterIsPlayerSleepingInferiors()); addSorting(id, allBaseBeforeIsSneakingSuperiors, baseSorting.getBeforeIsSneakingSuperiors()); addSorting(id, allBaseBeforeIsSneakingInferiors, baseSorting.getBeforeIsSneakingInferiors()); addSorting(id, allBaseOverrideIsSneakingSuperiors, baseSorting.getOverrideIsSneakingSuperiors()); addSorting(id, allBaseOverrideIsSneakingInferiors, baseSorting.getOverrideIsSneakingInferiors()); addSorting(id, allBaseAfterIsSneakingSuperiors, baseSorting.getAfterIsSneakingSuperiors()); addSorting(id, allBaseAfterIsSneakingInferiors, baseSorting.getAfterIsSneakingInferiors()); addSorting(id, allBaseBeforeJumpSuperiors, baseSorting.getBeforeJumpSuperiors()); addSorting(id, allBaseBeforeJumpInferiors, baseSorting.getBeforeJumpInferiors()); addSorting(id, allBaseOverrideJumpSuperiors, baseSorting.getOverrideJumpSuperiors()); addSorting(id, allBaseOverrideJumpInferiors, baseSorting.getOverrideJumpInferiors()); addSorting(id, allBaseAfterJumpSuperiors, baseSorting.getAfterJumpSuperiors()); addSorting(id, allBaseAfterJumpInferiors, baseSorting.getAfterJumpInferiors()); addSorting(id, allBaseBeforeKnockBackSuperiors, baseSorting.getBeforeKnockBackSuperiors()); addSorting(id, allBaseBeforeKnockBackInferiors, baseSorting.getBeforeKnockBackInferiors()); addSorting(id, allBaseOverrideKnockBackSuperiors, baseSorting.getOverrideKnockBackSuperiors()); addSorting(id, allBaseOverrideKnockBackInferiors, baseSorting.getOverrideKnockBackInferiors()); addSorting(id, allBaseAfterKnockBackSuperiors, baseSorting.getAfterKnockBackSuperiors()); addSorting(id, allBaseAfterKnockBackInferiors, baseSorting.getAfterKnockBackInferiors()); addSorting(id, allBaseBeforeMountEntitySuperiors, baseSorting.getBeforeMountEntitySuperiors()); addSorting(id, allBaseBeforeMountEntityInferiors, baseSorting.getBeforeMountEntityInferiors()); addSorting(id, allBaseOverrideMountEntitySuperiors, baseSorting.getOverrideMountEntitySuperiors()); addSorting(id, allBaseOverrideMountEntityInferiors, baseSorting.getOverrideMountEntityInferiors()); addSorting(id, allBaseAfterMountEntitySuperiors, baseSorting.getAfterMountEntitySuperiors()); addSorting(id, allBaseAfterMountEntityInferiors, baseSorting.getAfterMountEntityInferiors()); addSorting(id, allBaseBeforeMoveEntitySuperiors, baseSorting.getBeforeMoveEntitySuperiors()); addSorting(id, allBaseBeforeMoveEntityInferiors, baseSorting.getBeforeMoveEntityInferiors()); addSorting(id, allBaseOverrideMoveEntitySuperiors, baseSorting.getOverrideMoveEntitySuperiors()); addSorting(id, allBaseOverrideMoveEntityInferiors, baseSorting.getOverrideMoveEntityInferiors()); addSorting(id, allBaseAfterMoveEntitySuperiors, baseSorting.getAfterMoveEntitySuperiors()); addSorting(id, allBaseAfterMoveEntityInferiors, baseSorting.getAfterMoveEntityInferiors()); addSorting(id, allBaseBeforeMoveEntityWithHeadingSuperiors, baseSorting.getBeforeMoveEntityWithHeadingSuperiors()); addSorting(id, allBaseBeforeMoveEntityWithHeadingInferiors, baseSorting.getBeforeMoveEntityWithHeadingInferiors()); addSorting(id, allBaseOverrideMoveEntityWithHeadingSuperiors, baseSorting.getOverrideMoveEntityWithHeadingSuperiors()); addSorting(id, allBaseOverrideMoveEntityWithHeadingInferiors, baseSorting.getOverrideMoveEntityWithHeadingInferiors()); addSorting(id, allBaseAfterMoveEntityWithHeadingSuperiors, baseSorting.getAfterMoveEntityWithHeadingSuperiors()); addSorting(id, allBaseAfterMoveEntityWithHeadingInferiors, baseSorting.getAfterMoveEntityWithHeadingInferiors()); addSorting(id, allBaseBeforeMoveFlyingSuperiors, baseSorting.getBeforeMoveFlyingSuperiors()); addSorting(id, allBaseBeforeMoveFlyingInferiors, baseSorting.getBeforeMoveFlyingInferiors()); addSorting(id, allBaseOverrideMoveFlyingSuperiors, baseSorting.getOverrideMoveFlyingSuperiors()); addSorting(id, allBaseOverrideMoveFlyingInferiors, baseSorting.getOverrideMoveFlyingInferiors()); addSorting(id, allBaseAfterMoveFlyingSuperiors, baseSorting.getAfterMoveFlyingSuperiors()); addSorting(id, allBaseAfterMoveFlyingInferiors, baseSorting.getAfterMoveFlyingInferiors()); addSorting(id, allBaseBeforeOnDeathSuperiors, baseSorting.getBeforeOnDeathSuperiors()); addSorting(id, allBaseBeforeOnDeathInferiors, baseSorting.getBeforeOnDeathInferiors()); addSorting(id, allBaseOverrideOnDeathSuperiors, baseSorting.getOverrideOnDeathSuperiors()); addSorting(id, allBaseOverrideOnDeathInferiors, baseSorting.getOverrideOnDeathInferiors()); addSorting(id, allBaseAfterOnDeathSuperiors, baseSorting.getAfterOnDeathSuperiors()); addSorting(id, allBaseAfterOnDeathInferiors, baseSorting.getAfterOnDeathInferiors()); addSorting(id, allBaseBeforeOnLivingUpdateSuperiors, baseSorting.getBeforeOnLivingUpdateSuperiors()); addSorting(id, allBaseBeforeOnLivingUpdateInferiors, baseSorting.getBeforeOnLivingUpdateInferiors()); addSorting(id, allBaseOverrideOnLivingUpdateSuperiors, baseSorting.getOverrideOnLivingUpdateSuperiors()); addSorting(id, allBaseOverrideOnLivingUpdateInferiors, baseSorting.getOverrideOnLivingUpdateInferiors()); addSorting(id, allBaseAfterOnLivingUpdateSuperiors, baseSorting.getAfterOnLivingUpdateSuperiors()); addSorting(id, allBaseAfterOnLivingUpdateInferiors, baseSorting.getAfterOnLivingUpdateInferiors()); addSorting(id, allBaseBeforeOnKillEntitySuperiors, baseSorting.getBeforeOnKillEntitySuperiors()); addSorting(id, allBaseBeforeOnKillEntityInferiors, baseSorting.getBeforeOnKillEntityInferiors()); addSorting(id, allBaseOverrideOnKillEntitySuperiors, baseSorting.getOverrideOnKillEntitySuperiors()); addSorting(id, allBaseOverrideOnKillEntityInferiors, baseSorting.getOverrideOnKillEntityInferiors()); addSorting(id, allBaseAfterOnKillEntitySuperiors, baseSorting.getAfterOnKillEntitySuperiors()); addSorting(id, allBaseAfterOnKillEntityInferiors, baseSorting.getAfterOnKillEntityInferiors()); addSorting(id, allBaseBeforeOnStruckByLightningSuperiors, baseSorting.getBeforeOnStruckByLightningSuperiors()); addSorting(id, allBaseBeforeOnStruckByLightningInferiors, baseSorting.getBeforeOnStruckByLightningInferiors()); addSorting(id, allBaseOverrideOnStruckByLightningSuperiors, baseSorting.getOverrideOnStruckByLightningSuperiors()); addSorting(id, allBaseOverrideOnStruckByLightningInferiors, baseSorting.getOverrideOnStruckByLightningInferiors()); addSorting(id, allBaseAfterOnStruckByLightningSuperiors, baseSorting.getAfterOnStruckByLightningSuperiors()); addSorting(id, allBaseAfterOnStruckByLightningInferiors, baseSorting.getAfterOnStruckByLightningInferiors()); addSorting(id, allBaseBeforeOnUpdateSuperiors, baseSorting.getBeforeOnUpdateSuperiors()); addSorting(id, allBaseBeforeOnUpdateInferiors, baseSorting.getBeforeOnUpdateInferiors()); addSorting(id, allBaseOverrideOnUpdateSuperiors, baseSorting.getOverrideOnUpdateSuperiors()); addSorting(id, allBaseOverrideOnUpdateInferiors, baseSorting.getOverrideOnUpdateInferiors()); addSorting(id, allBaseAfterOnUpdateSuperiors, baseSorting.getAfterOnUpdateSuperiors()); addSorting(id, allBaseAfterOnUpdateInferiors, baseSorting.getAfterOnUpdateInferiors()); addSorting(id, allBaseBeforeOnUpdateEntitySuperiors, baseSorting.getBeforeOnUpdateEntitySuperiors()); addSorting(id, allBaseBeforeOnUpdateEntityInferiors, baseSorting.getBeforeOnUpdateEntityInferiors()); addSorting(id, allBaseOverrideOnUpdateEntitySuperiors, baseSorting.getOverrideOnUpdateEntitySuperiors()); addSorting(id, allBaseOverrideOnUpdateEntityInferiors, baseSorting.getOverrideOnUpdateEntityInferiors()); addSorting(id, allBaseAfterOnUpdateEntitySuperiors, baseSorting.getAfterOnUpdateEntitySuperiors()); addSorting(id, allBaseAfterOnUpdateEntityInferiors, baseSorting.getAfterOnUpdateEntityInferiors()); addSorting(id, allBaseBeforeReadEntityFromNBTSuperiors, baseSorting.getBeforeReadEntityFromNBTSuperiors()); addSorting(id, allBaseBeforeReadEntityFromNBTInferiors, baseSorting.getBeforeReadEntityFromNBTInferiors()); addSorting(id, allBaseOverrideReadEntityFromNBTSuperiors, baseSorting.getOverrideReadEntityFromNBTSuperiors()); addSorting(id, allBaseOverrideReadEntityFromNBTInferiors, baseSorting.getOverrideReadEntityFromNBTInferiors()); addSorting(id, allBaseAfterReadEntityFromNBTSuperiors, baseSorting.getAfterReadEntityFromNBTSuperiors()); addSorting(id, allBaseAfterReadEntityFromNBTInferiors, baseSorting.getAfterReadEntityFromNBTInferiors()); addSorting(id, allBaseBeforeSetDeadSuperiors, baseSorting.getBeforeSetDeadSuperiors()); addSorting(id, allBaseBeforeSetDeadInferiors, baseSorting.getBeforeSetDeadInferiors()); addSorting(id, allBaseOverrideSetDeadSuperiors, baseSorting.getOverrideSetDeadSuperiors()); addSorting(id, allBaseOverrideSetDeadInferiors, baseSorting.getOverrideSetDeadInferiors()); addSorting(id, allBaseAfterSetDeadSuperiors, baseSorting.getAfterSetDeadSuperiors()); addSorting(id, allBaseAfterSetDeadInferiors, baseSorting.getAfterSetDeadInferiors()); addSorting(id, allBaseBeforeSetEntityActionStateSuperiors, baseSorting.getBeforeSetEntityActionStateSuperiors()); addSorting(id, allBaseBeforeSetEntityActionStateInferiors, baseSorting.getBeforeSetEntityActionStateInferiors()); addSorting(id, allBaseOverrideSetEntityActionStateSuperiors, baseSorting.getOverrideSetEntityActionStateSuperiors()); addSorting(id, allBaseOverrideSetEntityActionStateInferiors, baseSorting.getOverrideSetEntityActionStateInferiors()); addSorting(id, allBaseAfterSetEntityActionStateSuperiors, baseSorting.getAfterSetEntityActionStateSuperiors()); addSorting(id, allBaseAfterSetEntityActionStateInferiors, baseSorting.getAfterSetEntityActionStateInferiors()); addSorting(id, allBaseBeforeSetPositionSuperiors, baseSorting.getBeforeSetPositionSuperiors()); addSorting(id, allBaseBeforeSetPositionInferiors, baseSorting.getBeforeSetPositionInferiors()); addSorting(id, allBaseOverrideSetPositionSuperiors, baseSorting.getOverrideSetPositionSuperiors()); addSorting(id, allBaseOverrideSetPositionInferiors, baseSorting.getOverrideSetPositionInferiors()); addSorting(id, allBaseAfterSetPositionSuperiors, baseSorting.getAfterSetPositionSuperiors()); addSorting(id, allBaseAfterSetPositionInferiors, baseSorting.getAfterSetPositionInferiors()); addSorting(id, allBaseBeforeSetSneakingSuperiors, baseSorting.getBeforeSetSneakingSuperiors()); addSorting(id, allBaseBeforeSetSneakingInferiors, baseSorting.getBeforeSetSneakingInferiors()); addSorting(id, allBaseOverrideSetSneakingSuperiors, baseSorting.getOverrideSetSneakingSuperiors()); addSorting(id, allBaseOverrideSetSneakingInferiors, baseSorting.getOverrideSetSneakingInferiors()); addSorting(id, allBaseAfterSetSneakingSuperiors, baseSorting.getAfterSetSneakingSuperiors()); addSorting(id, allBaseAfterSetSneakingInferiors, baseSorting.getAfterSetSneakingInferiors()); addSorting(id, allBaseBeforeSetSprintingSuperiors, baseSorting.getBeforeSetSprintingSuperiors()); addSorting(id, allBaseBeforeSetSprintingInferiors, baseSorting.getBeforeSetSprintingInferiors()); addSorting(id, allBaseOverrideSetSprintingSuperiors, baseSorting.getOverrideSetSprintingSuperiors()); addSorting(id, allBaseOverrideSetSprintingInferiors, baseSorting.getOverrideSetSprintingInferiors()); addSorting(id, allBaseAfterSetSprintingSuperiors, baseSorting.getAfterSetSprintingSuperiors()); addSorting(id, allBaseAfterSetSprintingInferiors, baseSorting.getAfterSetSprintingInferiors()); addSorting(id, allBaseBeforeSwingItemSuperiors, baseSorting.getBeforeSwingItemSuperiors()); addSorting(id, allBaseBeforeSwingItemInferiors, baseSorting.getBeforeSwingItemInferiors()); addSorting(id, allBaseOverrideSwingItemSuperiors, baseSorting.getOverrideSwingItemSuperiors()); addSorting(id, allBaseOverrideSwingItemInferiors, baseSorting.getOverrideSwingItemInferiors()); addSorting(id, allBaseAfterSwingItemSuperiors, baseSorting.getAfterSwingItemSuperiors()); addSorting(id, allBaseAfterSwingItemInferiors, baseSorting.getAfterSwingItemInferiors()); addSorting(id, allBaseBeforeUpdateEntityActionStateSuperiors, baseSorting.getBeforeUpdateEntityActionStateSuperiors()); addSorting(id, allBaseBeforeUpdateEntityActionStateInferiors, baseSorting.getBeforeUpdateEntityActionStateInferiors()); addSorting(id, allBaseOverrideUpdateEntityActionStateSuperiors, baseSorting.getOverrideUpdateEntityActionStateSuperiors()); addSorting(id, allBaseOverrideUpdateEntityActionStateInferiors, baseSorting.getOverrideUpdateEntityActionStateInferiors()); addSorting(id, allBaseAfterUpdateEntityActionStateSuperiors, baseSorting.getAfterUpdateEntityActionStateSuperiors()); addSorting(id, allBaseAfterUpdateEntityActionStateInferiors, baseSorting.getAfterUpdateEntityActionStateInferiors()); addSorting(id, allBaseBeforeUpdatePotionEffectsSuperiors, baseSorting.getBeforeUpdatePotionEffectsSuperiors()); addSorting(id, allBaseBeforeUpdatePotionEffectsInferiors, baseSorting.getBeforeUpdatePotionEffectsInferiors()); addSorting(id, allBaseOverrideUpdatePotionEffectsSuperiors, baseSorting.getOverrideUpdatePotionEffectsSuperiors()); addSorting(id, allBaseOverrideUpdatePotionEffectsInferiors, baseSorting.getOverrideUpdatePotionEffectsInferiors()); addSorting(id, allBaseAfterUpdatePotionEffectsSuperiors, baseSorting.getAfterUpdatePotionEffectsSuperiors()); addSorting(id, allBaseAfterUpdatePotionEffectsInferiors, baseSorting.getAfterUpdatePotionEffectsInferiors()); addSorting(id, allBaseBeforeUpdateRiddenSuperiors, baseSorting.getBeforeUpdateRiddenSuperiors()); addSorting(id, allBaseBeforeUpdateRiddenInferiors, baseSorting.getBeforeUpdateRiddenInferiors()); addSorting(id, allBaseOverrideUpdateRiddenSuperiors, baseSorting.getOverrideUpdateRiddenSuperiors()); addSorting(id, allBaseOverrideUpdateRiddenInferiors, baseSorting.getOverrideUpdateRiddenInferiors()); addSorting(id, allBaseAfterUpdateRiddenSuperiors, baseSorting.getAfterUpdateRiddenSuperiors()); addSorting(id, allBaseAfterUpdateRiddenInferiors, baseSorting.getAfterUpdateRiddenInferiors()); addSorting(id, allBaseBeforeWakeUpPlayerSuperiors, baseSorting.getBeforeWakeUpPlayerSuperiors()); addSorting(id, allBaseBeforeWakeUpPlayerInferiors, baseSorting.getBeforeWakeUpPlayerInferiors()); addSorting(id, allBaseOverrideWakeUpPlayerSuperiors, baseSorting.getOverrideWakeUpPlayerSuperiors()); addSorting(id, allBaseOverrideWakeUpPlayerInferiors, baseSorting.getOverrideWakeUpPlayerInferiors()); addSorting(id, allBaseAfterWakeUpPlayerSuperiors, baseSorting.getAfterWakeUpPlayerSuperiors()); addSorting(id, allBaseAfterWakeUpPlayerInferiors, baseSorting.getAfterWakeUpPlayerInferiors()); addSorting(id, allBaseBeforeWriteEntityToNBTSuperiors, baseSorting.getBeforeWriteEntityToNBTSuperiors()); addSorting(id, allBaseBeforeWriteEntityToNBTInferiors, baseSorting.getBeforeWriteEntityToNBTInferiors()); addSorting(id, allBaseOverrideWriteEntityToNBTSuperiors, baseSorting.getOverrideWriteEntityToNBTSuperiors()); addSorting(id, allBaseOverrideWriteEntityToNBTInferiors, baseSorting.getOverrideWriteEntityToNBTInferiors()); addSorting(id, allBaseAfterWriteEntityToNBTSuperiors, baseSorting.getAfterWriteEntityToNBTSuperiors()); addSorting(id, allBaseAfterWriteEntityToNBTInferiors, baseSorting.getAfterWriteEntityToNBTInferiors()); } addMethod(id, baseClass, beforeLocalConstructingHookTypes, "beforeLocalConstructing", net.minecraft.server.MinecraftServer.class, net.minecraft.world.WorldServer.class, com.mojang.authlib.GameProfile.class, net.minecraft.server.management.ItemInWorldManager.class); addMethod(id, baseClass, afterLocalConstructingHookTypes, "afterLocalConstructing", net.minecraft.server.MinecraftServer.class, net.minecraft.world.WorldServer.class, com.mojang.authlib.GameProfile.class, net.minecraft.server.management.ItemInWorldManager.class); addMethod(id, baseClass, beforeAddExhaustionHookTypes, "beforeAddExhaustion", float.class); addMethod(id, baseClass, overrideAddExhaustionHookTypes, "addExhaustion", float.class); addMethod(id, baseClass, afterAddExhaustionHookTypes, "afterAddExhaustion", float.class); addMethod(id, baseClass, beforeAddExperienceHookTypes, "beforeAddExperience", int.class); addMethod(id, baseClass, overrideAddExperienceHookTypes, "addExperience", int.class); addMethod(id, baseClass, afterAddExperienceHookTypes, "afterAddExperience", int.class); addMethod(id, baseClass, beforeAddExperienceLevelHookTypes, "beforeAddExperienceLevel", int.class); addMethod(id, baseClass, overrideAddExperienceLevelHookTypes, "addExperienceLevel", int.class); addMethod(id, baseClass, afterAddExperienceLevelHookTypes, "afterAddExperienceLevel", int.class); addMethod(id, baseClass, beforeAddMovementStatHookTypes, "beforeAddMovementStat", double.class, double.class, double.class); addMethod(id, baseClass, overrideAddMovementStatHookTypes, "addMovementStat", double.class, double.class, double.class); addMethod(id, baseClass, afterAddMovementStatHookTypes, "afterAddMovementStat", double.class, double.class, double.class); addMethod(id, baseClass, beforeAttackEntityFromHookTypes, "beforeAttackEntityFrom", net.minecraft.util.DamageSource.class, float.class); addMethod(id, baseClass, overrideAttackEntityFromHookTypes, "attackEntityFrom", net.minecraft.util.DamageSource.class, float.class); addMethod(id, baseClass, afterAttackEntityFromHookTypes, "afterAttackEntityFrom", net.minecraft.util.DamageSource.class, float.class); addMethod(id, baseClass, beforeAttackTargetEntityWithCurrentItemHookTypes, "beforeAttackTargetEntityWithCurrentItem", net.minecraft.entity.Entity.class); addMethod(id, baseClass, overrideAttackTargetEntityWithCurrentItemHookTypes, "attackTargetEntityWithCurrentItem", net.minecraft.entity.Entity.class); addMethod(id, baseClass, afterAttackTargetEntityWithCurrentItemHookTypes, "afterAttackTargetEntityWithCurrentItem", net.minecraft.entity.Entity.class); addMethod(id, baseClass, beforeCanBreatheUnderwaterHookTypes, "beforeCanBreatheUnderwater"); addMethod(id, baseClass, overrideCanBreatheUnderwaterHookTypes, "canBreatheUnderwater"); addMethod(id, baseClass, afterCanBreatheUnderwaterHookTypes, "afterCanBreatheUnderwater"); addMethod(id, baseClass, beforeCanHarvestBlockHookTypes, "beforeCanHarvestBlock", net.minecraft.block.Block.class); addMethod(id, baseClass, overrideCanHarvestBlockHookTypes, "canHarvestBlock", net.minecraft.block.Block.class); addMethod(id, baseClass, afterCanHarvestBlockHookTypes, "afterCanHarvestBlock", net.minecraft.block.Block.class); addMethod(id, baseClass, beforeCanPlayerEditHookTypes, "beforeCanPlayerEdit", net.minecraft.util.BlockPos.class, net.minecraft.util.EnumFacing.class, net.minecraft.item.ItemStack.class); addMethod(id, baseClass, overrideCanPlayerEditHookTypes, "canPlayerEdit", net.minecraft.util.BlockPos.class, net.minecraft.util.EnumFacing.class, net.minecraft.item.ItemStack.class); addMethod(id, baseClass, afterCanPlayerEditHookTypes, "afterCanPlayerEdit", net.minecraft.util.BlockPos.class, net.minecraft.util.EnumFacing.class, net.minecraft.item.ItemStack.class); addMethod(id, baseClass, beforeCanTriggerWalkingHookTypes, "beforeCanTriggerWalking"); addMethod(id, baseClass, overrideCanTriggerWalkingHookTypes, "canTriggerWalking"); addMethod(id, baseClass, afterCanTriggerWalkingHookTypes, "afterCanTriggerWalking"); addMethod(id, baseClass, beforeClonePlayerHookTypes, "beforeClonePlayer", net.minecraft.entity.player.EntityPlayer.class, boolean.class); addMethod(id, baseClass, overrideClonePlayerHookTypes, "clonePlayer", net.minecraft.entity.player.EntityPlayer.class, boolean.class); addMethod(id, baseClass, afterClonePlayerHookTypes, "afterClonePlayer", net.minecraft.entity.player.EntityPlayer.class, boolean.class); addMethod(id, baseClass, beforeDamageEntityHookTypes, "beforeDamageEntity", net.minecraft.util.DamageSource.class, float.class); addMethod(id, baseClass, overrideDamageEntityHookTypes, "damageEntity", net.minecraft.util.DamageSource.class, float.class); addMethod(id, baseClass, afterDamageEntityHookTypes, "afterDamageEntity", net.minecraft.util.DamageSource.class, float.class); addMethod(id, baseClass, beforeDisplayGuiHookTypes, "beforeDisplayGui", net.minecraft.world.IInteractionObject.class); addMethod(id, baseClass, overrideDisplayGuiHookTypes, "displayGui", net.minecraft.world.IInteractionObject.class); addMethod(id, baseClass, afterDisplayGuiHookTypes, "afterDisplayGui", net.minecraft.world.IInteractionObject.class); addMethod(id, baseClass, beforeDisplayGUIChestHookTypes, "beforeDisplayGUIChest", net.minecraft.inventory.IInventory.class); addMethod(id, baseClass, overrideDisplayGUIChestHookTypes, "displayGUIChest", net.minecraft.inventory.IInventory.class); addMethod(id, baseClass, afterDisplayGUIChestHookTypes, "afterDisplayGUIChest", net.minecraft.inventory.IInventory.class); addMethod(id, baseClass, beforeDropOneItemHookTypes, "beforeDropOneItem", boolean.class); addMethod(id, baseClass, overrideDropOneItemHookTypes, "dropOneItem", boolean.class); addMethod(id, baseClass, afterDropOneItemHookTypes, "afterDropOneItem", boolean.class); addMethod(id, baseClass, beforeDropPlayerItemWithRandomChoiceHookTypes, "beforeDropPlayerItemWithRandomChoice", net.minecraft.item.ItemStack.class, boolean.class); addMethod(id, baseClass, overrideDropPlayerItemWithRandomChoiceHookTypes, "dropPlayerItemWithRandomChoice", net.minecraft.item.ItemStack.class, boolean.class); addMethod(id, baseClass, afterDropPlayerItemWithRandomChoiceHookTypes, "afterDropPlayerItemWithRandomChoice", net.minecraft.item.ItemStack.class, boolean.class); addMethod(id, baseClass, beforeFallHookTypes, "beforeFall", float.class, float.class); addMethod(id, baseClass, overrideFallHookTypes, "fall", float.class, float.class); addMethod(id, baseClass, afterFallHookTypes, "afterFall", float.class, float.class); addMethod(id, baseClass, beforeGetAIMoveSpeedHookTypes, "beforeGetAIMoveSpeed"); addMethod(id, baseClass, overrideGetAIMoveSpeedHookTypes, "getAIMoveSpeed"); addMethod(id, baseClass, afterGetAIMoveSpeedHookTypes, "afterGetAIMoveSpeed"); addMethod(id, baseClass, beforeGetBreakSpeedHookTypes, "beforeGetBreakSpeed", net.minecraft.block.state.IBlockState.class, net.minecraft.util.BlockPos.class); addMethod(id, baseClass, overrideGetBreakSpeedHookTypes, "getBreakSpeed", net.minecraft.block.state.IBlockState.class, net.minecraft.util.BlockPos.class); addMethod(id, baseClass, afterGetBreakSpeedHookTypes, "afterGetBreakSpeed", net.minecraft.block.state.IBlockState.class, net.minecraft.util.BlockPos.class); addMethod(id, baseClass, beforeGetDistanceSqHookTypes, "beforeGetDistanceSq", double.class, double.class, double.class); addMethod(id, baseClass, overrideGetDistanceSqHookTypes, "getDistanceSq", double.class, double.class, double.class); addMethod(id, baseClass, afterGetDistanceSqHookTypes, "afterGetDistanceSq", double.class, double.class, double.class); addMethod(id, baseClass, beforeGetBrightnessHookTypes, "beforeGetBrightness", float.class); addMethod(id, baseClass, overrideGetBrightnessHookTypes, "getBrightness", float.class); addMethod(id, baseClass, afterGetBrightnessHookTypes, "afterGetBrightness", float.class); addMethod(id, baseClass, beforeGetEyeHeightHookTypes, "beforeGetEyeHeight"); addMethod(id, baseClass, overrideGetEyeHeightHookTypes, "getEyeHeight"); addMethod(id, baseClass, afterGetEyeHeightHookTypes, "afterGetEyeHeight"); addMethod(id, baseClass, beforeHealHookTypes, "beforeHeal", float.class); addMethod(id, baseClass, overrideHealHookTypes, "heal", float.class); addMethod(id, baseClass, afterHealHookTypes, "afterHeal", float.class); addMethod(id, baseClass, beforeIsEntityInsideOpaqueBlockHookTypes, "beforeIsEntityInsideOpaqueBlock"); addMethod(id, baseClass, overrideIsEntityInsideOpaqueBlockHookTypes, "isEntityInsideOpaqueBlock"); addMethod(id, baseClass, afterIsEntityInsideOpaqueBlockHookTypes, "afterIsEntityInsideOpaqueBlock"); addMethod(id, baseClass, beforeIsInWaterHookTypes, "beforeIsInWater"); addMethod(id, baseClass, overrideIsInWaterHookTypes, "isInWater"); addMethod(id, baseClass, afterIsInWaterHookTypes, "afterIsInWater"); addMethod(id, baseClass, beforeIsInsideOfMaterialHookTypes, "beforeIsInsideOfMaterial", net.minecraft.block.material.Material.class); addMethod(id, baseClass, overrideIsInsideOfMaterialHookTypes, "isInsideOfMaterial", net.minecraft.block.material.Material.class); addMethod(id, baseClass, afterIsInsideOfMaterialHookTypes, "afterIsInsideOfMaterial", net.minecraft.block.material.Material.class); addMethod(id, baseClass, beforeIsOnLadderHookTypes, "beforeIsOnLadder"); addMethod(id, baseClass, overrideIsOnLadderHookTypes, "isOnLadder"); addMethod(id, baseClass, afterIsOnLadderHookTypes, "afterIsOnLadder"); addMethod(id, baseClass, beforeIsPlayerSleepingHookTypes, "beforeIsPlayerSleeping"); addMethod(id, baseClass, overrideIsPlayerSleepingHookTypes, "isPlayerSleeping"); addMethod(id, baseClass, afterIsPlayerSleepingHookTypes, "afterIsPlayerSleeping"); addMethod(id, baseClass, beforeIsSneakingHookTypes, "beforeIsSneaking"); addMethod(id, baseClass, overrideIsSneakingHookTypes, "isSneaking"); addMethod(id, baseClass, afterIsSneakingHookTypes, "afterIsSneaking"); addMethod(id, baseClass, beforeJumpHookTypes, "beforeJump"); addMethod(id, baseClass, overrideJumpHookTypes, "jump"); addMethod(id, baseClass, afterJumpHookTypes, "afterJump"); addMethod(id, baseClass, beforeKnockBackHookTypes, "beforeKnockBack", net.minecraft.entity.Entity.class, float.class, double.class, double.class); addMethod(id, baseClass, overrideKnockBackHookTypes, "knockBack", net.minecraft.entity.Entity.class, float.class, double.class, double.class); addMethod(id, baseClass, afterKnockBackHookTypes, "afterKnockBack", net.minecraft.entity.Entity.class, float.class, double.class, double.class); addMethod(id, baseClass, beforeMountEntityHookTypes, "beforeMountEntity", net.minecraft.entity.Entity.class); addMethod(id, baseClass, overrideMountEntityHookTypes, "mountEntity", net.minecraft.entity.Entity.class); addMethod(id, baseClass, afterMountEntityHookTypes, "afterMountEntity", net.minecraft.entity.Entity.class); addMethod(id, baseClass, beforeMoveEntityHookTypes, "beforeMoveEntity", double.class, double.class, double.class); addMethod(id, baseClass, overrideMoveEntityHookTypes, "moveEntity", double.class, double.class, double.class); addMethod(id, baseClass, afterMoveEntityHookTypes, "afterMoveEntity", double.class, double.class, double.class); addMethod(id, baseClass, beforeMoveEntityWithHeadingHookTypes, "beforeMoveEntityWithHeading", float.class, float.class); addMethod(id, baseClass, overrideMoveEntityWithHeadingHookTypes, "moveEntityWithHeading", float.class, float.class); addMethod(id, baseClass, afterMoveEntityWithHeadingHookTypes, "afterMoveEntityWithHeading", float.class, float.class); addMethod(id, baseClass, beforeMoveFlyingHookTypes, "beforeMoveFlying", float.class, float.class, float.class); addMethod(id, baseClass, overrideMoveFlyingHookTypes, "moveFlying", float.class, float.class, float.class); addMethod(id, baseClass, afterMoveFlyingHookTypes, "afterMoveFlying", float.class, float.class, float.class); addMethod(id, baseClass, beforeOnDeathHookTypes, "beforeOnDeath", net.minecraft.util.DamageSource.class); addMethod(id, baseClass, overrideOnDeathHookTypes, "onDeath", net.minecraft.util.DamageSource.class); addMethod(id, baseClass, afterOnDeathHookTypes, "afterOnDeath", net.minecraft.util.DamageSource.class); addMethod(id, baseClass, beforeOnLivingUpdateHookTypes, "beforeOnLivingUpdate"); addMethod(id, baseClass, overrideOnLivingUpdateHookTypes, "onLivingUpdate"); addMethod(id, baseClass, afterOnLivingUpdateHookTypes, "afterOnLivingUpdate"); addMethod(id, baseClass, beforeOnKillEntityHookTypes, "beforeOnKillEntity", net.minecraft.entity.EntityLivingBase.class); addMethod(id, baseClass, overrideOnKillEntityHookTypes, "onKillEntity", net.minecraft.entity.EntityLivingBase.class); addMethod(id, baseClass, afterOnKillEntityHookTypes, "afterOnKillEntity", net.minecraft.entity.EntityLivingBase.class); addMethod(id, baseClass, beforeOnStruckByLightningHookTypes, "beforeOnStruckByLightning", net.minecraft.entity.effect.EntityLightningBolt.class); addMethod(id, baseClass, overrideOnStruckByLightningHookTypes, "onStruckByLightning", net.minecraft.entity.effect.EntityLightningBolt.class); addMethod(id, baseClass, afterOnStruckByLightningHookTypes, "afterOnStruckByLightning", net.minecraft.entity.effect.EntityLightningBolt.class); addMethod(id, baseClass, beforeOnUpdateHookTypes, "beforeOnUpdate"); addMethod(id, baseClass, overrideOnUpdateHookTypes, "onUpdate"); addMethod(id, baseClass, afterOnUpdateHookTypes, "afterOnUpdate"); addMethod(id, baseClass, beforeOnUpdateEntityHookTypes, "beforeOnUpdateEntity"); addMethod(id, baseClass, overrideOnUpdateEntityHookTypes, "onUpdateEntity"); addMethod(id, baseClass, afterOnUpdateEntityHookTypes, "afterOnUpdateEntity"); addMethod(id, baseClass, beforeReadEntityFromNBTHookTypes, "beforeReadEntityFromNBT", net.minecraft.nbt.NBTTagCompound.class); addMethod(id, baseClass, overrideReadEntityFromNBTHookTypes, "readEntityFromNBT", net.minecraft.nbt.NBTTagCompound.class); addMethod(id, baseClass, afterReadEntityFromNBTHookTypes, "afterReadEntityFromNBT", net.minecraft.nbt.NBTTagCompound.class); addMethod(id, baseClass, beforeSetDeadHookTypes, "beforeSetDead"); addMethod(id, baseClass, overrideSetDeadHookTypes, "setDead"); addMethod(id, baseClass, afterSetDeadHookTypes, "afterSetDead"); addMethod(id, baseClass, beforeSetEntityActionStateHookTypes, "beforeSetEntityActionState", float.class, float.class, boolean.class, boolean.class); addMethod(id, baseClass, overrideSetEntityActionStateHookTypes, "setEntityActionState", float.class, float.class, boolean.class, boolean.class); addMethod(id, baseClass, afterSetEntityActionStateHookTypes, "afterSetEntityActionState", float.class, float.class, boolean.class, boolean.class); addMethod(id, baseClass, beforeSetPositionHookTypes, "beforeSetPosition", double.class, double.class, double.class); addMethod(id, baseClass, overrideSetPositionHookTypes, "setPosition", double.class, double.class, double.class); addMethod(id, baseClass, afterSetPositionHookTypes, "afterSetPosition", double.class, double.class, double.class); addMethod(id, baseClass, beforeSetSneakingHookTypes, "beforeSetSneaking", boolean.class); addMethod(id, baseClass, overrideSetSneakingHookTypes, "setSneaking", boolean.class); addMethod(id, baseClass, afterSetSneakingHookTypes, "afterSetSneaking", boolean.class); addMethod(id, baseClass, beforeSetSprintingHookTypes, "beforeSetSprinting", boolean.class); addMethod(id, baseClass, overrideSetSprintingHookTypes, "setSprinting", boolean.class); addMethod(id, baseClass, afterSetSprintingHookTypes, "afterSetSprinting", boolean.class); addMethod(id, baseClass, beforeSwingItemHookTypes, "beforeSwingItem"); addMethod(id, baseClass, overrideSwingItemHookTypes, "swingItem"); addMethod(id, baseClass, afterSwingItemHookTypes, "afterSwingItem"); addMethod(id, baseClass, beforeUpdateEntityActionStateHookTypes, "beforeUpdateEntityActionState"); addMethod(id, baseClass, overrideUpdateEntityActionStateHookTypes, "updateEntityActionState"); addMethod(id, baseClass, afterUpdateEntityActionStateHookTypes, "afterUpdateEntityActionState"); addMethod(id, baseClass, beforeUpdatePotionEffectsHookTypes, "beforeUpdatePotionEffects"); addMethod(id, baseClass, overrideUpdatePotionEffectsHookTypes, "updatePotionEffects"); addMethod(id, baseClass, afterUpdatePotionEffectsHookTypes, "afterUpdatePotionEffects"); addMethod(id, baseClass, beforeUpdateRiddenHookTypes, "beforeUpdateRidden"); addMethod(id, baseClass, overrideUpdateRiddenHookTypes, "updateRidden"); addMethod(id, baseClass, afterUpdateRiddenHookTypes, "afterUpdateRidden"); addMethod(id, baseClass, beforeWakeUpPlayerHookTypes, "beforeWakeUpPlayer", boolean.class, boolean.class, boolean.class); addMethod(id, baseClass, overrideWakeUpPlayerHookTypes, "wakeUpPlayer", boolean.class, boolean.class, boolean.class); addMethod(id, baseClass, afterWakeUpPlayerHookTypes, "afterWakeUpPlayer", boolean.class, boolean.class, boolean.class); addMethod(id, baseClass, beforeWriteEntityToNBTHookTypes, "beforeWriteEntityToNBT", net.minecraft.nbt.NBTTagCompound.class); addMethod(id, baseClass, overrideWriteEntityToNBTHookTypes, "writeEntityToNBT", net.minecraft.nbt.NBTTagCompound.class); addMethod(id, baseClass, afterWriteEntityToNBTHookTypes, "afterWriteEntityToNBT", net.minecraft.nbt.NBTTagCompound.class); addDynamicMethods(id, baseClass); addDynamicKeys(id, baseClass, beforeDynamicHookMethods, beforeDynamicHookTypes); addDynamicKeys(id, baseClass, overrideDynamicHookMethods, overrideDynamicHookTypes); addDynamicKeys(id, baseClass, afterDynamicHookMethods, afterDynamicHookTypes); initialize(); for(IServerPlayerAPI instance : getAllInstancesList()) instance.getServerPlayerAPI().attachServerPlayerBase(id); System.out.println("Server Player: registered " + id); logger.fine("Server Player: registered class '" + baseClass.getName() + "' with id '" + id + "'"); initialized = false; } public static boolean unregister(String id) { if(id == null) return false; Constructor<?> constructor = allBaseConstructors.remove(id); if(constructor == null) return false; for(IServerPlayerAPI instance : getAllInstancesList()) instance.getServerPlayerAPI().detachServerPlayerBase(id); beforeLocalConstructingHookTypes.remove(id); afterLocalConstructingHookTypes.remove(id); allBaseBeforeAddExhaustionSuperiors.remove(id); allBaseBeforeAddExhaustionInferiors.remove(id); allBaseOverrideAddExhaustionSuperiors.remove(id); allBaseOverrideAddExhaustionInferiors.remove(id); allBaseAfterAddExhaustionSuperiors.remove(id); allBaseAfterAddExhaustionInferiors.remove(id); beforeAddExhaustionHookTypes.remove(id); overrideAddExhaustionHookTypes.remove(id); afterAddExhaustionHookTypes.remove(id); allBaseBeforeAddExperienceSuperiors.remove(id); allBaseBeforeAddExperienceInferiors.remove(id); allBaseOverrideAddExperienceSuperiors.remove(id); allBaseOverrideAddExperienceInferiors.remove(id); allBaseAfterAddExperienceSuperiors.remove(id); allBaseAfterAddExperienceInferiors.remove(id); beforeAddExperienceHookTypes.remove(id); overrideAddExperienceHookTypes.remove(id); afterAddExperienceHookTypes.remove(id); allBaseBeforeAddExperienceLevelSuperiors.remove(id); allBaseBeforeAddExperienceLevelInferiors.remove(id); allBaseOverrideAddExperienceLevelSuperiors.remove(id); allBaseOverrideAddExperienceLevelInferiors.remove(id); allBaseAfterAddExperienceLevelSuperiors.remove(id); allBaseAfterAddExperienceLevelInferiors.remove(id); beforeAddExperienceLevelHookTypes.remove(id); overrideAddExperienceLevelHookTypes.remove(id); afterAddExperienceLevelHookTypes.remove(id); allBaseBeforeAddMovementStatSuperiors.remove(id); allBaseBeforeAddMovementStatInferiors.remove(id); allBaseOverrideAddMovementStatSuperiors.remove(id); allBaseOverrideAddMovementStatInferiors.remove(id); allBaseAfterAddMovementStatSuperiors.remove(id); allBaseAfterAddMovementStatInferiors.remove(id); beforeAddMovementStatHookTypes.remove(id); overrideAddMovementStatHookTypes.remove(id); afterAddMovementStatHookTypes.remove(id); allBaseBeforeAttackEntityFromSuperiors.remove(id); allBaseBeforeAttackEntityFromInferiors.remove(id); allBaseOverrideAttackEntityFromSuperiors.remove(id); allBaseOverrideAttackEntityFromInferiors.remove(id); allBaseAfterAttackEntityFromSuperiors.remove(id); allBaseAfterAttackEntityFromInferiors.remove(id); beforeAttackEntityFromHookTypes.remove(id); overrideAttackEntityFromHookTypes.remove(id); afterAttackEntityFromHookTypes.remove(id); allBaseBeforeAttackTargetEntityWithCurrentItemSuperiors.remove(id); allBaseBeforeAttackTargetEntityWithCurrentItemInferiors.remove(id); allBaseOverrideAttackTargetEntityWithCurrentItemSuperiors.remove(id); allBaseOverrideAttackTargetEntityWithCurrentItemInferiors.remove(id); allBaseAfterAttackTargetEntityWithCurrentItemSuperiors.remove(id); allBaseAfterAttackTargetEntityWithCurrentItemInferiors.remove(id); beforeAttackTargetEntityWithCurrentItemHookTypes.remove(id); overrideAttackTargetEntityWithCurrentItemHookTypes.remove(id); afterAttackTargetEntityWithCurrentItemHookTypes.remove(id); allBaseBeforeCanBreatheUnderwaterSuperiors.remove(id); allBaseBeforeCanBreatheUnderwaterInferiors.remove(id); allBaseOverrideCanBreatheUnderwaterSuperiors.remove(id); allBaseOverrideCanBreatheUnderwaterInferiors.remove(id); allBaseAfterCanBreatheUnderwaterSuperiors.remove(id); allBaseAfterCanBreatheUnderwaterInferiors.remove(id); beforeCanBreatheUnderwaterHookTypes.remove(id); overrideCanBreatheUnderwaterHookTypes.remove(id); afterCanBreatheUnderwaterHookTypes.remove(id); allBaseBeforeCanHarvestBlockSuperiors.remove(id); allBaseBeforeCanHarvestBlockInferiors.remove(id); allBaseOverrideCanHarvestBlockSuperiors.remove(id); allBaseOverrideCanHarvestBlockInferiors.remove(id); allBaseAfterCanHarvestBlockSuperiors.remove(id); allBaseAfterCanHarvestBlockInferiors.remove(id); beforeCanHarvestBlockHookTypes.remove(id); overrideCanHarvestBlockHookTypes.remove(id); afterCanHarvestBlockHookTypes.remove(id); allBaseBeforeCanPlayerEditSuperiors.remove(id); allBaseBeforeCanPlayerEditInferiors.remove(id); allBaseOverrideCanPlayerEditSuperiors.remove(id); allBaseOverrideCanPlayerEditInferiors.remove(id); allBaseAfterCanPlayerEditSuperiors.remove(id); allBaseAfterCanPlayerEditInferiors.remove(id); beforeCanPlayerEditHookTypes.remove(id); overrideCanPlayerEditHookTypes.remove(id); afterCanPlayerEditHookTypes.remove(id); allBaseBeforeCanTriggerWalkingSuperiors.remove(id); allBaseBeforeCanTriggerWalkingInferiors.remove(id); allBaseOverrideCanTriggerWalkingSuperiors.remove(id); allBaseOverrideCanTriggerWalkingInferiors.remove(id); allBaseAfterCanTriggerWalkingSuperiors.remove(id); allBaseAfterCanTriggerWalkingInferiors.remove(id); beforeCanTriggerWalkingHookTypes.remove(id); overrideCanTriggerWalkingHookTypes.remove(id); afterCanTriggerWalkingHookTypes.remove(id); allBaseBeforeClonePlayerSuperiors.remove(id); allBaseBeforeClonePlayerInferiors.remove(id); allBaseOverrideClonePlayerSuperiors.remove(id); allBaseOverrideClonePlayerInferiors.remove(id); allBaseAfterClonePlayerSuperiors.remove(id); allBaseAfterClonePlayerInferiors.remove(id); beforeClonePlayerHookTypes.remove(id); overrideClonePlayerHookTypes.remove(id); afterClonePlayerHookTypes.remove(id); allBaseBeforeDamageEntitySuperiors.remove(id); allBaseBeforeDamageEntityInferiors.remove(id); allBaseOverrideDamageEntitySuperiors.remove(id); allBaseOverrideDamageEntityInferiors.remove(id); allBaseAfterDamageEntitySuperiors.remove(id); allBaseAfterDamageEntityInferiors.remove(id); beforeDamageEntityHookTypes.remove(id); overrideDamageEntityHookTypes.remove(id); afterDamageEntityHookTypes.remove(id); allBaseBeforeDisplayGuiSuperiors.remove(id); allBaseBeforeDisplayGuiInferiors.remove(id); allBaseOverrideDisplayGuiSuperiors.remove(id); allBaseOverrideDisplayGuiInferiors.remove(id); allBaseAfterDisplayGuiSuperiors.remove(id); allBaseAfterDisplayGuiInferiors.remove(id); beforeDisplayGuiHookTypes.remove(id); overrideDisplayGuiHookTypes.remove(id); afterDisplayGuiHookTypes.remove(id); allBaseBeforeDisplayGUIChestSuperiors.remove(id); allBaseBeforeDisplayGUIChestInferiors.remove(id); allBaseOverrideDisplayGUIChestSuperiors.remove(id); allBaseOverrideDisplayGUIChestInferiors.remove(id); allBaseAfterDisplayGUIChestSuperiors.remove(id); allBaseAfterDisplayGUIChestInferiors.remove(id); beforeDisplayGUIChestHookTypes.remove(id); overrideDisplayGUIChestHookTypes.remove(id); afterDisplayGUIChestHookTypes.remove(id); allBaseBeforeDropOneItemSuperiors.remove(id); allBaseBeforeDropOneItemInferiors.remove(id); allBaseOverrideDropOneItemSuperiors.remove(id); allBaseOverrideDropOneItemInferiors.remove(id); allBaseAfterDropOneItemSuperiors.remove(id); allBaseAfterDropOneItemInferiors.remove(id); beforeDropOneItemHookTypes.remove(id); overrideDropOneItemHookTypes.remove(id); afterDropOneItemHookTypes.remove(id); allBaseBeforeDropPlayerItemWithRandomChoiceSuperiors.remove(id); allBaseBeforeDropPlayerItemWithRandomChoiceInferiors.remove(id); allBaseOverrideDropPlayerItemWithRandomChoiceSuperiors.remove(id); allBaseOverrideDropPlayerItemWithRandomChoiceInferiors.remove(id); allBaseAfterDropPlayerItemWithRandomChoiceSuperiors.remove(id); allBaseAfterDropPlayerItemWithRandomChoiceInferiors.remove(id); beforeDropPlayerItemWithRandomChoiceHookTypes.remove(id); overrideDropPlayerItemWithRandomChoiceHookTypes.remove(id); afterDropPlayerItemWithRandomChoiceHookTypes.remove(id); allBaseBeforeFallSuperiors.remove(id); allBaseBeforeFallInferiors.remove(id); allBaseOverrideFallSuperiors.remove(id); allBaseOverrideFallInferiors.remove(id); allBaseAfterFallSuperiors.remove(id); allBaseAfterFallInferiors.remove(id); beforeFallHookTypes.remove(id); overrideFallHookTypes.remove(id); afterFallHookTypes.remove(id); allBaseBeforeGetAIMoveSpeedSuperiors.remove(id); allBaseBeforeGetAIMoveSpeedInferiors.remove(id); allBaseOverrideGetAIMoveSpeedSuperiors.remove(id); allBaseOverrideGetAIMoveSpeedInferiors.remove(id); allBaseAfterGetAIMoveSpeedSuperiors.remove(id); allBaseAfterGetAIMoveSpeedInferiors.remove(id); beforeGetAIMoveSpeedHookTypes.remove(id); overrideGetAIMoveSpeedHookTypes.remove(id); afterGetAIMoveSpeedHookTypes.remove(id); allBaseBeforeGetBreakSpeedSuperiors.remove(id); allBaseBeforeGetBreakSpeedInferiors.remove(id); allBaseOverrideGetBreakSpeedSuperiors.remove(id); allBaseOverrideGetBreakSpeedInferiors.remove(id); allBaseAfterGetBreakSpeedSuperiors.remove(id); allBaseAfterGetBreakSpeedInferiors.remove(id); beforeGetBreakSpeedHookTypes.remove(id); overrideGetBreakSpeedHookTypes.remove(id); afterGetBreakSpeedHookTypes.remove(id); allBaseBeforeGetDistanceSqSuperiors.remove(id); allBaseBeforeGetDistanceSqInferiors.remove(id); allBaseOverrideGetDistanceSqSuperiors.remove(id); allBaseOverrideGetDistanceSqInferiors.remove(id); allBaseAfterGetDistanceSqSuperiors.remove(id); allBaseAfterGetDistanceSqInferiors.remove(id); beforeGetDistanceSqHookTypes.remove(id); overrideGetDistanceSqHookTypes.remove(id); afterGetDistanceSqHookTypes.remove(id); allBaseBeforeGetBrightnessSuperiors.remove(id); allBaseBeforeGetBrightnessInferiors.remove(id); allBaseOverrideGetBrightnessSuperiors.remove(id); allBaseOverrideGetBrightnessInferiors.remove(id); allBaseAfterGetBrightnessSuperiors.remove(id); allBaseAfterGetBrightnessInferiors.remove(id); beforeGetBrightnessHookTypes.remove(id); overrideGetBrightnessHookTypes.remove(id); afterGetBrightnessHookTypes.remove(id); allBaseBeforeGetEyeHeightSuperiors.remove(id); allBaseBeforeGetEyeHeightInferiors.remove(id); allBaseOverrideGetEyeHeightSuperiors.remove(id); allBaseOverrideGetEyeHeightInferiors.remove(id); allBaseAfterGetEyeHeightSuperiors.remove(id); allBaseAfterGetEyeHeightInferiors.remove(id); beforeGetEyeHeightHookTypes.remove(id); overrideGetEyeHeightHookTypes.remove(id); afterGetEyeHeightHookTypes.remove(id); allBaseBeforeHealSuperiors.remove(id); allBaseBeforeHealInferiors.remove(id); allBaseOverrideHealSuperiors.remove(id); allBaseOverrideHealInferiors.remove(id); allBaseAfterHealSuperiors.remove(id); allBaseAfterHealInferiors.remove(id); beforeHealHookTypes.remove(id); overrideHealHookTypes.remove(id); afterHealHookTypes.remove(id); allBaseBeforeIsEntityInsideOpaqueBlockSuperiors.remove(id); allBaseBeforeIsEntityInsideOpaqueBlockInferiors.remove(id); allBaseOverrideIsEntityInsideOpaqueBlockSuperiors.remove(id); allBaseOverrideIsEntityInsideOpaqueBlockInferiors.remove(id); allBaseAfterIsEntityInsideOpaqueBlockSuperiors.remove(id); allBaseAfterIsEntityInsideOpaqueBlockInferiors.remove(id); beforeIsEntityInsideOpaqueBlockHookTypes.remove(id); overrideIsEntityInsideOpaqueBlockHookTypes.remove(id); afterIsEntityInsideOpaqueBlockHookTypes.remove(id); allBaseBeforeIsInWaterSuperiors.remove(id); allBaseBeforeIsInWaterInferiors.remove(id); allBaseOverrideIsInWaterSuperiors.remove(id); allBaseOverrideIsInWaterInferiors.remove(id); allBaseAfterIsInWaterSuperiors.remove(id); allBaseAfterIsInWaterInferiors.remove(id); beforeIsInWaterHookTypes.remove(id); overrideIsInWaterHookTypes.remove(id); afterIsInWaterHookTypes.remove(id); allBaseBeforeIsInsideOfMaterialSuperiors.remove(id); allBaseBeforeIsInsideOfMaterialInferiors.remove(id); allBaseOverrideIsInsideOfMaterialSuperiors.remove(id); allBaseOverrideIsInsideOfMaterialInferiors.remove(id); allBaseAfterIsInsideOfMaterialSuperiors.remove(id); allBaseAfterIsInsideOfMaterialInferiors.remove(id); beforeIsInsideOfMaterialHookTypes.remove(id); overrideIsInsideOfMaterialHookTypes.remove(id); afterIsInsideOfMaterialHookTypes.remove(id); allBaseBeforeIsOnLadderSuperiors.remove(id); allBaseBeforeIsOnLadderInferiors.remove(id); allBaseOverrideIsOnLadderSuperiors.remove(id); allBaseOverrideIsOnLadderInferiors.remove(id); allBaseAfterIsOnLadderSuperiors.remove(id); allBaseAfterIsOnLadderInferiors.remove(id); beforeIsOnLadderHookTypes.remove(id); overrideIsOnLadderHookTypes.remove(id); afterIsOnLadderHookTypes.remove(id); allBaseBeforeIsPlayerSleepingSuperiors.remove(id); allBaseBeforeIsPlayerSleepingInferiors.remove(id); allBaseOverrideIsPlayerSleepingSuperiors.remove(id); allBaseOverrideIsPlayerSleepingInferiors.remove(id); allBaseAfterIsPlayerSleepingSuperiors.remove(id); allBaseAfterIsPlayerSleepingInferiors.remove(id); beforeIsPlayerSleepingHookTypes.remove(id); overrideIsPlayerSleepingHookTypes.remove(id); afterIsPlayerSleepingHookTypes.remove(id); allBaseBeforeIsSneakingSuperiors.remove(id); allBaseBeforeIsSneakingInferiors.remove(id); allBaseOverrideIsSneakingSuperiors.remove(id); allBaseOverrideIsSneakingInferiors.remove(id); allBaseAfterIsSneakingSuperiors.remove(id); allBaseAfterIsSneakingInferiors.remove(id); beforeIsSneakingHookTypes.remove(id); overrideIsSneakingHookTypes.remove(id); afterIsSneakingHookTypes.remove(id); allBaseBeforeJumpSuperiors.remove(id); allBaseBeforeJumpInferiors.remove(id); allBaseOverrideJumpSuperiors.remove(id); allBaseOverrideJumpInferiors.remove(id); allBaseAfterJumpSuperiors.remove(id); allBaseAfterJumpInferiors.remove(id); beforeJumpHookTypes.remove(id); overrideJumpHookTypes.remove(id); afterJumpHookTypes.remove(id); allBaseBeforeKnockBackSuperiors.remove(id); allBaseBeforeKnockBackInferiors.remove(id); allBaseOverrideKnockBackSuperiors.remove(id); allBaseOverrideKnockBackInferiors.remove(id); allBaseAfterKnockBackSuperiors.remove(id); allBaseAfterKnockBackInferiors.remove(id); beforeKnockBackHookTypes.remove(id); overrideKnockBackHookTypes.remove(id); afterKnockBackHookTypes.remove(id); allBaseBeforeMountEntitySuperiors.remove(id); allBaseBeforeMountEntityInferiors.remove(id); allBaseOverrideMountEntitySuperiors.remove(id); allBaseOverrideMountEntityInferiors.remove(id); allBaseAfterMountEntitySuperiors.remove(id); allBaseAfterMountEntityInferiors.remove(id); beforeMountEntityHookTypes.remove(id); overrideMountEntityHookTypes.remove(id); afterMountEntityHookTypes.remove(id); allBaseBeforeMoveEntitySuperiors.remove(id); allBaseBeforeMoveEntityInferiors.remove(id); allBaseOverrideMoveEntitySuperiors.remove(id); allBaseOverrideMoveEntityInferiors.remove(id); allBaseAfterMoveEntitySuperiors.remove(id); allBaseAfterMoveEntityInferiors.remove(id); beforeMoveEntityHookTypes.remove(id); overrideMoveEntityHookTypes.remove(id); afterMoveEntityHookTypes.remove(id); allBaseBeforeMoveEntityWithHeadingSuperiors.remove(id); allBaseBeforeMoveEntityWithHeadingInferiors.remove(id); allBaseOverrideMoveEntityWithHeadingSuperiors.remove(id); allBaseOverrideMoveEntityWithHeadingInferiors.remove(id); allBaseAfterMoveEntityWithHeadingSuperiors.remove(id); allBaseAfterMoveEntityWithHeadingInferiors.remove(id); beforeMoveEntityWithHeadingHookTypes.remove(id); overrideMoveEntityWithHeadingHookTypes.remove(id); afterMoveEntityWithHeadingHookTypes.remove(id); allBaseBeforeMoveFlyingSuperiors.remove(id); allBaseBeforeMoveFlyingInferiors.remove(id); allBaseOverrideMoveFlyingSuperiors.remove(id); allBaseOverrideMoveFlyingInferiors.remove(id); allBaseAfterMoveFlyingSuperiors.remove(id); allBaseAfterMoveFlyingInferiors.remove(id); beforeMoveFlyingHookTypes.remove(id); overrideMoveFlyingHookTypes.remove(id); afterMoveFlyingHookTypes.remove(id); allBaseBeforeOnDeathSuperiors.remove(id); allBaseBeforeOnDeathInferiors.remove(id); allBaseOverrideOnDeathSuperiors.remove(id); allBaseOverrideOnDeathInferiors.remove(id); allBaseAfterOnDeathSuperiors.remove(id); allBaseAfterOnDeathInferiors.remove(id); beforeOnDeathHookTypes.remove(id); overrideOnDeathHookTypes.remove(id); afterOnDeathHookTypes.remove(id); allBaseBeforeOnLivingUpdateSuperiors.remove(id); allBaseBeforeOnLivingUpdateInferiors.remove(id); allBaseOverrideOnLivingUpdateSuperiors.remove(id); allBaseOverrideOnLivingUpdateInferiors.remove(id); allBaseAfterOnLivingUpdateSuperiors.remove(id); allBaseAfterOnLivingUpdateInferiors.remove(id); beforeOnLivingUpdateHookTypes.remove(id); overrideOnLivingUpdateHookTypes.remove(id); afterOnLivingUpdateHookTypes.remove(id); allBaseBeforeOnKillEntitySuperiors.remove(id); allBaseBeforeOnKillEntityInferiors.remove(id); allBaseOverrideOnKillEntitySuperiors.remove(id); allBaseOverrideOnKillEntityInferiors.remove(id); allBaseAfterOnKillEntitySuperiors.remove(id); allBaseAfterOnKillEntityInferiors.remove(id); beforeOnKillEntityHookTypes.remove(id); overrideOnKillEntityHookTypes.remove(id); afterOnKillEntityHookTypes.remove(id); allBaseBeforeOnStruckByLightningSuperiors.remove(id); allBaseBeforeOnStruckByLightningInferiors.remove(id); allBaseOverrideOnStruckByLightningSuperiors.remove(id); allBaseOverrideOnStruckByLightningInferiors.remove(id); allBaseAfterOnStruckByLightningSuperiors.remove(id); allBaseAfterOnStruckByLightningInferiors.remove(id); beforeOnStruckByLightningHookTypes.remove(id); overrideOnStruckByLightningHookTypes.remove(id); afterOnStruckByLightningHookTypes.remove(id); allBaseBeforeOnUpdateSuperiors.remove(id); allBaseBeforeOnUpdateInferiors.remove(id); allBaseOverrideOnUpdateSuperiors.remove(id); allBaseOverrideOnUpdateInferiors.remove(id); allBaseAfterOnUpdateSuperiors.remove(id); allBaseAfterOnUpdateInferiors.remove(id); beforeOnUpdateHookTypes.remove(id); overrideOnUpdateHookTypes.remove(id); afterOnUpdateHookTypes.remove(id); allBaseBeforeOnUpdateEntitySuperiors.remove(id); allBaseBeforeOnUpdateEntityInferiors.remove(id); allBaseOverrideOnUpdateEntitySuperiors.remove(id); allBaseOverrideOnUpdateEntityInferiors.remove(id); allBaseAfterOnUpdateEntitySuperiors.remove(id); allBaseAfterOnUpdateEntityInferiors.remove(id); beforeOnUpdateEntityHookTypes.remove(id); overrideOnUpdateEntityHookTypes.remove(id); afterOnUpdateEntityHookTypes.remove(id); allBaseBeforeReadEntityFromNBTSuperiors.remove(id); allBaseBeforeReadEntityFromNBTInferiors.remove(id); allBaseOverrideReadEntityFromNBTSuperiors.remove(id); allBaseOverrideReadEntityFromNBTInferiors.remove(id); allBaseAfterReadEntityFromNBTSuperiors.remove(id); allBaseAfterReadEntityFromNBTInferiors.remove(id); beforeReadEntityFromNBTHookTypes.remove(id); overrideReadEntityFromNBTHookTypes.remove(id); afterReadEntityFromNBTHookTypes.remove(id); allBaseBeforeSetDeadSuperiors.remove(id); allBaseBeforeSetDeadInferiors.remove(id); allBaseOverrideSetDeadSuperiors.remove(id); allBaseOverrideSetDeadInferiors.remove(id); allBaseAfterSetDeadSuperiors.remove(id); allBaseAfterSetDeadInferiors.remove(id); beforeSetDeadHookTypes.remove(id); overrideSetDeadHookTypes.remove(id); afterSetDeadHookTypes.remove(id); allBaseBeforeSetEntityActionStateSuperiors.remove(id); allBaseBeforeSetEntityActionStateInferiors.remove(id); allBaseOverrideSetEntityActionStateSuperiors.remove(id); allBaseOverrideSetEntityActionStateInferiors.remove(id); allBaseAfterSetEntityActionStateSuperiors.remove(id); allBaseAfterSetEntityActionStateInferiors.remove(id); beforeSetEntityActionStateHookTypes.remove(id); overrideSetEntityActionStateHookTypes.remove(id); afterSetEntityActionStateHookTypes.remove(id); allBaseBeforeSetPositionSuperiors.remove(id); allBaseBeforeSetPositionInferiors.remove(id); allBaseOverrideSetPositionSuperiors.remove(id); allBaseOverrideSetPositionInferiors.remove(id); allBaseAfterSetPositionSuperiors.remove(id); allBaseAfterSetPositionInferiors.remove(id); beforeSetPositionHookTypes.remove(id); overrideSetPositionHookTypes.remove(id); afterSetPositionHookTypes.remove(id); allBaseBeforeSetSneakingSuperiors.remove(id); allBaseBeforeSetSneakingInferiors.remove(id); allBaseOverrideSetSneakingSuperiors.remove(id); allBaseOverrideSetSneakingInferiors.remove(id); allBaseAfterSetSneakingSuperiors.remove(id); allBaseAfterSetSneakingInferiors.remove(id); beforeSetSneakingHookTypes.remove(id); overrideSetSneakingHookTypes.remove(id); afterSetSneakingHookTypes.remove(id); allBaseBeforeSetSprintingSuperiors.remove(id); allBaseBeforeSetSprintingInferiors.remove(id); allBaseOverrideSetSprintingSuperiors.remove(id); allBaseOverrideSetSprintingInferiors.remove(id); allBaseAfterSetSprintingSuperiors.remove(id); allBaseAfterSetSprintingInferiors.remove(id); beforeSetSprintingHookTypes.remove(id); overrideSetSprintingHookTypes.remove(id); afterSetSprintingHookTypes.remove(id); allBaseBeforeSwingItemSuperiors.remove(id); allBaseBeforeSwingItemInferiors.remove(id); allBaseOverrideSwingItemSuperiors.remove(id); allBaseOverrideSwingItemInferiors.remove(id); allBaseAfterSwingItemSuperiors.remove(id); allBaseAfterSwingItemInferiors.remove(id); beforeSwingItemHookTypes.remove(id); overrideSwingItemHookTypes.remove(id); afterSwingItemHookTypes.remove(id); allBaseBeforeUpdateEntityActionStateSuperiors.remove(id); allBaseBeforeUpdateEntityActionStateInferiors.remove(id); allBaseOverrideUpdateEntityActionStateSuperiors.remove(id); allBaseOverrideUpdateEntityActionStateInferiors.remove(id); allBaseAfterUpdateEntityActionStateSuperiors.remove(id); allBaseAfterUpdateEntityActionStateInferiors.remove(id); beforeUpdateEntityActionStateHookTypes.remove(id); overrideUpdateEntityActionStateHookTypes.remove(id); afterUpdateEntityActionStateHookTypes.remove(id); allBaseBeforeUpdatePotionEffectsSuperiors.remove(id); allBaseBeforeUpdatePotionEffectsInferiors.remove(id); allBaseOverrideUpdatePotionEffectsSuperiors.remove(id); allBaseOverrideUpdatePotionEffectsInferiors.remove(id); allBaseAfterUpdatePotionEffectsSuperiors.remove(id); allBaseAfterUpdatePotionEffectsInferiors.remove(id); beforeUpdatePotionEffectsHookTypes.remove(id); overrideUpdatePotionEffectsHookTypes.remove(id); afterUpdatePotionEffectsHookTypes.remove(id); allBaseBeforeUpdateRiddenSuperiors.remove(id); allBaseBeforeUpdateRiddenInferiors.remove(id); allBaseOverrideUpdateRiddenSuperiors.remove(id); allBaseOverrideUpdateRiddenInferiors.remove(id); allBaseAfterUpdateRiddenSuperiors.remove(id); allBaseAfterUpdateRiddenInferiors.remove(id); beforeUpdateRiddenHookTypes.remove(id); overrideUpdateRiddenHookTypes.remove(id); afterUpdateRiddenHookTypes.remove(id); allBaseBeforeWakeUpPlayerSuperiors.remove(id); allBaseBeforeWakeUpPlayerInferiors.remove(id); allBaseOverrideWakeUpPlayerSuperiors.remove(id); allBaseOverrideWakeUpPlayerInferiors.remove(id); allBaseAfterWakeUpPlayerSuperiors.remove(id); allBaseAfterWakeUpPlayerInferiors.remove(id); beforeWakeUpPlayerHookTypes.remove(id); overrideWakeUpPlayerHookTypes.remove(id); afterWakeUpPlayerHookTypes.remove(id); allBaseBeforeWriteEntityToNBTSuperiors.remove(id); allBaseBeforeWriteEntityToNBTInferiors.remove(id); allBaseOverrideWriteEntityToNBTSuperiors.remove(id); allBaseOverrideWriteEntityToNBTInferiors.remove(id); allBaseAfterWriteEntityToNBTSuperiors.remove(id); allBaseAfterWriteEntityToNBTInferiors.remove(id); beforeWriteEntityToNBTHookTypes.remove(id); overrideWriteEntityToNBTHookTypes.remove(id); afterWriteEntityToNBTHookTypes.remove(id); for(IServerPlayerAPI instance : getAllInstancesList()) instance.getServerPlayerAPI().updateServerPlayerBases(); Iterator<String> iterator = keysToVirtualIds.keySet().iterator(); while(iterator.hasNext()) { String key = iterator.next(); if(keysToVirtualIds.get(key).equals(id)) keysToVirtualIds.remove(key); } boolean otherFound = false; Class<?> type = constructor.getDeclaringClass(); iterator = allBaseConstructors.keySet().iterator(); while(iterator.hasNext()) { String otherId = iterator.next(); Class<?> otherType = allBaseConstructors.get(otherId).getDeclaringClass(); if(!otherId.equals(id) && otherType.equals(type)) { otherFound = true; break; } } if(!otherFound) { dynamicTypes.remove(type); virtualDynamicHookMethods.remove(type); beforeDynamicHookMethods.remove(type); overrideDynamicHookMethods.remove(type); afterDynamicHookMethods.remove(type); } removeDynamicHookTypes(id, beforeDynamicHookTypes); removeDynamicHookTypes(id, overrideDynamicHookTypes); removeDynamicHookTypes(id, afterDynamicHookTypes); allBaseBeforeDynamicSuperiors.remove(id); allBaseBeforeDynamicInferiors.remove(id); allBaseOverrideDynamicSuperiors.remove(id); allBaseOverrideDynamicInferiors.remove(id); allBaseAfterDynamicSuperiors.remove(id); allBaseAfterDynamicInferiors.remove(id); log("ServerPlayerAPI: unregistered id '" + id + "'"); return true; } public static void removeDynamicHookTypes(String id, Map<String, List<String>> map) { Iterator<String> keys = map.keySet().iterator(); while(keys.hasNext()) map.get(keys.next()).remove(id); } public static Set<String> getRegisteredIds() { return unmodifiableAllIds; } private static void addSorting(String id, Map<String, String[]> map, String[] values) { if(values != null && values.length > 0) map.put(id, values); } private static void addDynamicSorting(String id, Map<String, Map<String, String[]>> map, Map<String, String[]> values) { if(values != null && values.size() > 0) map.put(id, values); } private static boolean addMethod(String id, Class<?> baseClass, List<String> list, String methodName, Class<?>... _parameterTypes) { try { Method method = baseClass.getMethod(methodName, _parameterTypes); boolean isOverridden = method.getDeclaringClass() != ServerPlayerBase.class; if(isOverridden) list.add(id); return isOverridden; } catch(Exception e) { throw new RuntimeException("Can not reflect method '" + methodName + "' of class '" + baseClass.getName() + "'", e); } } private static void addDynamicMethods(String id, Class<?> baseClass) { if(!dynamicTypes.add(baseClass)) return; Map<String, Method> virtuals = null; Map<String, Method> befores = null; Map<String, Method> overrides = null; Map<String, Method> afters = null; Method[] methods = baseClass.getDeclaredMethods(); for(int i=0; i<methods.length; i++) { Method method = methods[i]; if(method.getDeclaringClass() != baseClass) continue; int modifiers = method.getModifiers(); if(Modifier.isAbstract(modifiers)) continue; if(Modifier.isStatic(modifiers)) continue; String name = method.getName(); if(name.length() < 7 || !name.substring(0, 7).equalsIgnoreCase("dynamic")) continue; else name = name.substring(7); while(name.charAt(0) == '_') name = name.substring(1); boolean before = false; boolean virtual = false; boolean override = false; boolean after = false; if(name.substring(0, 7).equalsIgnoreCase("virtual")) { virtual = true; name = name.substring(7); } else { if(name.length() >= 8 && name.substring(0, 8).equalsIgnoreCase("override")) { name = name.substring(8); override = true; } else if(name.length() >= 6 && name.substring(0, 6).equalsIgnoreCase("before")) { before = true; name = name.substring(6); } else if(name.length() >= 5 && name.substring(0, 5).equalsIgnoreCase("after")) { after = true; name = name.substring(5); } } if(name.length() >= 1 && (before || virtual || override || after)) name = name.substring(0,1).toLowerCase() + name.substring(1); while(name.charAt(0) == '_') name = name.substring(1); if(name.length() == 0) throw new RuntimeException("Can not process dynamic hook method with no key"); keys.add(name); if(virtual) { if(keysToVirtualIds.containsKey(name)) throw new RuntimeException("Can not process more than one dynamic virtual method"); keysToVirtualIds.put(name, id); virtuals = addDynamicMethod(name, method, virtuals); } else if(before) befores = addDynamicMethod(name, method, befores); else if(after) afters = addDynamicMethod(name, method, afters); else overrides = addDynamicMethod(name, method, overrides); } if(virtuals != null) virtualDynamicHookMethods.put(baseClass, virtuals); if(befores != null) beforeDynamicHookMethods.put(baseClass, befores); if(overrides != null) overrideDynamicHookMethods.put(baseClass, overrides); if(afters != null) afterDynamicHookMethods.put(baseClass, afters); } private static void addDynamicKeys(String id, Class<?> baseClass, Map<Class<?>, Map<String, Method>> dynamicHookMethods, Map<String, List<String>> dynamicHookTypes) { Map<String, Method> methods = dynamicHookMethods.get(baseClass); if(methods == null || methods.size() == 0) return; Iterator<String> keys = methods.keySet().iterator(); while(keys.hasNext()) { String key = keys.next(); if(!dynamicHookTypes.containsKey(key)) dynamicHookTypes.put(key, new ArrayList<String>(1)); dynamicHookTypes.get(key).add(id); } } private static Map<String, Method> addDynamicMethod(String key, Method method, Map<String, Method> methods) { if(methods == null) methods = new HashMap<String, Method>(); if(methods.containsKey(key)) throw new RuntimeException("method with key '" + key + "' allready exists"); methods.put(key, method); return methods; } public static ServerPlayerAPI create(IServerPlayerAPI serverPlayer) { if(allBaseConstructors.size() > 0 && !initialized) initialize(); return new ServerPlayerAPI(serverPlayer); } private static void initialize() { sortBases(beforeLocalConstructingHookTypes, allBaseBeforeLocalConstructingSuperiors, allBaseBeforeLocalConstructingInferiors, "beforeLocalConstructing"); sortBases(afterLocalConstructingHookTypes, allBaseAfterLocalConstructingSuperiors, allBaseAfterLocalConstructingInferiors, "afterLocalConstructing"); Iterator<String> keyIterator = keys.iterator(); while(keyIterator.hasNext()) { String key = keyIterator.next(); sortDynamicBases(beforeDynamicHookTypes, allBaseBeforeDynamicSuperiors, allBaseBeforeDynamicInferiors, key); sortDynamicBases(overrideDynamicHookTypes, allBaseOverrideDynamicSuperiors, allBaseOverrideDynamicInferiors, key); sortDynamicBases(afterDynamicHookTypes, allBaseAfterDynamicSuperiors, allBaseAfterDynamicInferiors, key); } sortBases(beforeAddExhaustionHookTypes, allBaseBeforeAddExhaustionSuperiors, allBaseBeforeAddExhaustionInferiors, "beforeAddExhaustion"); sortBases(overrideAddExhaustionHookTypes, allBaseOverrideAddExhaustionSuperiors, allBaseOverrideAddExhaustionInferiors, "overrideAddExhaustion"); sortBases(afterAddExhaustionHookTypes, allBaseAfterAddExhaustionSuperiors, allBaseAfterAddExhaustionInferiors, "afterAddExhaustion"); sortBases(beforeAddExperienceHookTypes, allBaseBeforeAddExperienceSuperiors, allBaseBeforeAddExperienceInferiors, "beforeAddExperience"); sortBases(overrideAddExperienceHookTypes, allBaseOverrideAddExperienceSuperiors, allBaseOverrideAddExperienceInferiors, "overrideAddExperience"); sortBases(afterAddExperienceHookTypes, allBaseAfterAddExperienceSuperiors, allBaseAfterAddExperienceInferiors, "afterAddExperience"); sortBases(beforeAddExperienceLevelHookTypes, allBaseBeforeAddExperienceLevelSuperiors, allBaseBeforeAddExperienceLevelInferiors, "beforeAddExperienceLevel"); sortBases(overrideAddExperienceLevelHookTypes, allBaseOverrideAddExperienceLevelSuperiors, allBaseOverrideAddExperienceLevelInferiors, "overrideAddExperienceLevel"); sortBases(afterAddExperienceLevelHookTypes, allBaseAfterAddExperienceLevelSuperiors, allBaseAfterAddExperienceLevelInferiors, "afterAddExperienceLevel"); sortBases(beforeAddMovementStatHookTypes, allBaseBeforeAddMovementStatSuperiors, allBaseBeforeAddMovementStatInferiors, "beforeAddMovementStat"); sortBases(overrideAddMovementStatHookTypes, allBaseOverrideAddMovementStatSuperiors, allBaseOverrideAddMovementStatInferiors, "overrideAddMovementStat"); sortBases(afterAddMovementStatHookTypes, allBaseAfterAddMovementStatSuperiors, allBaseAfterAddMovementStatInferiors, "afterAddMovementStat"); sortBases(beforeAttackEntityFromHookTypes, allBaseBeforeAttackEntityFromSuperiors, allBaseBeforeAttackEntityFromInferiors, "beforeAttackEntityFrom"); sortBases(overrideAttackEntityFromHookTypes, allBaseOverrideAttackEntityFromSuperiors, allBaseOverrideAttackEntityFromInferiors, "overrideAttackEntityFrom"); sortBases(afterAttackEntityFromHookTypes, allBaseAfterAttackEntityFromSuperiors, allBaseAfterAttackEntityFromInferiors, "afterAttackEntityFrom"); sortBases(beforeAttackTargetEntityWithCurrentItemHookTypes, allBaseBeforeAttackTargetEntityWithCurrentItemSuperiors, allBaseBeforeAttackTargetEntityWithCurrentItemInferiors, "beforeAttackTargetEntityWithCurrentItem"); sortBases(overrideAttackTargetEntityWithCurrentItemHookTypes, allBaseOverrideAttackTargetEntityWithCurrentItemSuperiors, allBaseOverrideAttackTargetEntityWithCurrentItemInferiors, "overrideAttackTargetEntityWithCurrentItem"); sortBases(afterAttackTargetEntityWithCurrentItemHookTypes, allBaseAfterAttackTargetEntityWithCurrentItemSuperiors, allBaseAfterAttackTargetEntityWithCurrentItemInferiors, "afterAttackTargetEntityWithCurrentItem"); sortBases(beforeCanBreatheUnderwaterHookTypes, allBaseBeforeCanBreatheUnderwaterSuperiors, allBaseBeforeCanBreatheUnderwaterInferiors, "beforeCanBreatheUnderwater"); sortBases(overrideCanBreatheUnderwaterHookTypes, allBaseOverrideCanBreatheUnderwaterSuperiors, allBaseOverrideCanBreatheUnderwaterInferiors, "overrideCanBreatheUnderwater"); sortBases(afterCanBreatheUnderwaterHookTypes, allBaseAfterCanBreatheUnderwaterSuperiors, allBaseAfterCanBreatheUnderwaterInferiors, "afterCanBreatheUnderwater"); sortBases(beforeCanHarvestBlockHookTypes, allBaseBeforeCanHarvestBlockSuperiors, allBaseBeforeCanHarvestBlockInferiors, "beforeCanHarvestBlock"); sortBases(overrideCanHarvestBlockHookTypes, allBaseOverrideCanHarvestBlockSuperiors, allBaseOverrideCanHarvestBlockInferiors, "overrideCanHarvestBlock"); sortBases(afterCanHarvestBlockHookTypes, allBaseAfterCanHarvestBlockSuperiors, allBaseAfterCanHarvestBlockInferiors, "afterCanHarvestBlock"); sortBases(beforeCanPlayerEditHookTypes, allBaseBeforeCanPlayerEditSuperiors, allBaseBeforeCanPlayerEditInferiors, "beforeCanPlayerEdit"); sortBases(overrideCanPlayerEditHookTypes, allBaseOverrideCanPlayerEditSuperiors, allBaseOverrideCanPlayerEditInferiors, "overrideCanPlayerEdit"); sortBases(afterCanPlayerEditHookTypes, allBaseAfterCanPlayerEditSuperiors, allBaseAfterCanPlayerEditInferiors, "afterCanPlayerEdit"); sortBases(beforeCanTriggerWalkingHookTypes, allBaseBeforeCanTriggerWalkingSuperiors, allBaseBeforeCanTriggerWalkingInferiors, "beforeCanTriggerWalking"); sortBases(overrideCanTriggerWalkingHookTypes, allBaseOverrideCanTriggerWalkingSuperiors, allBaseOverrideCanTriggerWalkingInferiors, "overrideCanTriggerWalking"); sortBases(afterCanTriggerWalkingHookTypes, allBaseAfterCanTriggerWalkingSuperiors, allBaseAfterCanTriggerWalkingInferiors, "afterCanTriggerWalking"); sortBases(beforeClonePlayerHookTypes, allBaseBeforeClonePlayerSuperiors, allBaseBeforeClonePlayerInferiors, "beforeClonePlayer"); sortBases(overrideClonePlayerHookTypes, allBaseOverrideClonePlayerSuperiors, allBaseOverrideClonePlayerInferiors, "overrideClonePlayer"); sortBases(afterClonePlayerHookTypes, allBaseAfterClonePlayerSuperiors, allBaseAfterClonePlayerInferiors, "afterClonePlayer"); sortBases(beforeDamageEntityHookTypes, allBaseBeforeDamageEntitySuperiors, allBaseBeforeDamageEntityInferiors, "beforeDamageEntity"); sortBases(overrideDamageEntityHookTypes, allBaseOverrideDamageEntitySuperiors, allBaseOverrideDamageEntityInferiors, "overrideDamageEntity"); sortBases(afterDamageEntityHookTypes, allBaseAfterDamageEntitySuperiors, allBaseAfterDamageEntityInferiors, "afterDamageEntity"); sortBases(beforeDisplayGuiHookTypes, allBaseBeforeDisplayGuiSuperiors, allBaseBeforeDisplayGuiInferiors, "beforeDisplayGui"); sortBases(overrideDisplayGuiHookTypes, allBaseOverrideDisplayGuiSuperiors, allBaseOverrideDisplayGuiInferiors, "overrideDisplayGui"); sortBases(afterDisplayGuiHookTypes, allBaseAfterDisplayGuiSuperiors, allBaseAfterDisplayGuiInferiors, "afterDisplayGui"); sortBases(beforeDisplayGUIChestHookTypes, allBaseBeforeDisplayGUIChestSuperiors, allBaseBeforeDisplayGUIChestInferiors, "beforeDisplayGUIChest"); sortBases(overrideDisplayGUIChestHookTypes, allBaseOverrideDisplayGUIChestSuperiors, allBaseOverrideDisplayGUIChestInferiors, "overrideDisplayGUIChest"); sortBases(afterDisplayGUIChestHookTypes, allBaseAfterDisplayGUIChestSuperiors, allBaseAfterDisplayGUIChestInferiors, "afterDisplayGUIChest"); sortBases(beforeDropOneItemHookTypes, allBaseBeforeDropOneItemSuperiors, allBaseBeforeDropOneItemInferiors, "beforeDropOneItem"); sortBases(overrideDropOneItemHookTypes, allBaseOverrideDropOneItemSuperiors, allBaseOverrideDropOneItemInferiors, "overrideDropOneItem"); sortBases(afterDropOneItemHookTypes, allBaseAfterDropOneItemSuperiors, allBaseAfterDropOneItemInferiors, "afterDropOneItem"); sortBases(beforeDropPlayerItemWithRandomChoiceHookTypes, allBaseBeforeDropPlayerItemWithRandomChoiceSuperiors, allBaseBeforeDropPlayerItemWithRandomChoiceInferiors, "beforeDropPlayerItemWithRandomChoice"); sortBases(overrideDropPlayerItemWithRandomChoiceHookTypes, allBaseOverrideDropPlayerItemWithRandomChoiceSuperiors, allBaseOverrideDropPlayerItemWithRandomChoiceInferiors, "overrideDropPlayerItemWithRandomChoice"); sortBases(afterDropPlayerItemWithRandomChoiceHookTypes, allBaseAfterDropPlayerItemWithRandomChoiceSuperiors, allBaseAfterDropPlayerItemWithRandomChoiceInferiors, "afterDropPlayerItemWithRandomChoice"); sortBases(beforeFallHookTypes, allBaseBeforeFallSuperiors, allBaseBeforeFallInferiors, "beforeFall"); sortBases(overrideFallHookTypes, allBaseOverrideFallSuperiors, allBaseOverrideFallInferiors, "overrideFall"); sortBases(afterFallHookTypes, allBaseAfterFallSuperiors, allBaseAfterFallInferiors, "afterFall"); sortBases(beforeGetAIMoveSpeedHookTypes, allBaseBeforeGetAIMoveSpeedSuperiors, allBaseBeforeGetAIMoveSpeedInferiors, "beforeGetAIMoveSpeed"); sortBases(overrideGetAIMoveSpeedHookTypes, allBaseOverrideGetAIMoveSpeedSuperiors, allBaseOverrideGetAIMoveSpeedInferiors, "overrideGetAIMoveSpeed"); sortBases(afterGetAIMoveSpeedHookTypes, allBaseAfterGetAIMoveSpeedSuperiors, allBaseAfterGetAIMoveSpeedInferiors, "afterGetAIMoveSpeed"); sortBases(beforeGetBreakSpeedHookTypes, allBaseBeforeGetBreakSpeedSuperiors, allBaseBeforeGetBreakSpeedInferiors, "beforeGetBreakSpeed"); sortBases(overrideGetBreakSpeedHookTypes, allBaseOverrideGetBreakSpeedSuperiors, allBaseOverrideGetBreakSpeedInferiors, "overrideGetBreakSpeed"); sortBases(afterGetBreakSpeedHookTypes, allBaseAfterGetBreakSpeedSuperiors, allBaseAfterGetBreakSpeedInferiors, "afterGetBreakSpeed"); sortBases(beforeGetDistanceSqHookTypes, allBaseBeforeGetDistanceSqSuperiors, allBaseBeforeGetDistanceSqInferiors, "beforeGetDistanceSq"); sortBases(overrideGetDistanceSqHookTypes, allBaseOverrideGetDistanceSqSuperiors, allBaseOverrideGetDistanceSqInferiors, "overrideGetDistanceSq"); sortBases(afterGetDistanceSqHookTypes, allBaseAfterGetDistanceSqSuperiors, allBaseAfterGetDistanceSqInferiors, "afterGetDistanceSq"); sortBases(beforeGetBrightnessHookTypes, allBaseBeforeGetBrightnessSuperiors, allBaseBeforeGetBrightnessInferiors, "beforeGetBrightness"); sortBases(overrideGetBrightnessHookTypes, allBaseOverrideGetBrightnessSuperiors, allBaseOverrideGetBrightnessInferiors, "overrideGetBrightness"); sortBases(afterGetBrightnessHookTypes, allBaseAfterGetBrightnessSuperiors, allBaseAfterGetBrightnessInferiors, "afterGetBrightness"); sortBases(beforeGetEyeHeightHookTypes, allBaseBeforeGetEyeHeightSuperiors, allBaseBeforeGetEyeHeightInferiors, "beforeGetEyeHeight"); sortBases(overrideGetEyeHeightHookTypes, allBaseOverrideGetEyeHeightSuperiors, allBaseOverrideGetEyeHeightInferiors, "overrideGetEyeHeight"); sortBases(afterGetEyeHeightHookTypes, allBaseAfterGetEyeHeightSuperiors, allBaseAfterGetEyeHeightInferiors, "afterGetEyeHeight"); sortBases(beforeHealHookTypes, allBaseBeforeHealSuperiors, allBaseBeforeHealInferiors, "beforeHeal"); sortBases(overrideHealHookTypes, allBaseOverrideHealSuperiors, allBaseOverrideHealInferiors, "overrideHeal"); sortBases(afterHealHookTypes, allBaseAfterHealSuperiors, allBaseAfterHealInferiors, "afterHeal"); sortBases(beforeIsEntityInsideOpaqueBlockHookTypes, allBaseBeforeIsEntityInsideOpaqueBlockSuperiors, allBaseBeforeIsEntityInsideOpaqueBlockInferiors, "beforeIsEntityInsideOpaqueBlock"); sortBases(overrideIsEntityInsideOpaqueBlockHookTypes, allBaseOverrideIsEntityInsideOpaqueBlockSuperiors, allBaseOverrideIsEntityInsideOpaqueBlockInferiors, "overrideIsEntityInsideOpaqueBlock"); sortBases(afterIsEntityInsideOpaqueBlockHookTypes, allBaseAfterIsEntityInsideOpaqueBlockSuperiors, allBaseAfterIsEntityInsideOpaqueBlockInferiors, "afterIsEntityInsideOpaqueBlock"); sortBases(beforeIsInWaterHookTypes, allBaseBeforeIsInWaterSuperiors, allBaseBeforeIsInWaterInferiors, "beforeIsInWater"); sortBases(overrideIsInWaterHookTypes, allBaseOverrideIsInWaterSuperiors, allBaseOverrideIsInWaterInferiors, "overrideIsInWater"); sortBases(afterIsInWaterHookTypes, allBaseAfterIsInWaterSuperiors, allBaseAfterIsInWaterInferiors, "afterIsInWater"); sortBases(beforeIsInsideOfMaterialHookTypes, allBaseBeforeIsInsideOfMaterialSuperiors, allBaseBeforeIsInsideOfMaterialInferiors, "beforeIsInsideOfMaterial"); sortBases(overrideIsInsideOfMaterialHookTypes, allBaseOverrideIsInsideOfMaterialSuperiors, allBaseOverrideIsInsideOfMaterialInferiors, "overrideIsInsideOfMaterial"); sortBases(afterIsInsideOfMaterialHookTypes, allBaseAfterIsInsideOfMaterialSuperiors, allBaseAfterIsInsideOfMaterialInferiors, "afterIsInsideOfMaterial"); sortBases(beforeIsOnLadderHookTypes, allBaseBeforeIsOnLadderSuperiors, allBaseBeforeIsOnLadderInferiors, "beforeIsOnLadder"); sortBases(overrideIsOnLadderHookTypes, allBaseOverrideIsOnLadderSuperiors, allBaseOverrideIsOnLadderInferiors, "overrideIsOnLadder"); sortBases(afterIsOnLadderHookTypes, allBaseAfterIsOnLadderSuperiors, allBaseAfterIsOnLadderInferiors, "afterIsOnLadder"); sortBases(beforeIsPlayerSleepingHookTypes, allBaseBeforeIsPlayerSleepingSuperiors, allBaseBeforeIsPlayerSleepingInferiors, "beforeIsPlayerSleeping"); sortBases(overrideIsPlayerSleepingHookTypes, allBaseOverrideIsPlayerSleepingSuperiors, allBaseOverrideIsPlayerSleepingInferiors, "overrideIsPlayerSleeping"); sortBases(afterIsPlayerSleepingHookTypes, allBaseAfterIsPlayerSleepingSuperiors, allBaseAfterIsPlayerSleepingInferiors, "afterIsPlayerSleeping"); sortBases(beforeIsSneakingHookTypes, allBaseBeforeIsSneakingSuperiors, allBaseBeforeIsSneakingInferiors, "beforeIsSneaking"); sortBases(overrideIsSneakingHookTypes, allBaseOverrideIsSneakingSuperiors, allBaseOverrideIsSneakingInferiors, "overrideIsSneaking"); sortBases(afterIsSneakingHookTypes, allBaseAfterIsSneakingSuperiors, allBaseAfterIsSneakingInferiors, "afterIsSneaking"); sortBases(beforeJumpHookTypes, allBaseBeforeJumpSuperiors, allBaseBeforeJumpInferiors, "beforeJump"); sortBases(overrideJumpHookTypes, allBaseOverrideJumpSuperiors, allBaseOverrideJumpInferiors, "overrideJump"); sortBases(afterJumpHookTypes, allBaseAfterJumpSuperiors, allBaseAfterJumpInferiors, "afterJump"); sortBases(beforeKnockBackHookTypes, allBaseBeforeKnockBackSuperiors, allBaseBeforeKnockBackInferiors, "beforeKnockBack"); sortBases(overrideKnockBackHookTypes, allBaseOverrideKnockBackSuperiors, allBaseOverrideKnockBackInferiors, "overrideKnockBack"); sortBases(afterKnockBackHookTypes, allBaseAfterKnockBackSuperiors, allBaseAfterKnockBackInferiors, "afterKnockBack"); sortBases(beforeMountEntityHookTypes, allBaseBeforeMountEntitySuperiors, allBaseBeforeMountEntityInferiors, "beforeMountEntity"); sortBases(overrideMountEntityHookTypes, allBaseOverrideMountEntitySuperiors, allBaseOverrideMountEntityInferiors, "overrideMountEntity"); sortBases(afterMountEntityHookTypes, allBaseAfterMountEntitySuperiors, allBaseAfterMountEntityInferiors, "afterMountEntity"); sortBases(beforeMoveEntityHookTypes, allBaseBeforeMoveEntitySuperiors, allBaseBeforeMoveEntityInferiors, "beforeMoveEntity"); sortBases(overrideMoveEntityHookTypes, allBaseOverrideMoveEntitySuperiors, allBaseOverrideMoveEntityInferiors, "overrideMoveEntity"); sortBases(afterMoveEntityHookTypes, allBaseAfterMoveEntitySuperiors, allBaseAfterMoveEntityInferiors, "afterMoveEntity"); sortBases(beforeMoveEntityWithHeadingHookTypes, allBaseBeforeMoveEntityWithHeadingSuperiors, allBaseBeforeMoveEntityWithHeadingInferiors, "beforeMoveEntityWithHeading"); sortBases(overrideMoveEntityWithHeadingHookTypes, allBaseOverrideMoveEntityWithHeadingSuperiors, allBaseOverrideMoveEntityWithHeadingInferiors, "overrideMoveEntityWithHeading"); sortBases(afterMoveEntityWithHeadingHookTypes, allBaseAfterMoveEntityWithHeadingSuperiors, allBaseAfterMoveEntityWithHeadingInferiors, "afterMoveEntityWithHeading"); sortBases(beforeMoveFlyingHookTypes, allBaseBeforeMoveFlyingSuperiors, allBaseBeforeMoveFlyingInferiors, "beforeMoveFlying"); sortBases(overrideMoveFlyingHookTypes, allBaseOverrideMoveFlyingSuperiors, allBaseOverrideMoveFlyingInferiors, "overrideMoveFlying"); sortBases(afterMoveFlyingHookTypes, allBaseAfterMoveFlyingSuperiors, allBaseAfterMoveFlyingInferiors, "afterMoveFlying"); sortBases(beforeOnDeathHookTypes, allBaseBeforeOnDeathSuperiors, allBaseBeforeOnDeathInferiors, "beforeOnDeath"); sortBases(overrideOnDeathHookTypes, allBaseOverrideOnDeathSuperiors, allBaseOverrideOnDeathInferiors, "overrideOnDeath"); sortBases(afterOnDeathHookTypes, allBaseAfterOnDeathSuperiors, allBaseAfterOnDeathInferiors, "afterOnDeath"); sortBases(beforeOnLivingUpdateHookTypes, allBaseBeforeOnLivingUpdateSuperiors, allBaseBeforeOnLivingUpdateInferiors, "beforeOnLivingUpdate"); sortBases(overrideOnLivingUpdateHookTypes, allBaseOverrideOnLivingUpdateSuperiors, allBaseOverrideOnLivingUpdateInferiors, "overrideOnLivingUpdate"); sortBases(afterOnLivingUpdateHookTypes, allBaseAfterOnLivingUpdateSuperiors, allBaseAfterOnLivingUpdateInferiors, "afterOnLivingUpdate"); sortBases(beforeOnKillEntityHookTypes, allBaseBeforeOnKillEntitySuperiors, allBaseBeforeOnKillEntityInferiors, "beforeOnKillEntity"); sortBases(overrideOnKillEntityHookTypes, allBaseOverrideOnKillEntitySuperiors, allBaseOverrideOnKillEntityInferiors, "overrideOnKillEntity"); sortBases(afterOnKillEntityHookTypes, allBaseAfterOnKillEntitySuperiors, allBaseAfterOnKillEntityInferiors, "afterOnKillEntity"); sortBases(beforeOnStruckByLightningHookTypes, allBaseBeforeOnStruckByLightningSuperiors, allBaseBeforeOnStruckByLightningInferiors, "beforeOnStruckByLightning"); sortBases(overrideOnStruckByLightningHookTypes, allBaseOverrideOnStruckByLightningSuperiors, allBaseOverrideOnStruckByLightningInferiors, "overrideOnStruckByLightning"); sortBases(afterOnStruckByLightningHookTypes, allBaseAfterOnStruckByLightningSuperiors, allBaseAfterOnStruckByLightningInferiors, "afterOnStruckByLightning"); sortBases(beforeOnUpdateHookTypes, allBaseBeforeOnUpdateSuperiors, allBaseBeforeOnUpdateInferiors, "beforeOnUpdate"); sortBases(overrideOnUpdateHookTypes, allBaseOverrideOnUpdateSuperiors, allBaseOverrideOnUpdateInferiors, "overrideOnUpdate"); sortBases(afterOnUpdateHookTypes, allBaseAfterOnUpdateSuperiors, allBaseAfterOnUpdateInferiors, "afterOnUpdate"); sortBases(beforeOnUpdateEntityHookTypes, allBaseBeforeOnUpdateEntitySuperiors, allBaseBeforeOnUpdateEntityInferiors, "beforeOnUpdateEntity"); sortBases(overrideOnUpdateEntityHookTypes, allBaseOverrideOnUpdateEntitySuperiors, allBaseOverrideOnUpdateEntityInferiors, "overrideOnUpdateEntity"); sortBases(afterOnUpdateEntityHookTypes, allBaseAfterOnUpdateEntitySuperiors, allBaseAfterOnUpdateEntityInferiors, "afterOnUpdateEntity"); sortBases(beforeReadEntityFromNBTHookTypes, allBaseBeforeReadEntityFromNBTSuperiors, allBaseBeforeReadEntityFromNBTInferiors, "beforeReadEntityFromNBT"); sortBases(overrideReadEntityFromNBTHookTypes, allBaseOverrideReadEntityFromNBTSuperiors, allBaseOverrideReadEntityFromNBTInferiors, "overrideReadEntityFromNBT"); sortBases(afterReadEntityFromNBTHookTypes, allBaseAfterReadEntityFromNBTSuperiors, allBaseAfterReadEntityFromNBTInferiors, "afterReadEntityFromNBT"); sortBases(beforeSetDeadHookTypes, allBaseBeforeSetDeadSuperiors, allBaseBeforeSetDeadInferiors, "beforeSetDead"); sortBases(overrideSetDeadHookTypes, allBaseOverrideSetDeadSuperiors, allBaseOverrideSetDeadInferiors, "overrideSetDead"); sortBases(afterSetDeadHookTypes, allBaseAfterSetDeadSuperiors, allBaseAfterSetDeadInferiors, "afterSetDead"); sortBases(beforeSetEntityActionStateHookTypes, allBaseBeforeSetEntityActionStateSuperiors, allBaseBeforeSetEntityActionStateInferiors, "beforeSetEntityActionState"); sortBases(overrideSetEntityActionStateHookTypes, allBaseOverrideSetEntityActionStateSuperiors, allBaseOverrideSetEntityActionStateInferiors, "overrideSetEntityActionState"); sortBases(afterSetEntityActionStateHookTypes, allBaseAfterSetEntityActionStateSuperiors, allBaseAfterSetEntityActionStateInferiors, "afterSetEntityActionState"); sortBases(beforeSetPositionHookTypes, allBaseBeforeSetPositionSuperiors, allBaseBeforeSetPositionInferiors, "beforeSetPosition"); sortBases(overrideSetPositionHookTypes, allBaseOverrideSetPositionSuperiors, allBaseOverrideSetPositionInferiors, "overrideSetPosition"); sortBases(afterSetPositionHookTypes, allBaseAfterSetPositionSuperiors, allBaseAfterSetPositionInferiors, "afterSetPosition"); sortBases(beforeSetSneakingHookTypes, allBaseBeforeSetSneakingSuperiors, allBaseBeforeSetSneakingInferiors, "beforeSetSneaking"); sortBases(overrideSetSneakingHookTypes, allBaseOverrideSetSneakingSuperiors, allBaseOverrideSetSneakingInferiors, "overrideSetSneaking"); sortBases(afterSetSneakingHookTypes, allBaseAfterSetSneakingSuperiors, allBaseAfterSetSneakingInferiors, "afterSetSneaking"); sortBases(beforeSetSprintingHookTypes, allBaseBeforeSetSprintingSuperiors, allBaseBeforeSetSprintingInferiors, "beforeSetSprinting"); sortBases(overrideSetSprintingHookTypes, allBaseOverrideSetSprintingSuperiors, allBaseOverrideSetSprintingInferiors, "overrideSetSprinting"); sortBases(afterSetSprintingHookTypes, allBaseAfterSetSprintingSuperiors, allBaseAfterSetSprintingInferiors, "afterSetSprinting"); sortBases(beforeSwingItemHookTypes, allBaseBeforeSwingItemSuperiors, allBaseBeforeSwingItemInferiors, "beforeSwingItem"); sortBases(overrideSwingItemHookTypes, allBaseOverrideSwingItemSuperiors, allBaseOverrideSwingItemInferiors, "overrideSwingItem"); sortBases(afterSwingItemHookTypes, allBaseAfterSwingItemSuperiors, allBaseAfterSwingItemInferiors, "afterSwingItem"); sortBases(beforeUpdateEntityActionStateHookTypes, allBaseBeforeUpdateEntityActionStateSuperiors, allBaseBeforeUpdateEntityActionStateInferiors, "beforeUpdateEntityActionState"); sortBases(overrideUpdateEntityActionStateHookTypes, allBaseOverrideUpdateEntityActionStateSuperiors, allBaseOverrideUpdateEntityActionStateInferiors, "overrideUpdateEntityActionState"); sortBases(afterUpdateEntityActionStateHookTypes, allBaseAfterUpdateEntityActionStateSuperiors, allBaseAfterUpdateEntityActionStateInferiors, "afterUpdateEntityActionState"); sortBases(beforeUpdatePotionEffectsHookTypes, allBaseBeforeUpdatePotionEffectsSuperiors, allBaseBeforeUpdatePotionEffectsInferiors, "beforeUpdatePotionEffects"); sortBases(overrideUpdatePotionEffectsHookTypes, allBaseOverrideUpdatePotionEffectsSuperiors, allBaseOverrideUpdatePotionEffectsInferiors, "overrideUpdatePotionEffects"); sortBases(afterUpdatePotionEffectsHookTypes, allBaseAfterUpdatePotionEffectsSuperiors, allBaseAfterUpdatePotionEffectsInferiors, "afterUpdatePotionEffects"); sortBases(beforeUpdateRiddenHookTypes, allBaseBeforeUpdateRiddenSuperiors, allBaseBeforeUpdateRiddenInferiors, "beforeUpdateRidden"); sortBases(overrideUpdateRiddenHookTypes, allBaseOverrideUpdateRiddenSuperiors, allBaseOverrideUpdateRiddenInferiors, "overrideUpdateRidden"); sortBases(afterUpdateRiddenHookTypes, allBaseAfterUpdateRiddenSuperiors, allBaseAfterUpdateRiddenInferiors, "afterUpdateRidden"); sortBases(beforeWakeUpPlayerHookTypes, allBaseBeforeWakeUpPlayerSuperiors, allBaseBeforeWakeUpPlayerInferiors, "beforeWakeUpPlayer"); sortBases(overrideWakeUpPlayerHookTypes, allBaseOverrideWakeUpPlayerSuperiors, allBaseOverrideWakeUpPlayerInferiors, "overrideWakeUpPlayer"); sortBases(afterWakeUpPlayerHookTypes, allBaseAfterWakeUpPlayerSuperiors, allBaseAfterWakeUpPlayerInferiors, "afterWakeUpPlayer"); sortBases(beforeWriteEntityToNBTHookTypes, allBaseBeforeWriteEntityToNBTSuperiors, allBaseBeforeWriteEntityToNBTInferiors, "beforeWriteEntityToNBT"); sortBases(overrideWriteEntityToNBTHookTypes, allBaseOverrideWriteEntityToNBTSuperiors, allBaseOverrideWriteEntityToNBTInferiors, "overrideWriteEntityToNBT"); sortBases(afterWriteEntityToNBTHookTypes, allBaseAfterWriteEntityToNBTSuperiors, allBaseAfterWriteEntityToNBTInferiors, "afterWriteEntityToNBT"); initialized = true; } private static List<IServerPlayerAPI> getAllInstancesList() { List<IServerPlayerAPI> result = new ArrayList<IServerPlayerAPI>(); Object entityPlayerList; try { Object minecraftServer = net.minecraft.server.MinecraftServer.class.getMethod("func_71276_C").invoke(null); Object serverConfigurationManager = minecraftServer != null ? net.minecraft.server.MinecraftServer.class.getMethod("func_71203_ab").invoke(minecraftServer) : null; entityPlayerList = serverConfigurationManager != null ? serverConfigurationManager.getClass().getField("field_72404_b").get(serverConfigurationManager) : null; } catch(Exception obfuscatedException) { try { Object minecraftServer = net.minecraft.server.MinecraftServer.class.getMethod("getServer").invoke(null); Object serverConfigurationManager = minecraftServer != null ? net.minecraft.server.MinecraftServer.class.getMethod("getConfigurationManager").invoke(minecraftServer) : null; entityPlayerList = serverConfigurationManager != null ? serverConfigurationManager.getClass().getField("playerEntityList").get(serverConfigurationManager) : null; } catch(Exception deobfuscatedException) { throw new RuntimeException("Unable to aquire list of current server players.", obfuscatedException); } } if(entityPlayerList != null) for(Object entityPlayer : (List<?>)entityPlayerList) result.add((IServerPlayerAPI)entityPlayer); return result; } public static net.minecraft.entity.player.EntityPlayerMP[] getAllInstances() { List<IServerPlayerAPI> allInstances = getAllInstancesList(); return allInstances.toArray(new net.minecraft.entity.player.EntityPlayerMP[allInstances.size()]); } public static void beforeLocalConstructing(IServerPlayerAPI serverPlayer, net.minecraft.server.MinecraftServer paramMinecraftServer, net.minecraft.world.WorldServer paramWorldServer, com.mojang.authlib.GameProfile paramGameProfile, net.minecraft.server.management.ItemInWorldManager paramItemInWorldManager) { ServerPlayerAPI serverPlayerAPI = serverPlayer.getServerPlayerAPI(); if(serverPlayerAPI != null) serverPlayerAPI.load(); if(serverPlayerAPI != null) serverPlayerAPI.beforeLocalConstructing(paramMinecraftServer, paramWorldServer, paramGameProfile, paramItemInWorldManager); } public static void afterLocalConstructing(IServerPlayerAPI serverPlayer, net.minecraft.server.MinecraftServer paramMinecraftServer, net.minecraft.world.WorldServer paramWorldServer, com.mojang.authlib.GameProfile paramGameProfile, net.minecraft.server.management.ItemInWorldManager paramItemInWorldManager) { ServerPlayerAPI serverPlayerAPI = serverPlayer.getServerPlayerAPI(); if(serverPlayerAPI != null) serverPlayerAPI.afterLocalConstructing(paramMinecraftServer, paramWorldServer, paramGameProfile, paramItemInWorldManager); } public static ServerPlayerBase getServerPlayerBase(IServerPlayerAPI serverPlayer, String baseId) { ServerPlayerAPI serverPlayerAPI = serverPlayer.getServerPlayerAPI(); if(serverPlayerAPI != null) return serverPlayerAPI.getServerPlayerBase(baseId); return null; } public static Set<String> getServerPlayerBaseIds(IServerPlayerAPI serverPlayer) { ServerPlayerAPI serverPlayerAPI = serverPlayer.getServerPlayerAPI(); Set<String> result = null; if(serverPlayerAPI != null) result = serverPlayerAPI.getServerPlayerBaseIds(); else result = Collections.<String>emptySet(); return result; } public static Object dynamic(IServerPlayerAPI serverPlayer, String key, Object[] parameters) { ServerPlayerAPI serverPlayerAPI = serverPlayer.getServerPlayerAPI(); if(serverPlayerAPI != null) return serverPlayerAPI.dynamic(key, parameters); return null; } private static void sortBases(List<String> list, Map<String, String[]> allBaseSuperiors, Map<String, String[]> allBaseInferiors, String methodName) { new ServerPlayerBaseSorter(list, allBaseSuperiors, allBaseInferiors, methodName).Sort(); } private final static Map<String, String[]> EmptySortMap = Collections.unmodifiableMap(new HashMap<String, String[]>()); private static void sortDynamicBases(Map<String, List<String>> lists, Map<String, Map<String, String[]>> allBaseSuperiors, Map<String, Map<String, String[]>> allBaseInferiors, String key) { List<String> types = lists.get(key); if(types != null && types.size() > 1) sortBases(types, getDynamicSorters(key, types, allBaseSuperiors), getDynamicSorters(key, types, allBaseInferiors), key); } private static Map<String, String[]> getDynamicSorters(String key, List<String> toSort, Map<String, Map<String, String[]>> allBaseValues) { Map<String, String[]> superiors = null; Iterator<String> ids = toSort.iterator(); while(ids.hasNext()) { String id = ids.next(); Map<String, String[]> idSuperiors = allBaseValues.get(id); if(idSuperiors == null) continue; String[] keySuperiorIds = idSuperiors.get(key); if(keySuperiorIds != null && keySuperiorIds.length > 0) { if(superiors == null) superiors = new HashMap<String, String[]>(1); superiors.put(id, keySuperiorIds); } } return superiors != null ? superiors : EmptySortMap; } private ServerPlayerAPI(IServerPlayerAPI player) { this.player = player; } private void load() { Iterator<String> iterator = allBaseConstructors.keySet().iterator(); while(iterator.hasNext()) { String id = iterator.next(); ServerPlayerBase toAttach = createServerPlayerBase(id); toAttach.beforeBaseAttach(false); allBaseObjects.put(id, toAttach); baseObjectsToId.put(toAttach, id); } beforeLocalConstructingHooks = create(beforeLocalConstructingHookTypes); afterLocalConstructingHooks = create(afterLocalConstructingHookTypes); updateServerPlayerBases(); iterator = allBaseObjects.keySet().iterator(); while(iterator.hasNext()) allBaseObjects.get(iterator.next()).afterBaseAttach(false); } private ServerPlayerBase createServerPlayerBase(String id) { Constructor<?> contructor = allBaseConstructors.get(id); ServerPlayerBase base; try { if(contructor.getParameterTypes().length == 1) base = (ServerPlayerBase)contructor.newInstance(this); else base = (ServerPlayerBase)contructor.newInstance(this, id); } catch (Exception e) { throw new RuntimeException("Exception while creating a ServerPlayerBase of type '" + contructor.getDeclaringClass() + "'", e); } return base; } private void updateServerPlayerBases() { beforeAddExhaustionHooks = create(beforeAddExhaustionHookTypes); overrideAddExhaustionHooks = create(overrideAddExhaustionHookTypes); afterAddExhaustionHooks = create(afterAddExhaustionHookTypes); isAddExhaustionModded = beforeAddExhaustionHooks != null || overrideAddExhaustionHooks != null || afterAddExhaustionHooks != null; beforeAddExperienceHooks = create(beforeAddExperienceHookTypes); overrideAddExperienceHooks = create(overrideAddExperienceHookTypes); afterAddExperienceHooks = create(afterAddExperienceHookTypes); isAddExperienceModded = beforeAddExperienceHooks != null || overrideAddExperienceHooks != null || afterAddExperienceHooks != null; beforeAddExperienceLevelHooks = create(beforeAddExperienceLevelHookTypes); overrideAddExperienceLevelHooks = create(overrideAddExperienceLevelHookTypes); afterAddExperienceLevelHooks = create(afterAddExperienceLevelHookTypes); isAddExperienceLevelModded = beforeAddExperienceLevelHooks != null || overrideAddExperienceLevelHooks != null || afterAddExperienceLevelHooks != null; beforeAddMovementStatHooks = create(beforeAddMovementStatHookTypes); overrideAddMovementStatHooks = create(overrideAddMovementStatHookTypes); afterAddMovementStatHooks = create(afterAddMovementStatHookTypes); isAddMovementStatModded = beforeAddMovementStatHooks != null || overrideAddMovementStatHooks != null || afterAddMovementStatHooks != null; beforeAttackEntityFromHooks = create(beforeAttackEntityFromHookTypes); overrideAttackEntityFromHooks = create(overrideAttackEntityFromHookTypes); afterAttackEntityFromHooks = create(afterAttackEntityFromHookTypes); isAttackEntityFromModded = beforeAttackEntityFromHooks != null || overrideAttackEntityFromHooks != null || afterAttackEntityFromHooks != null; beforeAttackTargetEntityWithCurrentItemHooks = create(beforeAttackTargetEntityWithCurrentItemHookTypes); overrideAttackTargetEntityWithCurrentItemHooks = create(overrideAttackTargetEntityWithCurrentItemHookTypes); afterAttackTargetEntityWithCurrentItemHooks = create(afterAttackTargetEntityWithCurrentItemHookTypes); isAttackTargetEntityWithCurrentItemModded = beforeAttackTargetEntityWithCurrentItemHooks != null || overrideAttackTargetEntityWithCurrentItemHooks != null || afterAttackTargetEntityWithCurrentItemHooks != null; beforeCanBreatheUnderwaterHooks = create(beforeCanBreatheUnderwaterHookTypes); overrideCanBreatheUnderwaterHooks = create(overrideCanBreatheUnderwaterHookTypes); afterCanBreatheUnderwaterHooks = create(afterCanBreatheUnderwaterHookTypes); isCanBreatheUnderwaterModded = beforeCanBreatheUnderwaterHooks != null || overrideCanBreatheUnderwaterHooks != null || afterCanBreatheUnderwaterHooks != null; beforeCanHarvestBlockHooks = create(beforeCanHarvestBlockHookTypes); overrideCanHarvestBlockHooks = create(overrideCanHarvestBlockHookTypes); afterCanHarvestBlockHooks = create(afterCanHarvestBlockHookTypes); isCanHarvestBlockModded = beforeCanHarvestBlockHooks != null || overrideCanHarvestBlockHooks != null || afterCanHarvestBlockHooks != null; beforeCanPlayerEditHooks = create(beforeCanPlayerEditHookTypes); overrideCanPlayerEditHooks = create(overrideCanPlayerEditHookTypes); afterCanPlayerEditHooks = create(afterCanPlayerEditHookTypes); isCanPlayerEditModded = beforeCanPlayerEditHooks != null || overrideCanPlayerEditHooks != null || afterCanPlayerEditHooks != null; beforeCanTriggerWalkingHooks = create(beforeCanTriggerWalkingHookTypes); overrideCanTriggerWalkingHooks = create(overrideCanTriggerWalkingHookTypes); afterCanTriggerWalkingHooks = create(afterCanTriggerWalkingHookTypes); isCanTriggerWalkingModded = beforeCanTriggerWalkingHooks != null || overrideCanTriggerWalkingHooks != null || afterCanTriggerWalkingHooks != null; beforeClonePlayerHooks = create(beforeClonePlayerHookTypes); overrideClonePlayerHooks = create(overrideClonePlayerHookTypes); afterClonePlayerHooks = create(afterClonePlayerHookTypes); isClonePlayerModded = beforeClonePlayerHooks != null || overrideClonePlayerHooks != null || afterClonePlayerHooks != null; beforeDamageEntityHooks = create(beforeDamageEntityHookTypes); overrideDamageEntityHooks = create(overrideDamageEntityHookTypes); afterDamageEntityHooks = create(afterDamageEntityHookTypes); isDamageEntityModded = beforeDamageEntityHooks != null || overrideDamageEntityHooks != null || afterDamageEntityHooks != null; beforeDisplayGuiHooks = create(beforeDisplayGuiHookTypes); overrideDisplayGuiHooks = create(overrideDisplayGuiHookTypes); afterDisplayGuiHooks = create(afterDisplayGuiHookTypes); isDisplayGuiModded = beforeDisplayGuiHooks != null || overrideDisplayGuiHooks != null || afterDisplayGuiHooks != null; beforeDisplayGUIChestHooks = create(beforeDisplayGUIChestHookTypes); overrideDisplayGUIChestHooks = create(overrideDisplayGUIChestHookTypes); afterDisplayGUIChestHooks = create(afterDisplayGUIChestHookTypes); isDisplayGUIChestModded = beforeDisplayGUIChestHooks != null || overrideDisplayGUIChestHooks != null || afterDisplayGUIChestHooks != null; beforeDropOneItemHooks = create(beforeDropOneItemHookTypes); overrideDropOneItemHooks = create(overrideDropOneItemHookTypes); afterDropOneItemHooks = create(afterDropOneItemHookTypes); isDropOneItemModded = beforeDropOneItemHooks != null || overrideDropOneItemHooks != null || afterDropOneItemHooks != null; beforeDropPlayerItemWithRandomChoiceHooks = create(beforeDropPlayerItemWithRandomChoiceHookTypes); overrideDropPlayerItemWithRandomChoiceHooks = create(overrideDropPlayerItemWithRandomChoiceHookTypes); afterDropPlayerItemWithRandomChoiceHooks = create(afterDropPlayerItemWithRandomChoiceHookTypes); isDropPlayerItemWithRandomChoiceModded = beforeDropPlayerItemWithRandomChoiceHooks != null || overrideDropPlayerItemWithRandomChoiceHooks != null || afterDropPlayerItemWithRandomChoiceHooks != null; beforeFallHooks = create(beforeFallHookTypes); overrideFallHooks = create(overrideFallHookTypes); afterFallHooks = create(afterFallHookTypes); isFallModded = beforeFallHooks != null || overrideFallHooks != null || afterFallHooks != null; beforeGetAIMoveSpeedHooks = create(beforeGetAIMoveSpeedHookTypes); overrideGetAIMoveSpeedHooks = create(overrideGetAIMoveSpeedHookTypes); afterGetAIMoveSpeedHooks = create(afterGetAIMoveSpeedHookTypes); isGetAIMoveSpeedModded = beforeGetAIMoveSpeedHooks != null || overrideGetAIMoveSpeedHooks != null || afterGetAIMoveSpeedHooks != null; beforeGetBreakSpeedHooks = create(beforeGetBreakSpeedHookTypes); overrideGetBreakSpeedHooks = create(overrideGetBreakSpeedHookTypes); afterGetBreakSpeedHooks = create(afterGetBreakSpeedHookTypes); isGetBreakSpeedModded = beforeGetBreakSpeedHooks != null || overrideGetBreakSpeedHooks != null || afterGetBreakSpeedHooks != null; beforeGetDistanceSqHooks = create(beforeGetDistanceSqHookTypes); overrideGetDistanceSqHooks = create(overrideGetDistanceSqHookTypes); afterGetDistanceSqHooks = create(afterGetDistanceSqHookTypes); isGetDistanceSqModded = beforeGetDistanceSqHooks != null || overrideGetDistanceSqHooks != null || afterGetDistanceSqHooks != null; beforeGetBrightnessHooks = create(beforeGetBrightnessHookTypes); overrideGetBrightnessHooks = create(overrideGetBrightnessHookTypes); afterGetBrightnessHooks = create(afterGetBrightnessHookTypes); isGetBrightnessModded = beforeGetBrightnessHooks != null || overrideGetBrightnessHooks != null || afterGetBrightnessHooks != null; beforeGetEyeHeightHooks = create(beforeGetEyeHeightHookTypes); overrideGetEyeHeightHooks = create(overrideGetEyeHeightHookTypes); afterGetEyeHeightHooks = create(afterGetEyeHeightHookTypes); isGetEyeHeightModded = beforeGetEyeHeightHooks != null || overrideGetEyeHeightHooks != null || afterGetEyeHeightHooks != null; beforeHealHooks = create(beforeHealHookTypes); overrideHealHooks = create(overrideHealHookTypes); afterHealHooks = create(afterHealHookTypes); isHealModded = beforeHealHooks != null || overrideHealHooks != null || afterHealHooks != null; beforeIsEntityInsideOpaqueBlockHooks = create(beforeIsEntityInsideOpaqueBlockHookTypes); overrideIsEntityInsideOpaqueBlockHooks = create(overrideIsEntityInsideOpaqueBlockHookTypes); afterIsEntityInsideOpaqueBlockHooks = create(afterIsEntityInsideOpaqueBlockHookTypes); isIsEntityInsideOpaqueBlockModded = beforeIsEntityInsideOpaqueBlockHooks != null || overrideIsEntityInsideOpaqueBlockHooks != null || afterIsEntityInsideOpaqueBlockHooks != null; beforeIsInWaterHooks = create(beforeIsInWaterHookTypes); overrideIsInWaterHooks = create(overrideIsInWaterHookTypes); afterIsInWaterHooks = create(afterIsInWaterHookTypes); isIsInWaterModded = beforeIsInWaterHooks != null || overrideIsInWaterHooks != null || afterIsInWaterHooks != null; beforeIsInsideOfMaterialHooks = create(beforeIsInsideOfMaterialHookTypes); overrideIsInsideOfMaterialHooks = create(overrideIsInsideOfMaterialHookTypes); afterIsInsideOfMaterialHooks = create(afterIsInsideOfMaterialHookTypes); isIsInsideOfMaterialModded = beforeIsInsideOfMaterialHooks != null || overrideIsInsideOfMaterialHooks != null || afterIsInsideOfMaterialHooks != null; beforeIsOnLadderHooks = create(beforeIsOnLadderHookTypes); overrideIsOnLadderHooks = create(overrideIsOnLadderHookTypes); afterIsOnLadderHooks = create(afterIsOnLadderHookTypes); isIsOnLadderModded = beforeIsOnLadderHooks != null || overrideIsOnLadderHooks != null || afterIsOnLadderHooks != null; beforeIsPlayerSleepingHooks = create(beforeIsPlayerSleepingHookTypes); overrideIsPlayerSleepingHooks = create(overrideIsPlayerSleepingHookTypes); afterIsPlayerSleepingHooks = create(afterIsPlayerSleepingHookTypes); isIsPlayerSleepingModded = beforeIsPlayerSleepingHooks != null || overrideIsPlayerSleepingHooks != null || afterIsPlayerSleepingHooks != null; beforeIsSneakingHooks = create(beforeIsSneakingHookTypes); overrideIsSneakingHooks = create(overrideIsSneakingHookTypes); afterIsSneakingHooks = create(afterIsSneakingHookTypes); isIsSneakingModded = beforeIsSneakingHooks != null || overrideIsSneakingHooks != null || afterIsSneakingHooks != null; beforeJumpHooks = create(beforeJumpHookTypes); overrideJumpHooks = create(overrideJumpHookTypes); afterJumpHooks = create(afterJumpHookTypes); isJumpModded = beforeJumpHooks != null || overrideJumpHooks != null || afterJumpHooks != null; beforeKnockBackHooks = create(beforeKnockBackHookTypes); overrideKnockBackHooks = create(overrideKnockBackHookTypes); afterKnockBackHooks = create(afterKnockBackHookTypes); isKnockBackModded = beforeKnockBackHooks != null || overrideKnockBackHooks != null || afterKnockBackHooks != null; beforeMountEntityHooks = create(beforeMountEntityHookTypes); overrideMountEntityHooks = create(overrideMountEntityHookTypes); afterMountEntityHooks = create(afterMountEntityHookTypes); isMountEntityModded = beforeMountEntityHooks != null || overrideMountEntityHooks != null || afterMountEntityHooks != null; beforeMoveEntityHooks = create(beforeMoveEntityHookTypes); overrideMoveEntityHooks = create(overrideMoveEntityHookTypes); afterMoveEntityHooks = create(afterMoveEntityHookTypes); isMoveEntityModded = beforeMoveEntityHooks != null || overrideMoveEntityHooks != null || afterMoveEntityHooks != null; beforeMoveEntityWithHeadingHooks = create(beforeMoveEntityWithHeadingHookTypes); overrideMoveEntityWithHeadingHooks = create(overrideMoveEntityWithHeadingHookTypes); afterMoveEntityWithHeadingHooks = create(afterMoveEntityWithHeadingHookTypes); isMoveEntityWithHeadingModded = beforeMoveEntityWithHeadingHooks != null || overrideMoveEntityWithHeadingHooks != null || afterMoveEntityWithHeadingHooks != null; beforeMoveFlyingHooks = create(beforeMoveFlyingHookTypes); overrideMoveFlyingHooks = create(overrideMoveFlyingHookTypes); afterMoveFlyingHooks = create(afterMoveFlyingHookTypes); isMoveFlyingModded = beforeMoveFlyingHooks != null || overrideMoveFlyingHooks != null || afterMoveFlyingHooks != null; beforeOnDeathHooks = create(beforeOnDeathHookTypes); overrideOnDeathHooks = create(overrideOnDeathHookTypes); afterOnDeathHooks = create(afterOnDeathHookTypes); isOnDeathModded = beforeOnDeathHooks != null || overrideOnDeathHooks != null || afterOnDeathHooks != null; beforeOnLivingUpdateHooks = create(beforeOnLivingUpdateHookTypes); overrideOnLivingUpdateHooks = create(overrideOnLivingUpdateHookTypes); afterOnLivingUpdateHooks = create(afterOnLivingUpdateHookTypes); isOnLivingUpdateModded = beforeOnLivingUpdateHooks != null || overrideOnLivingUpdateHooks != null || afterOnLivingUpdateHooks != null; beforeOnKillEntityHooks = create(beforeOnKillEntityHookTypes); overrideOnKillEntityHooks = create(overrideOnKillEntityHookTypes); afterOnKillEntityHooks = create(afterOnKillEntityHookTypes); isOnKillEntityModded = beforeOnKillEntityHooks != null || overrideOnKillEntityHooks != null || afterOnKillEntityHooks != null; beforeOnStruckByLightningHooks = create(beforeOnStruckByLightningHookTypes); overrideOnStruckByLightningHooks = create(overrideOnStruckByLightningHookTypes); afterOnStruckByLightningHooks = create(afterOnStruckByLightningHookTypes); isOnStruckByLightningModded = beforeOnStruckByLightningHooks != null || overrideOnStruckByLightningHooks != null || afterOnStruckByLightningHooks != null; beforeOnUpdateHooks = create(beforeOnUpdateHookTypes); overrideOnUpdateHooks = create(overrideOnUpdateHookTypes); afterOnUpdateHooks = create(afterOnUpdateHookTypes); isOnUpdateModded = beforeOnUpdateHooks != null || overrideOnUpdateHooks != null || afterOnUpdateHooks != null; beforeOnUpdateEntityHooks = create(beforeOnUpdateEntityHookTypes); overrideOnUpdateEntityHooks = create(overrideOnUpdateEntityHookTypes); afterOnUpdateEntityHooks = create(afterOnUpdateEntityHookTypes); isOnUpdateEntityModded = beforeOnUpdateEntityHooks != null || overrideOnUpdateEntityHooks != null || afterOnUpdateEntityHooks != null; beforeReadEntityFromNBTHooks = create(beforeReadEntityFromNBTHookTypes); overrideReadEntityFromNBTHooks = create(overrideReadEntityFromNBTHookTypes); afterReadEntityFromNBTHooks = create(afterReadEntityFromNBTHookTypes); isReadEntityFromNBTModded = beforeReadEntityFromNBTHooks != null || overrideReadEntityFromNBTHooks != null || afterReadEntityFromNBTHooks != null; beforeSetDeadHooks = create(beforeSetDeadHookTypes); overrideSetDeadHooks = create(overrideSetDeadHookTypes); afterSetDeadHooks = create(afterSetDeadHookTypes); isSetDeadModded = beforeSetDeadHooks != null || overrideSetDeadHooks != null || afterSetDeadHooks != null; beforeSetEntityActionStateHooks = create(beforeSetEntityActionStateHookTypes); overrideSetEntityActionStateHooks = create(overrideSetEntityActionStateHookTypes); afterSetEntityActionStateHooks = create(afterSetEntityActionStateHookTypes); isSetEntityActionStateModded = beforeSetEntityActionStateHooks != null || overrideSetEntityActionStateHooks != null || afterSetEntityActionStateHooks != null; beforeSetPositionHooks = create(beforeSetPositionHookTypes); overrideSetPositionHooks = create(overrideSetPositionHookTypes); afterSetPositionHooks = create(afterSetPositionHookTypes); isSetPositionModded = beforeSetPositionHooks != null || overrideSetPositionHooks != null || afterSetPositionHooks != null; beforeSetSneakingHooks = create(beforeSetSneakingHookTypes); overrideSetSneakingHooks = create(overrideSetSneakingHookTypes); afterSetSneakingHooks = create(afterSetSneakingHookTypes); isSetSneakingModded = beforeSetSneakingHooks != null || overrideSetSneakingHooks != null || afterSetSneakingHooks != null; beforeSetSprintingHooks = create(beforeSetSprintingHookTypes); overrideSetSprintingHooks = create(overrideSetSprintingHookTypes); afterSetSprintingHooks = create(afterSetSprintingHookTypes); isSetSprintingModded = beforeSetSprintingHooks != null || overrideSetSprintingHooks != null || afterSetSprintingHooks != null; beforeSwingItemHooks = create(beforeSwingItemHookTypes); overrideSwingItemHooks = create(overrideSwingItemHookTypes); afterSwingItemHooks = create(afterSwingItemHookTypes); isSwingItemModded = beforeSwingItemHooks != null || overrideSwingItemHooks != null || afterSwingItemHooks != null; beforeUpdateEntityActionStateHooks = create(beforeUpdateEntityActionStateHookTypes); overrideUpdateEntityActionStateHooks = create(overrideUpdateEntityActionStateHookTypes); afterUpdateEntityActionStateHooks = create(afterUpdateEntityActionStateHookTypes); isUpdateEntityActionStateModded = beforeUpdateEntityActionStateHooks != null || overrideUpdateEntityActionStateHooks != null || afterUpdateEntityActionStateHooks != null; beforeUpdatePotionEffectsHooks = create(beforeUpdatePotionEffectsHookTypes); overrideUpdatePotionEffectsHooks = create(overrideUpdatePotionEffectsHookTypes); afterUpdatePotionEffectsHooks = create(afterUpdatePotionEffectsHookTypes); isUpdatePotionEffectsModded = beforeUpdatePotionEffectsHooks != null || overrideUpdatePotionEffectsHooks != null || afterUpdatePotionEffectsHooks != null; beforeUpdateRiddenHooks = create(beforeUpdateRiddenHookTypes); overrideUpdateRiddenHooks = create(overrideUpdateRiddenHookTypes); afterUpdateRiddenHooks = create(afterUpdateRiddenHookTypes); isUpdateRiddenModded = beforeUpdateRiddenHooks != null || overrideUpdateRiddenHooks != null || afterUpdateRiddenHooks != null; beforeWakeUpPlayerHooks = create(beforeWakeUpPlayerHookTypes); overrideWakeUpPlayerHooks = create(overrideWakeUpPlayerHookTypes); afterWakeUpPlayerHooks = create(afterWakeUpPlayerHookTypes); isWakeUpPlayerModded = beforeWakeUpPlayerHooks != null || overrideWakeUpPlayerHooks != null || afterWakeUpPlayerHooks != null; beforeWriteEntityToNBTHooks = create(beforeWriteEntityToNBTHookTypes); overrideWriteEntityToNBTHooks = create(overrideWriteEntityToNBTHookTypes); afterWriteEntityToNBTHooks = create(afterWriteEntityToNBTHookTypes); isWriteEntityToNBTModded = beforeWriteEntityToNBTHooks != null || overrideWriteEntityToNBTHooks != null || afterWriteEntityToNBTHooks != null; } private void attachServerPlayerBase(String id) { ServerPlayerBase toAttach = createServerPlayerBase(id); toAttach.beforeBaseAttach(true); allBaseObjects.put(id, toAttach); updateServerPlayerBases(); toAttach.afterBaseAttach(true); } private void detachServerPlayerBase(String id) { ServerPlayerBase toDetach = allBaseObjects.get(id); toDetach.beforeBaseDetach(true); allBaseObjects.remove(id); toDetach.afterBaseDetach(true); } private ServerPlayerBase[] create(List<String> types) { if(types.isEmpty()) return null; ServerPlayerBase[] result = new ServerPlayerBase[types.size()]; for(int i = 0; i < result.length; i++) result[i] = getServerPlayerBase(types.get(i)); return result; } private void beforeLocalConstructing(net.minecraft.server.MinecraftServer paramMinecraftServer, net.minecraft.world.WorldServer paramWorldServer, com.mojang.authlib.GameProfile paramGameProfile, net.minecraft.server.management.ItemInWorldManager paramItemInWorldManager) { if(beforeLocalConstructingHooks != null) for(int i = beforeLocalConstructingHooks.length - 1; i >= 0 ; i--) beforeLocalConstructingHooks[i].beforeLocalConstructing(paramMinecraftServer, paramWorldServer, paramGameProfile, paramItemInWorldManager); beforeLocalConstructingHooks = null; } private void afterLocalConstructing(net.minecraft.server.MinecraftServer paramMinecraftServer, net.minecraft.world.WorldServer paramWorldServer, com.mojang.authlib.GameProfile paramGameProfile, net.minecraft.server.management.ItemInWorldManager paramItemInWorldManager) { if(afterLocalConstructingHooks != null) for(int i = 0; i < afterLocalConstructingHooks.length; i++) afterLocalConstructingHooks[i].afterLocalConstructing(paramMinecraftServer, paramWorldServer, paramGameProfile, paramItemInWorldManager); afterLocalConstructingHooks = null; } public ServerPlayerBase getServerPlayerBase(String id) { return allBaseObjects.get(id); } public Set<String> getServerPlayerBaseIds() { return unmodifiableAllBaseIds; } public Object dynamic(String key, Object[] parameters) { key = key.replace('.', '_').replace(' ', '_'); executeAll(key, parameters, beforeDynamicHookTypes, beforeDynamicHookMethods, true); Object result = dynamicOverwritten(key, parameters, null); executeAll(key, parameters, afterDynamicHookTypes, afterDynamicHookMethods, false); return result; } public Object dynamicOverwritten(String key, Object[] parameters, ServerPlayerBase overwriter) { List<String> overrideIds = overrideDynamicHookTypes.get(key); String id = null; if(overrideIds != null) if(overwriter != null) { id = baseObjectsToId.get(overwriter); int index = overrideIds.indexOf(id); if(index > 0) id = overrideIds.get(index - 1); else id = null; } else if(overrideIds.size() > 0) id = overrideIds.get(overrideIds.size() - 1); Map<Class<?>, Map<String, Method>> methodMap; if(id == null) { id = keysToVirtualIds.get(key); if(id == null) return null; methodMap = virtualDynamicHookMethods; } else methodMap = overrideDynamicHookMethods; Map<String, Method> methods = methodMap.get(allBaseConstructors.get(id).getDeclaringClass()); if(methods == null) return null; Method method = methods.get(key); if(method == null) return null; return execute(getServerPlayerBase(id), method, parameters); } private void executeAll(String key, Object[] parameters, Map<String, List<String>> dynamicHookTypes, Map<Class<?>, Map<String, Method>> dynamicHookMethods, boolean reverse) { List<String> beforeIds = dynamicHookTypes.get(key); if(beforeIds == null) return; for(int i= reverse ? beforeIds.size() - 1 : 0; reverse ? i >= 0 : i < beforeIds.size(); i = i + (reverse ? -1 : 1)) { String id = beforeIds.get(i); ServerPlayerBase base = getServerPlayerBase(id); Class<?> type = base.getClass(); Map<String, Method> methods = dynamicHookMethods.get(type); if(methods == null) continue; Method method = methods.get(key); if(method == null) continue; execute(base, method, parameters); } } private Object execute(ServerPlayerBase base, Method method, Object[] parameters) { try { return method.invoke(base, parameters); } catch(Exception e) { throw new RuntimeException("Exception while invoking dynamic method", e); } } public static void addExhaustion(IServerPlayerAPI target, float paramFloat) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isAddExhaustionModded) serverPlayerAPI.addExhaustion(paramFloat); else target.localAddExhaustion(paramFloat); } private void addExhaustion(float paramFloat) { if(beforeAddExhaustionHooks != null) for(int i = beforeAddExhaustionHooks.length - 1; i >= 0 ; i--) beforeAddExhaustionHooks[i].beforeAddExhaustion(paramFloat); if(overrideAddExhaustionHooks != null) overrideAddExhaustionHooks[overrideAddExhaustionHooks.length - 1].addExhaustion(paramFloat); else player.localAddExhaustion(paramFloat); if(afterAddExhaustionHooks != null) for(int i = 0; i < afterAddExhaustionHooks.length; i++) afterAddExhaustionHooks[i].afterAddExhaustion(paramFloat); } protected ServerPlayerBase GetOverwrittenAddExhaustion(ServerPlayerBase overWriter) { if (overrideAddExhaustionHooks == null) return overWriter; for(int i = 0; i < overrideAddExhaustionHooks.length; i++) if(overrideAddExhaustionHooks[i] == overWriter) if(i == 0) return null; else return overrideAddExhaustionHooks[i - 1]; return overWriter; } private final static List<String> beforeAddExhaustionHookTypes = new LinkedList<String>(); private final static List<String> overrideAddExhaustionHookTypes = new LinkedList<String>(); private final static List<String> afterAddExhaustionHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeAddExhaustionHooks; private ServerPlayerBase[] overrideAddExhaustionHooks; private ServerPlayerBase[] afterAddExhaustionHooks; public boolean isAddExhaustionModded; private static final Map<String, String[]> allBaseBeforeAddExhaustionSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeAddExhaustionInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideAddExhaustionSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideAddExhaustionInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterAddExhaustionSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterAddExhaustionInferiors = new Hashtable<String, String[]>(0); public static void addExperience(IServerPlayerAPI target, int paramInt) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isAddExperienceModded) serverPlayerAPI.addExperience(paramInt); else target.localAddExperience(paramInt); } private void addExperience(int paramInt) { if(beforeAddExperienceHooks != null) for(int i = beforeAddExperienceHooks.length - 1; i >= 0 ; i--) beforeAddExperienceHooks[i].beforeAddExperience(paramInt); if(overrideAddExperienceHooks != null) overrideAddExperienceHooks[overrideAddExperienceHooks.length - 1].addExperience(paramInt); else player.localAddExperience(paramInt); if(afterAddExperienceHooks != null) for(int i = 0; i < afterAddExperienceHooks.length; i++) afterAddExperienceHooks[i].afterAddExperience(paramInt); } protected ServerPlayerBase GetOverwrittenAddExperience(ServerPlayerBase overWriter) { if (overrideAddExperienceHooks == null) return overWriter; for(int i = 0; i < overrideAddExperienceHooks.length; i++) if(overrideAddExperienceHooks[i] == overWriter) if(i == 0) return null; else return overrideAddExperienceHooks[i - 1]; return overWriter; } private final static List<String> beforeAddExperienceHookTypes = new LinkedList<String>(); private final static List<String> overrideAddExperienceHookTypes = new LinkedList<String>(); private final static List<String> afterAddExperienceHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeAddExperienceHooks; private ServerPlayerBase[] overrideAddExperienceHooks; private ServerPlayerBase[] afterAddExperienceHooks; public boolean isAddExperienceModded; private static final Map<String, String[]> allBaseBeforeAddExperienceSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeAddExperienceInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideAddExperienceSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideAddExperienceInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterAddExperienceSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterAddExperienceInferiors = new Hashtable<String, String[]>(0); public static void addExperienceLevel(IServerPlayerAPI target, int paramInt) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isAddExperienceLevelModded) serverPlayerAPI.addExperienceLevel(paramInt); else target.localAddExperienceLevel(paramInt); } private void addExperienceLevel(int paramInt) { if(beforeAddExperienceLevelHooks != null) for(int i = beforeAddExperienceLevelHooks.length - 1; i >= 0 ; i--) beforeAddExperienceLevelHooks[i].beforeAddExperienceLevel(paramInt); if(overrideAddExperienceLevelHooks != null) overrideAddExperienceLevelHooks[overrideAddExperienceLevelHooks.length - 1].addExperienceLevel(paramInt); else player.localAddExperienceLevel(paramInt); if(afterAddExperienceLevelHooks != null) for(int i = 0; i < afterAddExperienceLevelHooks.length; i++) afterAddExperienceLevelHooks[i].afterAddExperienceLevel(paramInt); } protected ServerPlayerBase GetOverwrittenAddExperienceLevel(ServerPlayerBase overWriter) { if (overrideAddExperienceLevelHooks == null) return overWriter; for(int i = 0; i < overrideAddExperienceLevelHooks.length; i++) if(overrideAddExperienceLevelHooks[i] == overWriter) if(i == 0) return null; else return overrideAddExperienceLevelHooks[i - 1]; return overWriter; } private final static List<String> beforeAddExperienceLevelHookTypes = new LinkedList<String>(); private final static List<String> overrideAddExperienceLevelHookTypes = new LinkedList<String>(); private final static List<String> afterAddExperienceLevelHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeAddExperienceLevelHooks; private ServerPlayerBase[] overrideAddExperienceLevelHooks; private ServerPlayerBase[] afterAddExperienceLevelHooks; public boolean isAddExperienceLevelModded; private static final Map<String, String[]> allBaseBeforeAddExperienceLevelSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeAddExperienceLevelInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideAddExperienceLevelSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideAddExperienceLevelInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterAddExperienceLevelSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterAddExperienceLevelInferiors = new Hashtable<String, String[]>(0); public static void addMovementStat(IServerPlayerAPI target, double paramDouble1, double paramDouble2, double paramDouble3) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isAddMovementStatModded) serverPlayerAPI.addMovementStat(paramDouble1, paramDouble2, paramDouble3); else target.localAddMovementStat(paramDouble1, paramDouble2, paramDouble3); } private void addMovementStat(double paramDouble1, double paramDouble2, double paramDouble3) { if(beforeAddMovementStatHooks != null) for(int i = beforeAddMovementStatHooks.length - 1; i >= 0 ; i--) beforeAddMovementStatHooks[i].beforeAddMovementStat(paramDouble1, paramDouble2, paramDouble3); if(overrideAddMovementStatHooks != null) overrideAddMovementStatHooks[overrideAddMovementStatHooks.length - 1].addMovementStat(paramDouble1, paramDouble2, paramDouble3); else player.localAddMovementStat(paramDouble1, paramDouble2, paramDouble3); if(afterAddMovementStatHooks != null) for(int i = 0; i < afterAddMovementStatHooks.length; i++) afterAddMovementStatHooks[i].afterAddMovementStat(paramDouble1, paramDouble2, paramDouble3); } protected ServerPlayerBase GetOverwrittenAddMovementStat(ServerPlayerBase overWriter) { if (overrideAddMovementStatHooks == null) return overWriter; for(int i = 0; i < overrideAddMovementStatHooks.length; i++) if(overrideAddMovementStatHooks[i] == overWriter) if(i == 0) return null; else return overrideAddMovementStatHooks[i - 1]; return overWriter; } private final static List<String> beforeAddMovementStatHookTypes = new LinkedList<String>(); private final static List<String> overrideAddMovementStatHookTypes = new LinkedList<String>(); private final static List<String> afterAddMovementStatHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeAddMovementStatHooks; private ServerPlayerBase[] overrideAddMovementStatHooks; private ServerPlayerBase[] afterAddMovementStatHooks; public boolean isAddMovementStatModded; private static final Map<String, String[]> allBaseBeforeAddMovementStatSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeAddMovementStatInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideAddMovementStatSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideAddMovementStatInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterAddMovementStatSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterAddMovementStatInferiors = new Hashtable<String, String[]>(0); public static boolean attackEntityFrom(IServerPlayerAPI target, net.minecraft.util.DamageSource paramDamageSource, float paramFloat) { boolean _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isAttackEntityFromModded) _result = serverPlayerAPI.attackEntityFrom(paramDamageSource, paramFloat); else _result = target.localAttackEntityFrom(paramDamageSource, paramFloat); return _result; } private boolean attackEntityFrom(net.minecraft.util.DamageSource paramDamageSource, float paramFloat) { if(beforeAttackEntityFromHooks != null) for(int i = beforeAttackEntityFromHooks.length - 1; i >= 0 ; i--) beforeAttackEntityFromHooks[i].beforeAttackEntityFrom(paramDamageSource, paramFloat); boolean _result; if(overrideAttackEntityFromHooks != null) _result = overrideAttackEntityFromHooks[overrideAttackEntityFromHooks.length - 1].attackEntityFrom(paramDamageSource, paramFloat); else _result = player.localAttackEntityFrom(paramDamageSource, paramFloat); if(afterAttackEntityFromHooks != null) for(int i = 0; i < afterAttackEntityFromHooks.length; i++) afterAttackEntityFromHooks[i].afterAttackEntityFrom(paramDamageSource, paramFloat); return _result; } protected ServerPlayerBase GetOverwrittenAttackEntityFrom(ServerPlayerBase overWriter) { if (overrideAttackEntityFromHooks == null) return overWriter; for(int i = 0; i < overrideAttackEntityFromHooks.length; i++) if(overrideAttackEntityFromHooks[i] == overWriter) if(i == 0) return null; else return overrideAttackEntityFromHooks[i - 1]; return overWriter; } private final static List<String> beforeAttackEntityFromHookTypes = new LinkedList<String>(); private final static List<String> overrideAttackEntityFromHookTypes = new LinkedList<String>(); private final static List<String> afterAttackEntityFromHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeAttackEntityFromHooks; private ServerPlayerBase[] overrideAttackEntityFromHooks; private ServerPlayerBase[] afterAttackEntityFromHooks; public boolean isAttackEntityFromModded; private static final Map<String, String[]> allBaseBeforeAttackEntityFromSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeAttackEntityFromInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideAttackEntityFromSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideAttackEntityFromInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterAttackEntityFromSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterAttackEntityFromInferiors = new Hashtable<String, String[]>(0); public static void attackTargetEntityWithCurrentItem(IServerPlayerAPI target, net.minecraft.entity.Entity paramEntity) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isAttackTargetEntityWithCurrentItemModded) serverPlayerAPI.attackTargetEntityWithCurrentItem(paramEntity); else target.localAttackTargetEntityWithCurrentItem(paramEntity); } private void attackTargetEntityWithCurrentItem(net.minecraft.entity.Entity paramEntity) { if(beforeAttackTargetEntityWithCurrentItemHooks != null) for(int i = beforeAttackTargetEntityWithCurrentItemHooks.length - 1; i >= 0 ; i--) beforeAttackTargetEntityWithCurrentItemHooks[i].beforeAttackTargetEntityWithCurrentItem(paramEntity); if(overrideAttackTargetEntityWithCurrentItemHooks != null) overrideAttackTargetEntityWithCurrentItemHooks[overrideAttackTargetEntityWithCurrentItemHooks.length - 1].attackTargetEntityWithCurrentItem(paramEntity); else player.localAttackTargetEntityWithCurrentItem(paramEntity); if(afterAttackTargetEntityWithCurrentItemHooks != null) for(int i = 0; i < afterAttackTargetEntityWithCurrentItemHooks.length; i++) afterAttackTargetEntityWithCurrentItemHooks[i].afterAttackTargetEntityWithCurrentItem(paramEntity); } protected ServerPlayerBase GetOverwrittenAttackTargetEntityWithCurrentItem(ServerPlayerBase overWriter) { if (overrideAttackTargetEntityWithCurrentItemHooks == null) return overWriter; for(int i = 0; i < overrideAttackTargetEntityWithCurrentItemHooks.length; i++) if(overrideAttackTargetEntityWithCurrentItemHooks[i] == overWriter) if(i == 0) return null; else return overrideAttackTargetEntityWithCurrentItemHooks[i - 1]; return overWriter; } private final static List<String> beforeAttackTargetEntityWithCurrentItemHookTypes = new LinkedList<String>(); private final static List<String> overrideAttackTargetEntityWithCurrentItemHookTypes = new LinkedList<String>(); private final static List<String> afterAttackTargetEntityWithCurrentItemHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeAttackTargetEntityWithCurrentItemHooks; private ServerPlayerBase[] overrideAttackTargetEntityWithCurrentItemHooks; private ServerPlayerBase[] afterAttackTargetEntityWithCurrentItemHooks; public boolean isAttackTargetEntityWithCurrentItemModded; private static final Map<String, String[]> allBaseBeforeAttackTargetEntityWithCurrentItemSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeAttackTargetEntityWithCurrentItemInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideAttackTargetEntityWithCurrentItemSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideAttackTargetEntityWithCurrentItemInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterAttackTargetEntityWithCurrentItemSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterAttackTargetEntityWithCurrentItemInferiors = new Hashtable<String, String[]>(0); public static boolean canBreatheUnderwater(IServerPlayerAPI target) { boolean _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isCanBreatheUnderwaterModded) _result = serverPlayerAPI.canBreatheUnderwater(); else _result = target.localCanBreatheUnderwater(); return _result; } private boolean canBreatheUnderwater() { if(beforeCanBreatheUnderwaterHooks != null) for(int i = beforeCanBreatheUnderwaterHooks.length - 1; i >= 0 ; i--) beforeCanBreatheUnderwaterHooks[i].beforeCanBreatheUnderwater(); boolean _result; if(overrideCanBreatheUnderwaterHooks != null) _result = overrideCanBreatheUnderwaterHooks[overrideCanBreatheUnderwaterHooks.length - 1].canBreatheUnderwater(); else _result = player.localCanBreatheUnderwater(); if(afterCanBreatheUnderwaterHooks != null) for(int i = 0; i < afterCanBreatheUnderwaterHooks.length; i++) afterCanBreatheUnderwaterHooks[i].afterCanBreatheUnderwater(); return _result; } protected ServerPlayerBase GetOverwrittenCanBreatheUnderwater(ServerPlayerBase overWriter) { if (overrideCanBreatheUnderwaterHooks == null) return overWriter; for(int i = 0; i < overrideCanBreatheUnderwaterHooks.length; i++) if(overrideCanBreatheUnderwaterHooks[i] == overWriter) if(i == 0) return null; else return overrideCanBreatheUnderwaterHooks[i - 1]; return overWriter; } private final static List<String> beforeCanBreatheUnderwaterHookTypes = new LinkedList<String>(); private final static List<String> overrideCanBreatheUnderwaterHookTypes = new LinkedList<String>(); private final static List<String> afterCanBreatheUnderwaterHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeCanBreatheUnderwaterHooks; private ServerPlayerBase[] overrideCanBreatheUnderwaterHooks; private ServerPlayerBase[] afterCanBreatheUnderwaterHooks; public boolean isCanBreatheUnderwaterModded; private static final Map<String, String[]> allBaseBeforeCanBreatheUnderwaterSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeCanBreatheUnderwaterInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideCanBreatheUnderwaterSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideCanBreatheUnderwaterInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterCanBreatheUnderwaterSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterCanBreatheUnderwaterInferiors = new Hashtable<String, String[]>(0); public static boolean canHarvestBlock(IServerPlayerAPI target, net.minecraft.block.Block paramBlock) { boolean _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isCanHarvestBlockModded) _result = serverPlayerAPI.canHarvestBlock(paramBlock); else _result = target.localCanHarvestBlock(paramBlock); return _result; } private boolean canHarvestBlock(net.minecraft.block.Block paramBlock) { if(beforeCanHarvestBlockHooks != null) for(int i = beforeCanHarvestBlockHooks.length - 1; i >= 0 ; i--) beforeCanHarvestBlockHooks[i].beforeCanHarvestBlock(paramBlock); boolean _result; if(overrideCanHarvestBlockHooks != null) _result = overrideCanHarvestBlockHooks[overrideCanHarvestBlockHooks.length - 1].canHarvestBlock(paramBlock); else _result = player.localCanHarvestBlock(paramBlock); if(afterCanHarvestBlockHooks != null) for(int i = 0; i < afterCanHarvestBlockHooks.length; i++) afterCanHarvestBlockHooks[i].afterCanHarvestBlock(paramBlock); return _result; } protected ServerPlayerBase GetOverwrittenCanHarvestBlock(ServerPlayerBase overWriter) { if (overrideCanHarvestBlockHooks == null) return overWriter; for(int i = 0; i < overrideCanHarvestBlockHooks.length; i++) if(overrideCanHarvestBlockHooks[i] == overWriter) if(i == 0) return null; else return overrideCanHarvestBlockHooks[i - 1]; return overWriter; } private final static List<String> beforeCanHarvestBlockHookTypes = new LinkedList<String>(); private final static List<String> overrideCanHarvestBlockHookTypes = new LinkedList<String>(); private final static List<String> afterCanHarvestBlockHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeCanHarvestBlockHooks; private ServerPlayerBase[] overrideCanHarvestBlockHooks; private ServerPlayerBase[] afterCanHarvestBlockHooks; public boolean isCanHarvestBlockModded; private static final Map<String, String[]> allBaseBeforeCanHarvestBlockSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeCanHarvestBlockInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideCanHarvestBlockSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideCanHarvestBlockInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterCanHarvestBlockSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterCanHarvestBlockInferiors = new Hashtable<String, String[]>(0); public static boolean canPlayerEdit(IServerPlayerAPI target, net.minecraft.util.BlockPos paramBlockPos, net.minecraft.util.EnumFacing paramEnumFacing, net.minecraft.item.ItemStack paramItemStack) { boolean _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isCanPlayerEditModded) _result = serverPlayerAPI.canPlayerEdit(paramBlockPos, paramEnumFacing, paramItemStack); else _result = target.localCanPlayerEdit(paramBlockPos, paramEnumFacing, paramItemStack); return _result; } private boolean canPlayerEdit(net.minecraft.util.BlockPos paramBlockPos, net.minecraft.util.EnumFacing paramEnumFacing, net.minecraft.item.ItemStack paramItemStack) { if(beforeCanPlayerEditHooks != null) for(int i = beforeCanPlayerEditHooks.length - 1; i >= 0 ; i--) beforeCanPlayerEditHooks[i].beforeCanPlayerEdit(paramBlockPos, paramEnumFacing, paramItemStack); boolean _result; if(overrideCanPlayerEditHooks != null) _result = overrideCanPlayerEditHooks[overrideCanPlayerEditHooks.length - 1].canPlayerEdit(paramBlockPos, paramEnumFacing, paramItemStack); else _result = player.localCanPlayerEdit(paramBlockPos, paramEnumFacing, paramItemStack); if(afterCanPlayerEditHooks != null) for(int i = 0; i < afterCanPlayerEditHooks.length; i++) afterCanPlayerEditHooks[i].afterCanPlayerEdit(paramBlockPos, paramEnumFacing, paramItemStack); return _result; } protected ServerPlayerBase GetOverwrittenCanPlayerEdit(ServerPlayerBase overWriter) { if (overrideCanPlayerEditHooks == null) return overWriter; for(int i = 0; i < overrideCanPlayerEditHooks.length; i++) if(overrideCanPlayerEditHooks[i] == overWriter) if(i == 0) return null; else return overrideCanPlayerEditHooks[i - 1]; return overWriter; } private final static List<String> beforeCanPlayerEditHookTypes = new LinkedList<String>(); private final static List<String> overrideCanPlayerEditHookTypes = new LinkedList<String>(); private final static List<String> afterCanPlayerEditHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeCanPlayerEditHooks; private ServerPlayerBase[] overrideCanPlayerEditHooks; private ServerPlayerBase[] afterCanPlayerEditHooks; public boolean isCanPlayerEditModded; private static final Map<String, String[]> allBaseBeforeCanPlayerEditSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeCanPlayerEditInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideCanPlayerEditSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideCanPlayerEditInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterCanPlayerEditSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterCanPlayerEditInferiors = new Hashtable<String, String[]>(0); public static boolean canTriggerWalking(IServerPlayerAPI target) { boolean _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isCanTriggerWalkingModded) _result = serverPlayerAPI.canTriggerWalking(); else _result = target.localCanTriggerWalking(); return _result; } private boolean canTriggerWalking() { if(beforeCanTriggerWalkingHooks != null) for(int i = beforeCanTriggerWalkingHooks.length - 1; i >= 0 ; i--) beforeCanTriggerWalkingHooks[i].beforeCanTriggerWalking(); boolean _result; if(overrideCanTriggerWalkingHooks != null) _result = overrideCanTriggerWalkingHooks[overrideCanTriggerWalkingHooks.length - 1].canTriggerWalking(); else _result = player.localCanTriggerWalking(); if(afterCanTriggerWalkingHooks != null) for(int i = 0; i < afterCanTriggerWalkingHooks.length; i++) afterCanTriggerWalkingHooks[i].afterCanTriggerWalking(); return _result; } protected ServerPlayerBase GetOverwrittenCanTriggerWalking(ServerPlayerBase overWriter) { if (overrideCanTriggerWalkingHooks == null) return overWriter; for(int i = 0; i < overrideCanTriggerWalkingHooks.length; i++) if(overrideCanTriggerWalkingHooks[i] == overWriter) if(i == 0) return null; else return overrideCanTriggerWalkingHooks[i - 1]; return overWriter; } private final static List<String> beforeCanTriggerWalkingHookTypes = new LinkedList<String>(); private final static List<String> overrideCanTriggerWalkingHookTypes = new LinkedList<String>(); private final static List<String> afterCanTriggerWalkingHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeCanTriggerWalkingHooks; private ServerPlayerBase[] overrideCanTriggerWalkingHooks; private ServerPlayerBase[] afterCanTriggerWalkingHooks; public boolean isCanTriggerWalkingModded; private static final Map<String, String[]> allBaseBeforeCanTriggerWalkingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeCanTriggerWalkingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideCanTriggerWalkingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideCanTriggerWalkingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterCanTriggerWalkingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterCanTriggerWalkingInferiors = new Hashtable<String, String[]>(0); public static void clonePlayer(IServerPlayerAPI target, net.minecraft.entity.player.EntityPlayer paramEntityPlayer, boolean paramBoolean) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isClonePlayerModded) serverPlayerAPI.clonePlayer(paramEntityPlayer, paramBoolean); else target.localClonePlayer(paramEntityPlayer, paramBoolean); } private void clonePlayer(net.minecraft.entity.player.EntityPlayer paramEntityPlayer, boolean paramBoolean) { if(beforeClonePlayerHooks != null) for(int i = beforeClonePlayerHooks.length - 1; i >= 0 ; i--) beforeClonePlayerHooks[i].beforeClonePlayer(paramEntityPlayer, paramBoolean); if(overrideClonePlayerHooks != null) overrideClonePlayerHooks[overrideClonePlayerHooks.length - 1].clonePlayer(paramEntityPlayer, paramBoolean); else player.localClonePlayer(paramEntityPlayer, paramBoolean); if(afterClonePlayerHooks != null) for(int i = 0; i < afterClonePlayerHooks.length; i++) afterClonePlayerHooks[i].afterClonePlayer(paramEntityPlayer, paramBoolean); } protected ServerPlayerBase GetOverwrittenClonePlayer(ServerPlayerBase overWriter) { if (overrideClonePlayerHooks == null) return overWriter; for(int i = 0; i < overrideClonePlayerHooks.length; i++) if(overrideClonePlayerHooks[i] == overWriter) if(i == 0) return null; else return overrideClonePlayerHooks[i - 1]; return overWriter; } private final static List<String> beforeClonePlayerHookTypes = new LinkedList<String>(); private final static List<String> overrideClonePlayerHookTypes = new LinkedList<String>(); private final static List<String> afterClonePlayerHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeClonePlayerHooks; private ServerPlayerBase[] overrideClonePlayerHooks; private ServerPlayerBase[] afterClonePlayerHooks; public boolean isClonePlayerModded; private static final Map<String, String[]> allBaseBeforeClonePlayerSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeClonePlayerInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideClonePlayerSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideClonePlayerInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterClonePlayerSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterClonePlayerInferiors = new Hashtable<String, String[]>(0); public static void damageEntity(IServerPlayerAPI target, net.minecraft.util.DamageSource paramDamageSource, float paramFloat) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isDamageEntityModded) serverPlayerAPI.damageEntity(paramDamageSource, paramFloat); else target.localDamageEntity(paramDamageSource, paramFloat); } private void damageEntity(net.minecraft.util.DamageSource paramDamageSource, float paramFloat) { if(beforeDamageEntityHooks != null) for(int i = beforeDamageEntityHooks.length - 1; i >= 0 ; i--) beforeDamageEntityHooks[i].beforeDamageEntity(paramDamageSource, paramFloat); if(overrideDamageEntityHooks != null) overrideDamageEntityHooks[overrideDamageEntityHooks.length - 1].damageEntity(paramDamageSource, paramFloat); else player.localDamageEntity(paramDamageSource, paramFloat); if(afterDamageEntityHooks != null) for(int i = 0; i < afterDamageEntityHooks.length; i++) afterDamageEntityHooks[i].afterDamageEntity(paramDamageSource, paramFloat); } protected ServerPlayerBase GetOverwrittenDamageEntity(ServerPlayerBase overWriter) { if (overrideDamageEntityHooks == null) return overWriter; for(int i = 0; i < overrideDamageEntityHooks.length; i++) if(overrideDamageEntityHooks[i] == overWriter) if(i == 0) return null; else return overrideDamageEntityHooks[i - 1]; return overWriter; } private final static List<String> beforeDamageEntityHookTypes = new LinkedList<String>(); private final static List<String> overrideDamageEntityHookTypes = new LinkedList<String>(); private final static List<String> afterDamageEntityHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeDamageEntityHooks; private ServerPlayerBase[] overrideDamageEntityHooks; private ServerPlayerBase[] afterDamageEntityHooks; public boolean isDamageEntityModded; private static final Map<String, String[]> allBaseBeforeDamageEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeDamageEntityInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideDamageEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideDamageEntityInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterDamageEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterDamageEntityInferiors = new Hashtable<String, String[]>(0); public static void displayGui(IServerPlayerAPI target, net.minecraft.world.IInteractionObject paramIInteractionObject) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isDisplayGuiModded) serverPlayerAPI.displayGui(paramIInteractionObject); else target.localDisplayGui(paramIInteractionObject); } private void displayGui(net.minecraft.world.IInteractionObject paramIInteractionObject) { if(beforeDisplayGuiHooks != null) for(int i = beforeDisplayGuiHooks.length - 1; i >= 0 ; i--) beforeDisplayGuiHooks[i].beforeDisplayGui(paramIInteractionObject); if(overrideDisplayGuiHooks != null) overrideDisplayGuiHooks[overrideDisplayGuiHooks.length - 1].displayGui(paramIInteractionObject); else player.localDisplayGui(paramIInteractionObject); if(afterDisplayGuiHooks != null) for(int i = 0; i < afterDisplayGuiHooks.length; i++) afterDisplayGuiHooks[i].afterDisplayGui(paramIInteractionObject); } protected ServerPlayerBase GetOverwrittenDisplayGui(ServerPlayerBase overWriter) { if (overrideDisplayGuiHooks == null) return overWriter; for(int i = 0; i < overrideDisplayGuiHooks.length; i++) if(overrideDisplayGuiHooks[i] == overWriter) if(i == 0) return null; else return overrideDisplayGuiHooks[i - 1]; return overWriter; } private final static List<String> beforeDisplayGuiHookTypes = new LinkedList<String>(); private final static List<String> overrideDisplayGuiHookTypes = new LinkedList<String>(); private final static List<String> afterDisplayGuiHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeDisplayGuiHooks; private ServerPlayerBase[] overrideDisplayGuiHooks; private ServerPlayerBase[] afterDisplayGuiHooks; public boolean isDisplayGuiModded; private static final Map<String, String[]> allBaseBeforeDisplayGuiSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeDisplayGuiInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideDisplayGuiSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideDisplayGuiInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterDisplayGuiSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterDisplayGuiInferiors = new Hashtable<String, String[]>(0); public static void displayGUIChest(IServerPlayerAPI target, net.minecraft.inventory.IInventory paramIInventory) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isDisplayGUIChestModded) serverPlayerAPI.displayGUIChest(paramIInventory); else target.localDisplayGUIChest(paramIInventory); } private void displayGUIChest(net.minecraft.inventory.IInventory paramIInventory) { if(beforeDisplayGUIChestHooks != null) for(int i = beforeDisplayGUIChestHooks.length - 1; i >= 0 ; i--) beforeDisplayGUIChestHooks[i].beforeDisplayGUIChest(paramIInventory); if(overrideDisplayGUIChestHooks != null) overrideDisplayGUIChestHooks[overrideDisplayGUIChestHooks.length - 1].displayGUIChest(paramIInventory); else player.localDisplayGUIChest(paramIInventory); if(afterDisplayGUIChestHooks != null) for(int i = 0; i < afterDisplayGUIChestHooks.length; i++) afterDisplayGUIChestHooks[i].afterDisplayGUIChest(paramIInventory); } protected ServerPlayerBase GetOverwrittenDisplayGUIChest(ServerPlayerBase overWriter) { if (overrideDisplayGUIChestHooks == null) return overWriter; for(int i = 0; i < overrideDisplayGUIChestHooks.length; i++) if(overrideDisplayGUIChestHooks[i] == overWriter) if(i == 0) return null; else return overrideDisplayGUIChestHooks[i - 1]; return overWriter; } private final static List<String> beforeDisplayGUIChestHookTypes = new LinkedList<String>(); private final static List<String> overrideDisplayGUIChestHookTypes = new LinkedList<String>(); private final static List<String> afterDisplayGUIChestHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeDisplayGUIChestHooks; private ServerPlayerBase[] overrideDisplayGUIChestHooks; private ServerPlayerBase[] afterDisplayGUIChestHooks; public boolean isDisplayGUIChestModded; private static final Map<String, String[]> allBaseBeforeDisplayGUIChestSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeDisplayGUIChestInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideDisplayGUIChestSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideDisplayGUIChestInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterDisplayGUIChestSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterDisplayGUIChestInferiors = new Hashtable<String, String[]>(0); public static net.minecraft.entity.item.EntityItem dropOneItem(IServerPlayerAPI target, boolean paramBoolean) { net.minecraft.entity.item.EntityItem _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isDropOneItemModded) _result = serverPlayerAPI.dropOneItem(paramBoolean); else _result = target.localDropOneItem(paramBoolean); return _result; } private net.minecraft.entity.item.EntityItem dropOneItem(boolean paramBoolean) { if(beforeDropOneItemHooks != null) for(int i = beforeDropOneItemHooks.length - 1; i >= 0 ; i--) beforeDropOneItemHooks[i].beforeDropOneItem(paramBoolean); net.minecraft.entity.item.EntityItem _result; if(overrideDropOneItemHooks != null) _result = overrideDropOneItemHooks[overrideDropOneItemHooks.length - 1].dropOneItem(paramBoolean); else _result = player.localDropOneItem(paramBoolean); if(afterDropOneItemHooks != null) for(int i = 0; i < afterDropOneItemHooks.length; i++) afterDropOneItemHooks[i].afterDropOneItem(paramBoolean); return _result; } protected ServerPlayerBase GetOverwrittenDropOneItem(ServerPlayerBase overWriter) { if (overrideDropOneItemHooks == null) return overWriter; for(int i = 0; i < overrideDropOneItemHooks.length; i++) if(overrideDropOneItemHooks[i] == overWriter) if(i == 0) return null; else return overrideDropOneItemHooks[i - 1]; return overWriter; } private final static List<String> beforeDropOneItemHookTypes = new LinkedList<String>(); private final static List<String> overrideDropOneItemHookTypes = new LinkedList<String>(); private final static List<String> afterDropOneItemHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeDropOneItemHooks; private ServerPlayerBase[] overrideDropOneItemHooks; private ServerPlayerBase[] afterDropOneItemHooks; public boolean isDropOneItemModded; private static final Map<String, String[]> allBaseBeforeDropOneItemSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeDropOneItemInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideDropOneItemSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideDropOneItemInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterDropOneItemSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterDropOneItemInferiors = new Hashtable<String, String[]>(0); public static net.minecraft.entity.item.EntityItem dropPlayerItemWithRandomChoice(IServerPlayerAPI target, net.minecraft.item.ItemStack paramItemStack, boolean paramBoolean) { net.minecraft.entity.item.EntityItem _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isDropPlayerItemWithRandomChoiceModded) _result = serverPlayerAPI.dropPlayerItemWithRandomChoice(paramItemStack, paramBoolean); else _result = target.localDropPlayerItemWithRandomChoice(paramItemStack, paramBoolean); return _result; } private net.minecraft.entity.item.EntityItem dropPlayerItemWithRandomChoice(net.minecraft.item.ItemStack paramItemStack, boolean paramBoolean) { if(beforeDropPlayerItemWithRandomChoiceHooks != null) for(int i = beforeDropPlayerItemWithRandomChoiceHooks.length - 1; i >= 0 ; i--) beforeDropPlayerItemWithRandomChoiceHooks[i].beforeDropPlayerItemWithRandomChoice(paramItemStack, paramBoolean); net.minecraft.entity.item.EntityItem _result; if(overrideDropPlayerItemWithRandomChoiceHooks != null) _result = overrideDropPlayerItemWithRandomChoiceHooks[overrideDropPlayerItemWithRandomChoiceHooks.length - 1].dropPlayerItemWithRandomChoice(paramItemStack, paramBoolean); else _result = player.localDropPlayerItemWithRandomChoice(paramItemStack, paramBoolean); if(afterDropPlayerItemWithRandomChoiceHooks != null) for(int i = 0; i < afterDropPlayerItemWithRandomChoiceHooks.length; i++) afterDropPlayerItemWithRandomChoiceHooks[i].afterDropPlayerItemWithRandomChoice(paramItemStack, paramBoolean); return _result; } protected ServerPlayerBase GetOverwrittenDropPlayerItemWithRandomChoice(ServerPlayerBase overWriter) { if (overrideDropPlayerItemWithRandomChoiceHooks == null) return overWriter; for(int i = 0; i < overrideDropPlayerItemWithRandomChoiceHooks.length; i++) if(overrideDropPlayerItemWithRandomChoiceHooks[i] == overWriter) if(i == 0) return null; else return overrideDropPlayerItemWithRandomChoiceHooks[i - 1]; return overWriter; } private final static List<String> beforeDropPlayerItemWithRandomChoiceHookTypes = new LinkedList<String>(); private final static List<String> overrideDropPlayerItemWithRandomChoiceHookTypes = new LinkedList<String>(); private final static List<String> afterDropPlayerItemWithRandomChoiceHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeDropPlayerItemWithRandomChoiceHooks; private ServerPlayerBase[] overrideDropPlayerItemWithRandomChoiceHooks; private ServerPlayerBase[] afterDropPlayerItemWithRandomChoiceHooks; public boolean isDropPlayerItemWithRandomChoiceModded; private static final Map<String, String[]> allBaseBeforeDropPlayerItemWithRandomChoiceSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeDropPlayerItemWithRandomChoiceInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideDropPlayerItemWithRandomChoiceSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideDropPlayerItemWithRandomChoiceInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterDropPlayerItemWithRandomChoiceSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterDropPlayerItemWithRandomChoiceInferiors = new Hashtable<String, String[]>(0); public static void fall(IServerPlayerAPI target, float paramFloat1, float paramFloat2) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isFallModded) serverPlayerAPI.fall(paramFloat1, paramFloat2); else target.localFall(paramFloat1, paramFloat2); } private void fall(float paramFloat1, float paramFloat2) { if(beforeFallHooks != null) for(int i = beforeFallHooks.length - 1; i >= 0 ; i--) beforeFallHooks[i].beforeFall(paramFloat1, paramFloat2); if(overrideFallHooks != null) overrideFallHooks[overrideFallHooks.length - 1].fall(paramFloat1, paramFloat2); else player.localFall(paramFloat1, paramFloat2); if(afterFallHooks != null) for(int i = 0; i < afterFallHooks.length; i++) afterFallHooks[i].afterFall(paramFloat1, paramFloat2); } protected ServerPlayerBase GetOverwrittenFall(ServerPlayerBase overWriter) { if (overrideFallHooks == null) return overWriter; for(int i = 0; i < overrideFallHooks.length; i++) if(overrideFallHooks[i] == overWriter) if(i == 0) return null; else return overrideFallHooks[i - 1]; return overWriter; } private final static List<String> beforeFallHookTypes = new LinkedList<String>(); private final static List<String> overrideFallHookTypes = new LinkedList<String>(); private final static List<String> afterFallHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeFallHooks; private ServerPlayerBase[] overrideFallHooks; private ServerPlayerBase[] afterFallHooks; public boolean isFallModded; private static final Map<String, String[]> allBaseBeforeFallSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeFallInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideFallSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideFallInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterFallSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterFallInferiors = new Hashtable<String, String[]>(0); public static float getAIMoveSpeed(IServerPlayerAPI target) { float _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isGetAIMoveSpeedModded) _result = serverPlayerAPI.getAIMoveSpeed(); else _result = target.localGetAIMoveSpeed(); return _result; } private float getAIMoveSpeed() { if(beforeGetAIMoveSpeedHooks != null) for(int i = beforeGetAIMoveSpeedHooks.length - 1; i >= 0 ; i--) beforeGetAIMoveSpeedHooks[i].beforeGetAIMoveSpeed(); float _result; if(overrideGetAIMoveSpeedHooks != null) _result = overrideGetAIMoveSpeedHooks[overrideGetAIMoveSpeedHooks.length - 1].getAIMoveSpeed(); else _result = player.localGetAIMoveSpeed(); if(afterGetAIMoveSpeedHooks != null) for(int i = 0; i < afterGetAIMoveSpeedHooks.length; i++) afterGetAIMoveSpeedHooks[i].afterGetAIMoveSpeed(); return _result; } protected ServerPlayerBase GetOverwrittenGetAIMoveSpeed(ServerPlayerBase overWriter) { if (overrideGetAIMoveSpeedHooks == null) return overWriter; for(int i = 0; i < overrideGetAIMoveSpeedHooks.length; i++) if(overrideGetAIMoveSpeedHooks[i] == overWriter) if(i == 0) return null; else return overrideGetAIMoveSpeedHooks[i - 1]; return overWriter; } private final static List<String> beforeGetAIMoveSpeedHookTypes = new LinkedList<String>(); private final static List<String> overrideGetAIMoveSpeedHookTypes = new LinkedList<String>(); private final static List<String> afterGetAIMoveSpeedHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeGetAIMoveSpeedHooks; private ServerPlayerBase[] overrideGetAIMoveSpeedHooks; private ServerPlayerBase[] afterGetAIMoveSpeedHooks; public boolean isGetAIMoveSpeedModded; private static final Map<String, String[]> allBaseBeforeGetAIMoveSpeedSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeGetAIMoveSpeedInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideGetAIMoveSpeedSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideGetAIMoveSpeedInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterGetAIMoveSpeedSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterGetAIMoveSpeedInferiors = new Hashtable<String, String[]>(0); public static float getBreakSpeed(IServerPlayerAPI target, net.minecraft.block.state.IBlockState paramIBlockState, net.minecraft.util.BlockPos paramBlockPos) { float _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isGetBreakSpeedModded) _result = serverPlayerAPI.getBreakSpeed(paramIBlockState, paramBlockPos); else _result = target.localGetBreakSpeed(paramIBlockState, paramBlockPos); return _result; } private float getBreakSpeed(net.minecraft.block.state.IBlockState paramIBlockState, net.minecraft.util.BlockPos paramBlockPos) { if(beforeGetBreakSpeedHooks != null) for(int i = beforeGetBreakSpeedHooks.length - 1; i >= 0 ; i--) beforeGetBreakSpeedHooks[i].beforeGetBreakSpeed(paramIBlockState, paramBlockPos); float _result; if(overrideGetBreakSpeedHooks != null) _result = overrideGetBreakSpeedHooks[overrideGetBreakSpeedHooks.length - 1].getBreakSpeed(paramIBlockState, paramBlockPos); else _result = player.localGetBreakSpeed(paramIBlockState, paramBlockPos); if(afterGetBreakSpeedHooks != null) for(int i = 0; i < afterGetBreakSpeedHooks.length; i++) afterGetBreakSpeedHooks[i].afterGetBreakSpeed(paramIBlockState, paramBlockPos); return _result; } protected ServerPlayerBase GetOverwrittenGetBreakSpeed(ServerPlayerBase overWriter) { if (overrideGetBreakSpeedHooks == null) return overWriter; for(int i = 0; i < overrideGetBreakSpeedHooks.length; i++) if(overrideGetBreakSpeedHooks[i] == overWriter) if(i == 0) return null; else return overrideGetBreakSpeedHooks[i - 1]; return overWriter; } private final static List<String> beforeGetBreakSpeedHookTypes = new LinkedList<String>(); private final static List<String> overrideGetBreakSpeedHookTypes = new LinkedList<String>(); private final static List<String> afterGetBreakSpeedHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeGetBreakSpeedHooks; private ServerPlayerBase[] overrideGetBreakSpeedHooks; private ServerPlayerBase[] afterGetBreakSpeedHooks; public boolean isGetBreakSpeedModded; private static final Map<String, String[]> allBaseBeforeGetBreakSpeedSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeGetBreakSpeedInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideGetBreakSpeedSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideGetBreakSpeedInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterGetBreakSpeedSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterGetBreakSpeedInferiors = new Hashtable<String, String[]>(0); public static double getDistanceSq(IServerPlayerAPI target, double paramDouble1, double paramDouble2, double paramDouble3) { double _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isGetDistanceSqModded) _result = serverPlayerAPI.getDistanceSq(paramDouble1, paramDouble2, paramDouble3); else _result = target.localGetDistanceSq(paramDouble1, paramDouble2, paramDouble3); return _result; } private double getDistanceSq(double paramDouble1, double paramDouble2, double paramDouble3) { if(beforeGetDistanceSqHooks != null) for(int i = beforeGetDistanceSqHooks.length - 1; i >= 0 ; i--) beforeGetDistanceSqHooks[i].beforeGetDistanceSq(paramDouble1, paramDouble2, paramDouble3); double _result; if(overrideGetDistanceSqHooks != null) _result = overrideGetDistanceSqHooks[overrideGetDistanceSqHooks.length - 1].getDistanceSq(paramDouble1, paramDouble2, paramDouble3); else _result = player.localGetDistanceSq(paramDouble1, paramDouble2, paramDouble3); if(afterGetDistanceSqHooks != null) for(int i = 0; i < afterGetDistanceSqHooks.length; i++) afterGetDistanceSqHooks[i].afterGetDistanceSq(paramDouble1, paramDouble2, paramDouble3); return _result; } protected ServerPlayerBase GetOverwrittenGetDistanceSq(ServerPlayerBase overWriter) { if (overrideGetDistanceSqHooks == null) return overWriter; for(int i = 0; i < overrideGetDistanceSqHooks.length; i++) if(overrideGetDistanceSqHooks[i] == overWriter) if(i == 0) return null; else return overrideGetDistanceSqHooks[i - 1]; return overWriter; } private final static List<String> beforeGetDistanceSqHookTypes = new LinkedList<String>(); private final static List<String> overrideGetDistanceSqHookTypes = new LinkedList<String>(); private final static List<String> afterGetDistanceSqHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeGetDistanceSqHooks; private ServerPlayerBase[] overrideGetDistanceSqHooks; private ServerPlayerBase[] afterGetDistanceSqHooks; public boolean isGetDistanceSqModded; private static final Map<String, String[]> allBaseBeforeGetDistanceSqSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeGetDistanceSqInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideGetDistanceSqSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideGetDistanceSqInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterGetDistanceSqSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterGetDistanceSqInferiors = new Hashtable<String, String[]>(0); public static float getBrightness(IServerPlayerAPI target, float paramFloat) { float _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isGetBrightnessModded) _result = serverPlayerAPI.getBrightness(paramFloat); else _result = target.localGetBrightness(paramFloat); return _result; } private float getBrightness(float paramFloat) { if(beforeGetBrightnessHooks != null) for(int i = beforeGetBrightnessHooks.length - 1; i >= 0 ; i--) beforeGetBrightnessHooks[i].beforeGetBrightness(paramFloat); float _result; if(overrideGetBrightnessHooks != null) _result = overrideGetBrightnessHooks[overrideGetBrightnessHooks.length - 1].getBrightness(paramFloat); else _result = player.localGetBrightness(paramFloat); if(afterGetBrightnessHooks != null) for(int i = 0; i < afterGetBrightnessHooks.length; i++) afterGetBrightnessHooks[i].afterGetBrightness(paramFloat); return _result; } protected ServerPlayerBase GetOverwrittenGetBrightness(ServerPlayerBase overWriter) { if (overrideGetBrightnessHooks == null) return overWriter; for(int i = 0; i < overrideGetBrightnessHooks.length; i++) if(overrideGetBrightnessHooks[i] == overWriter) if(i == 0) return null; else return overrideGetBrightnessHooks[i - 1]; return overWriter; } private final static List<String> beforeGetBrightnessHookTypes = new LinkedList<String>(); private final static List<String> overrideGetBrightnessHookTypes = new LinkedList<String>(); private final static List<String> afterGetBrightnessHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeGetBrightnessHooks; private ServerPlayerBase[] overrideGetBrightnessHooks; private ServerPlayerBase[] afterGetBrightnessHooks; public boolean isGetBrightnessModded; private static final Map<String, String[]> allBaseBeforeGetBrightnessSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeGetBrightnessInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideGetBrightnessSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideGetBrightnessInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterGetBrightnessSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterGetBrightnessInferiors = new Hashtable<String, String[]>(0); public static float getEyeHeight(IServerPlayerAPI target) { float _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isGetEyeHeightModded) _result = serverPlayerAPI.getEyeHeight(); else _result = target.localGetEyeHeight(); return _result; } private float getEyeHeight() { if(beforeGetEyeHeightHooks != null) for(int i = beforeGetEyeHeightHooks.length - 1; i >= 0 ; i--) beforeGetEyeHeightHooks[i].beforeGetEyeHeight(); float _result; if(overrideGetEyeHeightHooks != null) _result = overrideGetEyeHeightHooks[overrideGetEyeHeightHooks.length - 1].getEyeHeight(); else _result = player.localGetEyeHeight(); if(afterGetEyeHeightHooks != null) for(int i = 0; i < afterGetEyeHeightHooks.length; i++) afterGetEyeHeightHooks[i].afterGetEyeHeight(); return _result; } protected ServerPlayerBase GetOverwrittenGetEyeHeight(ServerPlayerBase overWriter) { if (overrideGetEyeHeightHooks == null) return overWriter; for(int i = 0; i < overrideGetEyeHeightHooks.length; i++) if(overrideGetEyeHeightHooks[i] == overWriter) if(i == 0) return null; else return overrideGetEyeHeightHooks[i - 1]; return overWriter; } private final static List<String> beforeGetEyeHeightHookTypes = new LinkedList<String>(); private final static List<String> overrideGetEyeHeightHookTypes = new LinkedList<String>(); private final static List<String> afterGetEyeHeightHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeGetEyeHeightHooks; private ServerPlayerBase[] overrideGetEyeHeightHooks; private ServerPlayerBase[] afterGetEyeHeightHooks; public boolean isGetEyeHeightModded; private static final Map<String, String[]> allBaseBeforeGetEyeHeightSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeGetEyeHeightInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideGetEyeHeightSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideGetEyeHeightInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterGetEyeHeightSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterGetEyeHeightInferiors = new Hashtable<String, String[]>(0); public static void heal(IServerPlayerAPI target, float paramFloat) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isHealModded) serverPlayerAPI.heal(paramFloat); else target.localHeal(paramFloat); } private void heal(float paramFloat) { if(beforeHealHooks != null) for(int i = beforeHealHooks.length - 1; i >= 0 ; i--) beforeHealHooks[i].beforeHeal(paramFloat); if(overrideHealHooks != null) overrideHealHooks[overrideHealHooks.length - 1].heal(paramFloat); else player.localHeal(paramFloat); if(afterHealHooks != null) for(int i = 0; i < afterHealHooks.length; i++) afterHealHooks[i].afterHeal(paramFloat); } protected ServerPlayerBase GetOverwrittenHeal(ServerPlayerBase overWriter) { if (overrideHealHooks == null) return overWriter; for(int i = 0; i < overrideHealHooks.length; i++) if(overrideHealHooks[i] == overWriter) if(i == 0) return null; else return overrideHealHooks[i - 1]; return overWriter; } private final static List<String> beforeHealHookTypes = new LinkedList<String>(); private final static List<String> overrideHealHookTypes = new LinkedList<String>(); private final static List<String> afterHealHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeHealHooks; private ServerPlayerBase[] overrideHealHooks; private ServerPlayerBase[] afterHealHooks; public boolean isHealModded; private static final Map<String, String[]> allBaseBeforeHealSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeHealInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideHealSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideHealInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterHealSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterHealInferiors = new Hashtable<String, String[]>(0); public static boolean isEntityInsideOpaqueBlock(IServerPlayerAPI target) { boolean _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isIsEntityInsideOpaqueBlockModded) _result = serverPlayerAPI.isEntityInsideOpaqueBlock(); else _result = target.localIsEntityInsideOpaqueBlock(); return _result; } private boolean isEntityInsideOpaqueBlock() { if(beforeIsEntityInsideOpaqueBlockHooks != null) for(int i = beforeIsEntityInsideOpaqueBlockHooks.length - 1; i >= 0 ; i--) beforeIsEntityInsideOpaqueBlockHooks[i].beforeIsEntityInsideOpaqueBlock(); boolean _result; if(overrideIsEntityInsideOpaqueBlockHooks != null) _result = overrideIsEntityInsideOpaqueBlockHooks[overrideIsEntityInsideOpaqueBlockHooks.length - 1].isEntityInsideOpaqueBlock(); else _result = player.localIsEntityInsideOpaqueBlock(); if(afterIsEntityInsideOpaqueBlockHooks != null) for(int i = 0; i < afterIsEntityInsideOpaqueBlockHooks.length; i++) afterIsEntityInsideOpaqueBlockHooks[i].afterIsEntityInsideOpaqueBlock(); return _result; } protected ServerPlayerBase GetOverwrittenIsEntityInsideOpaqueBlock(ServerPlayerBase overWriter) { if (overrideIsEntityInsideOpaqueBlockHooks == null) return overWriter; for(int i = 0; i < overrideIsEntityInsideOpaqueBlockHooks.length; i++) if(overrideIsEntityInsideOpaqueBlockHooks[i] == overWriter) if(i == 0) return null; else return overrideIsEntityInsideOpaqueBlockHooks[i - 1]; return overWriter; } private final static List<String> beforeIsEntityInsideOpaqueBlockHookTypes = new LinkedList<String>(); private final static List<String> overrideIsEntityInsideOpaqueBlockHookTypes = new LinkedList<String>(); private final static List<String> afterIsEntityInsideOpaqueBlockHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeIsEntityInsideOpaqueBlockHooks; private ServerPlayerBase[] overrideIsEntityInsideOpaqueBlockHooks; private ServerPlayerBase[] afterIsEntityInsideOpaqueBlockHooks; public boolean isIsEntityInsideOpaqueBlockModded; private static final Map<String, String[]> allBaseBeforeIsEntityInsideOpaqueBlockSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeIsEntityInsideOpaqueBlockInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideIsEntityInsideOpaqueBlockSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideIsEntityInsideOpaqueBlockInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterIsEntityInsideOpaqueBlockSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterIsEntityInsideOpaqueBlockInferiors = new Hashtable<String, String[]>(0); public static boolean isInWater(IServerPlayerAPI target) { boolean _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isIsInWaterModded) _result = serverPlayerAPI.isInWater(); else _result = target.localIsInWater(); return _result; } private boolean isInWater() { if(beforeIsInWaterHooks != null) for(int i = beforeIsInWaterHooks.length - 1; i >= 0 ; i--) beforeIsInWaterHooks[i].beforeIsInWater(); boolean _result; if(overrideIsInWaterHooks != null) _result = overrideIsInWaterHooks[overrideIsInWaterHooks.length - 1].isInWater(); else _result = player.localIsInWater(); if(afterIsInWaterHooks != null) for(int i = 0; i < afterIsInWaterHooks.length; i++) afterIsInWaterHooks[i].afterIsInWater(); return _result; } protected ServerPlayerBase GetOverwrittenIsInWater(ServerPlayerBase overWriter) { if (overrideIsInWaterHooks == null) return overWriter; for(int i = 0; i < overrideIsInWaterHooks.length; i++) if(overrideIsInWaterHooks[i] == overWriter) if(i == 0) return null; else return overrideIsInWaterHooks[i - 1]; return overWriter; } private final static List<String> beforeIsInWaterHookTypes = new LinkedList<String>(); private final static List<String> overrideIsInWaterHookTypes = new LinkedList<String>(); private final static List<String> afterIsInWaterHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeIsInWaterHooks; private ServerPlayerBase[] overrideIsInWaterHooks; private ServerPlayerBase[] afterIsInWaterHooks; public boolean isIsInWaterModded; private static final Map<String, String[]> allBaseBeforeIsInWaterSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeIsInWaterInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideIsInWaterSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideIsInWaterInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterIsInWaterSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterIsInWaterInferiors = new Hashtable<String, String[]>(0); public static boolean isInsideOfMaterial(IServerPlayerAPI target, net.minecraft.block.material.Material paramMaterial) { boolean _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isIsInsideOfMaterialModded) _result = serverPlayerAPI.isInsideOfMaterial(paramMaterial); else _result = target.localIsInsideOfMaterial(paramMaterial); return _result; } private boolean isInsideOfMaterial(net.minecraft.block.material.Material paramMaterial) { if(beforeIsInsideOfMaterialHooks != null) for(int i = beforeIsInsideOfMaterialHooks.length - 1; i >= 0 ; i--) beforeIsInsideOfMaterialHooks[i].beforeIsInsideOfMaterial(paramMaterial); boolean _result; if(overrideIsInsideOfMaterialHooks != null) _result = overrideIsInsideOfMaterialHooks[overrideIsInsideOfMaterialHooks.length - 1].isInsideOfMaterial(paramMaterial); else _result = player.localIsInsideOfMaterial(paramMaterial); if(afterIsInsideOfMaterialHooks != null) for(int i = 0; i < afterIsInsideOfMaterialHooks.length; i++) afterIsInsideOfMaterialHooks[i].afterIsInsideOfMaterial(paramMaterial); return _result; } protected ServerPlayerBase GetOverwrittenIsInsideOfMaterial(ServerPlayerBase overWriter) { if (overrideIsInsideOfMaterialHooks == null) return overWriter; for(int i = 0; i < overrideIsInsideOfMaterialHooks.length; i++) if(overrideIsInsideOfMaterialHooks[i] == overWriter) if(i == 0) return null; else return overrideIsInsideOfMaterialHooks[i - 1]; return overWriter; } private final static List<String> beforeIsInsideOfMaterialHookTypes = new LinkedList<String>(); private final static List<String> overrideIsInsideOfMaterialHookTypes = new LinkedList<String>(); private final static List<String> afterIsInsideOfMaterialHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeIsInsideOfMaterialHooks; private ServerPlayerBase[] overrideIsInsideOfMaterialHooks; private ServerPlayerBase[] afterIsInsideOfMaterialHooks; public boolean isIsInsideOfMaterialModded; private static final Map<String, String[]> allBaseBeforeIsInsideOfMaterialSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeIsInsideOfMaterialInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideIsInsideOfMaterialSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideIsInsideOfMaterialInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterIsInsideOfMaterialSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterIsInsideOfMaterialInferiors = new Hashtable<String, String[]>(0); public static boolean isOnLadder(IServerPlayerAPI target) { boolean _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isIsOnLadderModded) _result = serverPlayerAPI.isOnLadder(); else _result = target.localIsOnLadder(); return _result; } private boolean isOnLadder() { if(beforeIsOnLadderHooks != null) for(int i = beforeIsOnLadderHooks.length - 1; i >= 0 ; i--) beforeIsOnLadderHooks[i].beforeIsOnLadder(); boolean _result; if(overrideIsOnLadderHooks != null) _result = overrideIsOnLadderHooks[overrideIsOnLadderHooks.length - 1].isOnLadder(); else _result = player.localIsOnLadder(); if(afterIsOnLadderHooks != null) for(int i = 0; i < afterIsOnLadderHooks.length; i++) afterIsOnLadderHooks[i].afterIsOnLadder(); return _result; } protected ServerPlayerBase GetOverwrittenIsOnLadder(ServerPlayerBase overWriter) { if (overrideIsOnLadderHooks == null) return overWriter; for(int i = 0; i < overrideIsOnLadderHooks.length; i++) if(overrideIsOnLadderHooks[i] == overWriter) if(i == 0) return null; else return overrideIsOnLadderHooks[i - 1]; return overWriter; } private final static List<String> beforeIsOnLadderHookTypes = new LinkedList<String>(); private final static List<String> overrideIsOnLadderHookTypes = new LinkedList<String>(); private final static List<String> afterIsOnLadderHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeIsOnLadderHooks; private ServerPlayerBase[] overrideIsOnLadderHooks; private ServerPlayerBase[] afterIsOnLadderHooks; public boolean isIsOnLadderModded; private static final Map<String, String[]> allBaseBeforeIsOnLadderSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeIsOnLadderInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideIsOnLadderSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideIsOnLadderInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterIsOnLadderSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterIsOnLadderInferiors = new Hashtable<String, String[]>(0); public static boolean isPlayerSleeping(IServerPlayerAPI target) { boolean _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isIsPlayerSleepingModded) _result = serverPlayerAPI.isPlayerSleeping(); else _result = target.localIsPlayerSleeping(); return _result; } private boolean isPlayerSleeping() { if(beforeIsPlayerSleepingHooks != null) for(int i = beforeIsPlayerSleepingHooks.length - 1; i >= 0 ; i--) beforeIsPlayerSleepingHooks[i].beforeIsPlayerSleeping(); boolean _result; if(overrideIsPlayerSleepingHooks != null) _result = overrideIsPlayerSleepingHooks[overrideIsPlayerSleepingHooks.length - 1].isPlayerSleeping(); else _result = player.localIsPlayerSleeping(); if(afterIsPlayerSleepingHooks != null) for(int i = 0; i < afterIsPlayerSleepingHooks.length; i++) afterIsPlayerSleepingHooks[i].afterIsPlayerSleeping(); return _result; } protected ServerPlayerBase GetOverwrittenIsPlayerSleeping(ServerPlayerBase overWriter) { if (overrideIsPlayerSleepingHooks == null) return overWriter; for(int i = 0; i < overrideIsPlayerSleepingHooks.length; i++) if(overrideIsPlayerSleepingHooks[i] == overWriter) if(i == 0) return null; else return overrideIsPlayerSleepingHooks[i - 1]; return overWriter; } private final static List<String> beforeIsPlayerSleepingHookTypes = new LinkedList<String>(); private final static List<String> overrideIsPlayerSleepingHookTypes = new LinkedList<String>(); private final static List<String> afterIsPlayerSleepingHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeIsPlayerSleepingHooks; private ServerPlayerBase[] overrideIsPlayerSleepingHooks; private ServerPlayerBase[] afterIsPlayerSleepingHooks; public boolean isIsPlayerSleepingModded; private static final Map<String, String[]> allBaseBeforeIsPlayerSleepingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeIsPlayerSleepingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideIsPlayerSleepingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideIsPlayerSleepingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterIsPlayerSleepingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterIsPlayerSleepingInferiors = new Hashtable<String, String[]>(0); public static boolean isSneaking(IServerPlayerAPI target) { boolean _result; ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isIsSneakingModded) _result = serverPlayerAPI.isSneaking(); else _result = target.localIsSneaking(); return _result; } private boolean isSneaking() { if(beforeIsSneakingHooks != null) for(int i = beforeIsSneakingHooks.length - 1; i >= 0 ; i--) beforeIsSneakingHooks[i].beforeIsSneaking(); boolean _result; if(overrideIsSneakingHooks != null) _result = overrideIsSneakingHooks[overrideIsSneakingHooks.length - 1].isSneaking(); else _result = player.localIsSneaking(); if(afterIsSneakingHooks != null) for(int i = 0; i < afterIsSneakingHooks.length; i++) afterIsSneakingHooks[i].afterIsSneaking(); return _result; } protected ServerPlayerBase GetOverwrittenIsSneaking(ServerPlayerBase overWriter) { if (overrideIsSneakingHooks == null) return overWriter; for(int i = 0; i < overrideIsSneakingHooks.length; i++) if(overrideIsSneakingHooks[i] == overWriter) if(i == 0) return null; else return overrideIsSneakingHooks[i - 1]; return overWriter; } private final static List<String> beforeIsSneakingHookTypes = new LinkedList<String>(); private final static List<String> overrideIsSneakingHookTypes = new LinkedList<String>(); private final static List<String> afterIsSneakingHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeIsSneakingHooks; private ServerPlayerBase[] overrideIsSneakingHooks; private ServerPlayerBase[] afterIsSneakingHooks; public boolean isIsSneakingModded; private static final Map<String, String[]> allBaseBeforeIsSneakingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeIsSneakingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideIsSneakingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideIsSneakingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterIsSneakingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterIsSneakingInferiors = new Hashtable<String, String[]>(0); public static void jump(IServerPlayerAPI target) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isJumpModded) serverPlayerAPI.jump(); else target.localJump(); } private void jump() { if(beforeJumpHooks != null) for(int i = beforeJumpHooks.length - 1; i >= 0 ; i--) beforeJumpHooks[i].beforeJump(); if(overrideJumpHooks != null) overrideJumpHooks[overrideJumpHooks.length - 1].jump(); else player.localJump(); if(afterJumpHooks != null) for(int i = 0; i < afterJumpHooks.length; i++) afterJumpHooks[i].afterJump(); } protected ServerPlayerBase GetOverwrittenJump(ServerPlayerBase overWriter) { if (overrideJumpHooks == null) return overWriter; for(int i = 0; i < overrideJumpHooks.length; i++) if(overrideJumpHooks[i] == overWriter) if(i == 0) return null; else return overrideJumpHooks[i - 1]; return overWriter; } private final static List<String> beforeJumpHookTypes = new LinkedList<String>(); private final static List<String> overrideJumpHookTypes = new LinkedList<String>(); private final static List<String> afterJumpHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeJumpHooks; private ServerPlayerBase[] overrideJumpHooks; private ServerPlayerBase[] afterJumpHooks; public boolean isJumpModded; private static final Map<String, String[]> allBaseBeforeJumpSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeJumpInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideJumpSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideJumpInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterJumpSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterJumpInferiors = new Hashtable<String, String[]>(0); public static void knockBack(IServerPlayerAPI target, net.minecraft.entity.Entity paramEntity, float paramFloat, double paramDouble1, double paramDouble2) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isKnockBackModded) serverPlayerAPI.knockBack(paramEntity, paramFloat, paramDouble1, paramDouble2); else target.localKnockBack(paramEntity, paramFloat, paramDouble1, paramDouble2); } private void knockBack(net.minecraft.entity.Entity paramEntity, float paramFloat, double paramDouble1, double paramDouble2) { if(beforeKnockBackHooks != null) for(int i = beforeKnockBackHooks.length - 1; i >= 0 ; i--) beforeKnockBackHooks[i].beforeKnockBack(paramEntity, paramFloat, paramDouble1, paramDouble2); if(overrideKnockBackHooks != null) overrideKnockBackHooks[overrideKnockBackHooks.length - 1].knockBack(paramEntity, paramFloat, paramDouble1, paramDouble2); else player.localKnockBack(paramEntity, paramFloat, paramDouble1, paramDouble2); if(afterKnockBackHooks != null) for(int i = 0; i < afterKnockBackHooks.length; i++) afterKnockBackHooks[i].afterKnockBack(paramEntity, paramFloat, paramDouble1, paramDouble2); } protected ServerPlayerBase GetOverwrittenKnockBack(ServerPlayerBase overWriter) { if (overrideKnockBackHooks == null) return overWriter; for(int i = 0; i < overrideKnockBackHooks.length; i++) if(overrideKnockBackHooks[i] == overWriter) if(i == 0) return null; else return overrideKnockBackHooks[i - 1]; return overWriter; } private final static List<String> beforeKnockBackHookTypes = new LinkedList<String>(); private final static List<String> overrideKnockBackHookTypes = new LinkedList<String>(); private final static List<String> afterKnockBackHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeKnockBackHooks; private ServerPlayerBase[] overrideKnockBackHooks; private ServerPlayerBase[] afterKnockBackHooks; public boolean isKnockBackModded; private static final Map<String, String[]> allBaseBeforeKnockBackSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeKnockBackInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideKnockBackSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideKnockBackInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterKnockBackSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterKnockBackInferiors = new Hashtable<String, String[]>(0); public static void mountEntity(IServerPlayerAPI target, net.minecraft.entity.Entity paramEntity) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isMountEntityModded) serverPlayerAPI.mountEntity(paramEntity); else target.localMountEntity(paramEntity); } private void mountEntity(net.minecraft.entity.Entity paramEntity) { if(beforeMountEntityHooks != null) for(int i = beforeMountEntityHooks.length - 1; i >= 0 ; i--) beforeMountEntityHooks[i].beforeMountEntity(paramEntity); if(overrideMountEntityHooks != null) overrideMountEntityHooks[overrideMountEntityHooks.length - 1].mountEntity(paramEntity); else player.localMountEntity(paramEntity); if(afterMountEntityHooks != null) for(int i = 0; i < afterMountEntityHooks.length; i++) afterMountEntityHooks[i].afterMountEntity(paramEntity); } protected ServerPlayerBase GetOverwrittenMountEntity(ServerPlayerBase overWriter) { if (overrideMountEntityHooks == null) return overWriter; for(int i = 0; i < overrideMountEntityHooks.length; i++) if(overrideMountEntityHooks[i] == overWriter) if(i == 0) return null; else return overrideMountEntityHooks[i - 1]; return overWriter; } private final static List<String> beforeMountEntityHookTypes = new LinkedList<String>(); private final static List<String> overrideMountEntityHookTypes = new LinkedList<String>(); private final static List<String> afterMountEntityHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeMountEntityHooks; private ServerPlayerBase[] overrideMountEntityHooks; private ServerPlayerBase[] afterMountEntityHooks; public boolean isMountEntityModded; private static final Map<String, String[]> allBaseBeforeMountEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeMountEntityInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideMountEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideMountEntityInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterMountEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterMountEntityInferiors = new Hashtable<String, String[]>(0); public static void moveEntity(IServerPlayerAPI target, double paramDouble1, double paramDouble2, double paramDouble3) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isMoveEntityModded) serverPlayerAPI.moveEntity(paramDouble1, paramDouble2, paramDouble3); else target.localMoveEntity(paramDouble1, paramDouble2, paramDouble3); } private void moveEntity(double paramDouble1, double paramDouble2, double paramDouble3) { if(beforeMoveEntityHooks != null) for(int i = beforeMoveEntityHooks.length - 1; i >= 0 ; i--) beforeMoveEntityHooks[i].beforeMoveEntity(paramDouble1, paramDouble2, paramDouble3); if(overrideMoveEntityHooks != null) overrideMoveEntityHooks[overrideMoveEntityHooks.length - 1].moveEntity(paramDouble1, paramDouble2, paramDouble3); else player.localMoveEntity(paramDouble1, paramDouble2, paramDouble3); if(afterMoveEntityHooks != null) for(int i = 0; i < afterMoveEntityHooks.length; i++) afterMoveEntityHooks[i].afterMoveEntity(paramDouble1, paramDouble2, paramDouble3); } protected ServerPlayerBase GetOverwrittenMoveEntity(ServerPlayerBase overWriter) { if (overrideMoveEntityHooks == null) return overWriter; for(int i = 0; i < overrideMoveEntityHooks.length; i++) if(overrideMoveEntityHooks[i] == overWriter) if(i == 0) return null; else return overrideMoveEntityHooks[i - 1]; return overWriter; } private final static List<String> beforeMoveEntityHookTypes = new LinkedList<String>(); private final static List<String> overrideMoveEntityHookTypes = new LinkedList<String>(); private final static List<String> afterMoveEntityHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeMoveEntityHooks; private ServerPlayerBase[] overrideMoveEntityHooks; private ServerPlayerBase[] afterMoveEntityHooks; public boolean isMoveEntityModded; private static final Map<String, String[]> allBaseBeforeMoveEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeMoveEntityInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideMoveEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideMoveEntityInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterMoveEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterMoveEntityInferiors = new Hashtable<String, String[]>(0); public static void moveEntityWithHeading(IServerPlayerAPI target, float paramFloat1, float paramFloat2) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isMoveEntityWithHeadingModded) serverPlayerAPI.moveEntityWithHeading(paramFloat1, paramFloat2); else target.localMoveEntityWithHeading(paramFloat1, paramFloat2); } private void moveEntityWithHeading(float paramFloat1, float paramFloat2) { if(beforeMoveEntityWithHeadingHooks != null) for(int i = beforeMoveEntityWithHeadingHooks.length - 1; i >= 0 ; i--) beforeMoveEntityWithHeadingHooks[i].beforeMoveEntityWithHeading(paramFloat1, paramFloat2); if(overrideMoveEntityWithHeadingHooks != null) overrideMoveEntityWithHeadingHooks[overrideMoveEntityWithHeadingHooks.length - 1].moveEntityWithHeading(paramFloat1, paramFloat2); else player.localMoveEntityWithHeading(paramFloat1, paramFloat2); if(afterMoveEntityWithHeadingHooks != null) for(int i = 0; i < afterMoveEntityWithHeadingHooks.length; i++) afterMoveEntityWithHeadingHooks[i].afterMoveEntityWithHeading(paramFloat1, paramFloat2); } protected ServerPlayerBase GetOverwrittenMoveEntityWithHeading(ServerPlayerBase overWriter) { if (overrideMoveEntityWithHeadingHooks == null) return overWriter; for(int i = 0; i < overrideMoveEntityWithHeadingHooks.length; i++) if(overrideMoveEntityWithHeadingHooks[i] == overWriter) if(i == 0) return null; else return overrideMoveEntityWithHeadingHooks[i - 1]; return overWriter; } private final static List<String> beforeMoveEntityWithHeadingHookTypes = new LinkedList<String>(); private final static List<String> overrideMoveEntityWithHeadingHookTypes = new LinkedList<String>(); private final static List<String> afterMoveEntityWithHeadingHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeMoveEntityWithHeadingHooks; private ServerPlayerBase[] overrideMoveEntityWithHeadingHooks; private ServerPlayerBase[] afterMoveEntityWithHeadingHooks; public boolean isMoveEntityWithHeadingModded; private static final Map<String, String[]> allBaseBeforeMoveEntityWithHeadingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeMoveEntityWithHeadingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideMoveEntityWithHeadingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideMoveEntityWithHeadingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterMoveEntityWithHeadingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterMoveEntityWithHeadingInferiors = new Hashtable<String, String[]>(0); public static void moveFlying(IServerPlayerAPI target, float paramFloat1, float paramFloat2, float paramFloat3) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isMoveFlyingModded) serverPlayerAPI.moveFlying(paramFloat1, paramFloat2, paramFloat3); else target.localMoveFlying(paramFloat1, paramFloat2, paramFloat3); } private void moveFlying(float paramFloat1, float paramFloat2, float paramFloat3) { if(beforeMoveFlyingHooks != null) for(int i = beforeMoveFlyingHooks.length - 1; i >= 0 ; i--) beforeMoveFlyingHooks[i].beforeMoveFlying(paramFloat1, paramFloat2, paramFloat3); if(overrideMoveFlyingHooks != null) overrideMoveFlyingHooks[overrideMoveFlyingHooks.length - 1].moveFlying(paramFloat1, paramFloat2, paramFloat3); else player.localMoveFlying(paramFloat1, paramFloat2, paramFloat3); if(afterMoveFlyingHooks != null) for(int i = 0; i < afterMoveFlyingHooks.length; i++) afterMoveFlyingHooks[i].afterMoveFlying(paramFloat1, paramFloat2, paramFloat3); } protected ServerPlayerBase GetOverwrittenMoveFlying(ServerPlayerBase overWriter) { if (overrideMoveFlyingHooks == null) return overWriter; for(int i = 0; i < overrideMoveFlyingHooks.length; i++) if(overrideMoveFlyingHooks[i] == overWriter) if(i == 0) return null; else return overrideMoveFlyingHooks[i - 1]; return overWriter; } private final static List<String> beforeMoveFlyingHookTypes = new LinkedList<String>(); private final static List<String> overrideMoveFlyingHookTypes = new LinkedList<String>(); private final static List<String> afterMoveFlyingHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeMoveFlyingHooks; private ServerPlayerBase[] overrideMoveFlyingHooks; private ServerPlayerBase[] afterMoveFlyingHooks; public boolean isMoveFlyingModded; private static final Map<String, String[]> allBaseBeforeMoveFlyingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeMoveFlyingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideMoveFlyingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideMoveFlyingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterMoveFlyingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterMoveFlyingInferiors = new Hashtable<String, String[]>(0); public static void onDeath(IServerPlayerAPI target, net.minecraft.util.DamageSource paramDamageSource) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isOnDeathModded) serverPlayerAPI.onDeath(paramDamageSource); else target.localOnDeath(paramDamageSource); } private void onDeath(net.minecraft.util.DamageSource paramDamageSource) { if(beforeOnDeathHooks != null) for(int i = beforeOnDeathHooks.length - 1; i >= 0 ; i--) beforeOnDeathHooks[i].beforeOnDeath(paramDamageSource); if(overrideOnDeathHooks != null) overrideOnDeathHooks[overrideOnDeathHooks.length - 1].onDeath(paramDamageSource); else player.localOnDeath(paramDamageSource); if(afterOnDeathHooks != null) for(int i = 0; i < afterOnDeathHooks.length; i++) afterOnDeathHooks[i].afterOnDeath(paramDamageSource); } protected ServerPlayerBase GetOverwrittenOnDeath(ServerPlayerBase overWriter) { if (overrideOnDeathHooks == null) return overWriter; for(int i = 0; i < overrideOnDeathHooks.length; i++) if(overrideOnDeathHooks[i] == overWriter) if(i == 0) return null; else return overrideOnDeathHooks[i - 1]; return overWriter; } private final static List<String> beforeOnDeathHookTypes = new LinkedList<String>(); private final static List<String> overrideOnDeathHookTypes = new LinkedList<String>(); private final static List<String> afterOnDeathHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeOnDeathHooks; private ServerPlayerBase[] overrideOnDeathHooks; private ServerPlayerBase[] afterOnDeathHooks; public boolean isOnDeathModded; private static final Map<String, String[]> allBaseBeforeOnDeathSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeOnDeathInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideOnDeathSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideOnDeathInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterOnDeathSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterOnDeathInferiors = new Hashtable<String, String[]>(0); public static void onLivingUpdate(IServerPlayerAPI target) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isOnLivingUpdateModded) serverPlayerAPI.onLivingUpdate(); else target.localOnLivingUpdate(); } private void onLivingUpdate() { if(beforeOnLivingUpdateHooks != null) for(int i = beforeOnLivingUpdateHooks.length - 1; i >= 0 ; i--) beforeOnLivingUpdateHooks[i].beforeOnLivingUpdate(); if(overrideOnLivingUpdateHooks != null) overrideOnLivingUpdateHooks[overrideOnLivingUpdateHooks.length - 1].onLivingUpdate(); else player.localOnLivingUpdate(); if(afterOnLivingUpdateHooks != null) for(int i = 0; i < afterOnLivingUpdateHooks.length; i++) afterOnLivingUpdateHooks[i].afterOnLivingUpdate(); } protected ServerPlayerBase GetOverwrittenOnLivingUpdate(ServerPlayerBase overWriter) { if (overrideOnLivingUpdateHooks == null) return overWriter; for(int i = 0; i < overrideOnLivingUpdateHooks.length; i++) if(overrideOnLivingUpdateHooks[i] == overWriter) if(i == 0) return null; else return overrideOnLivingUpdateHooks[i - 1]; return overWriter; } private final static List<String> beforeOnLivingUpdateHookTypes = new LinkedList<String>(); private final static List<String> overrideOnLivingUpdateHookTypes = new LinkedList<String>(); private final static List<String> afterOnLivingUpdateHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeOnLivingUpdateHooks; private ServerPlayerBase[] overrideOnLivingUpdateHooks; private ServerPlayerBase[] afterOnLivingUpdateHooks; public boolean isOnLivingUpdateModded; private static final Map<String, String[]> allBaseBeforeOnLivingUpdateSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeOnLivingUpdateInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideOnLivingUpdateSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideOnLivingUpdateInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterOnLivingUpdateSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterOnLivingUpdateInferiors = new Hashtable<String, String[]>(0); public static void onKillEntity(IServerPlayerAPI target, net.minecraft.entity.EntityLivingBase paramEntityLivingBase) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isOnKillEntityModded) serverPlayerAPI.onKillEntity(paramEntityLivingBase); else target.localOnKillEntity(paramEntityLivingBase); } private void onKillEntity(net.minecraft.entity.EntityLivingBase paramEntityLivingBase) { if(beforeOnKillEntityHooks != null) for(int i = beforeOnKillEntityHooks.length - 1; i >= 0 ; i--) beforeOnKillEntityHooks[i].beforeOnKillEntity(paramEntityLivingBase); if(overrideOnKillEntityHooks != null) overrideOnKillEntityHooks[overrideOnKillEntityHooks.length - 1].onKillEntity(paramEntityLivingBase); else player.localOnKillEntity(paramEntityLivingBase); if(afterOnKillEntityHooks != null) for(int i = 0; i < afterOnKillEntityHooks.length; i++) afterOnKillEntityHooks[i].afterOnKillEntity(paramEntityLivingBase); } protected ServerPlayerBase GetOverwrittenOnKillEntity(ServerPlayerBase overWriter) { if (overrideOnKillEntityHooks == null) return overWriter; for(int i = 0; i < overrideOnKillEntityHooks.length; i++) if(overrideOnKillEntityHooks[i] == overWriter) if(i == 0) return null; else return overrideOnKillEntityHooks[i - 1]; return overWriter; } private final static List<String> beforeOnKillEntityHookTypes = new LinkedList<String>(); private final static List<String> overrideOnKillEntityHookTypes = new LinkedList<String>(); private final static List<String> afterOnKillEntityHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeOnKillEntityHooks; private ServerPlayerBase[] overrideOnKillEntityHooks; private ServerPlayerBase[] afterOnKillEntityHooks; public boolean isOnKillEntityModded; private static final Map<String, String[]> allBaseBeforeOnKillEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeOnKillEntityInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideOnKillEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideOnKillEntityInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterOnKillEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterOnKillEntityInferiors = new Hashtable<String, String[]>(0); public static void onStruckByLightning(IServerPlayerAPI target, net.minecraft.entity.effect.EntityLightningBolt paramEntityLightningBolt) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isOnStruckByLightningModded) serverPlayerAPI.onStruckByLightning(paramEntityLightningBolt); else target.localOnStruckByLightning(paramEntityLightningBolt); } private void onStruckByLightning(net.minecraft.entity.effect.EntityLightningBolt paramEntityLightningBolt) { if(beforeOnStruckByLightningHooks != null) for(int i = beforeOnStruckByLightningHooks.length - 1; i >= 0 ; i--) beforeOnStruckByLightningHooks[i].beforeOnStruckByLightning(paramEntityLightningBolt); if(overrideOnStruckByLightningHooks != null) overrideOnStruckByLightningHooks[overrideOnStruckByLightningHooks.length - 1].onStruckByLightning(paramEntityLightningBolt); else player.localOnStruckByLightning(paramEntityLightningBolt); if(afterOnStruckByLightningHooks != null) for(int i = 0; i < afterOnStruckByLightningHooks.length; i++) afterOnStruckByLightningHooks[i].afterOnStruckByLightning(paramEntityLightningBolt); } protected ServerPlayerBase GetOverwrittenOnStruckByLightning(ServerPlayerBase overWriter) { if (overrideOnStruckByLightningHooks == null) return overWriter; for(int i = 0; i < overrideOnStruckByLightningHooks.length; i++) if(overrideOnStruckByLightningHooks[i] == overWriter) if(i == 0) return null; else return overrideOnStruckByLightningHooks[i - 1]; return overWriter; } private final static List<String> beforeOnStruckByLightningHookTypes = new LinkedList<String>(); private final static List<String> overrideOnStruckByLightningHookTypes = new LinkedList<String>(); private final static List<String> afterOnStruckByLightningHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeOnStruckByLightningHooks; private ServerPlayerBase[] overrideOnStruckByLightningHooks; private ServerPlayerBase[] afterOnStruckByLightningHooks; public boolean isOnStruckByLightningModded; private static final Map<String, String[]> allBaseBeforeOnStruckByLightningSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeOnStruckByLightningInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideOnStruckByLightningSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideOnStruckByLightningInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterOnStruckByLightningSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterOnStruckByLightningInferiors = new Hashtable<String, String[]>(0); public static void onUpdate(IServerPlayerAPI target) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isOnUpdateModded) serverPlayerAPI.onUpdate(); else target.localOnUpdate(); } private void onUpdate() { if(beforeOnUpdateHooks != null) for(int i = beforeOnUpdateHooks.length - 1; i >= 0 ; i--) beforeOnUpdateHooks[i].beforeOnUpdate(); if(overrideOnUpdateHooks != null) overrideOnUpdateHooks[overrideOnUpdateHooks.length - 1].onUpdate(); else player.localOnUpdate(); if(afterOnUpdateHooks != null) for(int i = 0; i < afterOnUpdateHooks.length; i++) afterOnUpdateHooks[i].afterOnUpdate(); } protected ServerPlayerBase GetOverwrittenOnUpdate(ServerPlayerBase overWriter) { if (overrideOnUpdateHooks == null) return overWriter; for(int i = 0; i < overrideOnUpdateHooks.length; i++) if(overrideOnUpdateHooks[i] == overWriter) if(i == 0) return null; else return overrideOnUpdateHooks[i - 1]; return overWriter; } private final static List<String> beforeOnUpdateHookTypes = new LinkedList<String>(); private final static List<String> overrideOnUpdateHookTypes = new LinkedList<String>(); private final static List<String> afterOnUpdateHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeOnUpdateHooks; private ServerPlayerBase[] overrideOnUpdateHooks; private ServerPlayerBase[] afterOnUpdateHooks; public boolean isOnUpdateModded; private static final Map<String, String[]> allBaseBeforeOnUpdateSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeOnUpdateInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideOnUpdateSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideOnUpdateInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterOnUpdateSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterOnUpdateInferiors = new Hashtable<String, String[]>(0); public static void onUpdateEntity(IServerPlayerAPI target) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isOnUpdateEntityModded) serverPlayerAPI.onUpdateEntity(); else target.localOnUpdateEntity(); } private void onUpdateEntity() { if(beforeOnUpdateEntityHooks != null) for(int i = beforeOnUpdateEntityHooks.length - 1; i >= 0 ; i--) beforeOnUpdateEntityHooks[i].beforeOnUpdateEntity(); if(overrideOnUpdateEntityHooks != null) overrideOnUpdateEntityHooks[overrideOnUpdateEntityHooks.length - 1].onUpdateEntity(); else player.localOnUpdateEntity(); if(afterOnUpdateEntityHooks != null) for(int i = 0; i < afterOnUpdateEntityHooks.length; i++) afterOnUpdateEntityHooks[i].afterOnUpdateEntity(); } protected ServerPlayerBase GetOverwrittenOnUpdateEntity(ServerPlayerBase overWriter) { if (overrideOnUpdateEntityHooks == null) return overWriter; for(int i = 0; i < overrideOnUpdateEntityHooks.length; i++) if(overrideOnUpdateEntityHooks[i] == overWriter) if(i == 0) return null; else return overrideOnUpdateEntityHooks[i - 1]; return overWriter; } private final static List<String> beforeOnUpdateEntityHookTypes = new LinkedList<String>(); private final static List<String> overrideOnUpdateEntityHookTypes = new LinkedList<String>(); private final static List<String> afterOnUpdateEntityHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeOnUpdateEntityHooks; private ServerPlayerBase[] overrideOnUpdateEntityHooks; private ServerPlayerBase[] afterOnUpdateEntityHooks; public boolean isOnUpdateEntityModded; private static final Map<String, String[]> allBaseBeforeOnUpdateEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeOnUpdateEntityInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideOnUpdateEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideOnUpdateEntityInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterOnUpdateEntitySuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterOnUpdateEntityInferiors = new Hashtable<String, String[]>(0); public static void readEntityFromNBT(IServerPlayerAPI target, net.minecraft.nbt.NBTTagCompound paramNBTTagCompound) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isReadEntityFromNBTModded) serverPlayerAPI.readEntityFromNBT(paramNBTTagCompound); else target.localReadEntityFromNBT(paramNBTTagCompound); } private void readEntityFromNBT(net.minecraft.nbt.NBTTagCompound paramNBTTagCompound) { if(beforeReadEntityFromNBTHooks != null) for(int i = beforeReadEntityFromNBTHooks.length - 1; i >= 0 ; i--) beforeReadEntityFromNBTHooks[i].beforeReadEntityFromNBT(paramNBTTagCompound); if(overrideReadEntityFromNBTHooks != null) overrideReadEntityFromNBTHooks[overrideReadEntityFromNBTHooks.length - 1].readEntityFromNBT(paramNBTTagCompound); else player.localReadEntityFromNBT(paramNBTTagCompound); if(afterReadEntityFromNBTHooks != null) for(int i = 0; i < afterReadEntityFromNBTHooks.length; i++) afterReadEntityFromNBTHooks[i].afterReadEntityFromNBT(paramNBTTagCompound); } protected ServerPlayerBase GetOverwrittenReadEntityFromNBT(ServerPlayerBase overWriter) { if (overrideReadEntityFromNBTHooks == null) return overWriter; for(int i = 0; i < overrideReadEntityFromNBTHooks.length; i++) if(overrideReadEntityFromNBTHooks[i] == overWriter) if(i == 0) return null; else return overrideReadEntityFromNBTHooks[i - 1]; return overWriter; } private final static List<String> beforeReadEntityFromNBTHookTypes = new LinkedList<String>(); private final static List<String> overrideReadEntityFromNBTHookTypes = new LinkedList<String>(); private final static List<String> afterReadEntityFromNBTHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeReadEntityFromNBTHooks; private ServerPlayerBase[] overrideReadEntityFromNBTHooks; private ServerPlayerBase[] afterReadEntityFromNBTHooks; public boolean isReadEntityFromNBTModded; private static final Map<String, String[]> allBaseBeforeReadEntityFromNBTSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeReadEntityFromNBTInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideReadEntityFromNBTSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideReadEntityFromNBTInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterReadEntityFromNBTSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterReadEntityFromNBTInferiors = new Hashtable<String, String[]>(0); public static void setDead(IServerPlayerAPI target) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isSetDeadModded) serverPlayerAPI.setDead(); else target.localSetDead(); } private void setDead() { if(beforeSetDeadHooks != null) for(int i = beforeSetDeadHooks.length - 1; i >= 0 ; i--) beforeSetDeadHooks[i].beforeSetDead(); if(overrideSetDeadHooks != null) overrideSetDeadHooks[overrideSetDeadHooks.length - 1].setDead(); else player.localSetDead(); if(afterSetDeadHooks != null) for(int i = 0; i < afterSetDeadHooks.length; i++) afterSetDeadHooks[i].afterSetDead(); } protected ServerPlayerBase GetOverwrittenSetDead(ServerPlayerBase overWriter) { if (overrideSetDeadHooks == null) return overWriter; for(int i = 0; i < overrideSetDeadHooks.length; i++) if(overrideSetDeadHooks[i] == overWriter) if(i == 0) return null; else return overrideSetDeadHooks[i - 1]; return overWriter; } private final static List<String> beforeSetDeadHookTypes = new LinkedList<String>(); private final static List<String> overrideSetDeadHookTypes = new LinkedList<String>(); private final static List<String> afterSetDeadHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeSetDeadHooks; private ServerPlayerBase[] overrideSetDeadHooks; private ServerPlayerBase[] afterSetDeadHooks; public boolean isSetDeadModded; private static final Map<String, String[]> allBaseBeforeSetDeadSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeSetDeadInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideSetDeadSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideSetDeadInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterSetDeadSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterSetDeadInferiors = new Hashtable<String, String[]>(0); public static void setEntityActionState(IServerPlayerAPI target, float paramFloat1, float paramFloat2, boolean paramBoolean1, boolean paramBoolean2) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isSetEntityActionStateModded) serverPlayerAPI.setEntityActionState(paramFloat1, paramFloat2, paramBoolean1, paramBoolean2); else target.localSetEntityActionState(paramFloat1, paramFloat2, paramBoolean1, paramBoolean2); } private void setEntityActionState(float paramFloat1, float paramFloat2, boolean paramBoolean1, boolean paramBoolean2) { if(beforeSetEntityActionStateHooks != null) for(int i = beforeSetEntityActionStateHooks.length - 1; i >= 0 ; i--) beforeSetEntityActionStateHooks[i].beforeSetEntityActionState(paramFloat1, paramFloat2, paramBoolean1, paramBoolean2); if(overrideSetEntityActionStateHooks != null) overrideSetEntityActionStateHooks[overrideSetEntityActionStateHooks.length - 1].setEntityActionState(paramFloat1, paramFloat2, paramBoolean1, paramBoolean2); else player.localSetEntityActionState(paramFloat1, paramFloat2, paramBoolean1, paramBoolean2); if(afterSetEntityActionStateHooks != null) for(int i = 0; i < afterSetEntityActionStateHooks.length; i++) afterSetEntityActionStateHooks[i].afterSetEntityActionState(paramFloat1, paramFloat2, paramBoolean1, paramBoolean2); } protected ServerPlayerBase GetOverwrittenSetEntityActionState(ServerPlayerBase overWriter) { if (overrideSetEntityActionStateHooks == null) return overWriter; for(int i = 0; i < overrideSetEntityActionStateHooks.length; i++) if(overrideSetEntityActionStateHooks[i] == overWriter) if(i == 0) return null; else return overrideSetEntityActionStateHooks[i - 1]; return overWriter; } private final static List<String> beforeSetEntityActionStateHookTypes = new LinkedList<String>(); private final static List<String> overrideSetEntityActionStateHookTypes = new LinkedList<String>(); private final static List<String> afterSetEntityActionStateHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeSetEntityActionStateHooks; private ServerPlayerBase[] overrideSetEntityActionStateHooks; private ServerPlayerBase[] afterSetEntityActionStateHooks; public boolean isSetEntityActionStateModded; private static final Map<String, String[]> allBaseBeforeSetEntityActionStateSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeSetEntityActionStateInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideSetEntityActionStateSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideSetEntityActionStateInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterSetEntityActionStateSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterSetEntityActionStateInferiors = new Hashtable<String, String[]>(0); public static void setPosition(IServerPlayerAPI target, double paramDouble1, double paramDouble2, double paramDouble3) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isSetPositionModded) serverPlayerAPI.setPosition(paramDouble1, paramDouble2, paramDouble3); else target.localSetPosition(paramDouble1, paramDouble2, paramDouble3); } private void setPosition(double paramDouble1, double paramDouble2, double paramDouble3) { if(beforeSetPositionHooks != null) for(int i = beforeSetPositionHooks.length - 1; i >= 0 ; i--) beforeSetPositionHooks[i].beforeSetPosition(paramDouble1, paramDouble2, paramDouble3); if(overrideSetPositionHooks != null) overrideSetPositionHooks[overrideSetPositionHooks.length - 1].setPosition(paramDouble1, paramDouble2, paramDouble3); else player.localSetPosition(paramDouble1, paramDouble2, paramDouble3); if(afterSetPositionHooks != null) for(int i = 0; i < afterSetPositionHooks.length; i++) afterSetPositionHooks[i].afterSetPosition(paramDouble1, paramDouble2, paramDouble3); } protected ServerPlayerBase GetOverwrittenSetPosition(ServerPlayerBase overWriter) { if (overrideSetPositionHooks == null) return overWriter; for(int i = 0; i < overrideSetPositionHooks.length; i++) if(overrideSetPositionHooks[i] == overWriter) if(i == 0) return null; else return overrideSetPositionHooks[i - 1]; return overWriter; } private final static List<String> beforeSetPositionHookTypes = new LinkedList<String>(); private final static List<String> overrideSetPositionHookTypes = new LinkedList<String>(); private final static List<String> afterSetPositionHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeSetPositionHooks; private ServerPlayerBase[] overrideSetPositionHooks; private ServerPlayerBase[] afterSetPositionHooks; public boolean isSetPositionModded; private static final Map<String, String[]> allBaseBeforeSetPositionSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeSetPositionInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideSetPositionSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideSetPositionInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterSetPositionSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterSetPositionInferiors = new Hashtable<String, String[]>(0); public static void setSneaking(IServerPlayerAPI target, boolean paramBoolean) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isSetSneakingModded) serverPlayerAPI.setSneaking(paramBoolean); else target.localSetSneaking(paramBoolean); } private void setSneaking(boolean paramBoolean) { if(beforeSetSneakingHooks != null) for(int i = beforeSetSneakingHooks.length - 1; i >= 0 ; i--) beforeSetSneakingHooks[i].beforeSetSneaking(paramBoolean); if(overrideSetSneakingHooks != null) overrideSetSneakingHooks[overrideSetSneakingHooks.length - 1].setSneaking(paramBoolean); else player.localSetSneaking(paramBoolean); if(afterSetSneakingHooks != null) for(int i = 0; i < afterSetSneakingHooks.length; i++) afterSetSneakingHooks[i].afterSetSneaking(paramBoolean); } protected ServerPlayerBase GetOverwrittenSetSneaking(ServerPlayerBase overWriter) { if (overrideSetSneakingHooks == null) return overWriter; for(int i = 0; i < overrideSetSneakingHooks.length; i++) if(overrideSetSneakingHooks[i] == overWriter) if(i == 0) return null; else return overrideSetSneakingHooks[i - 1]; return overWriter; } private final static List<String> beforeSetSneakingHookTypes = new LinkedList<String>(); private final static List<String> overrideSetSneakingHookTypes = new LinkedList<String>(); private final static List<String> afterSetSneakingHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeSetSneakingHooks; private ServerPlayerBase[] overrideSetSneakingHooks; private ServerPlayerBase[] afterSetSneakingHooks; public boolean isSetSneakingModded; private static final Map<String, String[]> allBaseBeforeSetSneakingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeSetSneakingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideSetSneakingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideSetSneakingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterSetSneakingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterSetSneakingInferiors = new Hashtable<String, String[]>(0); public static void setSprinting(IServerPlayerAPI target, boolean paramBoolean) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isSetSprintingModded) serverPlayerAPI.setSprinting(paramBoolean); else target.localSetSprinting(paramBoolean); } private void setSprinting(boolean paramBoolean) { if(beforeSetSprintingHooks != null) for(int i = beforeSetSprintingHooks.length - 1; i >= 0 ; i--) beforeSetSprintingHooks[i].beforeSetSprinting(paramBoolean); if(overrideSetSprintingHooks != null) overrideSetSprintingHooks[overrideSetSprintingHooks.length - 1].setSprinting(paramBoolean); else player.localSetSprinting(paramBoolean); if(afterSetSprintingHooks != null) for(int i = 0; i < afterSetSprintingHooks.length; i++) afterSetSprintingHooks[i].afterSetSprinting(paramBoolean); } protected ServerPlayerBase GetOverwrittenSetSprinting(ServerPlayerBase overWriter) { if (overrideSetSprintingHooks == null) return overWriter; for(int i = 0; i < overrideSetSprintingHooks.length; i++) if(overrideSetSprintingHooks[i] == overWriter) if(i == 0) return null; else return overrideSetSprintingHooks[i - 1]; return overWriter; } private final static List<String> beforeSetSprintingHookTypes = new LinkedList<String>(); private final static List<String> overrideSetSprintingHookTypes = new LinkedList<String>(); private final static List<String> afterSetSprintingHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeSetSprintingHooks; private ServerPlayerBase[] overrideSetSprintingHooks; private ServerPlayerBase[] afterSetSprintingHooks; public boolean isSetSprintingModded; private static final Map<String, String[]> allBaseBeforeSetSprintingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeSetSprintingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideSetSprintingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideSetSprintingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterSetSprintingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterSetSprintingInferiors = new Hashtable<String, String[]>(0); public static void swingItem(IServerPlayerAPI target) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isSwingItemModded) serverPlayerAPI.swingItem(); else target.localSwingItem(); } private void swingItem() { if(beforeSwingItemHooks != null) for(int i = beforeSwingItemHooks.length - 1; i >= 0 ; i--) beforeSwingItemHooks[i].beforeSwingItem(); if(overrideSwingItemHooks != null) overrideSwingItemHooks[overrideSwingItemHooks.length - 1].swingItem(); else player.localSwingItem(); if(afterSwingItemHooks != null) for(int i = 0; i < afterSwingItemHooks.length; i++) afterSwingItemHooks[i].afterSwingItem(); } protected ServerPlayerBase GetOverwrittenSwingItem(ServerPlayerBase overWriter) { if (overrideSwingItemHooks == null) return overWriter; for(int i = 0; i < overrideSwingItemHooks.length; i++) if(overrideSwingItemHooks[i] == overWriter) if(i == 0) return null; else return overrideSwingItemHooks[i - 1]; return overWriter; } private final static List<String> beforeSwingItemHookTypes = new LinkedList<String>(); private final static List<String> overrideSwingItemHookTypes = new LinkedList<String>(); private final static List<String> afterSwingItemHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeSwingItemHooks; private ServerPlayerBase[] overrideSwingItemHooks; private ServerPlayerBase[] afterSwingItemHooks; public boolean isSwingItemModded; private static final Map<String, String[]> allBaseBeforeSwingItemSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeSwingItemInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideSwingItemSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideSwingItemInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterSwingItemSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterSwingItemInferiors = new Hashtable<String, String[]>(0); public static void updateEntityActionState(IServerPlayerAPI target) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isUpdateEntityActionStateModded) serverPlayerAPI.updateEntityActionState(); else target.localUpdateEntityActionState(); } private void updateEntityActionState() { if(beforeUpdateEntityActionStateHooks != null) for(int i = beforeUpdateEntityActionStateHooks.length - 1; i >= 0 ; i--) beforeUpdateEntityActionStateHooks[i].beforeUpdateEntityActionState(); if(overrideUpdateEntityActionStateHooks != null) overrideUpdateEntityActionStateHooks[overrideUpdateEntityActionStateHooks.length - 1].updateEntityActionState(); else player.localUpdateEntityActionState(); if(afterUpdateEntityActionStateHooks != null) for(int i = 0; i < afterUpdateEntityActionStateHooks.length; i++) afterUpdateEntityActionStateHooks[i].afterUpdateEntityActionState(); } protected ServerPlayerBase GetOverwrittenUpdateEntityActionState(ServerPlayerBase overWriter) { if (overrideUpdateEntityActionStateHooks == null) return overWriter; for(int i = 0; i < overrideUpdateEntityActionStateHooks.length; i++) if(overrideUpdateEntityActionStateHooks[i] == overWriter) if(i == 0) return null; else return overrideUpdateEntityActionStateHooks[i - 1]; return overWriter; } private final static List<String> beforeUpdateEntityActionStateHookTypes = new LinkedList<String>(); private final static List<String> overrideUpdateEntityActionStateHookTypes = new LinkedList<String>(); private final static List<String> afterUpdateEntityActionStateHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeUpdateEntityActionStateHooks; private ServerPlayerBase[] overrideUpdateEntityActionStateHooks; private ServerPlayerBase[] afterUpdateEntityActionStateHooks; public boolean isUpdateEntityActionStateModded; private static final Map<String, String[]> allBaseBeforeUpdateEntityActionStateSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeUpdateEntityActionStateInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideUpdateEntityActionStateSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideUpdateEntityActionStateInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterUpdateEntityActionStateSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterUpdateEntityActionStateInferiors = new Hashtable<String, String[]>(0); public static void updatePotionEffects(IServerPlayerAPI target) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isUpdatePotionEffectsModded) serverPlayerAPI.updatePotionEffects(); else target.localUpdatePotionEffects(); } private void updatePotionEffects() { if(beforeUpdatePotionEffectsHooks != null) for(int i = beforeUpdatePotionEffectsHooks.length - 1; i >= 0 ; i--) beforeUpdatePotionEffectsHooks[i].beforeUpdatePotionEffects(); if(overrideUpdatePotionEffectsHooks != null) overrideUpdatePotionEffectsHooks[overrideUpdatePotionEffectsHooks.length - 1].updatePotionEffects(); else player.localUpdatePotionEffects(); if(afterUpdatePotionEffectsHooks != null) for(int i = 0; i < afterUpdatePotionEffectsHooks.length; i++) afterUpdatePotionEffectsHooks[i].afterUpdatePotionEffects(); } protected ServerPlayerBase GetOverwrittenUpdatePotionEffects(ServerPlayerBase overWriter) { if (overrideUpdatePotionEffectsHooks == null) return overWriter; for(int i = 0; i < overrideUpdatePotionEffectsHooks.length; i++) if(overrideUpdatePotionEffectsHooks[i] == overWriter) if(i == 0) return null; else return overrideUpdatePotionEffectsHooks[i - 1]; return overWriter; } private final static List<String> beforeUpdatePotionEffectsHookTypes = new LinkedList<String>(); private final static List<String> overrideUpdatePotionEffectsHookTypes = new LinkedList<String>(); private final static List<String> afterUpdatePotionEffectsHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeUpdatePotionEffectsHooks; private ServerPlayerBase[] overrideUpdatePotionEffectsHooks; private ServerPlayerBase[] afterUpdatePotionEffectsHooks; public boolean isUpdatePotionEffectsModded; private static final Map<String, String[]> allBaseBeforeUpdatePotionEffectsSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeUpdatePotionEffectsInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideUpdatePotionEffectsSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideUpdatePotionEffectsInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterUpdatePotionEffectsSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterUpdatePotionEffectsInferiors = new Hashtable<String, String[]>(0); public static void updateRidden(IServerPlayerAPI target) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isUpdateRiddenModded) serverPlayerAPI.updateRidden(); else target.localUpdateRidden(); } private void updateRidden() { if(beforeUpdateRiddenHooks != null) for(int i = beforeUpdateRiddenHooks.length - 1; i >= 0 ; i--) beforeUpdateRiddenHooks[i].beforeUpdateRidden(); if(overrideUpdateRiddenHooks != null) overrideUpdateRiddenHooks[overrideUpdateRiddenHooks.length - 1].updateRidden(); else player.localUpdateRidden(); if(afterUpdateRiddenHooks != null) for(int i = 0; i < afterUpdateRiddenHooks.length; i++) afterUpdateRiddenHooks[i].afterUpdateRidden(); } protected ServerPlayerBase GetOverwrittenUpdateRidden(ServerPlayerBase overWriter) { if (overrideUpdateRiddenHooks == null) return overWriter; for(int i = 0; i < overrideUpdateRiddenHooks.length; i++) if(overrideUpdateRiddenHooks[i] == overWriter) if(i == 0) return null; else return overrideUpdateRiddenHooks[i - 1]; return overWriter; } private final static List<String> beforeUpdateRiddenHookTypes = new LinkedList<String>(); private final static List<String> overrideUpdateRiddenHookTypes = new LinkedList<String>(); private final static List<String> afterUpdateRiddenHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeUpdateRiddenHooks; private ServerPlayerBase[] overrideUpdateRiddenHooks; private ServerPlayerBase[] afterUpdateRiddenHooks; public boolean isUpdateRiddenModded; private static final Map<String, String[]> allBaseBeforeUpdateRiddenSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeUpdateRiddenInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideUpdateRiddenSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideUpdateRiddenInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterUpdateRiddenSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterUpdateRiddenInferiors = new Hashtable<String, String[]>(0); public static void wakeUpPlayer(IServerPlayerAPI target, boolean paramBoolean1, boolean paramBoolean2, boolean paramBoolean3) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isWakeUpPlayerModded) serverPlayerAPI.wakeUpPlayer(paramBoolean1, paramBoolean2, paramBoolean3); else target.localWakeUpPlayer(paramBoolean1, paramBoolean2, paramBoolean3); } private void wakeUpPlayer(boolean paramBoolean1, boolean paramBoolean2, boolean paramBoolean3) { if(beforeWakeUpPlayerHooks != null) for(int i = beforeWakeUpPlayerHooks.length - 1; i >= 0 ; i--) beforeWakeUpPlayerHooks[i].beforeWakeUpPlayer(paramBoolean1, paramBoolean2, paramBoolean3); if(overrideWakeUpPlayerHooks != null) overrideWakeUpPlayerHooks[overrideWakeUpPlayerHooks.length - 1].wakeUpPlayer(paramBoolean1, paramBoolean2, paramBoolean3); else player.localWakeUpPlayer(paramBoolean1, paramBoolean2, paramBoolean3); if(afterWakeUpPlayerHooks != null) for(int i = 0; i < afterWakeUpPlayerHooks.length; i++) afterWakeUpPlayerHooks[i].afterWakeUpPlayer(paramBoolean1, paramBoolean2, paramBoolean3); } protected ServerPlayerBase GetOverwrittenWakeUpPlayer(ServerPlayerBase overWriter) { if (overrideWakeUpPlayerHooks == null) return overWriter; for(int i = 0; i < overrideWakeUpPlayerHooks.length; i++) if(overrideWakeUpPlayerHooks[i] == overWriter) if(i == 0) return null; else return overrideWakeUpPlayerHooks[i - 1]; return overWriter; } private final static List<String> beforeWakeUpPlayerHookTypes = new LinkedList<String>(); private final static List<String> overrideWakeUpPlayerHookTypes = new LinkedList<String>(); private final static List<String> afterWakeUpPlayerHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeWakeUpPlayerHooks; private ServerPlayerBase[] overrideWakeUpPlayerHooks; private ServerPlayerBase[] afterWakeUpPlayerHooks; public boolean isWakeUpPlayerModded; private static final Map<String, String[]> allBaseBeforeWakeUpPlayerSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeWakeUpPlayerInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideWakeUpPlayerSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideWakeUpPlayerInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterWakeUpPlayerSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterWakeUpPlayerInferiors = new Hashtable<String, String[]>(0); public static void writeEntityToNBT(IServerPlayerAPI target, net.minecraft.nbt.NBTTagCompound paramNBTTagCompound) { ServerPlayerAPI serverPlayerAPI = target.getServerPlayerAPI(); if(serverPlayerAPI != null && serverPlayerAPI.isWriteEntityToNBTModded) serverPlayerAPI.writeEntityToNBT(paramNBTTagCompound); else target.localWriteEntityToNBT(paramNBTTagCompound); } private void writeEntityToNBT(net.minecraft.nbt.NBTTagCompound paramNBTTagCompound) { if(beforeWriteEntityToNBTHooks != null) for(int i = beforeWriteEntityToNBTHooks.length - 1; i >= 0 ; i--) beforeWriteEntityToNBTHooks[i].beforeWriteEntityToNBT(paramNBTTagCompound); if(overrideWriteEntityToNBTHooks != null) overrideWriteEntityToNBTHooks[overrideWriteEntityToNBTHooks.length - 1].writeEntityToNBT(paramNBTTagCompound); else player.localWriteEntityToNBT(paramNBTTagCompound); if(afterWriteEntityToNBTHooks != null) for(int i = 0; i < afterWriteEntityToNBTHooks.length; i++) afterWriteEntityToNBTHooks[i].afterWriteEntityToNBT(paramNBTTagCompound); } protected ServerPlayerBase GetOverwrittenWriteEntityToNBT(ServerPlayerBase overWriter) { if (overrideWriteEntityToNBTHooks == null) return overWriter; for(int i = 0; i < overrideWriteEntityToNBTHooks.length; i++) if(overrideWriteEntityToNBTHooks[i] == overWriter) if(i == 0) return null; else return overrideWriteEntityToNBTHooks[i - 1]; return overWriter; } private final static List<String> beforeWriteEntityToNBTHookTypes = new LinkedList<String>(); private final static List<String> overrideWriteEntityToNBTHookTypes = new LinkedList<String>(); private final static List<String> afterWriteEntityToNBTHookTypes = new LinkedList<String>(); private ServerPlayerBase[] beforeWriteEntityToNBTHooks; private ServerPlayerBase[] overrideWriteEntityToNBTHooks; private ServerPlayerBase[] afterWriteEntityToNBTHooks; public boolean isWriteEntityToNBTModded; private static final Map<String, String[]> allBaseBeforeWriteEntityToNBTSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeWriteEntityToNBTInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideWriteEntityToNBTSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseOverrideWriteEntityToNBTInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterWriteEntityToNBTSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterWriteEntityToNBTInferiors = new Hashtable<String, String[]>(0); protected final IServerPlayerAPI player; private final static Set<String> keys = new HashSet<String>(); private final static Map<String, String> keysToVirtualIds = new HashMap<String, String>(); private final static Set<Class<?>> dynamicTypes = new HashSet<Class<?>>(); private final static Map<Class<?>, Map<String, Method>> virtualDynamicHookMethods = new HashMap<Class<?>, Map<String, Method>>(); private final static Map<Class<?>, Map<String, Method>> beforeDynamicHookMethods = new HashMap<Class<?>, Map<String, Method>>(); private final static Map<Class<?>, Map<String, Method>> overrideDynamicHookMethods = new HashMap<Class<?>, Map<String, Method>>(); private final static Map<Class<?>, Map<String, Method>> afterDynamicHookMethods = new HashMap<Class<?>, Map<String, Method>>(); private final static List<String> beforeLocalConstructingHookTypes = new LinkedList<String>(); private final static List<String> afterLocalConstructingHookTypes = new LinkedList<String>(); private static final Map<String, List<String>> beforeDynamicHookTypes = new Hashtable<String, List<String>>(0); private static final Map<String, List<String>> overrideDynamicHookTypes = new Hashtable<String, List<String>>(0); private static final Map<String, List<String>> afterDynamicHookTypes = new Hashtable<String, List<String>>(0); private ServerPlayerBase[] beforeLocalConstructingHooks; private ServerPlayerBase[] afterLocalConstructingHooks; private final Map<ServerPlayerBase, String> baseObjectsToId = new Hashtable<ServerPlayerBase, String>(); private final Map<String, ServerPlayerBase> allBaseObjects = new Hashtable<String, ServerPlayerBase>(); private final Set<String> unmodifiableAllBaseIds = Collections.unmodifiableSet(allBaseObjects.keySet()); private static final Map<String, Constructor<?>> allBaseConstructors = new Hashtable<String, Constructor<?>>(); private static final Set<String> unmodifiableAllIds = Collections.unmodifiableSet(allBaseConstructors.keySet()); private static final Map<String, String[]> allBaseBeforeLocalConstructingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseBeforeLocalConstructingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterLocalConstructingSuperiors = new Hashtable<String, String[]>(0); private static final Map<String, String[]> allBaseAfterLocalConstructingInferiors = new Hashtable<String, String[]>(0); private static final Map<String, Map<String, String[]>> allBaseBeforeDynamicSuperiors = new Hashtable<String, Map<String, String[]>>(0); private static final Map<String, Map<String, String[]>> allBaseBeforeDynamicInferiors = new Hashtable<String, Map<String, String[]>>(0); private static final Map<String, Map<String, String[]>> allBaseOverrideDynamicSuperiors = new Hashtable<String, Map<String, String[]>>(0); private static final Map<String, Map<String, String[]>> allBaseOverrideDynamicInferiors = new Hashtable<String, Map<String, String[]>>(0); private static final Map<String, Map<String, String[]>> allBaseAfterDynamicSuperiors = new Hashtable<String, Map<String, String[]>>(0); private static final Map<String, Map<String, String[]>> allBaseAfterDynamicInferiors = new Hashtable<String, Map<String, String[]>>(0); private static boolean initialized = false; }