// Path: common/src/main/java/ru/beykerykt/minecraft/lightapi/common/api/ResultCode.java
// public class ResultCode {
// 
//     /**
//      * N/A
//      */
//     public static final int MOVED_TO_DEFERRED = 1;
// 
//     /**
//      * The task has been successfully completed
//      */
//     public static final int SUCCESS = 0;
// 
//     /**
//      * The task has been failed
//      */
//     public static final int FAILED = -1;
// 
//     /**
//      * Current world is not available
//      */
//     public static final int WORLD_NOT_AVAILABLE = -2;
// 
//     /**
//      * (1.14+) No lighting changes in current world
//      */
//     public static final int RECALCULATE_NO_CHANGES = -3;
// 
//     /**
//      * (1.14+) SkyLight data is not available in current world
//      */
//     public static final int SKYLIGHT_DATA_NOT_AVAILABLE = -4;
// 
//     /**
//      * (1.14+) BlockLight data is not available in current world
//      */
//     public static final int BLOCKLIGHT_DATA_NOT_AVAILABLE = -5;
// 
//     /**
//      * Current function is not implemented
//      */
//     public static final int NOT_IMPLEMENTED = -6;
// 
//     /**
//      * Chunk is not loaded
//      */
//     public static final int CHUNK_NOT_LOADED = -7;
// }
// 
// Path: common/src/main/java/ru/beykerykt/minecraft/lightapi/common/internal/IPlatformImpl.java
// public interface IPlatformImpl {
// 
//     /**
//      * N/A
//      */
//     int prepare();
// 
//     /**
//      * N/A
//      */
//     int initialization();
// 
//     /**
//      * N/A
//      */
//     void shutdown();
// 
//     /**
//      * N/A
//      */
//     boolean isInitialized();
// 
//     /**
//      * Log message in console
//      *
//      * @param msg - message
//      */
//     void log(String msg);
// 
//     /**
//      * Info message in console
//      *
//      * @param msg - message
//      */
//     void info(String msg);
// 
//     /**
//      * Debug message in console
//      *
//      * @param msg - message
//      */
//     void debug(String msg);
// 
//     /**
//      * Error message in console
//      *
//      * @param msg - message
//      */
//     void error(String msg);
// 
//     /**
//      * N/A
//      */
//     UUID getUUID();
// 
//     /**
//      * Platform that is being used
//      *
//      * @return One of the proposed options from {@link PlatformType}
//      */
//     PlatformType getPlatformType();
// 
//     /**
//      * N/A
//      */
//     ILightEngine getLightEngine();
// 
//     /**
//      * N/A
//      */
//     IChunkObserver getChunkObserver();
// 
//     /**
//      * N/A
//      */
//     IBackgroundService getBackgroundService();
// 
//     /**
//      * N/A
//      */
//     IExtension getExtension();
// 
//     /**
//      * N/A
//      */
//     boolean isWorldAvailable(String worldName);
// 
//     /**
//      * Can be used for specific commands
//      */
//     int sendCmd(int cmdId, Object... args);
// }
// 
// Path: common/src/main/java/ru/beykerykt/minecraft/lightapi/common/internal/chunks/data/IChunkData.java
// public interface IChunkData {
// 
//     /**
//      * @return World name
//      */
//     String getWorldName();
// 
//     /**
//      * @return Chunk X Coordinate
//      */
//     int getChunkX();
// 
//     /**
//      * @return Chunk Z Coordinate
//      */
//     int getChunkZ();
// 
//     /**
//      * N/A
//      */
//     void markSectionForUpdate(int lightFlags, int sectionY);
// 
//     /**
//      * N/A
//      */
//     void clearUpdate();
// 
//     /**
//      * N/A
//      */
//     void setFullSections();
// }
// 
// Path: common/src/main/java/ru/beykerykt/minecraft/lightapi/common/internal/service/IBackgroundService.java
// public interface IBackgroundService {
// 
//     /**
//      * N/A
//      */
//     void onStart();
// 
//     /**
//      * N/A
//      */
//     void onShutdown();
// 
//     /**
//      * N/A
//      */
//     boolean canExecuteSync(long maxTime);
// 
//     /**
//      * N/A
//      */
//     boolean isMainThread();
// 
//     /**
//      * N/A
//      */
//     ScheduledFuture<?> scheduleWithFixedDelay(Runnable runnable, int initialDelay, int delay, TimeUnit unit);
// }


