package de.jaschastarke.minecraft.limitedcreative; import org.bukkit.event.Listener; import org.bukkit.scheduler.BukkitRunnable; import de.jaschastarke.bukkit.lib.CoreModule; import de.jaschastarke.bukkit.lib.commands.AliasHelpedCommand; import de.jaschastarke.bukkit.lib.modules.AdditionalBlockBreaks; import de.jaschastarke.bukkit.lib.modules.BlockFall; import de.jaschastarke.bukkit.lib.modules.InstantHangingBreak; import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockListener; import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockStateCommand; import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockStateConfig; import de.jaschastarke.minecraft.limitedcreative.blockstate.DBModel; import de.jaschastarke.minecraft.limitedcreative.blockstate.DependencyListener; import de.jaschastarke.minecraft.limitedcreative.blockstate.HangingListener; import de.jaschastarke.minecraft.limitedcreative.blockstate.PlayerListener; import de.jaschastarke.minecraft.limitedcreative.blockstate.SyncronizedModel; import de.jaschastarke.minecraft.limitedcreative.blockstate.ThreadedModel; import de.jaschastarke.minecraft.limitedcreative.blockstate.worldedit.LCEditSessionFactory; import de.jaschastarke.modularize.IModule; import de.jaschastarke.modularize.ModuleEntry; public class ModBlockStates extends CoreModule<LimitedCreative> { private BlockStateConfig config; private FeatureBlockItemSpawn blockDrops; private BlockStateCommand command; private DBModel model; public ModBlockStates(LimitedCreative plugin) { super(plugin); } @Override public String getName() { return "BlockState"; } @Override public void initialize(ModuleEntry<IModule> entry) { super.initialize(entry); config = new BlockStateConfig(this, entry); plugin.getPluginConfig().registerSection(config); blockDrops = modules.linkSharedModule(FeatureBlockItemSpawn.class, plugin.getModules()); modules.linkSharedModule(AdditionalBlockBreaks.class, plugin.getModules()); modules.linkSharedModule(InstantHangingBreak.class, plugin.getModules()); this.addModule(new BlockFall(plugin)); listeners.addListener(new BlockListener(this)); listeners.addListener(new HangingListener(this)); listeners.addListener(new PlayerListener(this)); listeners.addListener(new DependencyListener(this)); command = new BlockStateCommand(this); } @Override public void onEnable() { try { if (model == null) { if (config.getUseThreading()) model = new ThreadedModel(this); else model = new SyncronizedModel(this); } if (model instanceof Listener) listeners.addListener((Listener) model); model.onEnable(); } catch (Exception e) { e.printStackTrace(); getLog().warn(plugin.getLocale().trans("block_state.error.sql_connection_failed", getName())); entry.deactivateUsage(); return; } super.onEnable(); if (plugin.getServer().getPluginManager().isPluginEnabled("WorldEdit") && config.getWorldeditIntegration()) { new BukkitRunnable() { @Override public void run() { try { LCEditSessionFactory.initFactory(ModBlockStates.this); } catch (Exception e) { getLog().warn(plugin.getLocale().trans("block_state.warning.worldedit_sessionfactory_failed", e.getMessage())); } } }.runTaskLater(plugin, 1L); } plugin.getCommandHandler().registerCommand(command); plugin.getMainCommand().registerCommand(new AliasHelpedCommand<BlockStateCommand>(command, "blockstate", new String[]{"bs"})); getLog().info(plugin.getLocale().trans("basic.loaded.module")); } @Override public void onDisable() { if (model != null) model.onDisable(); super.onDisable(); if (model != null && model instanceof Listener) listeners.removeListener((Listener) model); model = null; plugin.getCommandHandler().removeCommand(command); plugin.getMainCommand().removeCommand(command); } public BlockStateConfig getConfig() { return config; } public FeatureBlockItemSpawn getBlockSpawn() { return blockDrops; } public DBModel getModel() { return model; } }