Newer
Older
ultramine_bukkit / src / main / java / org / ultramine / mods / bukkit / EventImplProgress.java
package org.ultramine.mods.bukkit;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bukkit.event.Event;
import org.bukkit.plugin.Plugin;

import java.util.HashMap;
import java.util.Map;

@SuppressWarnings("deprecation")
public class EventImplProgress
{
	private static final Logger log = LogManager.getLogger();
	private static final Map<Class<? extends Event>, Boolean> EVENTS_MAP = new HashMap<Class<? extends Event>, Boolean>();

	private EventImplProgress()
	{
	}

	public static void checkEventImplemented(Class<? extends Event> cls, Plugin p)
	{
		if(!isEventImplemented(cls))
			log.error(p + ": Bukkit event " + cls.getName() + " is not implemented in UltraMine bukkit impl");
	}

	public static void checkEventImplemented(Class<? extends Event> cls)
	{
		if(!isEventImplemented(cls))
			log.error("Bukkit event " + cls.getName() + " is not implemented in UltraMine bukkit impl");
	}

	public static boolean isEventImplemented(Class<? extends Event> cls)
	{
		Boolean is = EVENTS_MAP.get(cls);
		return is == null || is.booleanValue();
	}

	private static void reg(boolean isImplemented, Class<? extends Event> cls)
	{
		EVENTS_MAP.put(cls, isImplemented);
	}

	private static void printStats()
	{
		int implementedCount = 0;
		for(Boolean b : EVENTS_MAP.values())
			if(b)
				implementedCount++;
		log.info("================ Bukkit event implementation progress ===============");
		log.info("Total: {}, Implemented: {}, Not implemented: {}, Progress: {}%",
				EVENTS_MAP.size(), implementedCount, EVENTS_MAP.size() - implementedCount, (int)((implementedCount / (double)EVENTS_MAP.size()) * 100));
		log.info("=====================================================================");
	}