import ru.beykerykt.minecraft.lightapi.common.internal.service.IBackgroundService;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import ru.beykerykt.minecraft.lightapi.common.api.ResultCode;
import ru.beykerykt.minecraft.lightapi.common.internal.IPlatformImpl;
import ru.beykerykt.minecraft.lightapi.common.internal.chunks.data.IChunkData;
    }

    protected IBackgroundService getBackgroundService() {
        return mBackgroundService;
    }

    @Override
    public void onStart() {
        getPlatformImpl().debug(getClass().getName() + " is started!");
    }

    @Override
    public void onShutdown() {
        getPlatformImpl().debug(getClass().getName() + " is shutdown!");
        handleChunksLocked();
        observedChunks.clear();
    }

    @Override
    public boolean isBusy() {
        return isBusy;
    }

    private int getDeltaLight(int x, int dx) {
        return (((x ^ ((-dx >> 4) & 15)) + 1) & (-(dx & 1)));
    }

    private long chunkCoordToLong(int chunkX, int chunkZ) {
        long l = chunkX;
        l = (l << 32) | (chunkZ & 0xFFFFFFFFL);
// Path: common/src/main/java/ru/beykerykt/minecraft/lightapi/common/api/ResultCode.java
// public class ResultCode {
// 
//     /**
//      * N/A
//      */
//     public static final int MOVED_TO_DEFERRED = 1;
// 
//     /**
//      * The task has been successfully completed
//      */
//     public static final int SUCCESS = 0;
// 
//     /**
//      * The task has been failed
//      */
//     public static final int FAILED = -1;
// 
//     /**
//      * Current world is not available
//      */
//     public static final int WORLD_NOT_AVAILABLE = -2;
// 
//     /**
//      * (1.14+) No lighting changes in current world
//      */
//     public static final int RECALCULATE_NO_CHANGES = -3;
// 
//     /**
//      * (1.14+) SkyLight data is not available in current world
//      */
//     public static final int SKYLIGHT_DATA_NOT_AVAILABLE = -4;
// 
//     /**
//      * (1.14+) BlockLight data is not available in current world
//      */
//     public static final int BLOCKLIGHT_DATA_NOT_AVAILABLE = -5;
// 
//     /**
//      * Current function is not implemented
//      */
//     public static final int NOT_IMPLEMENTED = -6;
// 
//     /**
//      * Chunk is not loaded
//      */
//     public static final int CHUNK_NOT_LOADED = -7;
// }
// 
// Path: common/src/main/java/ru/beykerykt/minecraft/lightapi/common/internal/IPlatformImpl.java
// public interface IPlatformImpl {
// 
//     /**
//      * N/A
//      */
//     int prepare();
// 
//     /**
//      * N/A
//      */
//     int initialization();
// 
//     /**
//      * N/A
//      */
//     void shutdown();
// 
//     /**
//      * N/A
//      */
//     boolean isInitialized();
// 
//     /**
//      * Log message in console
//      *
//      * @param msg - message
//      */
//     void log(String msg);
// 
//     /**
//      * Info message in console
//      *
//      * @param msg - message
//      */
//     void info(String msg);
// 
//     /**
//      * Debug message in console
//      *
//      * @param msg - message
//      */
//     void debug(String msg);
// 
//     /**
//      * Error message in console
//      *
//      * @param msg - message
//      */
//     void error(String msg);
// 
//     /**
//      * N/A
//      */
//     UUID getUUID();
// 
//     /**
//      * Platform that is being used
//      *
//      * @return One of the proposed options from {@link PlatformType}
//      */
//     PlatformType getPlatformType();
// 
//     /**
//      * N/A
//      */
//     ILightEngine getLightEngine();
// 
//     /**
//      * N/A
//      */
//     IChunkObserver getChunkObserver();
// 
//     /**
//      * N/A
//      */
//     IBackgroundService getBackgroundService();
// 
//     /**
//      * N/A
//      */
//     IExtension getExtension();
// 
//     /**
//      * N/A
//      */
//     boolean isWorldAvailable(String worldName);
// 
//     /**
//      * Can be used for specific commands
//      */
//     int sendCmd(int cmdId, Object... args);
// }
// 
// Path: common/src/main/java/ru/beykerykt/minecraft/lightapi/common/internal/chunks/data/IChunkData.java
// public interface IChunkData {
// 
//     /**
//      * @return World name
//      */
//     String getWorldName();
// 
//     /**
//      * @return Chunk X Coordinate
//      */
//     int getChunkX();
// 
//     /**
//      * @return Chunk Z Coordinate
//      */
//     int getChunkZ();
// 
//     /**
//      * N/A
//      */
//     void markSectionForUpdate(int lightFlags, int sectionY);
// 
//     /**
//      * N/A
//      */
//     void clearUpdate();
// 
//     /**
//      * N/A
//      */
//     void setFullSections();
// }
// 
// Path: common/src/main/java/ru/beykerykt/minecraft/lightapi/common/internal/service/IBackgroundService.java
// public interface IBackgroundService {
// 
//     /**
//      * N/A
//      */
//     void onStart();
// 
//     /**
//      * N/A
//      */
//     void onShutdown();
// 
//     /**
//      * N/A
//      */
//     boolean canExecuteSync(long maxTime);
// 
//     /**
//      * N/A
//      */
//     boolean isMainThread();
// 
//     /**
//      * N/A
//      */
//     ScheduledFuture<?> scheduleWithFixedDelay(Runnable runnable, int initialDelay, int delay, TimeUnit unit);
// }


// Path: common/src/main/java/ru/beykerykt/minecraft/lightapi/common/internal/chunks/observer/sched/ScheduledChunkObserverImpl.java
import ru.beykerykt.minecraft.lightapi.common.internal.service.IBackgroundService;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import ru.beykerykt.minecraft.lightapi.common.api.ResultCode;
import ru.beykerykt.minecraft.lightapi.common.internal.IPlatformImpl;
import ru.beykerykt.minecraft.lightapi.common.internal.chunks.data.IChunkData;

    }

    protected IBackgroundService getBackgroundService() {
        return mBackgroundService;
    }

    @Override
    public void onStart() {
        getPlatformImpl().debug(getClass().getName() + " is started!");
    }

    @Override
    public void onShutdown() {
        getPlatformImpl().debug(getClass().getName() + " is shutdown!");
        handleChunksLocked();
        observedChunks.clear();
    }

    @Override
    public boolean isBusy() {
        return isBusy;
    }

    private int getDeltaLight(int x, int dx) {
        return (((x ^ ((-dx >> 4) & 15)) + 1) & (-(dx & 1)));
    }

    private long chunkCoordToLong(int chunkX, int chunkZ) {
        long l = chunkX;
        l = (l << 32) | (chunkZ & 0xFFFFFFFFL);
        return l;