package com.iBaby; import java.io.File; import java.io.IOException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.logging.Logger; import net.milkbowl.vault.economy.Economy; import net.minecraft.server.Chunk; import net.minecraft.server.Entity; import net.minecraft.server.World; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.entity.Player; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; import com.iBaby.reflection.EntityIronBaby; /** * The IBaby Main Class * @author steffengy * */ public class iBaby extends JavaPlugin { /** * Containing the File object, which belongs to config.yml */ private static File configFile = null; public static Economy economy = null; /** * Containing which iBaby a player selected for a custom command */ public static HashMap<String, EntityIronBaby> select = new HashMap<String, EntityIronBaby>(); public void onEnable() { //Register entity :) try{ Class[] args = new Class[3]; args[0] = Class.class; args[1] = String.class; args[2] = int.class; Method a = net.minecraft.server.EntityTypes.class.getDeclaredMethod("a", args); a.setAccessible(true); a.invoke(null, EntityIronBaby.class, "IronBabysitter", 99); }catch(Exception e) { log("failed registering EntityIronBaby at 99"); e.printStackTrace(); } getServer().getPluginManager().registerEvents(new iBabyListener(), this); //Loading config if(!getDataFolder().exists()) if(!getDataFolder().mkdir()) log("Error while mkdir of iBaby"); configFile = new File(getDataFolder(), "config.yml"); if(configFile.exists()) { Configuration.init(configFile); }else{ try { configFile.createNewFile(); } catch (IOException e) { log("Error while creating file config.yml!"); } Configuration.createDefaultOne(configFile); } // Try to fetch economy module of vault if(Configuration.enablePrice) { if(!setupEconomy()) { log("deactivation price support because economy failed to load. You have vault running?"); Configuration.enablePrice = false; } } // Loaded successfully log(getDescription().getVersion() + " loaded!"); } public void onDisable() { log(getDescription().getVersion() + " loaded!"); } /** * Write something into log * @param s The String 2 write */ public static void log(String s) { Logger.getLogger("Minecraft").info("[iBaby] " + s); } public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { String sub = args.length > 0 ? args[0] : ""; List<String> arggs = new ArrayList<String>(Arrays.asList(args)); if(arggs.size() > 0) arggs.remove(0); String[] arguments = arggs.size() > 0 ? arggs.toArray(new String[0]) : new String[0]; CommandHandler.handleCommand(sender, cmd.getName(), sub, arguments); return true; } /** * Creates a iron Baby at a location with an owner * @param location The location * @param name The player */ public static EntityIronBaby spawnIronBaby(Location location, Player player) { EntityIronBaby ib = new EntityIronBaby(((CraftWorld)location.getWorld()).getHandle(), player.getName()); ib.getBukkitEntity().teleport(location); ((CraftWorld)location.getWorld()).getHandle().addEntity(ib); return ib; } private Boolean setupEconomy() { RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); if (economyProvider != null) { economy = economyProvider.getProvider(); } return (economy != null); } /** * Gets a list of all iron babys in world * @param world The world * @return List<EntityIronBaby> */ public static List<EntityIronBaby> getIronBabys(World world) { ArrayList<EntityIronBaby> entities = new ArrayList<EntityIronBaby>(); for (Object entity: world.entityList) { if (entity instanceof net.minecraft.server.Entity) { if(entity instanceof EntityIronBaby) { entities.add((EntityIronBaby)entity); } } } return entities; } /** * Gets a list of all iron babys in world by player * @param world The world * @param player The playername Case sensitive * @return List<EntityIronBaby> */ public static List<EntityIronBaby> getIronBabys(World world, String player) { ArrayList<EntityIronBaby> entities = new ArrayList<EntityIronBaby>(); for(EntityIronBaby entity : getIronBabys(world)) { if(entity.getOwner().equals(player)) entities.add(entity); } return entities; } /** * Gets a list of all iron babys * @return List<EntityIronBaby> */ public static List<EntityIronBaby> getIronBabys() { ArrayList<EntityIronBaby> entities = new ArrayList<EntityIronBaby>(); for(org.bukkit.World w : Bukkit.getWorlds()) { entities.addAll(getIronBabys(((CraftWorld)w).getHandle())); } return entities; } /** * Gets a list of all iron babys by player * @param p The playername Case sensitive1 * @return List<EntityIronBaby> */ public static List<EntityIronBaby> getIronBabys(String p) { ArrayList<EntityIronBaby> entities = new ArrayList<EntityIronBaby>(); for(org.bukkit.World w : Bukkit.getWorlds()) { entities.addAll(getIronBabys(((CraftWorld)w).getHandle(), p)); } return entities; } /** * Gets a list of all iron babys in chunk * @param chunk The chunk * @return */ public static ArrayList<EntityIronBaby> getIronBabys(Chunk chunk) { ArrayList<EntityIronBaby> entities = new ArrayList<EntityIronBaby>(); for(List<Entity> entis : chunk.entitySlices) { for(Entity enty : entis) { System.out.println(enty.getClass().getName()); if(enty instanceof EntityIronBaby) { entities.add((EntityIronBaby) enty); } } } return entities; } /** * Gets a list of all iron babys in a chunk by player * @param chunk * @param player * @return */ public static ArrayList<EntityIronBaby> getIronBabys(Chunk chunk, String player) { ArrayList<EntityIronBaby> entities = new ArrayList<EntityIronBaby>(); for(List<Entity> entis : chunk.entitySlices) { if(entis instanceof EntityIronBaby) { if(((EntityIronBaby)entis).getOwner().equals(player)) entities.add((EntityIronBaby) entis); } } return entities; } /** * Returns the currently selected ibaby * @param name The name of it * @return */ public static EntityIronBaby getSelectedBaby(String name) { if(select.containsKey(name)) { return select.get(name); } return null; } }