	static
	{
		reg(true, org.bukkit.event.block.BlockBreakEvent.class);
		reg(true, org.bukkit.event.block.BlockBurnEvent.class);
		reg(true, org.bukkit.event.block.BlockCanBuildEvent.class);
		reg(true, org.bukkit.event.block.BlockDamageEvent.class);
		reg(true, org.bukkit.event.block.BlockDispenseEvent.class);
		reg(true, org.bukkit.event.block.BlockExpEvent.class);
		reg(true, org.bukkit.event.block.BlockFadeEvent.class);
		reg(true, org.bukkit.event.block.BlockFormEvent.class);
		reg(true, org.bukkit.event.block.BlockFromToEvent.class);
		reg(true, org.bukkit.event.block.BlockGrowEvent.class);
		reg(true, org.bukkit.event.block.BlockIgniteEvent.class);
		reg(false, org.bukkit.event.block.BlockMultiPlaceEvent.class);
		reg(false, org.bukkit.event.block.BlockPhysicsEvent.class);
		reg(true, org.bukkit.event.block.BlockPistonExtendEvent.class);
		reg(true, org.bukkit.event.block.BlockPistonRetractEvent.class);
		reg(true, org.bukkit.event.block.BlockPlaceEvent.class);
		reg(false, org.bukkit.event.block.BlockRedstoneEvent.class);
		reg(true, org.bukkit.event.block.BlockSpreadEvent.class);
		reg(false, org.bukkit.event.block.EntityBlockFormEvent.class);
		reg(true, org.bukkit.event.block.LeavesDecayEvent.class);
		reg(true, org.bukkit.event.block.NotePlayEvent.class);
		reg(true, org.bukkit.event.block.SignChangeEvent.class);
		reg(false, org.bukkit.event.enchantment.EnchantItemEvent.class);
		reg(false, org.bukkit.event.enchantment.PrepareItemEnchantEvent.class);
		reg(true, org.bukkit.event.entity.CreatureSpawnEvent.class); // TODO impl SpawnReason
		reg(true, org.bukkit.event.entity.CreeperPowerEvent.class);
		reg(false, org.bukkit.event.entity.EntityBreakDoorEvent.class);
		reg(true, org.bukkit.event.entity.EntityChangeBlockEvent.class);
		reg(false, org.bukkit.event.entity.EntityCombustByBlockEvent.class);
		reg(false, org.bukkit.event.entity.EntityCombustByEntityEvent.class);
		reg(false, org.bukkit.event.entity.EntityCombustEvent.class);
		reg(true, org.bukkit.event.entity.EntityCreatePortalEvent.class);
		reg(true, org.bukkit.event.entity.EntityDamageByBlockEvent.class);
		reg(true, org.bukkit.event.entity.EntityDamageByEntityEvent.class);
		reg(true, org.bukkit.event.entity.EntityDamageEvent.class);
		reg(true, org.bukkit.event.entity.EntityDeathEvent.class);
		reg(true, org.bukkit.event.entity.EntityExplodeEvent.class);
		reg(false, org.bukkit.event.entity.EntityInteractEvent.class);
		reg(false, org.bukkit.event.entity.EntityPortalEnterEvent.class);
		reg(false, org.bukkit.event.entity.EntityPortalEvent.class);
		reg(false, org.bukkit.event.entity.EntityPortalExitEvent.class);
		reg(true, org.bukkit.event.entity.EntityRegainHealthEvent.class);
		reg(false, org.bukkit.event.entity.EntityShootBowEvent.class);
		reg(false, org.bukkit.event.entity.EntityTameEvent.class);
		reg(false, org.bukkit.event.entity.EntityTargetEvent.class);
		reg(false, org.bukkit.event.entity.EntityTargetLivingEntityEvent.class);
		reg(false, org.bukkit.event.entity.EntityTeleportEvent.class);
		reg(false, org.bukkit.event.entity.EntityUnleashEvent.class);
		reg(false, org.bukkit.event.entity.ExpBottleEvent.class);
		reg(true, org.bukkit.event.entity.ExplosionPrimeEvent.class);
		reg(true, org.bukkit.event.entity.FoodLevelChangeEvent.class);
		reg(false, org.bukkit.event.entity.HorseJumpEvent.class);
		reg(true, org.bukkit.event.entity.ItemDespawnEvent.class);
		reg(true, org.bukkit.event.entity.ItemSpawnEvent.class);
		reg(true, org.bukkit.event.entity.PigZapEvent.class);
		reg(true, org.bukkit.event.entity.PlayerDeathEvent.class);
		reg(false, org.bukkit.event.entity.PlayerLeashEntityEvent.class);
		reg(false, org.bukkit.event.entity.PotionSplashEvent.class);
		reg(false, org.bukkit.event.entity.ProjectileHitEvent.class);
		reg(true, org.bukkit.event.entity.ProjectileLaunchEvent.class);
		reg(false, org.bukkit.event.entity.SheepDyeWoolEvent.class);
		reg(false, org.bukkit.event.entity.SheepRegrowWoolEvent.class);
		reg(false, org.bukkit.event.entity.SlimeSplitEvent.class);
		reg(false, org.bukkit.event.hanging.HangingBreakByEntityEvent.class);
		reg(true, org.bukkit.event.hanging.HangingBreakEvent.class);
		reg(false, org.bukkit.event.hanging.HangingPlaceEvent.class);
		reg(false, org.bukkit.event.inventory.BrewEvent.class);
		reg(false, org.bukkit.event.inventory.CraftItemEvent.class);
		reg(true, org.bukkit.event.inventory.FurnaceBurnEvent.class);
		reg(false, org.bukkit.event.inventory.FurnaceExtractEvent.class);
		reg(true, org.bukkit.event.inventory.FurnaceSmeltEvent.class);
		reg(true, org.bukkit.event.inventory.InventoryClickEvent.class);
		reg(true, org.bukkit.event.inventory.InventoryCloseEvent.class);
		reg(true, org.bukkit.event.inventory.InventoryCreativeEvent.class);
		reg(true, org.bukkit.event.inventory.InventoryDragEvent.class);
		reg(true, org.bukkit.event.inventory.InventoryEvent.class);
		reg(true, org.bukkit.event.inventory.InventoryInteractEvent.class);
		reg(true, org.bukkit.event.inventory.InventoryMoveItemEvent.class);
		reg(true, org.bukkit.event.inventory.InventoryOpenEvent.class);
		reg(true, org.bukkit.event.inventory.InventoryPickupItemEvent.class);
		reg(false, org.bukkit.event.inventory.PrepareItemCraftEvent.class);
		reg(false, org.bukkit.event.painting.PaintingBreakByEntityEvent.class);
		reg(true, org.bukkit.event.painting.PaintingBreakEvent.class);
		reg(false, org.bukkit.event.painting.PaintingPlaceEvent.class);
		reg(true, org.bukkit.event.player.AsyncPlayerChatEvent.class);
		reg(false, org.bukkit.event.player.AsyncPlayerPreLoginEvent.class);
		reg(true, org.bukkit.event.player.PlayerAchievementAwardedEvent.class);
		reg(true, org.bukkit.event.player.PlayerAnimationEvent.class); //TODO cancellation
		reg(true, org.bukkit.event.player.PlayerBedEnterEvent.class);
		reg(false, org.bukkit.event.player.PlayerBedLeaveEvent.class);
		reg(true, org.bukkit.event.player.PlayerBucketEmptyEvent.class);
		reg(true, org.bukkit.event.player.PlayerBucketFillEvent.class);
		reg(true, org.bukkit.event.player.PlayerChangedWorldEvent.class);
		reg(false, org.bukkit.event.player.PlayerChannelEvent.class);
		reg(false, org.bukkit.event.player.PlayerChatEvent.class);
		reg(false, org.bukkit.event.player.PlayerChatTabCompleteEvent.class);
		reg(true, org.bukkit.event.player.PlayerCommandPreprocessEvent.class);
		reg(true, org.bukkit.event.player.PlayerDropItemEvent.class);
		reg(false, org.bukkit.event.player.PlayerEditBookEvent.class);
		reg(false, org.bukkit.event.player.PlayerEggThrowEvent.class);
		reg(false, org.bukkit.event.player.PlayerExpChangeEvent.class);
		reg(false, org.bukkit.event.player.PlayerFishEvent.class);
		reg(true, org.bukkit.event.player.PlayerGameModeChangeEvent.class); //TODO currently only in CraftPlayer
		reg(true, org.bukkit.event.player.PlayerInteractEntityEvent.class);
		reg(true, org.bukkit.event.player.PlayerInteractEvent.class); //TODO currently only click actions
		reg(false, org.bukkit.event.player.PlayerInventoryEvent.class);
		reg(false, org.bukkit.event.player.PlayerItemBreakEvent.class);
		reg(false, org.bukkit.event.player.PlayerItemConsumeEvent.class);
		reg(true, org.bukkit.event.player.PlayerItemHeldEvent.class);
		reg(true, org.bukkit.event.player.PlayerJoinEvent.class); //TODO support for custom join messages
		reg(false, org.bukkit.event.player.PlayerKickEvent.class);
		reg(false, org.bukkit.event.player.PlayerLevelChangeEvent.class);
		reg(true, org.bukkit.event.player.PlayerLoginEvent.class); //TODO add server hostname
		reg(false, org.bukkit.event.player.PlayerMoveEvent.class);
		reg(true, org.bukkit.event.player.PlayerPickupItemEvent.class);
		reg(false, org.bukkit.event.player.PlayerPortalEvent.class);
		reg(false, org.bukkit.event.player.PlayerPreLoginEvent.class);
		reg(true, org.bukkit.event.player.PlayerQuitEvent.class); //TODO support for custom quit messages
		reg(false, org.bukkit.event.player.PlayerRegisterChannelEvent.class);
		reg(true, org.bukkit.event.player.PlayerRespawnEvent.class); //TODO very stupid impl, rewrite
		reg(false, org.bukkit.event.player.PlayerShearEntityEvent.class);
		reg(false, org.bukkit.event.player.PlayerStatisticIncrementEvent.class);
		reg(false, org.bukkit.event.player.PlayerTeleportEvent.class);
		reg(false, org.bukkit.event.player.PlayerToggleFlightEvent.class);
		reg(false, org.bukkit.event.player.PlayerToggleSneakEvent.class);
		reg(false, org.bukkit.event.player.PlayerToggleSprintEvent.class);
		reg(false, org.bukkit.event.player.PlayerUnleashEntityEvent.class);
		reg(false, org.bukkit.event.player.PlayerUnregisterChannelEvent.class);
		reg(false, org.bukkit.event.player.PlayerVelocityEvent.class);
		reg(false, org.bukkit.event.server.MapInitializeEvent.class);
		reg(true, org.bukkit.event.server.PluginDisableEvent.class);
		reg(true, org.bukkit.event.server.PluginEnableEvent.class);
		reg(true, org.bukkit.event.server.PluginEvent.class);
		reg(true, org.bukkit.event.server.RemoteServerCommandEvent.class);
		reg(true, org.bukkit.event.server.ServerCommandEvent.class);
		reg(false, org.bukkit.event.server.ServerListPingEvent.class);
		reg(true, org.bukkit.event.server.ServiceRegisterEvent.class);
		reg(true, org.bukkit.event.server.ServiceUnregisterEvent.class);
		reg(false, org.bukkit.event.vehicle.VehicleBlockCollisionEvent.class);
		reg(false, org.bukkit.event.vehicle.VehicleCollisionEvent.class);
		reg(false, org.bukkit.event.vehicle.VehicleCreateEvent.class);
		reg(false, org.bukkit.event.vehicle.VehicleDamageEvent.class);
		reg(false, org.bukkit.event.vehicle.VehicleDestroyEvent.class);
		reg(true, org.bukkit.event.vehicle.VehicleEnterEvent.class);
		reg(false, org.bukkit.event.vehicle.VehicleEntityCollisionEvent.class);
		reg(true, org.bukkit.event.vehicle.VehicleExitEvent.class);
		reg(false, org.bukkit.event.vehicle.VehicleMoveEvent.class);
		reg(false, org.bukkit.event.vehicle.VehicleUpdateEvent.class);
		reg(false, org.bukkit.event.weather.LightningStrikeEvent.class);
		reg(false, org.bukkit.event.weather.ThunderChangeEvent.class);
		reg(false, org.bukkit.event.weather.WeatherChangeEvent.class);
		reg(true, org.bukkit.event.world.ChunkLoadEvent.class);
		reg(true, org.bukkit.event.world.ChunkPopulateEvent.class);
		reg(true, org.bukkit.event.world.ChunkUnloadEvent.class);
		reg(false, org.bukkit.event.world.PortalCreateEvent.class);
		reg(false, org.bukkit.event.world.SpawnChangeEvent.class);
		reg(false, org.bukkit.event.world.StructureGrowEvent.class);
		reg(true, org.bukkit.event.world.WorldInitEvent.class);
		reg(true, org.bukkit.event.world.WorldLoadEvent.class);
		reg(true, org.bukkit.event.world.WorldSaveEvent.class);
		reg(true, org.bukkit.event.world.WorldUnloadEvent.class);

		reg(true, org.spigotmc.event.entity.EntityDismountEvent.class);
		reg(true, org.spigotmc.event.entity.EntityMountEvent.class);

		printStats();
	}
}