فهرست منبع

refactoring (removing global stuff of main mod class), removed proxies,
removed module stuff

Kajetan Johannes Hammerle 5 سال پیش
والد
کامیت
c711f7922d
68فایلهای تغییر یافته به همراه952 افزوده شده و 1401 حذف شده
  1. 67 2
      src/main/java/me/km/Client.java
  2. 0 99
      src/main/java/me/km/ClientProxy.java
  3. 0 25
      src/main/java/me/km/CommonProxy.java
  4. 14 168
      src/main/java/me/km/KajetansMod.java
  5. 155 0
      src/main/java/me/km/Server.java
  6. 15 13
      src/main/java/me/km/blockprotections/BlockProtectionBank.java
  7. 16 30
      src/main/java/me/km/blockprotections/BlockProtectionEvents.java
  8. 3 4
      src/main/java/me/km/blockprotections/DummyBlockProtection.java
  9. 3 3
      src/main/java/me/km/blockprotections/IBlockProtection.java
  10. 0 1
      src/main/java/me/km/blocks/cookingpot/CookingPotColorMixer.java
  11. 0 70
      src/main/java/me/km/chatchannel/ChatChannel.java
  12. 10 11
      src/main/java/me/km/databank/DataBank.java
  13. 0 9
      src/main/java/me/km/effects/EffectUtils.java
  14. 1 1
      src/main/java/me/km/entities/EntityBlackBear.java
  15. 1 1
      src/main/java/me/km/entities/EntityBrownBear.java
  16. 4 2
      src/main/java/me/km/entities/EntityHuman.java
  17. 4 6
      src/main/java/me/km/entities/EntityItemProjectile.java
  18. 0 1
      src/main/java/me/km/entities/HumanSkinLoader.java
  19. 4 4
      src/main/java/me/km/entities/ModEntities.java
  20. 4 4
      src/main/java/me/km/entities/RenderBlackBear.java
  21. 6 4
      src/main/java/me/km/entities/RenderBrownBear.java
  22. 3 2
      src/main/java/me/km/entities/RenderHuman.java
  23. 3 3
      src/main/java/me/km/entities/RenderNobody.java
  24. 37 23
      src/main/java/me/km/events/CustomEventCaller.java
  25. 2 2
      src/main/java/me/km/events/PlayerMoveData.java
  26. 10 6
      src/main/java/me/km/inventory/CustomContainer.java
  27. 3 3
      src/main/java/me/km/items/ItemCylinder.java
  28. 2 2
      src/main/java/me/km/items/ItemHat.java
  29. 1 1
      src/main/java/me/km/items/ItemSling.java
  30. 0 10
      src/main/java/me/km/items/ModItems.java
  31. 0 138
      src/main/java/me/km/module/Module.java
  32. 0 29
      src/main/java/me/km/module/ModuleCommand.java
  33. 0 5
      src/main/java/me/km/module/ModuleListener.java
  34. 0 45
      src/main/java/me/km/module/SimpleConfig.java
  35. 0 1
      src/main/java/me/km/networking/DimensionSync.java
  36. 2 2
      src/main/java/me/km/networking/FunctionKey.java
  37. 5 0
      src/main/java/me/km/overrides/ModEntityPlayerMP.java
  38. 5 2
      src/main/java/me/km/overrides/ModPlayerList.java
  39. 27 0
      src/main/java/me/km/permissions/Command.java
  40. 18 12
      src/main/java/me/km/permissions/ModCommandManager.java
  41. 7 11
      src/main/java/me/km/permissions/PermissionManager.java
  42. 17 21
      src/main/java/me/km/playerbank/PlayerBank.java
  43. 17 32
      src/main/java/me/km/playerbank/PlayerManager.java
  44. 3 3
      src/main/java/me/km/plots/DummyProtection.java
  45. 3 3
      src/main/java/me/km/plots/IProtection.java
  46. 14 18
      src/main/java/me/km/plots/ProtectionBank.java
  47. 33 25
      src/main/java/me/km/plots/ProtectionEvents.java
  48. 15 18
      src/main/java/me/km/scheduler/SnuviScheduler.java
  49. 3 12
      src/main/java/me/km/scheduler/SnuviTask.java
  50. 0 20
      src/main/java/me/km/scheduler/TaskTicker.java
  51. 5 5
      src/main/java/me/km/scoreboard/PlayerScoreboard.java
  52. 3 2
      src/main/java/me/km/scoreboard/ScoreboardUtils.java
  53. 11 11
      src/main/java/me/km/snuviscript/CommandGiveUp.java
  54. 42 40
      src/main/java/me/km/snuviscript/CommandScript.java
  55. 4 6
      src/main/java/me/km/snuviscript/DummyScriptBank.java
  56. 4 6
      src/main/java/me/km/snuviscript/IScriptBank.java
  57. 147 112
      src/main/java/me/km/snuviscript/MinecraftFunctions.java
  58. 33 30
      src/main/java/me/km/snuviscript/ScriptBank.java
  59. 40 29
      src/main/java/me/km/snuviscript/ScriptEvents.java
  60. 6 4
      src/main/java/me/km/snuviscript/ScriptInventoryHolder.java
  61. 23 39
      src/main/java/me/km/snuviscript/Scripts.java
  62. 65 57
      src/main/java/me/km/snuviscript/SnuviLogger.java
  63. 4 3
      src/main/java/me/km/utils/Location.java
  64. 0 50
      src/main/java/me/km/utils/RecipeUtils.java
  65. 3 44
      src/main/java/me/km/utils/ReflectionUtils.java
  66. 6 4
      src/main/java/me/km/utils/Utils.java
  67. 10 9
      src/main/java/me/km/world/WorldManager.java
  68. 9 43
      src/main/resources/META-INF/mods.toml

+ 67 - 2
src/main/java/me/km/ClientEvents.java → src/main/java/me/km/Client.java

@@ -1,28 +1,93 @@
 package me.km;
 
+import java.awt.Color;
 import java.util.List;
+import me.km.blocks.ModBlocks;
+import me.km.blocks.cookingpot.TileEntityCookingPot;
+import me.km.entities.ModEntities;
+import me.km.items.ItemColoredSoup;
+import me.km.items.ItemGemStone;
+import me.km.items.ModItems;
+import me.km.items.ModelCylinder;
+import me.km.items.ModelHat;
 import me.km.networking.ItemStackDisplayGui;
+import me.km.networking.KeyManager;
 import me.km.networking.PlayerDisplayGui;
 import me.km.networking.PlayerHeadGui;
 import me.km.networking.StatusDisplayGui;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.color.BlockColors;
+import net.minecraft.client.renderer.color.IBlockColor;
+import net.minecraft.client.renderer.color.ItemColors;
 import net.minecraft.item.Item;
 import net.minecraft.item.ArmorItem;
+import net.minecraft.item.BlockItem;
 import net.minecraft.item.ItemStack;
 import net.minecraft.nbt.CompoundNBT;
 import net.minecraft.util.text.ITextComponent;
 import net.minecraft.util.text.StringTextComponent;
 import net.minecraft.util.text.TextFormatting;
+import net.minecraft.world.GrassColors;
+import net.minecraft.world.biome.BiomeColors;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
 import net.minecraftforge.client.event.RenderGameOverlayEvent;
+import net.minecraftforge.common.MinecraftForge;
 import net.minecraftforge.event.entity.player.ItemTooltipEvent;
 import net.minecraftforge.eventbus.api.SubscribeEvent;
 import net.minecraftforge.fml.common.gameevent.TickEvent;
 
 @OnlyIn(Dist.CLIENT)
-public class ClientEvents 
+public class Client 
 {   
-    boolean once = true;
+    public final static ModelCylinder CYLINDER = new ModelCylinder(1.0f);
+    public final static ModelHat STRAW_HAT = new ModelHat(1.0f);
+    
+    public static void init() 
+    {
+        ModEntities.initClient();
+        MinecraftForge.EVENT_BUS.register(new Client());
+        MinecraftForge.EVENT_BUS.register(new KeyManager());
+        registerColors();
+    }
+    
+    private static void registerColors()
+    {
+        BlockColors bColors = Minecraft.getInstance().getBlockColors();
+        bColors.register((state, w, pos, tintIndex) -> 
+        {
+            if(w == null || pos == null)
+            {
+                return -16777216;
+            }
+            TileEntityCookingPot tile = (TileEntityCookingPot) w.getTileEntity(pos);
+            if(tile == null) 
+            {
+                return -16777216;
+            }
+            Color c = tile.getColor();
+            return -16777216 | c.getRed() << 16 | c.getGreen() << 8 | c.getBlue();
+        }, ModBlocks.cookingPotCopper);
+
+        IBlockColor tallGrass = (state, w, pos, tintIndex) ->
+        {
+            if(w != null && pos != null)
+            {
+                return BiomeColors.getGrassColor(w, pos);
+            }
+            return GrassColors.get(0.5D, 1.0D);
+        };
+        bColors.register(tallGrass, ModBlocks.tallGrass);
+
+        ItemColors iColors = Minecraft.getInstance().getItemColors();
+        iColors.register((stack, tintIndex) -> tintIndex > 0 ? -1 : ItemColoredSoup.getColor(stack), ModItems.coloredSoup);
+        iColors.register((stack, tintIndex) -> tintIndex > 0 ? -1 : ((ItemGemStone) stack.getItem()).getColor(stack), 
+                ModItems.gemStone, ModItems.rawGemStone, ModItems.flawlessGemStone);
+        
+        iColors.register((stack, tintIndex) -> tallGrass.getColor(
+                ((BlockItem) stack.getItem()).getBlock().getDefaultState(), 
+                null, null, tintIndex), ModBlocks.tallGrass);
+    }
     
     @SubscribeEvent
     public void onClientTick(TickEvent.ClientTickEvent e)

+ 0 - 99
src/main/java/me/km/ClientProxy.java

@@ -1,99 +0,0 @@
-package me.km;
-
-import java.awt.Color;
-import me.km.blocks.ModBlocks;
-import me.km.blocks.cookingpot.TileEntityCookingPot;
-import me.km.entities.ModEntities;
-import me.km.items.ItemColoredSoup;
-import me.km.items.ItemGemStone;
-import me.km.items.ModItems;
-import me.km.items.ModelCylinder;
-import me.km.items.ModelHat;
-import me.km.networking.KeyManager;
-import net.minecraft.block.BlockState;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.renderer.color.BlockColors;
-import net.minecraft.client.renderer.color.IBlockColor;
-import net.minecraft.client.renderer.color.ItemColors;
-import net.minecraft.client.renderer.entity.model.BipedModel;
-import net.minecraft.item.BlockItem;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.math.BlockPos;
-import net.minecraftforge.api.distmarker.Dist;
-import net.minecraftforge.api.distmarker.OnlyIn;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraft.world.GrassColors;
-import net.minecraft.world.IEnviromentBlockReader;
-import net.minecraft.world.biome.BiomeColors;
-
-public class ClientProxy extends CommonProxy 
-{    
-    @Override
-    public void init() 
-    {
-        ModEntities.initClient();
-        MinecraftForge.EVENT_BUS.register(new ClientEvents());
-        MinecraftForge.EVENT_BUS.register(new KeyManager());
-    }
-    
-    @Override
-    public void postInit() 
-    {
-        BlockColors bColors = Minecraft.getInstance().getBlockColors();
-        bColors.register((BlockState state, IEnviromentBlockReader w, BlockPos pos, int tintIndex) -> 
-        {
-            if(w == null || pos == null)
-            {
-                return -16777216;
-            }
-            TileEntityCookingPot tile = (TileEntityCookingPot) w.getTileEntity(pos);
-            if(tile == null) 
-            {
-                return -16777216;
-            }
-            Color c = tile.getColor();
-            return -16777216 | c.getRed() << 16 | c.getGreen() << 8 | c.getBlue();
-        }, ModBlocks.cookingPotCopper);
-
-        IBlockColor tallGrass = (BlockState state, IEnviromentBlockReader w, BlockPos pos, int tintIndex) ->
-        {
-            if(w != null && pos != null)
-            {
-                return BiomeColors.getGrassColor(w, pos);
-            }
-            else
-            {
-                return GrassColors.get(0.5D, 1.0D);
-            }
-        };
-        bColors.register(tallGrass, ModBlocks.tallGrass);
-
-        ItemColors iColors = Minecraft.getInstance().getItemColors();
-        iColors.register((ItemStack stack, int tintIndex) -> tintIndex > 0 ? -1 : ItemColoredSoup.getColor(stack), ModItems.coloredSoup);
-        iColors.register((ItemStack stack, int tintIndex) -> tintIndex > 0 ? -1 : ((ItemGemStone) stack.getItem()).getColor(stack), 
-                ModItems.gemStone, ModItems.rawGemStone, ModItems.flawlessGemStone);
-        
-        iColors.register((ItemStack stack, int tintIndex) -> 
-        {
-            BlockState state = ((BlockItem) stack.getItem()).getBlock().getDefaultState();
-            return tallGrass.getColor(state, null, null, tintIndex);
-        }, ModBlocks.tallGrass);
-    }
-
-    @OnlyIn(Dist.CLIENT)
-    private final static ModelHat STRAW_HAT = new ModelHat(1.0f);
-    @OnlyIn(Dist.CLIENT)
-    private final static ModelCylinder CYLINDER = new ModelCylinder(1.0f);
-    
-    @Override
-    public BipedModel getCylinderModel() 
-    {
-        return CYLINDER;
-    }
-
-    @Override
-    public BipedModel getStrawHatModel() 
-    {
-        return STRAW_HAT;
-    }
-}

+ 0 - 25
src/main/java/me/km/CommonProxy.java

@@ -1,25 +0,0 @@
-package me.km;
-
-import net.minecraft.client.renderer.entity.model.BipedModel;
-
-public class CommonProxy 
-{
-    public void init() 
-    {
-        //MinecraftForge.EVENT_BUS.register(new CustomEventCaller());
-    }
-    
-    public void postInit() 
-    {
-    }
-
-    public BipedModel getCylinderModel()
-    {
-        return null;
-    }
-    
-    public BipedModel getStrawHatModel()
-    {
-        return null;
-    }
-}

+ 14 - 168
src/main/java/me/km/KajetansMod.java

@@ -1,79 +1,22 @@
 package me.km;
 
-import me.kcm.events.Hooks;
-import me.km.permissions.PermissionManager;
-import me.km.blockprotections.BlockProtection;
-import me.km.module.Module;
-import me.km.module.SimpleConfig;
-import me.km.databank.DataBank;
-import me.km.entities.ModEntities;
 import me.km.networking.ModPacketHandler;
-import me.km.overrides.ModPlayerList;
-import me.km.permissions.ModCommandManager;
-import me.km.playerbank.PlayerManager;
-import me.km.plots.DummyProtectionBank;
-import me.km.plots.ProtectionEvents;
-import me.km.plots.ProtectionBank;
-import me.km.scheduler.SnuviScheduler;
-import me.km.snuviscript.ScriptModule;
-import me.km.utils.ReflectionUtils;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.util.text.TextFormatting;
-import net.minecraftforge.api.distmarker.Dist;
-import net.minecraftforge.api.distmarker.OnlyIn;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.eventbus.api.SubscribeEvent;
 import net.minecraftforge.fluids.FluidRegistry;
-import net.minecraftforge.fml.DistExecutor;
 import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
-import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
 import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
 import net.minecraftforge.fml.event.lifecycle.FMLDedicatedServerSetupEvent;
-import net.minecraftforge.fml.event.server.FMLServerAboutToStartEvent;
-import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
 import net.minecraftforge.fml.event.server.FMLServerStoppingEvent;
 import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
-import org.apache.logging.log4j.LogManager;
 import net.minecraftforge.fml.common.Mod;
-import me.km.plots.IProtectionBank;
+import net.minecraftforge.eventbus.api.IEventBus;
 import net.minecraftforge.fml.DeferredWorkQueue;
 
 @Mod.EventBusSubscriber
 @Mod("km")
 public class KajetansMod
 {    
-    @OnlyIn(Dist.DEDICATED_SERVER)
-    public static SimpleConfig conf;
-    
-    public static Module error;
-    public static DataBank databank;
-    
-    @OnlyIn(Dist.DEDICATED_SERVER)
-    public static SnuviScheduler scheduler;
-    public static PlayerManager playerbank;
-    public static IProtectionBank plots;
-    public static BlockProtection blocks;
-    public static ScriptModule scripts;
-    
-    @OnlyIn(Dist.DEDICATED_SERVER)
-    public static PermissionManager perms;
-    
-    @OnlyIn(Dist.DEDICATED_SERVER)
-    public static ModCommandManager commands;
-    
-    public static CommonProxy proxy = DistExecutor.runForDist(() -> ClientProxy::new, () -> CommonProxy::new);
-
     public static final String MODID = "km";
-    public static final String NAME = "Kajetans Mod";
-    public static final String VERSION = "0.0.35";
-
-    public static KajetansMod instance;
-    
-    public static MinecraftServer server;
     
-    public static boolean debugMode;
-    public static boolean singlePlayer;
-
     static
     {
         FluidRegistry.enableUniversalBucket();
@@ -81,133 +24,36 @@ public class KajetansMod
     
     public KajetansMod()
     {
-        instance = this;
-        
-        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::init);
-        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setupServer);
-        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientInit);
-        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onServerStop);
-        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::postInit);
+        IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
+        bus.addListener(this::init);
+        bus.addListener(this::setupServer);
+        bus.addListener(this::clientInit);
+        bus.addListener(this::onServerStop);
     }
     
-    public void setupServer(FMLDedicatedServerSetupEvent e)
-    {
-        Hooks.setPlayerListFunction(ds -> 
-        {
-            ds.setPlayerList(new ModPlayerList(ds));
-        });
-    }
-    
-    public void init(FMLCommonSetupEvent e) 
+    private void init(FMLCommonSetupEvent e) 
     {
         DeferredWorkQueue.runLater(() -> ModPacketHandler.init());
         //GameRegistry.registerWorldGenerator(new ModWorldGeneration(), 3);
         
         DamageUtils.init();
-        proxy.init();
     }
     
-    public void clientInit(FMLClientSetupEvent e)
+    private void clientInit(FMLClientSetupEvent e)
     {
-        ModEntities.initClient();
+        Client.init();
     }
     
-    public void postInit(FMLLoadCompleteEvent e)
-    {
-        proxy.postInit();
-    }
-
-    @SubscribeEvent
-    public static void beforeStart(FMLServerAboutToStartEvent e) 
-    {
-        server = e.getServer();
-    }
-    
-    @SubscribeEvent
-    public static void serverStarting(FMLServerStartingEvent e) 
+    private void setupServer(FMLDedicatedServerSetupEvent e)
     {      
-        singlePlayer = e.getServer().isSinglePlayer();    
-        if(singlePlayer)
-        {
-            return;
-        }
-        setCommandManager();
-        
-        // configuration and error-dummy
-        error = new Module("ERROR", TextFormatting.RED);
-        conf = new SimpleConfig(error, "", "config", true);
-        
-        debugMode = conf.getBoolean("debug", false);
-        if(debugMode)
-        {
-            LogManager.getLogger().info("------------------------------------------------");
-            LogManager.getLogger().info("Starting server in debug mode");
-            LogManager.getLogger().info("------------------------------------------------");
-        }
-        else
-        {
-            LogManager.getLogger().info("------------------------------------------------");
-            LogManager.getLogger().info("Starting server without debug mode");
-            LogManager.getLogger().info("------------------------------------------------");
-        }
-        
-        // Datenbankverbindung
-        databank = new DataBank("DataBank", TextFormatting.RED, conf.getString("user", "root"), conf.getString("password", ""));
-        if(!databank.openDataBankConnection())
-        {
-            LogManager.getLogger().info("------------------------------------------------");
-            LogManager.getLogger().info("Starting server with dummy databank");
-            LogManager.getLogger().info("------------------------------------------------");
-        }
-        
-        // Scheduler
-        scheduler = new SnuviScheduler("Scheduler", TextFormatting.GREEN);
-        scheduler.registerEvents("me.km.scheduler");
-        databank.startReconnecting(scheduler);
-
-        // Spielerdatenbank
-        playerbank = new PlayerManager("PlayerBank", TextFormatting.RED, databank);
-
-        // Plot-System
-        if(databank.isDummyDatabank())
-        {
-            plots = new DummyProtectionBank(); 
-        }
-        else
-        {
-            plots = new ProtectionBank(); 
-        }
-        MinecraftForge.EVENT_BUS.register(new ProtectionEvents());
-
-        // block protections
-        blocks = new BlockProtection();
-
-        // Scriptsystem
-        scripts = new ScriptModule("Scripts", TextFormatting.LIGHT_PURPLE);
-        scripts.registerCommands(e, "me.km.snuviscript");          
-
-        // Permissions
-        perms = new PermissionManager("Perms", TextFormatting.DARK_PURPLE);
-
-        scripts.startScript("startscript");
+        Server.onStart(e.getServerSupplier().get());
     }
     
-    @OnlyIn(Dist.DEDICATED_SERVER)
-    private static void setCommandManager()
-    {
-        commands = new ModCommandManager(server.isDedicatedServer());
-        ReflectionUtils.setCommandManager(server, commands);
-    }
-
-    public void onServerStop(FMLServerStoppingEvent e) 
+    private void onServerStop(FMLServerStoppingEvent e) 
     {
-        if(singlePlayer)
+        if(e.getServer().isDedicatedServer())
         {
-            return;
+            Server.onStop();
         }
-        scripts.startScript("endscript");
-        scheduler.stop();
-        databank.closeDataBankConnection();
-        scheduler.getWorker().stop();
     }
 }

+ 155 - 0
src/main/java/me/km/Server.java

@@ -0,0 +1,155 @@
+package me.km;
+
+import me.hammerle.snuviscript.config.SnuviConfig;
+import me.kcm.events.Hooks;
+import me.km.blockprotections.BlockProtectionBank;
+import me.km.blockprotections.BlockProtectionEvents;
+import me.km.blockprotections.DummyBlockProtection;
+import me.km.blockprotections.IBlockProtection;
+import me.km.databank.DataBank;
+import me.km.events.CustomEventCaller;
+import me.km.overrides.ModPlayerList;
+import me.km.permissions.ModCommandManager;
+import me.km.permissions.PermissionManager;
+import me.km.playerbank.DummyPlayerBank;
+import me.km.playerbank.IPlayerBank;
+import me.km.playerbank.PlayerBank;
+import me.km.playerbank.PlayerManager;
+import me.km.plots.DummyProtection;
+import me.km.plots.ProtectionBank;
+import me.km.plots.ProtectionEvents;
+import me.km.scheduler.SnuviScheduler;
+import me.km.snuviscript.SnuviLogger;
+import me.km.utils.ReflectionUtils;
+import net.minecraft.server.dedicated.DedicatedServer;
+import net.minecraftforge.api.distmarker.Dist;
+import net.minecraftforge.api.distmarker.OnlyIn;
+import net.minecraftforge.common.MinecraftForge;
+import me.km.plots.IProtection;
+import me.km.snuviscript.CommandGiveUp;
+import me.km.snuviscript.CommandScript;
+import me.km.snuviscript.DummyScriptBank;
+import me.km.snuviscript.IScriptBank;
+import me.km.snuviscript.MinecraftFunctions;
+import me.km.snuviscript.ScriptBank;
+import me.km.snuviscript.ScriptEvents;
+import me.km.snuviscript.Scripts;
+
+@OnlyIn(Dist.DEDICATED_SERVER)
+public class Server
+{
+    private static SnuviLogger logger;
+    private static ModCommandManager commands;
+    private static DedicatedServer server;
+    private static SnuviScheduler scheduler;
+    private static DataBank databank;
+    private static Scripts scripts;
+    public static ScriptEvents scriptEvents;
+    
+    public static void onStart(DedicatedServer serverIn)
+    {
+        server = serverIn;
+        logger = new SnuviLogger();
+        
+        SnuviConfig conf = new SnuviConfig(logger, "", "config");
+        if(conf.exists())
+        {
+            conf.load();
+        }
+        
+        boolean debug = conf.getBoolean("debug", false);
+        
+        // permissions
+        PermissionManager perms = new PermissionManager(debug);
+        logger.setPlayerLoggingData(server, perms);
+        if(debug)
+        {
+            logger.print("------------------------------------------------");
+            logger.print("Starting server in debug mode");
+            logger.print("------------------------------------------------");
+        }
+        
+        // scheduler
+        scheduler = new SnuviScheduler(logger);
+        
+        // mod player list hook
+        Hooks.setPlayerListFunction(ds -> 
+        {
+            ds.setPlayerList(new ModPlayerList(ds, scheduler));
+        });
+        
+        // scripts
+        scripts = new Scripts(logger, scheduler);
+        scriptEvents = new ScriptEvents(scripts, server, perms);
+        MinecraftForge.EVENT_BUS.register(scriptEvents);
+        
+        // command manager
+        commands = new ModCommandManager(true, perms, scriptEvents, scripts);
+        ReflectionUtils.setCommandManager(server, commands);
+        commands.registerCommand(new CommandGiveUp(scripts));
+        commands.registerCommand(new CommandScript(scripts, server));  
+        
+        // data base connection
+        databank = new DataBank(logger, conf.getString("user", "root"), conf.getString("password", ""));
+        if(!databank.openDataBankConnection())
+        {
+            logger.print("------------------------------------------------");
+            logger.print("Starting server with dummy databank");
+            logger.print("------------------------------------------------");
+        }
+        databank.startReconnecting(scheduler);
+        
+        // protections / block protections / player manager
+        IProtection protection;
+        IBlockProtection blockProtection;
+        IPlayerBank playerBank;
+        if(databank.isDummyDatabank())
+        {
+            protection = new DummyProtection(); 
+            blockProtection = new DummyBlockProtection();
+            playerBank = new DummyPlayerBank();
+        }
+        else
+        {
+            protection = new ProtectionBank(databank); 
+            blockProtection = new BlockProtectionBank(databank);
+            playerBank = new PlayerBank(databank);
+        }
+        MinecraftForge.EVENT_BUS.register(new ProtectionEvents(protection, perms));
+        MinecraftForge.EVENT_BUS.register(new BlockProtectionEvents(blockProtection, perms));
+        
+        PlayerManager playerManager = new PlayerManager(logger, playerBank, server, scriptEvents);
+        MinecraftForge.EVENT_BUS.register(playerManager);
+        CustomEventCaller customEventCaller = new CustomEventCaller(playerManager, server, scheduler);
+        scripts.setCustomEventCaller(customEventCaller);
+        MinecraftForge.EVENT_BUS.register(customEventCaller);
+        
+        // scripts
+        IScriptBank scriptBank;
+        if(databank.isDummyDatabank())
+        {
+            scriptBank = new DummyScriptBank();
+        }
+        else
+        {
+            scriptBank = new ScriptBank(databank, playerManager);
+        }
+        MinecraftFunctions.registerFunctions(
+                scripts.getScriptManager(), scripts, perms, scheduler, server, playerBank, playerManager, 
+                customEventCaller, scriptBank, databank, blockProtection, protection);
+        scripts.startScript("startscript");
+    }
+    
+    public static void onStop()
+    {
+        scripts.startScript("endscript");
+        scheduler.stop();
+        databank.closeDataBankConnection();
+        scheduler.getWorker().stop();
+    }
+    
+    public static void executeCommand(String s)
+    {
+        commands.handleCommand(server.getCommandSource(), s);
+    }
+}

+ 15 - 13
src/main/java/me/km/blockprotections/BlockProtectionBank.java

@@ -4,6 +4,8 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import me.km.KajetansMod;
+import me.km.databank.DataBank;
+import me.km.overrides.ModEntityPlayerMP;
 import me.km.world.WorldManager;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.util.math.BlockPos;
@@ -11,9 +13,12 @@ import net.minecraft.world.IWorld;
 
 public class BlockProtectionBank implements IBlockProtection
 {  
-    public BlockProtectionBank() 
+    private final PreparedStatement hasAccess;
+    private final PreparedStatement getId;
+    
+    public BlockProtectionBank(DataBank databank) 
     {
-        KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS block ("
+        databank.execute("CREATE TABLE IF NOT EXISTS block ("
                     + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
                     + "x int(11) NOT NULL, "
                     + "y int(11) NOT NULL, "
@@ -21,18 +26,18 @@ public class BlockProtectionBank implements IBlockProtection
                     + "world_name varchar(20) NOT NULL, "
                     + "UNIQUE KEY uniq_block_pos (world_name,x,y,z));");
         
-        KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS block_grant ("
+        databank.execute("CREATE TABLE IF NOT EXISTS block_grant ("
                     + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
                     + "block_id int(11) NOT NULL, "
                     + "player_id int(11) NOT NULL, "
                     + "INDEX block_id (block_id), "
                     + "UNIQUE KEY (block_id, player_id), "
                     + "CONSTRAINT block_grant_ibfk_1 FOREIGN KEY (block_id) REFERENCES block (id) ON DELETE CASCADE);");
+        
+        hasAccess = databank.prepareStatement("Select id from block_grant WHERE id = ? AND player_id = ?;");
+        getId = databank.prepareStatement("SELECT id FROM block WHERE world_name=? AND x=? AND y=? AND z=?;");
     }  
 
-    private final PreparedStatement hasAccess = KajetansMod.databank.prepareStatement(
-            "Select id from block_grant WHERE id = ? AND player_id = ?;");
-    
     @Override
     public boolean hasAccess(int x, int y, int z, String worldName, int playerId)
     {
@@ -62,14 +67,11 @@ public class BlockProtectionBank implements IBlockProtection
     }
     
     @Override
-    public boolean hasAccess(BlockPos pos, IWorld w, PlayerEntity p)
+    public boolean hasAccess(BlockPos pos, IWorld w, ModEntityPlayerMP p)
     {
-        return hasAccess(pos.getX(), pos.getY(), pos.getZ(), WorldManager.getName(w), KajetansMod.playerbank.getPlayerId(p.getUniqueID()));
+        return hasAccess(pos.getX(), pos.getY(), pos.getZ(), WorldManager.getName(w), p.getId());
     }
-    
-    private final PreparedStatement getId = KajetansMod.databank.prepareStatement(
-            "SELECT id FROM block WHERE world_name=? AND x=? AND y=? AND z=?;");
-    
+
     private int getId(int x, int y, int z, String worldName)
     {
         try
@@ -97,4 +99,4 @@ public class BlockProtectionBank implements IBlockProtection
         }
         return -1;
     }
-}
+}

+ 16 - 30
src/main/java/me/km/blockprotections/BlockProtection.java → src/main/java/me/km/blockprotections/BlockProtectionEvents.java

@@ -1,48 +1,34 @@
 package me.km.blockprotections;
 
-import me.km.KajetansMod;
-import me.km.module.Module;
+import me.km.overrides.ModEntityPlayerMP;
+import me.km.permissions.PermissionManager;
 import me.km.utils.Location;
 import me.km.utils.Utils;
 import net.minecraft.block.Block;
 import net.minecraft.block.ContainerBlock;
 import net.minecraft.block.DoorBlock;
 import net.minecraft.block.BlockState;
-import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.block.Blocks;
 import net.minecraft.state.properties.DoubleBlockHalf;
 import net.minecraft.util.Hand;
 import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.text.TextFormatting;
 import net.minecraft.world.IWorld;
 import net.minecraftforge.event.entity.player.PlayerInteractEvent;
 import net.minecraftforge.event.world.BlockEvent;
 import net.minecraftforge.eventbus.api.EventPriority;
 import net.minecraftforge.eventbus.api.SubscribeEvent;
 
-public class BlockProtection extends Module
+public class BlockProtectionEvents
 {
     private final static String BLOCK_BYPASS = "block.bypass";
     
     private final IBlockProtection bank;
+    private final PermissionManager perms;
     
-    public BlockProtection() 
+    public BlockProtectionEvents(IBlockProtection bank, PermissionManager perms) 
     {
-        super("Blocks", TextFormatting.BLUE);
-        if(KajetansMod.databank.isDummyDatabank())
-        {
-            bank = new DummyBlockProtection();
-        }
-        else
-        {
-            bank = new BlockProtectionBank();
-        }
-        registerEvent(this);
-    }
-    
-    public IBlockProtection getDatabank()
-    {
-        return bank;
+        this.bank = bank;
+        this.perms = perms;
     }
     
     private BlockPos getSameNearbyBlock(IWorld w, BlockPos pos, Block b)
@@ -71,17 +57,17 @@ public class BlockProtection extends Module
     public void onBlockPlace(BlockEvent.EntityPlaceEvent e)
     {
         Block b = e.getPlacedBlock().getBlock();
-        if(!(e.getEntity() instanceof PlayerEntity))
+        if(!(e.getEntity() instanceof ModEntityPlayerMP))
         {
             return;
         }
-        PlayerEntity p = (PlayerEntity) e.getEntity();
+        ModEntityPlayerMP p = (ModEntityPlayerMP) e.getEntity();
         IWorld w = e.getWorld();
         
         if(b == Blocks.CHEST || b == Blocks.TRAPPED_CHEST) // Deny placing chests near other protected chests
         {
             BlockPos otherChest = getSameNearbyBlock(w, e.getPos(), b);
-            if(otherChest != null && !bank.hasAccess(otherChest, w, p) && !KajetansMod.perms.hasPermission(p, BLOCK_BYPASS))
+            if(otherChest != null && !bank.hasAccess(otherChest, w, p) && !perms.hasPermission(p, BLOCK_BYPASS))
             {
                 e.setCanceled(true);
             }        
@@ -91,7 +77,7 @@ public class BlockProtection extends Module
             BlockPos pos = e.getPos().add(0, 1, 0);
             if(w.getBlockState(pos).getBlock() instanceof ContainerBlock)
             {
-                if(!bank.hasAccess(pos, w, p) && !KajetansMod.perms.hasPermission(p, BLOCK_BYPASS))
+                if(!bank.hasAccess(pos, w, p) && !perms.hasPermission(p, BLOCK_BYPASS))
                 {
                     e.setCanceled(true);
                 }               
@@ -102,7 +88,7 @@ public class BlockProtection extends Module
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void onBlockBreak(BlockEvent.BreakEvent e)
     {
-        PlayerEntity p = e.getPlayer();
+        ModEntityPlayerMP p = (ModEntityPlayerMP) e.getPlayer();
         BlockState state = e.getState();
 
         BlockPos pos = e.getPos();
@@ -111,9 +97,9 @@ public class BlockProtection extends Module
             pos = pos.add(0, -1, 0);
         } 
         IWorld w = e.getWorld();
-        if(bank.hasAccess(pos, w, p) || KajetansMod.perms.hasPermission(p, BLOCK_BYPASS))
+        if(bank.hasAccess(pos, w, p) || perms.hasPermission(p, BLOCK_BYPASS))
         {
-            // TODO remove protection
+            // ToDo remove protection
             return;
         }   
         e.setCanceled(true);          
@@ -127,13 +113,13 @@ public class BlockProtection extends Module
             return;
         }
         BlockState state = e.getWorld().getBlockState(e.getPos());
-        PlayerEntity p = e.getEntityPlayer();
+        ModEntityPlayerMP p = (ModEntityPlayerMP) e.getEntityPlayer();
         BlockPos pos = e.getPos();
         if(Utils.getStateValue(state, DoorBlock.HALF) == DoubleBlockHalf.UPPER)
         {
             pos = pos.add(0, -1, 0);
         }
-        if(!bank.hasAccess(pos, e.getWorld(), p) && !KajetansMod.perms.hasPermission(p, BLOCK_BYPASS))
+        if(!bank.hasAccess(pos, e.getWorld(), p) && !perms.hasPermission(p, BLOCK_BYPASS))
         {
             e.setCanceled(true);   
         }  

+ 3 - 4
src/main/java/me/km/blockprotections/DummyBlockProtection.java

@@ -1,6 +1,6 @@
 package me.km.blockprotections;
 
-import net.minecraft.entity.player.PlayerEntity;
+import me.km.overrides.ModEntityPlayerMP;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.world.IWorld;
 
@@ -13,9 +13,8 @@ public class DummyBlockProtection implements IBlockProtection
     }
 
     @Override
-    public boolean hasAccess(BlockPos pos, IWorld w, PlayerEntity p)
+    public boolean hasAccess(BlockPos pos, IWorld w, ModEntityPlayerMP p)
     {
         return true;
     }
-    
-}
+}

+ 3 - 3
src/main/java/me/km/blockprotections/IBlockProtection.java

@@ -1,11 +1,11 @@
 package me.km.blockprotections;
 
-import net.minecraft.entity.player.PlayerEntity;
+import me.km.overrides.ModEntityPlayerMP;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.world.IWorld;
 
 public interface IBlockProtection
 {
     public boolean hasAccess(int x, int y, int z, String worldName, int playerId);
-    public boolean hasAccess(BlockPos pos, IWorld w, PlayerEntity p);
-}
+    public boolean hasAccess(BlockPos pos, IWorld w, ModEntityPlayerMP p);
+}

+ 0 - 1
src/main/java/me/km/blocks/cookingpot/CookingPotColorMixer.java

@@ -2,7 +2,6 @@ package me.km.blocks.cookingpot;
 
 import java.awt.Color;
 import java.util.LinkedList;
-import net.minecraft.block.Blocks;
 import net.minecraft.item.Items;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;

+ 0 - 70
src/main/java/me/km/chatchannel/ChatChannel.java

@@ -1,70 +0,0 @@
-package me.km.chatchannel;
-
-import java.util.function.BiConsumer;
-import java.util.function.Consumer;
-import java.util.function.Predicate;
-import me.km.KajetansMod;
-import net.minecraft.entity.player.ServerPlayerEntity;
-import net.minecraft.util.text.StringTextComponent;
-
-public class ChatChannel 
-{
-    // -------------------------------------------------------------------------
-    // static stuff
-    // -------------------------------------------------------------------------
-    
-    public static ChatChannel getDevChannel()
-    {
-        return DEV_CHANNEL;
-    };
-    
-    private final static ChatChannel DEV_CHANNEL = new ChatChannel("Dev", TextColor.LIGHT_PURPLE, 
-            (cc, s) -> 
-            {
-                StringTextComponent text = new StringTextComponent(s);
-                cc.forEach(p -> p.sendMessage(text));
-            }, p -> KajetansMod.perms.hasPermission(p, "script.error"));   
-    
-    // -------------------------------------------------------------------------
-    // chat channels
-    // -------------------------------------------------------------------------
-    
-    private final Predicate<ServerPlayerEntity> filter;
-    private final String prefix;
-    private final String list;
-    private final BiConsumer<ChatChannel, String> onSend;
-    
-    private ChatChannel(String name, TextColor tc,
-            BiConsumer<ChatChannel, String> onSend, Predicate<ServerPlayerEntity> filter)
-    {
-        this.filter = filter;
-        this.prefix = "[" + tc + name + TextColor.RESET + "] ";
-        this.list = tc + " - ";
-        this.onSend = onSend;
-    }
-    
-    public void send(String msg)
-    {
-        onSend.accept(this, prefix + " " + msg);
-    }
-    
-    public void sendWarning(String msg)
-    {
-        onSend.accept(this, prefix + " " + TextColor.RED + msg);
-    }
-    
-    public void sendList(String msg)
-    {
-        onSend.accept(this, list + TextColor.RESET + msg);
-    }
-    
-    public void sendList(String msg, String msg2)
-    {
-        onSend.accept(this, list + msg + TextColor.RESET + " " + msg2);
-    }
-    
-    public void forEach(Consumer<ServerPlayerEntity> c)
-    {
-        KajetansMod.server.getPlayerList().getPlayers().stream().filter(filter).forEach(c);
-    }
-}

+ 10 - 11
src/main/java/me/km/databank/DataBank.java

@@ -4,23 +4,22 @@ import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.util.HashMap;
-import me.km.module.Module;
+import me.hammerle.snuviscript.code.ISnuviLogger;
 import me.km.scheduler.SnuviScheduler;
-import net.minecraft.util.text.TextFormatting;
 
-public class DataBank extends Module
+public class DataBank
 {
+    private final ISnuviLogger logger;
     private Connection c = null;
     private final String user;
     private final String password;
     
     private final HashMap<String, PreparedStatement> statements = new HashMap<>();
     
-    public DataBank(String prefix, TextFormatting color, String user, String password) 
+    public DataBank(ISnuviLogger logger, String user, String password) 
     {
-        super(prefix, color);
+        this.logger = logger;
         this.user = user;
         this.password = password;
     }
@@ -32,12 +31,12 @@ public class DataBank extends Module
             // The newInstance() call is a work around for some broken Java implementations
             Class.forName("com.mysql.jdbc.Driver").newInstance();
             c = DriverManager.getConnection("jdbc:mysql://localhost/minecraft?useSSL=false", user, password);
-            this.sendToConsole("Connection to datebank etablished.");
+            logger.print("connection to datebank etablished");
             return true;
         } 
         catch(ClassNotFoundException | IllegalAccessException | InstantiationException | SQLException ex) 
         {
-            this.sendWarningToConsole(ex.toString());
+            logger.print(ex);
             return false;
         }
     }
@@ -60,11 +59,11 @@ public class DataBank extends Module
                     }
                 });
             }
-            this.sendToConsole("The connection was closed.");
+            logger.print("connection to databank was closed");
         } 
         catch (SQLException ex) 
         {
-            this.sendWarningToConsole(ex.getMessage());
+            logger.print(ex);
         }
     }
     
@@ -129,7 +128,7 @@ public class DataBank extends Module
             }
             catch(SQLException ex) 
             {
-                sendToConsole("reconnect was done");
+                logger.print("reconnect was done");
             }
         }, 100, 12000); // doing this every 10 minutes
     }

+ 0 - 9
src/main/java/me/km/effects/EffectUtils.java

@@ -202,13 +202,4 @@ public class EffectUtils
         ArrowEntity arrow = launchProjectile(p, ArrowEntity.class, scale, stack);
         return arrow;
     }
-
-    public static void jumpTo(LivingEntity j, LivingEntity g)
-    {
-        Utils.setVelocity(j, (g.posX - g.posX) * 0.2, (g.posY - g.posY) * 0.2 + 0.9, (g.posZ - g.posZ) * 0.2);
-        KajetansMod.scheduler.scheduleTask(() -> 
-        {
-            Utils.setVelocity(j, (g.posX - j.posX) * 0.2, (g.posY - j.posY) * 0.2, (g.posZ - j.posZ) * 0.2);
-        }, 12);
-    }
 }

+ 1 - 1
src/main/java/me/km/entities/EntityBlackBear.java

@@ -8,7 +8,7 @@ public class EntityBlackBear extends PolarBearEntity
 {
     public EntityBlackBear(EntityType type, World w) 
     {
-        super(EntityType.POLAR_BEAR, w);
+        super(ModEntities.BLACK_BEAR, w);
     }
 
     @Override

+ 1 - 1
src/main/java/me/km/entities/EntityBrownBear.java

@@ -8,7 +8,7 @@ public class EntityBrownBear extends PolarBearEntity
 {
     public EntityBrownBear(EntityType type, World w) 
     {
-        super(EntityType.POLAR_BEAR, w);
+        super(ModEntities.BROWN_BEAR, w);
     }
     
     @Override

+ 4 - 2
src/main/java/me/km/entities/EntityHuman.java

@@ -2,7 +2,9 @@ package me.km.entities;
 
 import java.nio.charset.StandardCharsets;
 import me.km.KajetansMod;
+import me.km.Server;
 import me.km.networking.ModPacketHandler;
+import me.km.overrides.ModEntityPlayerMP;
 import me.km.snuviscript.ScriptEvents;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.CreatureEntity;
@@ -188,9 +190,9 @@ public class EntityHuman extends CreatureEntity implements IEntityAdditionalSpaw
         if(!world.isRemote)
         {
             Entity ent = source.getTrueSource();
-            if(KajetansMod.scripts != null && ent instanceof PlayerEntity)
+            if(ent instanceof ModEntityPlayerMP)
             {
-                ScriptEvents.onHumanHurt((PlayerEntity) ent, this);
+                Server.scriptEvents.onHumanHurt((ModEntityPlayerMP) ent, this);
             }
         }
         return false;

+ 4 - 6
src/main/java/me/km/entities/EntityItemProjectile.java

@@ -1,19 +1,17 @@
 package me.km.entities;
 
 import java.util.List;
-import me.km.KajetansMod;
-import me.km.snuviscript.ScriptEvents;
+import me.km.Server;
+import me.km.overrides.ModEntityPlayerMP;
 import me.km.utils.ReflectionUtils;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.LivingEntity;
 import net.minecraft.entity.IProjectile;
 import net.minecraft.entity.item.ItemEntity;
-import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.item.ItemStack;
 import net.minecraft.util.DamageSource;
 import net.minecraft.util.math.AxisAlignedBB;
 import net.minecraft.util.math.MathHelper;
-import net.minecraft.util.math.Vec3d;
 
 public class EntityItemProjectile extends ItemEntity implements IProjectile
 {
@@ -135,9 +133,9 @@ public class EntityItemProjectile extends ItemEntity implements IProjectile
     {
         if(damage == -1)
         {
-            if(KajetansMod.scripts != null && thrower instanceof PlayerEntity)
+            if(thrower instanceof ModEntityPlayerMP)
             {
-                ScriptEvents.onEntityItemProjectileHit(this, (PlayerEntity) thrower, this.getItem(), list);
+                Server.scriptEvents.onEntityItemProjectileHit(this, (ModEntityPlayerMP) thrower, this.getItem(), list);
             }
         }
         else

+ 0 - 1
src/main/java/me/km/entities/HumanSkinLoader.java

@@ -6,7 +6,6 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.function.Consumer;
-import javax.imageio.ImageIO;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.renderer.DownloadImageBuffer;
 import net.minecraft.client.renderer.texture.DynamicTexture;

+ 4 - 4
src/main/java/me/km/entities/ModEntities.java

@@ -44,19 +44,19 @@ public class ModEntities
     {
         RenderingRegistry.registerEntityRenderingHandler(EntityBrownBear.class, (rm) -> 
         {
-            return new RenderBrownBear();
+            return new RenderBrownBear(rm);
         });
         RenderingRegistry.registerEntityRenderingHandler(EntityBlackBear.class, (rm) -> 
         {
-            return new RenderBlackBear();
+            return new RenderBlackBear(rm);
         });
         RenderingRegistry.registerEntityRenderingHandler(EntityHuman.class, (rm) -> 
         {
-            return new RenderHuman();
+            return new RenderHuman(rm);
         });
         RenderingRegistry.registerEntityRenderingHandler(EntityNobody.class, (rm) -> 
         {
-            return new RenderNobody();
+            return new RenderNobody(rm);
         });
     }
 }

+ 4 - 4
src/main/java/me/km/entities/RenderBlackBear.java

@@ -2,7 +2,7 @@ package me.km.entities;
 
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.km.KajetansMod;
-import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.entity.EntityRendererManager;
 import net.minecraft.client.renderer.entity.MobRenderer;
 import net.minecraft.client.renderer.entity.model.PolarBearModel;
 import net.minecraft.util.ResourceLocation;
@@ -12,11 +12,11 @@ import net.minecraftforge.api.distmarker.OnlyIn;
 @OnlyIn(Dist.CLIENT)
 public class RenderBlackBear extends MobRenderer<EntityBlackBear, PolarBearModel<EntityBlackBear>>
 {
-    private static final ResourceLocation BLACK_BEAR_TEXTURE = new ResourceLocation(KajetansMod.MODID + ":textures/entity/bear/blackbear.png");
+    private static final ResourceLocation BLACK_BEAR_TEXTURE = new ResourceLocation(KajetansMod.MODID, "textures/entity/bear/blackbear.png");
 
-    public RenderBlackBear()
+    public RenderBlackBear(EntityRendererManager erm)
     {
-        super(Minecraft.getInstance().getRenderManager(), new PolarBearModel<>(), 0.9F);
+        super(erm, new PolarBearModel<>(), 0.9F);
     }
 
     @Override

+ 6 - 4
src/main/java/me/km/entities/RenderBrownBear.java

@@ -2,26 +2,28 @@ package me.km.entities;
 
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.km.KajetansMod;
-import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.entity.EntityRendererManager;
 import net.minecraft.client.renderer.entity.MobRenderer;
 import net.minecraft.client.renderer.entity.model.PolarBearModel;
 import net.minecraft.util.ResourceLocation;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
+import org.apache.logging.log4j.LogManager;
 
 @OnlyIn(Dist.CLIENT)
 public class RenderBrownBear extends MobRenderer<EntityBrownBear, PolarBearModel<EntityBrownBear>>
 {
-    private static final ResourceLocation BLACK_BEAR_TEXTURE = new ResourceLocation(KajetansMod.MODID + ":textures/entity/bear/brownbear.png");
+    private static final ResourceLocation BLACK_BEAR_TEXTURE = new ResourceLocation(KajetansMod.MODID, "textures/entity/bear/brownbear.png");
 
-    public RenderBrownBear()
+    public RenderBrownBear(EntityRendererManager erm)
     {
-        super(Minecraft.getInstance().getRenderManager(), new PolarBearModel<>(), 0.9F);
+        super(erm, new PolarBearModel<>(), 0.9F);
     }
 
     @Override
     protected ResourceLocation getEntityTexture(EntityBrownBear entity)
     {
+        LogManager.getLogger().warn("HMM");
         return BLACK_BEAR_TEXTURE;
     }
 

+ 3 - 2
src/main/java/me/km/entities/RenderHuman.java

@@ -2,6 +2,7 @@ package me.km.entities;
 
 import com.mojang.blaze3d.platform.GlStateManager;
 import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.entity.EntityRendererManager;
 import net.minecraft.client.renderer.entity.LivingRenderer;
 import net.minecraft.client.renderer.entity.layers.ArrowLayer;
 import net.minecraft.client.renderer.entity.layers.BipedArmorLayer;
@@ -24,9 +25,9 @@ public class RenderHuman extends LivingRenderer<EntityHuman, ModelHuman>
     private final ModelHuman steve;
     private final ModelHuman alex;
 
-    public RenderHuman()
+    public RenderHuman(EntityRendererManager erm)
     {
-        super(Minecraft.getInstance().getRenderManager(), new ModelHuman(0.0f, false), 0.5f);
+        super(erm, new ModelHuman(0.0f, false), 0.5f);
         this.addLayer(new BipedArmorLayer<>(this, new BipedModel(0.5F), new BipedModel(1.0F)));
         this.addLayer(new HeldItemLayer<>(this));
         this.addLayer(new ArrowLayer<>(this));

+ 3 - 3
src/main/java/me/km/entities/RenderNobody.java

@@ -1,17 +1,17 @@
 package me.km.entities;
 
 import me.km.KajetansMod;
-import net.minecraft.client.Minecraft;
 import net.minecraft.client.renderer.entity.EntityRenderer;
+import net.minecraft.client.renderer.entity.EntityRendererManager;
 import net.minecraft.util.ResourceLocation;
 
 public class RenderNobody extends EntityRenderer<EntityNobody>
 {
     private static final ResourceLocation LOC = new ResourceLocation(KajetansMod.MODID, "nobody");
     
-    public RenderNobody()
+    public RenderNobody(EntityRendererManager erm)
     {
-        super(Minecraft.getInstance().getRenderManager());
+        super(erm);
         super.setRenderOutlines(false);
     }
     

+ 37 - 23
src/main/java/me/km/events/CustomEventCaller.java

@@ -5,7 +5,8 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import me.hammerle.snuviscript.code.Script;
 import me.km.DamageUtils;
-import me.km.KajetansMod;
+import me.km.playerbank.PlayerManager;
+import me.km.scheduler.SnuviScheduler;
 import me.km.scoreboard.ScoreboardUtils;
 import me.km.utils.ReflectionUtils;
 import net.minecraft.entity.Entity;
@@ -15,6 +16,7 @@ import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.entity.player.ServerPlayerEntity;
 import net.minecraft.entity.projectile.ArrowEntity;
 import net.minecraft.entity.projectile.ThrowableEntity;
+import net.minecraft.server.MinecraftServer;
 import net.minecraft.util.CombatRules;
 import net.minecraft.util.DamageSource;
 import net.minecraftforge.common.MinecraftForge;
@@ -26,33 +28,44 @@ import net.minecraftforge.fml.common.gameevent.TickEvent;
 
 public class CustomEventCaller 
 {
-    private static final ArrayList<ArrowEntity> ARROWS = new ArrayList<>();
+    private final ArrayList<ArrowEntity> arrows = new ArrayList<>();
+
+    private final HashMap<Integer, PlayerMoveData> moveData = new HashMap<>();
     
-    private static final HashMap<Integer, PlayerMoveData> MOVE_DATA = new HashMap<>();
+    private final LinkedList<Integer> removeQueue = new LinkedList<>();
+    private final LinkedList<PlayerMoveData> addQueue = new LinkedList<>();
     
-    private static final LinkedList<Integer> REMOVE_QUEUE = new LinkedList<>();
-    private static final LinkedList<PlayerMoveData> ADD_QUEUE = new LinkedList<>();
+    private final PlayerManager pManager;
+    private final MinecraftServer server;
+    private final SnuviScheduler scheduler;
     
-    public static int registerMoveData(PlayerMoveData data)
+    public CustomEventCaller(PlayerManager pManager, MinecraftServer server, SnuviScheduler scheduler)
+    {
+        this.pManager = pManager;
+        this.server = server;
+        this.scheduler = scheduler;
+    }
+
+    public int registerMoveData(PlayerMoveData data)
     {
-        ADD_QUEUE.add(data);
+        addQueue.add(data);
         return data.getId();
     }
     
-    public static void removeScriptData(Script sc)
+    public void removeScriptData(Script sc)
     {
-        MOVE_DATA.entrySet().forEach(e -> 
+        moveData.entrySet().forEach(e -> 
         {
             if(e.getValue().isSameScript(sc))
             {
-                REMOVE_QUEUE.add(e.getValue().getId());
+                removeQueue.add(e.getValue().getId());
             }
         });
     }
     
-    public static void removeMoveData(int id)
+    public void removeMoveData(int id)
     {
-        REMOVE_QUEUE.add(id);
+        removeQueue.add(id);
     }
     
     @SubscribeEvent
@@ -60,14 +73,15 @@ public class CustomEventCaller
     {      
         if(e.phase == TickEvent.Phase.END)
         {
-            KajetansMod.playerbank.tickPlayerData();
-            ScoreboardUtils.update();
-            if(!ADD_QUEUE.isEmpty())
+            scheduler.tick();
+            pManager.tickPlayerData();
+            ScoreboardUtils.update(server);
+            if(!addQueue.isEmpty())
             {
-                ADD_QUEUE.forEach(data -> MOVE_DATA.put(data.getId(), data));
-                ADD_QUEUE.clear();
+                addQueue.forEach(data -> moveData.put(data.getId(), data));
+                addQueue.clear();
             }
-            MOVE_DATA.values().removeIf(data -> 
+            moveData.values().removeIf(data -> 
             {
                 if(data.tickLiving())
                 {
@@ -77,15 +91,15 @@ public class CustomEventCaller
                 {
                     return false;
                 }
-                return KajetansMod.server.getPlayerList().getPlayers().stream().anyMatch(p -> data.check(p));
+                return server.getPlayerList().getPlayers().stream().anyMatch(p -> data.check(p));
             });
-            if(!REMOVE_QUEUE.isEmpty())
+            if(!removeQueue.isEmpty())
             {
-                REMOVE_QUEUE.forEach(i -> MOVE_DATA.remove(i));
-                REMOVE_QUEUE.clear();
+                removeQueue.forEach(i -> moveData.remove(i));
+                removeQueue.clear();
             }
             
-            ARROWS.removeIf(arrow -> 
+            arrows.removeIf(arrow -> 
             {
                 if(ReflectionUtils.getArrowTimeInGround(arrow) >= 1)
                 {

+ 2 - 2
src/main/java/me/km/events/PlayerMoveData.java

@@ -2,8 +2,8 @@ package me.km.events;
 
 import java.util.function.BiPredicate;
 import me.hammerle.snuviscript.code.Script;
+import me.km.Server;
 import me.km.utils.Location;
-import me.km.snuviscript.ScriptEvents;
 import net.minecraft.entity.player.ServerPlayerEntity;
 import net.minecraft.world.IWorld;
 
@@ -104,7 +104,7 @@ public class PlayerMoveData
         }
         if(sc != null)
         {
-            ScriptEvents.onPlayerMove(p, id);
+            Server.scriptEvents.onPlayerMove(p, id);
         }
         if(c != null)
         {

+ 10 - 6
src/main/java/me/km/inventory/CustomContainer.java

@@ -1,6 +1,6 @@
 package me.km.inventory;
 
-import me.km.KajetansMod;
+import me.hammerle.snuviscript.code.ISnuviScheduler;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.entity.player.ServerPlayerEntity;
 import net.minecraft.inventory.container.ClickType;
@@ -11,16 +11,20 @@ public class CustomContainer extends CustomContainerBase
 {
     private boolean canBeClosed;
     
-    public CustomContainer(InventoryBase inv, ServerPlayerEntity p, ITextComponent title) 
+    private final ISnuviScheduler scheduler;
+    
+    public CustomContainer(ISnuviScheduler scheduler, InventoryBase inv, ServerPlayerEntity p, ITextComponent title) 
     {
         super(inv, p, title);
         canBeClosed = true;
+        this.scheduler = scheduler;
     }
     
     public CustomContainer(InventoryBase inv, PlayerEntity p, ITextComponent title, int id) 
     {
         super(inv, p, title, id);
         canBeClosed = true;
+        this.scheduler = null;
     }
     
     @Override
@@ -30,9 +34,9 @@ public class CustomContainer extends CustomContainerBase
         {
             super.closeSafe();
         }
-        else if(isServerSide)
+        else if(isServerSide && scheduler != null)
         {
-            KajetansMod.scheduler.scheduleTask(() -> 
+            scheduler.scheduleTask(() -> 
             {
                 if(viewer.openContainer.windowId == this.windowId)
                 {
@@ -46,14 +50,14 @@ public class CustomContainer extends CustomContainerBase
     public void openForPlayer()
     {
         // opening container on next tick to prevent closing during noClicking or onCanceledClick
-        if(isServerSide)
+        if(isServerSide && scheduler != null)
         {
             if(viewer.openContainer instanceof CustomContainer)
             {
                 CustomContainer cc = (CustomContainer) viewer.openContainer;
                 if(!cc.canBeClosed)
                 {
-                    KajetansMod.scheduler.scheduleTask(() -> openForPlayer());
+                    scheduler.scheduleTask(() -> openForPlayer());
                     return;
                 }
             }

+ 3 - 3
src/main/java/me/km/items/ItemCylinder.java

@@ -1,6 +1,6 @@
 package me.km.items;
 
-import me.km.KajetansMod;
+import me.km.Client;
 import net.minecraft.client.renderer.entity.model.BipedModel;
 import net.minecraft.entity.LivingEntity;
 import net.minecraft.inventory.EquipmentSlotType;
@@ -18,7 +18,7 @@ public class ItemCylinder extends ArmorItem
     {
         super(am, EquipmentSlotType.HEAD, builder.group(ItemGroup.COMBAT));
     }
-
+    
     @OnlyIn(Dist.CLIENT)
     @Override
     public BipedModel getArmorModel(LivingEntity entityLiving, ItemStack itemStack, EquipmentSlotType armorSlot, BipedModel normal)
@@ -27,6 +27,6 @@ public class ItemCylinder extends ArmorItem
         {
             return normal;
         }
-        return KajetansMod.proxy.getCylinderModel();
+        return Client.CYLINDER;
     }
 }

+ 2 - 2
src/main/java/me/km/items/ItemHat.java

@@ -1,6 +1,6 @@
 package me.km.items;
 
-import me.km.KajetansMod;
+import me.km.Client;
 import net.minecraft.client.renderer.entity.model.BipedModel;
 import net.minecraft.entity.LivingEntity;
 import net.minecraft.inventory.EquipmentSlotType;
@@ -27,6 +27,6 @@ public class ItemHat extends ArmorItem
         {
             return normal;
         }
-        return KajetansMod.proxy.getStrawHatModel();
+        return Client.STRAW_HAT;
     }
 }

+ 1 - 1
src/main/java/me/km/items/ItemSling.java

@@ -23,7 +23,7 @@ public class ItemSling extends Item
     public ItemSling(int maxDamage) 
     {
         super(new Properties().defaultMaxDamage(maxDamage).group(ItemGroup.COMBAT));
-
+        
         this.addPropertyOverride(new ResourceLocation("pull"), (stack, w, ent) -> 
         {
             if(ent == null)

+ 0 - 10
src/main/java/me/km/items/ModItems.java

@@ -1,7 +1,6 @@
 package me.km.items;
 
 import me.km.blocks.ModBlocks;
-import me.km.utils.ReflectionUtils;
 import net.minecraft.item.Items;
 import net.minecraft.inventory.EquipmentSlotType;
 import net.minecraft.item.IArmorMaterial;
@@ -20,7 +19,6 @@ import net.minecraft.item.ItemTier;
 import net.minecraft.potion.Effect;
 import net.minecraft.potion.EffectInstance;
 import net.minecraft.potion.Effects;
-import net.minecraft.potion.PotionBrewing;
 import net.minecraftforge.registries.IForgeRegistry;
 import org.apache.logging.log4j.LogManager;
 
@@ -421,10 +419,6 @@ public class ModItems
         // block overrides
         try
         {
-            for(int i = 0; i < 3; i++)
-            {
-                LogManager.getLogger().info("DOING EVIL SHIT");
-            }
             PotionItem potion = new ItemNoGlintPotion();
             register(r, Items.POTION, potion);
              
@@ -433,10 +427,6 @@ public class ModItems
             
             PotionItem lingeringPotion = new ItemNoGlintLingeringPotion();
             register(r, Items.LINGERING_POTION, lingeringPotion);
-            for(int i = 0; i < 3; i++)
-            {
-                LogManager.getLogger().info("DONE WITH EVIL SHIT");
-            }
         }
         catch(Exception ex)
         {

+ 0 - 138
src/main/java/me/km/module/Module.java

@@ -1,138 +0,0 @@
-package me.km.module;
-
-import me.km.utils.Utils;
-import java.lang.reflect.InvocationTargetException;
-import me.km.KajetansMod;
-import me.km.PackageHelper;
-import net.minecraft.command.ICommandSource;
-import net.minecraft.entity.player.PlayerEntity;
-import net.minecraft.util.text.ITextComponent;
-import net.minecraft.util.text.StringTextComponent;
-import net.minecraft.util.text.TextFormatting;
-import net.minecraft.world.World;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
-
-public class Module
-{
-    private final String prefix;
-    private final String color;
-    
-    public Module(String prefix, TextFormatting color)
-    {
-        this.color = color.toString();
-        this.prefix = String.format("[%s%s§r] ", color, prefix);
-        sendToConsole(String.format("Module %swas loaded.", this.prefix));
-    }
-    
-    //--------------------------------------------------------------------------
-    // messages
-    //--------------------------------------------------------------------------
-
-    public final void send(ICommandSource cs, String msg)
-    {
-        if(cs == null)
-        {
-            return;
-        }
-        cs.sendMessage(new StringTextComponent(prefix + msg));
-    }
-
-    public final void sendToPlayers(World w, double x, double y, double z, double radius, String msg)
-    {
-        ITextComponent s = new StringTextComponent(prefix + msg);
-        Utils.getEntities(w, x, y, z, radius, PlayerEntity.class).forEach(p -> ((PlayerEntity) p).sendMessage(s));
-    }
-    
-    public final void sendBroadcast(String msg)
-    {
-        KajetansMod.server.getPlayerList().sendMessage(new StringTextComponent(prefix + msg));
-    }
-    
-    public final void sendListElement(ICommandSource cs, String msg)
-    {
-        if(cs == null)
-        {
-            return;
-        }
-        cs.sendMessage(new StringTextComponent(String.format(" %s-§r %s", color, msg)));
-    } 
-    
-    public final void sendHelpListElement(ICommandSource cs, String msg, String msg2)
-    {
-        if(cs == null)
-        {
-            return;
-        }
-        cs.sendMessage(new StringTextComponent(String.format(" %s- %s§r %s", color, msg, msg2)));
-    }
-    
-    public final void sendWarning(ICommandSource cs, String msg)
-    {
-        if(cs == null)
-        {
-            return;
-        }
-        cs.sendMessage(new StringTextComponent(String.format("%s%s%s", prefix, TextFormatting.RED, msg)));
-    }
-   
-    public final void sendToConsole(String msg)
-    {
-        send(KajetansMod.server, msg);
-    }
-    
-    public final void sendListElementToConsole(String msg)
-    {
-        sendListElement(KajetansMod.server, msg);
-    }
-    
-    public final void sendHelpListElementToConsole(String msg, String msg2)
-    {
-        sendHelpListElement(KajetansMod.server, msg, msg2);
-    }
-    
-    public final void sendWarningToConsole(String msg)
-    {
-        sendWarning(KajetansMod.server, msg);
-    }
-    
-    @SuppressWarnings("unchecked")
-    public void registerCommands(FMLServerStartingEvent e, String packageName)
-    {
-        PackageHelper.getClasses(packageName).stream().filter(c -> ModuleCommand.class.isAssignableFrom(c)).forEach((Class c) -> 
-        {
-            try 
-            {
-                ModuleCommand command = (ModuleCommand) c.getDeclaredConstructor(Module.class).newInstance(this);
-                KajetansMod.commands.registerCommand(command);
-            }
-            catch(ClassCastException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex)
-            { 
-                this.sendToConsole("Command '" + c + "' has thrown an error.");
-            }
-        });
-        this.sendToConsole("All commands were loaded.");
-    }
- 
-    @SuppressWarnings("unchecked")
-    public void registerEvents(String packageName)
-    {
-        PackageHelper.getClasses(packageName).stream().filter(c -> ModuleListener.class.isAssignableFrom(c)).forEach((Class c) -> 
-        {
-            try 
-            {   
-                MinecraftForge.EVENT_BUS.register((ModuleListener) c.getDeclaredConstructor(Module.class).newInstance(this));
-            }
-            catch(NoSuchMethodException | ClassCastException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex)
-            {
-                this.sendToConsole("Error in event class " + c + " " + ex.toString());
-            }
-        });
-        this.sendToConsole("All events were loaded.");
-    }
-    
-    public static void registerEvent(Object o)
-    {
-        MinecraftForge.EVENT_BUS.register(o);
-    }
-}

+ 0 - 29
src/main/java/me/km/module/ModuleCommand.java

@@ -1,29 +0,0 @@
-package me.km.module;
-
-import java.util.Collections;
-import me.km.module.Module;
-import net.minecraft.command.ICommandSource;
-
-public abstract class ModuleCommand
-{
-    private final Module m;
-    
-    public ModuleCommand(Module m)
-    {
-        this.m = m;
-    }
-    
-    public final Module getModule()
-    {
-        return m;
-    }
-    
-    public abstract String getName();
-    
-    public Iterable<String> getAliases()
-    {
-        return Collections.EMPTY_LIST;
-    }
-    
-    public abstract void execute(ICommandSource cs, String[] arg);
-}

+ 0 - 5
src/main/java/me/km/module/ModuleListener.java

@@ -1,5 +0,0 @@
-package me.km.module;
-
-public interface ModuleListener
-{
-}

+ 0 - 45
src/main/java/me/km/module/SimpleConfig.java

@@ -1,45 +0,0 @@
-package me.km.module;
-
-import me.hammerle.snuviscript.code.Script;
-import me.hammerle.snuviscript.config.SnuviConfig;
-
-public class SimpleConfig extends SnuviConfig
-{                   
-    public SimpleConfig(Module m, String path, String name, boolean load)
-    {    
-        super((String message, Exception ex, String function, String scriptname, Script sc, int line) -> 
-        {
-            m.sendToConsole("error in config '" + name + "'");
-            if(message != null)
-            {
-                m.sendListElementToConsole(message);
-            }
-            if(ex != null)
-            {
-                m.sendListElementToConsole(ex.getClass().getSimpleName());
-            }
-            if(function != null)
-            {
-                m.sendHelpListElementToConsole("function", function);
-            }
-            if(line != -1)
-            {
-                m.sendHelpListElementToConsole("line", function);
-            }
-        }, path, name);
-        
-        if(load && exists())
-        {
-            load();
-        }
-    }   
-    
-    public SimpleConfig(Module m, Script sc, String path, String name, boolean load)
-    {
-        super(sc, path, name);
-        if(load && exists())
-        {
-            load();
-        }
-    }
-}

+ 0 - 1
src/main/java/me/km/networking/DimensionSync.java

@@ -6,7 +6,6 @@ import java.util.function.Supplier;
 import me.km.world.WorldManager;
 import net.minecraft.network.PacketBuffer;
 import net.minecraftforge.fml.network.NetworkEvent;
-import org.apache.logging.log4j.LogManager;
 
 public class DimensionSync
 {

+ 2 - 2
src/main/java/me/km/networking/FunctionKey.java

@@ -1,7 +1,7 @@
 package me.km.networking;
 
 import java.util.function.Supplier;
-import me.km.snuviscript.ScriptEvents;
+import me.km.Server;
 import net.minecraft.network.PacketBuffer;
 import net.minecraftforge.fml.network.NetworkEvent;
 
@@ -33,7 +33,7 @@ public class FunctionKey
     {
         context.get().enqueueWork(() -> 
         {
-            ScriptEvents.onFunctionKey(context.get().getSender(), fk.key);
+            Server.scriptEvents.onFunctionKey(context.get().getSender(), fk.key);
         });
         context.get().setPacketHandled(true);
     }

+ 5 - 0
src/main/java/me/km/overrides/ModEntityPlayerMP.java

@@ -20,4 +20,9 @@ public class ModEntityPlayerMP extends ServerPlayerEntity
     {
         return new StringTextComponent("wusi");
     }
+    
+    public int getId()
+    {
+        return -1;
+    }
 }

+ 5 - 2
src/main/java/me/km/overrides/ModPlayerList.java

@@ -7,6 +7,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.UUID;
+import me.hammerle.snuviscript.code.ISnuviScheduler;
 import me.km.KajetansMod;
 import me.km.networking.ModPacketHandler;
 import me.km.utils.ReflectionUtils;
@@ -52,13 +53,15 @@ public class ModPlayerList extends DedicatedPlayerList
     private final DedicatedServer server;
     private final List<ServerPlayerEntity> players;
     private final Map<UUID, ServerPlayerEntity> uuidToPlayerMap;
+    private final ISnuviScheduler scheduler;
 
-    public ModPlayerList(DedicatedServer server)
+    public ModPlayerList(DedicatedServer server, ISnuviScheduler scheduler)
     {
         super(server);
         this.server = server;
         this.players = getPlayers();
         this.uuidToPlayerMap = ReflectionUtils.getFieldValue(Map.class, PlayerList.class, this, "field_177454_f");
+        this.scheduler = scheduler;
     }
 
     @Override
@@ -86,7 +89,7 @@ public class ModPlayerList extends DedicatedPlayerList
                 float yaw = p.rotationYaw;
                 float pitch = p.rotationPitch;
                 noSchedule = false;
-                KajetansMod.scheduler.scheduleTask(() -> 
+                scheduler.scheduleTask(() -> 
                 {
                     ServerWorld ws = server.getWorld(type);
                     if(ws != null)

+ 27 - 0
src/main/java/me/km/permissions/Command.java

@@ -0,0 +1,27 @@
+package me.km.permissions;
+
+import java.util.Collections;
+import net.minecraft.command.ICommandSource;
+import net.minecraft.util.text.StringTextComponent;
+
+public abstract class Command
+{
+    public abstract String getName();
+    
+    public Iterable<String> getAliases()
+    {
+        return Collections.EMPTY_LIST;
+    }
+    
+    public abstract void execute(ICommandSource cs, String[] arg);
+    
+    public void sendMessage(ICommandSource cs, String message)
+    {
+        cs.sendMessage(new StringTextComponent(message));
+    }
+    
+    public void sendMessage(ICommandSource cs, String message1, String message2)
+    {
+        cs.sendMessage(new StringTextComponent(String.format(" - %s %s", message1, message2)));
+    }
+}

+ 18 - 12
src/main/java/me/km/permissions/ModCommandManager.java

@@ -5,25 +5,31 @@ import java.util.HashMap;
 import java.util.HashSet;
 import me.km.KajetansMod;
 import me.km.snuviscript.ScriptEvents;
+import me.km.snuviscript.Scripts;
 import net.minecraft.command.CommandSource;
 import net.minecraft.command.Commands;
 import net.minecraft.command.ICommandSource;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.player.PlayerEntity;
-import me.km.module.ModuleCommand;
 
 public class ModCommandManager extends Commands
 {
     private final HashSet<String> vanilla = new HashSet<>();
-    private final HashMap<String, ModuleCommand> commands = new HashMap<>();
+    private final HashMap<String, Command> commands = new HashMap<>();
+    private final PermissionManager perms;
+    private final ScriptEvents events;
+    private final Scripts scripts;
 
-    public ModCommandManager(boolean isDedicatedServer)
+    public ModCommandManager(boolean isDedicatedServer, PermissionManager perms, ScriptEvents events, Scripts scripts)
     {
         super(isDedicatedServer);
         getDispatcher().getRoot().getChildren().forEach(c -> vanilla.add(c.getName()));
+        this.perms = perms;
+        this.events = events;
+        this.scripts = scripts;
     }
     
-    public void registerCommand(ModuleCommand command)
+    public void registerCommand(Command command)
     {
         commands.put(command.getName(), command);
         for(String alias : command.getAliases())
@@ -101,24 +107,24 @@ public class ModCommandManager extends Commands
     {
         String commandName = getCommandName(rawCommand);
         
-        ModuleCommand command = commands.get(commandName);
+        Command command = commands.get(commandName);
         if(command != null)
         {
-            if(KajetansMod.perms.hasPermission(cs, commandName))
+            if(perms.hasPermission(cs, commandName))
             {
                 command.execute(getSource(cs), getArguments(rawCommand));
                 return 1;
             }
-            ScriptEvents.onMissingPermission(getSource(cs), commandName);
+            events.onMissingPermission(getSource(cs), commandName);
             return 0;
         }
         
-        if(KajetansMod.scripts.isRegisteredScriptCommand(commandName))
+        if(scripts.isRegisteredScriptCommand(commandName))
         {
             Entity ent = cs.getEntity();
             if(ent != null && ent instanceof PlayerEntity)
             {
-                ScriptEvents.onCustomCommand((PlayerEntity) ent, commandName, getArguments(rawCommand));
+                events.onCustomCommand((PlayerEntity) ent, commandName, getArguments(rawCommand));
                 return 1;
             }
             return 0;
@@ -126,15 +132,15 @@ public class ModCommandManager extends Commands
         
         if(vanilla.contains(commandName))
         {
-            if(KajetansMod.perms.hasPermission(cs, commandName))
+            if(perms.hasPermission(cs, commandName))
             {
                 return super.handleCommand(cs, rawCommand);
             }
-            ScriptEvents.onMissingPermission(getSource(cs), commandName);
+            events.onMissingPermission(getSource(cs), commandName);
             return 0;
         }
         
-        ScriptEvents.onMissingCommand(getSource(cs), commandName);
+        events.onMissingCommand(getSource(cs), commandName);
         return 0;
     }
 

+ 7 - 11
src/main/java/me/km/permissions/PermissionManager.java

@@ -4,26 +4,22 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.UUID;
-import me.km.KajetansMod;
-import me.km.module.Module;
 import net.minecraft.command.CommandSource;
 import net.minecraft.entity.Entity;
-import net.minecraft.util.text.TextFormatting;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
 
 @OnlyIn(Dist.DEDICATED_SERVER)
-public class PermissionManager extends Module
+public class PermissionManager
 {
-    private final HashMap<UUID, ArrayList<Integer>> playerGroups;
-    private final ArrayList<HashSet<String>> stringGroupPerms;
+    private final HashMap<UUID, ArrayList<Integer>> playerGroups = new HashMap<>();
+    private final ArrayList<HashSet<String>> stringGroupPerms = new ArrayList<>();
     private final HashSet<String> worldedit = new HashSet<>();
+    private final boolean debug;
     
-    public PermissionManager(String prefix, TextFormatting color) 
+    public PermissionManager(boolean debug) 
     {
-        super(prefix, color);
-        playerGroups = new HashMap<>();
-        stringGroupPerms = new ArrayList<>();
+        this.debug = debug;
         addGroups();
     }
 
@@ -54,7 +50,7 @@ public class PermissionManager extends Module
     
     public boolean hasPermission(UUID uuid, String perm) 
     {
-        if(KajetansMod.debugMode)
+        if(debug)
         {
             return true;
         }

+ 17 - 21
src/main/java/me/km/playerbank/PlayerBank.java

@@ -4,23 +4,34 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.UUID;
-import me.km.KajetansMod;
+import me.km.databank.DataBank;
 
 public class PlayerBank implements IPlayerBank
 {  
-    public PlayerBank() 
+    private final PreparedStatement add;
+    private final PreparedStatement changeName;
+    private final PreparedStatement getId;
+    private final PreparedStatement getUUIDfromID;
+    private final PreparedStatement getNamefromID;
+    private final PreparedStatement getUUID;
+    
+    public PlayerBank(DataBank databank) 
     {
-        KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS players ("
+        databank.execute("CREATE TABLE IF NOT EXISTS players ("
                 + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
                 + "uuid_1 BIGINT NOT NULL, "
                 + "uuid_2 BIGINT NOT NULL, "
                 + "name VARCHAR(20) NOT NULL, "
                 + "UNIQUE INDEX (uuid_1, uuid_2));");
+        
+        add = databank.prepareStatement("INSERT INTO players (uuid_1,uuid_2,name) VALUES (?,?,?);");
+        changeName = databank.prepareStatement("UPDATE players SET name=? WHERE uuid_1=? AND uuid_2=?;");
+        getId = databank.prepareStatement("SELECT id FROM players WHERE uuid_1=? AND uuid_2=?;");
+        getUUIDfromID = databank.prepareStatement("SELECT uuid_1,uuid_2 FROM players WHERE id=?;");
+        getNamefromID = databank.prepareStatement("SELECT name FROM players WHERE id=?;");
+        getUUID = databank.prepareStatement("SELECT uuid_1,uuid_2 FROM players WHERE name=?;");
     }
     
-    private final PreparedStatement add = KajetansMod.databank.prepareStatement(
-            "INSERT INTO players (uuid_1,uuid_2,name) VALUES (?,?,?);");
-    
     @Override
     public boolean add(UUID uuid, String name)
     {
@@ -39,9 +50,6 @@ public class PlayerBank implements IPlayerBank
         }
     }
     
-    private final PreparedStatement changeName = KajetansMod.databank.prepareStatement(
-            "UPDATE players SET name=? WHERE uuid_1=? AND uuid_2=?;");
-    
     @Override
     public void changeName(UUID uuid, String name)
     {
@@ -58,9 +66,6 @@ public class PlayerBank implements IPlayerBank
         }
     }
     
-    private final PreparedStatement getId = KajetansMod.databank.prepareStatement(
-            "SELECT id FROM players WHERE uuid_1=? AND uuid_2=?;");
-    
     @Override
     public int getId(UUID uuid)
     {
@@ -88,9 +93,6 @@ public class PlayerBank implements IPlayerBank
         return -1;
     }
     
-    private final PreparedStatement getUUIDfromID = KajetansMod.databank.prepareStatement(
-            "SELECT uuid_1,uuid_2 FROM players WHERE id=?;");
-    
     @Override
     public UUID getUUIDfromID(int id)
     {
@@ -116,9 +118,6 @@ public class PlayerBank implements IPlayerBank
         return null;
     }
     
-    private final PreparedStatement getNamefromID = KajetansMod.databank.prepareStatement(
-            "SELECT name FROM players WHERE id=?;");
-    
     @Override
     public String getNamefromID(int id)
     {
@@ -144,9 +143,6 @@ public class PlayerBank implements IPlayerBank
         return "";
     }
     
-    private final PreparedStatement getUUID = KajetansMod.databank.prepareStatement(
-            "SELECT uuid_1,uuid_2 FROM players WHERE name=?;");
-    
     @Override
     public UUID getUUID(String name)
     {

+ 17 - 32
src/main/java/me/km/playerbank/PlayerManager.java

@@ -2,42 +2,33 @@ package me.km.playerbank;
 
 import java.util.HashMap;
 import java.util.UUID;
-import me.km.KajetansMod;
-import me.km.module.Module;
-import me.km.databank.DataBank;
+import me.hammerle.snuviscript.code.ISnuviLogger;
 import me.km.scoreboard.ScoreboardUtils;
 import me.km.snuviscript.ScriptEvents;
 import net.minecraft.entity.player.PlayerEntity;
-import net.minecraft.util.text.TextFormatting;
+import net.minecraft.server.MinecraftServer;
 import net.minecraftforge.eventbus.api.EventPriority;
 import net.minecraftforge.eventbus.api.SubscribeEvent;
 import net.minecraftforge.fml.common.gameevent.PlayerEvent;
 
-public class PlayerManager extends Module
+public class PlayerManager
 {
-    private final IPlayerBank bank;
     private final HashMap<UUID, Integer> playerIds = new HashMap<>();
     
     private final HashMap<UUID, HashMap<String, Object>> playerData = new HashMap<>();
     private final HashMap<UUID, HashMap<String, Integer>> playerTickData = new HashMap<>();
     
-    public PlayerManager(String prefix, TextFormatting color, DataBank c) 
-    {
-        super(prefix, color);
-        if(KajetansMod.databank.isDummyDatabank())
-        {
-            bank = new DummyPlayerBank();
-        }
-        else
-        {
-            bank = new PlayerBank();
-        }
-        registerEvent(this);
-    }
-
-    public IPlayerBank getDataBank() 
+    private final ISnuviLogger logger;
+    private final IPlayerBank bank;
+    private final MinecraftServer server;
+    private final ScriptEvents events;
+    
+    public PlayerManager(ISnuviLogger logger, IPlayerBank bank, MinecraftServer server, ScriptEvents events) 
     {
-        return bank;
+        this.logger = logger;
+        this.bank = bank;
+        this.server = server;
+        this.events = events;
     }
     
     public synchronized int getPlayerId(UUID uuid)
@@ -63,13 +54,13 @@ public class PlayerManager extends Module
         if(id == -1)
         {
             bank.add(p.getUniqueID(), p.getName().getUnformattedComponentText());
-            sendToConsole(p.getName() + " was added.");
+            logger.print(String.format("'%s' was added", p.getName()));
             
             id = bank.getId(p.getUniqueID());
             if(id == -1)
             {
                 // this should never happen
-                sendToConsole(p.getName() + " has no id.");
+                logger.print(String.format("'%s' has no id", p.getName()));
             }
             else
             {
@@ -97,7 +88,7 @@ public class PlayerManager extends Module
     {
         playerTickData.forEach((uuid, map) -> 
         {
-            PlayerEntity p = KajetansMod.server.getPlayerList().getPlayerByUUID(uuid);
+            PlayerEntity p = server.getPlayerList().getPlayerByUUID(uuid);
             if(p == null)
             {
                 return;
@@ -109,7 +100,7 @@ public class PlayerManager extends Module
                 {
                     if(time == 0)
                     {
-                        ScriptEvents.onPlayerDataTick(p, entry.getKey());
+                        events.onPlayerDataTick(p, entry.getKey());
                     }
                     return true;
                 }
@@ -166,10 +157,4 @@ public class PlayerManager extends Module
         playerTickData.remove(uuid);
         playerData.remove(uuid);
     }
-    
-    /*@SubscribeEvent
-    public void onPlayerConnection(PlayerConnectionEvent e)
-    {      
-        ModDimensions.sendNotificationsForDimensions(e.getEntityPlayer());
-    }*/
 }

+ 3 - 3
src/main/java/me/km/plots/DummyProtectionBank.java → src/main/java/me/km/plots/DummyProtection.java

@@ -1,11 +1,11 @@
 package me.km.plots;
 
 import java.util.ArrayList;
-import net.minecraft.entity.player.PlayerEntity;
+import me.km.overrides.ModEntityPlayerMP;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.world.IWorld;
 
-public class DummyProtectionBank implements IProtectionBank
+public class DummyProtection implements IProtection
 {
     private final ArrayList<Double> list = new ArrayList<>();
     
@@ -22,7 +22,7 @@ public class DummyProtectionBank implements IProtectionBank
     }
 
     @Override
-    public boolean canBuild(IWorld w, BlockPos pos, PlayerEntity p)
+    public boolean canBuild(IWorld w, BlockPos pos, ModEntityPlayerMP p)
     {
         return true;
     }

+ 3 - 3
src/main/java/me/km/plots/IProtectionBank.java → src/main/java/me/km/plots/IProtection.java

@@ -1,13 +1,13 @@
 package me.km.plots;
 
 import java.util.ArrayList;
-import net.minecraft.entity.player.PlayerEntity;
+import me.km.overrides.ModEntityPlayerMP;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.world.IWorld;
 
-public interface IProtectionBank
+public interface IProtection
 {
     public ArrayList<Double> getIds(int x, int y, int z, String worldName);
     public boolean canBuild(int x, int y, int z, String worldName, int playerId);
-    public boolean canBuild(IWorld w, BlockPos pos, PlayerEntity p);
+    public boolean canBuild(IWorld w, BlockPos pos, ModEntityPlayerMP p);
 }

+ 14 - 18
src/main/java/me/km/plots/ProtectionBank.java

@@ -4,17 +4,20 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
-import me.km.KajetansMod;
+import me.km.databank.DataBank;
+import me.km.overrides.ModEntityPlayerMP;
 import me.km.world.WorldManager;
-import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.world.IWorld;
 
-public class ProtectionBank implements IProtectionBank
+public class ProtectionBank implements IProtection
 {
-    public ProtectionBank() 
+    private final PreparedStatement getIds;
+    private final PreparedStatement canBuild;
+    
+    public ProtectionBank(DataBank databank) 
     {
-        KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS plots ("
+        databank.execute("CREATE TABLE IF NOT EXISTS plots ("
                     + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
                     + "x1 int(11) NOT NULL, "
                     + "y1 int(11) NOT NULL, "
@@ -29,22 +32,18 @@ public class ProtectionBank implements IProtectionBank
                     + "INDEX (z1, z2), "
                     + "INDEX (world_name));");
         
-        KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS plot_grant ("
+        databank.execute("CREATE TABLE IF NOT EXISTS plot_grant ("
                     + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
                     + "plot_id int(11) NOT NULL, "
                     + "player_id int(11) NOT NULL, "
                     + "INDEX plot_id (plot_id), "
                     + "UNIQUE KEY (plot_id, player_id), "
                     + "CONSTRAINT plot_grant_ibfk_1 FOREIGN KEY (plot_id) REFERENCES plots (id) ON DELETE CASCADE);");
+        
+        getIds = databank.prepareStatement("SELECT id FROM plots WHERE x1<=? AND x2>=? AND y1<=? AND y2>=? AND z1<=? AND z2>=? AND world_name=?;");
+        canBuild = databank.prepareStatement("SELECT id FROM plot_grant WHERE plot_id=? AND player_id=?;");
     }
     
-    //--------------------------------------------------------------------------
-    // Plot-Methoden
-    //--------------------------------------------------------------------------
-
-    private final PreparedStatement getIds = KajetansMod.databank.prepareStatement(
-            "SELECT id FROM plots WHERE x1<=? AND x2>=? AND y1<=? AND y2>=? AND z1<=? AND z2>=? AND world_name=?;");
-    
     @Override
     public ArrayList<Double> getIds(int x, int y, int z, String worldName)
     {
@@ -77,9 +76,6 @@ public class ProtectionBank implements IProtectionBank
         return list;
     }
     
-    private final PreparedStatement canBuild = KajetansMod.databank.prepareStatement(
-            "SELECT id FROM plot_grant WHERE plot_id=? AND player_id=?;");
-    
     @Override
     public boolean canBuild(int x, int y, int z, String worldName, int playerId)
     {
@@ -115,8 +111,8 @@ public class ProtectionBank implements IProtectionBank
     }
     
     @Override
-    public boolean canBuild(IWorld w, BlockPos pos, PlayerEntity p)
+    public boolean canBuild(IWorld w, BlockPos pos, ModEntityPlayerMP p)
     {
-        return canBuild(pos.getX(), pos.getY(), pos.getZ(), WorldManager.getName(w), KajetansMod.playerbank.getPlayerId(p.getUniqueID()));
+        return canBuild(pos.getX(), pos.getY(), pos.getZ(), WorldManager.getName(w), p.getId());
     }
 }

+ 33 - 25
src/main/java/me/km/plots/ProtectionEvents.java

@@ -1,13 +1,12 @@
 package me.km.plots;
 
-import me.km.KajetansMod;
+import me.km.overrides.ModEntityPlayerMP;
+import me.km.permissions.PermissionManager;
 import net.minecraft.block.Block;
 import net.minecraft.block.Blocks;
-import net.minecraft.entity.Entity;
 import net.minecraft.entity.EntityType;
 import net.minecraft.entity.item.ItemFrameEntity;
 import net.minecraft.entity.merchant.villager.VillagerEntity;
-import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.RayTraceResult;
 import net.minecraft.world.dimension.DimensionType;
@@ -25,15 +24,24 @@ public class ProtectionEvents
 {
     private final static String PLOT_BYPASS = "plot.bypass";
     
+    private final IProtection bank;
+    private final PermissionManager perms;
+    
+    public ProtectionEvents(IProtection bank, PermissionManager perms)
+    {
+        this.bank = bank;
+        this.perms = perms;
+    }
+    
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void onBlockPlace(BlockEvent.EntityPlaceEvent e)
     {
-        if(!(e.getEntity() instanceof PlayerEntity))
+        if(!(e.getEntity() instanceof ModEntityPlayerMP))
         {
             return;
         }
-        PlayerEntity p = (PlayerEntity) e.getEntity();
-        if(!KajetansMod.perms.hasPermission(p, PLOT_BYPASS) && !KajetansMod.plots.canBuild(e.getWorld(), e.getPos(), p))
+        ModEntityPlayerMP p = (ModEntityPlayerMP) e.getEntity();
+        if(!perms.hasPermission(p, PLOT_BYPASS) && !bank.canBuild(e.getWorld(), e.getPos(), p))
         {
             e.setCanceled(true);
         }        
@@ -42,8 +50,8 @@ public class ProtectionEvents
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void onBlockBreak(BlockEvent.BreakEvent e)
     {
-        PlayerEntity p = e.getPlayer();
-        if(!KajetansMod.perms.hasPermission(p, PLOT_BYPASS) && !KajetansMod.plots.canBuild(e.getWorld(), e.getPos(), p))
+        ModEntityPlayerMP p = (ModEntityPlayerMP) e.getPlayer();
+        if(!perms.hasPermission(p, PLOT_BYPASS) && !bank.canBuild(e.getWorld(), e.getPos(), p))
         {
             e.setCanceled(true);
         }  
@@ -66,14 +74,14 @@ public class ProtectionEvents
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void onBucketFill(FillBucketEvent e)
     {
-        PlayerEntity p = e.getEntityPlayer(); 
+        ModEntityPlayerMP p = (ModEntityPlayerMP) e.getEntityPlayer(); 
         RayTraceResult ray = e.getTarget();
-        if(ray == null || ray.hitInfo == null || ray.getType() != RayTraceResult.Type.BLOCK || KajetansMod.perms.hasPermission(p, PLOT_BYPASS))
+        if(ray == null || ray.hitInfo == null || ray.getType() != RayTraceResult.Type.BLOCK || perms.hasPermission(p, PLOT_BYPASS))
         {
             return;
         }
         BlockPos pos = new BlockPos(ray.getHitVec());
-        if(!KajetansMod.plots.canBuild(e.getWorld(), pos, p))
+        if(!bank.canBuild(e.getWorld(), pos, p))
         {
             e.setCanceled(true);
         }
@@ -102,7 +110,7 @@ public class ProtectionEvents
             EntityPlayer p = Utils.getDamager(e.getSource());
             if(p != null)
             {
-                if(KajetansMod.perms.hasPermission(p, Permissions.PLOT_BYPASS) || this.getProtectionBank().canBuild(w, pos, p))
+                if(perms.hasPermission(p, Permissions.PLOT_BYPASS) || this.getProtectionBank().canBuild(w, pos, p))
                 {
                     return;
                 }
@@ -119,7 +127,7 @@ public class ProtectionEvents
         {
             EntityPotion potion = (EntityPotion) e.getEntityThrowable();
             EntityLivingBase ent = potion.getThrower();
-            if(ent instanceof EntityPlayer && !KajetansMod.perms.hasPermission(ent, Permissions.PLOT_BYPASS) &&
+            if(ent instanceof EntityPlayer && !perms.hasPermission(ent, Permissions.PLOT_BYPASS) &&
                 !this.getProtectionBank().canBuild(potion.world, potion.getPosition(), (EntityPlayer) ent))
             {
                 e.setCanceled(true);
@@ -132,9 +140,9 @@ public class ProtectionEvents
     {
         if(e.getTarget() instanceof ItemFrameEntity)
         {
-            PlayerEntity p = e.getEntityPlayer();
-            if(!KajetansMod.perms.hasPermission(p, PLOT_BYPASS) && 
-            !KajetansMod.plots.canBuild(p.world, e.getTarget().getPosition(), p))
+            ModEntityPlayerMP p = (ModEntityPlayerMP) e.getEntityPlayer();
+            if(!perms.hasPermission(p, PLOT_BYPASS) && 
+            !bank.canBuild(p.world, e.getTarget().getPosition(), p))
             {
                 e.setCanceled(true);
             }
@@ -150,13 +158,13 @@ public class ProtectionEvents
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void onPlayerInteract(PlayerInteractEvent.LeftClickBlock e) 
     {
-        PlayerEntity p = e.getEntityPlayer();
-        if(KajetansMod.perms.hasPermission(p, PLOT_BYPASS))
+        ModEntityPlayerMP p = (ModEntityPlayerMP) e.getEntityPlayer();
+        if(perms.hasPermission(p, PLOT_BYPASS))
         {
             return;
         }  
         Block b = e.getWorld().getBlockState(e.getPos()).getBlock();
-        if(b == Blocks.FIRE && !KajetansMod.plots.canBuild(e.getWorld(), e.getPos(), p)) 
+        if(b == Blocks.FIRE && !bank.canBuild(e.getWorld(), e.getPos(), p)) 
         {
             e.setCanceled(true);
         }
@@ -165,13 +173,13 @@ public class ProtectionEvents
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void onPlayerInteract(PlayerInteractEvent.RightClickBlock e) 
     {
-        PlayerEntity p = e.getEntityPlayer();
-        if(KajetansMod.perms.hasPermission(p, PLOT_BYPASS))
+        ModEntityPlayerMP p = (ModEntityPlayerMP) e.getEntityPlayer();
+        if(perms.hasPermission(p, PLOT_BYPASS))
         {
             return;
         }    
         Block b = e.getWorld().getBlockState(e.getPos()).getBlock();
-        if(!KajetansMod.plots.canBuild(e.getWorld(), e.getPos(), p))
+        if(!bank.canBuild(e.getWorld(), e.getPos(), p))
         {
             e.setCanceled(true);
         }
@@ -180,9 +188,9 @@ public class ProtectionEvents
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void protectFromInteract(PlayerInteractEvent.EntityInteract e)
     {      
-        PlayerEntity p = e.getEntityPlayer();
-        if(!KajetansMod.perms.hasPermission(p, PLOT_BYPASS) && 
-            !KajetansMod.plots.canBuild(e.getWorld(), e.getTarget().getPosition(), p))
+        ModEntityPlayerMP p = (ModEntityPlayerMP) e.getEntityPlayer();
+        if(!perms.hasPermission(p, PLOT_BYPASS) && 
+            !bank.canBuild(e.getWorld(), e.getTarget().getPosition(), p))
         {
             e.setCanceled(true);
         }

+ 15 - 18
src/main/java/me/km/scheduler/SnuviScheduler.java

@@ -3,30 +3,27 @@ package me.km.scheduler;
 import java.util.ConcurrentModificationException;
 import java.util.HashMap;
 import java.util.LinkedList;
+import me.hammerle.snuviscript.code.ISnuviLogger;
 import me.hammerle.snuviscript.code.ISnuviScheduler;
-import me.km.module.Module;
-import net.minecraft.util.text.TextFormatting;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
 
 @OnlyIn(Dist.DEDICATED_SERVER)
-public class SnuviScheduler extends Module implements ISnuviScheduler
+public class SnuviScheduler implements ISnuviScheduler
 {
+    private final ISnuviLogger logger;
     private boolean checker;
     private int counter;
-    private final LinkedList<SnuviTask> addQueue;
-    private final LinkedList<Integer> removeQueue;
-    private final HashMap<Integer, SnuviTask> tasks;
+    private final LinkedList<SnuviTask> addQueue = new LinkedList<>();
+    private final LinkedList<Integer> removeQueue = new LinkedList<>();
+    private final HashMap<Integer, SnuviTask> tasks = new HashMap<>();
     private final AsyncWorker worker = new AsyncWorker();
     private boolean noAdding = false;
     
-    public SnuviScheduler(String prefix, TextFormatting color)
+    public SnuviScheduler(ISnuviLogger logger)
     {
-        super(prefix, color);
+        this.logger = logger;
         counter = 0;
-        tasks = new HashMap<>();
-        addQueue = new LinkedList<>();
-        removeQueue = new LinkedList<>();
         worker.start();
     }
     
@@ -34,12 +31,12 @@ public class SnuviScheduler extends Module implements ISnuviScheduler
     {
         noAdding = true;
         long endTime = System.nanoTime() + 60_000_000_000l;
-        System.out.println("Waiting until end of synchronized tasks ...");
+        logger.print("Waiting until end of synchronized tasks ...");
         while(!tasks.isEmpty() && System.nanoTime() < endTime)
         {
             tick();
         }
-        System.out.println("Waiting until end of asynchronous tasks ...");
+        logger.print("Waiting until end of asynchronous tasks ...");
         while(worker.hasWork() && System.nanoTime() < endTime)
         {
             try
@@ -50,7 +47,7 @@ public class SnuviScheduler extends Module implements ISnuviScheduler
             {
             }
         }
-        System.out.println("the scheduler is now stopped");
+        logger.print("the scheduler is now stopped");
     }
     
     public void cancelTask(int id)
@@ -62,7 +59,7 @@ public class SnuviScheduler extends Module implements ISnuviScheduler
     {
         if(noAdding)
         {
-            System.out.println("scheduling tasks is not allowed on server stop");
+            logger.print("scheduling tasks is not allowed on server stop");
             return -1;
         }
         synchronized(addQueue)
@@ -114,7 +111,7 @@ public class SnuviScheduler extends Module implements ISnuviScheduler
                 if(System.currentTimeMillis() - l > 25)
                 {
                     checker = true;
-                    this.sendWarningToConsole("Der Scheduler ist länger als 25 ms gelaufen.");
+                    logger.print("scheduler has run longer than 25 ms");
                     return false;
                 }
                 try
@@ -123,7 +120,7 @@ public class SnuviScheduler extends Module implements ISnuviScheduler
                 }
                 catch(Exception ex)
                 {
-                    this.sendWarningToConsole("Scheduler-Exception - Task wird entfernt.");
+                    logger.print("scheduler exception - task will be removed");
                     ex.printStackTrace();
                     return true;
                 }
@@ -131,7 +128,7 @@ public class SnuviScheduler extends Module implements ISnuviScheduler
         }
         catch(ConcurrentModificationException ex)
         {
-            this.sendWarningToConsole(ex.toString());
+            logger.print(ex);
         }
     }
     

+ 3 - 12
src/main/java/me/km/scheduler/SnuviTask.java

@@ -1,7 +1,5 @@
 package me.km.scheduler;
 
-import me.km.KajetansMod;
-
 public class SnuviTask
 {
     private final int id;
@@ -11,8 +9,8 @@ public class SnuviTask
     
     public SnuviTask(int id, Runnable r, long delay, long rtimer)
     {
-        this.rtimer = rtimer << 1; // server ticks seems to be 1/40 of a second
-        this.timer = delay << 1;
+        this.rtimer = rtimer;
+        this.timer = delay;
         this.r = r;
         this.id = id;
     }
@@ -37,14 +35,7 @@ public class SnuviTask
         timer -= 1;
         if(timer <= 0)
         {
-            try
-            {
-                r.run();
-            }
-            catch(Exception ex)
-            {
-                KajetansMod.scripts.getScriptManager().getLogger().print(ex.getLocalizedMessage(), ex, null, null, null, -1);
-            }
+            r.run();
             if(rtimer <= 0 || noRepeat)
             {
                 return true;

+ 0 - 20
src/main/java/me/km/scheduler/TaskTicker.java

@@ -1,20 +0,0 @@
-package me.km.scheduler;
-
-import me.km.KajetansMod;
-import me.km.module.Module;
-import me.km.module.ModuleListener;
-import net.minecraftforge.eventbus.api.SubscribeEvent;
-import net.minecraftforge.fml.common.gameevent.TickEvent;
-
-public class TaskTicker implements ModuleListener
-{    
-    public TaskTicker(Module m) 
-    {
-    }
-    
-    @SubscribeEvent
-    public void tickServer(TickEvent.ServerTickEvent e) 
-    {
-        KajetansMod.scheduler.tick();
-    }
-}

+ 5 - 5
src/main/java/me/km/scoreboard/PlayerScoreboard.java

@@ -3,7 +3,6 @@ package me.km.scoreboard;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.UUID;
-import me.km.KajetansMod;
 import net.minecraft.entity.player.ServerPlayerEntity;
 import net.minecraft.network.play.server.SDisplayObjectivePacket;
 import net.minecraft.network.play.server.SScoreboardObjectivePacket;
@@ -13,6 +12,7 @@ import net.minecraft.scoreboard.ScoreCriteria.RenderType;
 import net.minecraft.scoreboard.ScoreObjective;
 import net.minecraft.scoreboard.Scoreboard;
 import net.minecraft.scoreboard.ServerScoreboard.Action;
+import net.minecraft.server.MinecraftServer;
 import net.minecraft.util.text.StringTextComponent;
 
 public class PlayerScoreboard 
@@ -59,20 +59,20 @@ public class PlayerScoreboard
         }
     }
 
-    public void clear()
+    public void clear(MinecraftServer server)
     {
         elements.keySet().forEach(i -> toRemove.add(i));
-        update();
+        update(server);
     }
 
-    public boolean update()
+    public boolean update(MinecraftServer server)
     {         
         if(!changeNeeded)
         {
             return false;
         }
 
-        ServerPlayerEntity p = KajetansMod.server.getPlayerList().getPlayerByUUID(uuid);
+        ServerPlayerEntity p = server.getPlayerList().getPlayerByUUID(uuid);
 
         if(p == null)
         {

+ 3 - 2
src/main/java/me/km/scoreboard/ScoreboardUtils.java

@@ -3,6 +3,7 @@ package me.km.scoreboard;
 import java.util.HashMap;
 import java.util.UUID;
 import net.minecraft.entity.player.ServerPlayerEntity;
+import net.minecraft.server.MinecraftServer;
 
 public class ScoreboardUtils
 {
@@ -13,9 +14,9 @@ public class ScoreboardUtils
         BOARDS.remove(uuid);
     }
     
-    public static void update()
+    public static void update(MinecraftServer server)
     {
-        BOARDS.values().removeIf(ps -> ps.update());
+        BOARDS.values().removeIf(ps -> ps.update(server));
     }
     
     public static PlayerScoreboard get(ServerPlayerEntity p)

+ 11 - 11
src/main/java/me/km/snuviscript/CommandGiveUp.java

@@ -2,19 +2,19 @@ package me.km.snuviscript;
 
 import java.util.ArrayList;
 import me.hammerle.snuviscript.code.Script;
-import me.km.KajetansMod;
-import me.km.module.ModuleCommand;
-import me.km.module.Module;
+import me.km.permissions.Command;
 import net.minecraft.command.ICommandSource;
 import net.minecraft.entity.player.ServerPlayerEntity;
 
-public class CommandGiveUp extends ModuleCommand
+public class CommandGiveUp extends Command
 {
-    public CommandGiveUp(Module m) 
+    private final Scripts scripts;
+    
+    public CommandGiveUp(Scripts scripts)
     {
-        super(m);
+        this.scripts = scripts;
     }
-
+    
     @Override
     public String getName()
     {
@@ -38,17 +38,17 @@ public class CommandGiveUp extends ModuleCommand
     {
         if(!(cs instanceof ServerPlayerEntity))
         {
-            this.getModule().send(cs, "This command is only for players.");
+            sendMessage(cs, "This command is only for players.");
             return;
         }
         ServerPlayerEntity p = (ServerPlayerEntity) cs;
-        Script script = KajetansMod.scripts.getScript(p);
+        Script script = scripts.getScript(p);
         if(script == null)
         {
-            this.getModule().send(cs, "Du hast kein Script an dich gebunden.");
+            sendMessage(cs, "Du hast kein Script an dich gebunden.");
             return;
         }
-        KajetansMod.scripts.getScriptManager().callEvent("player_giveup", script, (sc) -> ScriptVars.setPlayerVars(sc, p), null);
+        scripts.getScriptManager().callEvent("player_giveup", script, (sc) -> ScriptVars.setPlayerVars(sc, p), null);
     }
 }
 

+ 42 - 40
src/main/java/me/km/snuviscript/CommandScript.java

@@ -2,23 +2,26 @@ package me.km.snuviscript;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import me.km.KajetansMod;
-import me.km.module.Module;
 import java.util.Collection;
 import me.hammerle.snuviscript.code.Script;
 import me.hammerle.snuviscript.inputprovider.Variable;
-import me.km.module.ModuleCommand;
+import me.km.permissions.Command;
 import me.km.utils.Utils;
 import me.km.exception.PlayerNotFoundException;
 import net.minecraft.command.ICommandSource;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.entity.player.ServerPlayerEntity;
+import net.minecraft.server.MinecraftServer;
 
-public class CommandScript extends ModuleCommand
+public class CommandScript extends Command
 {
-    public CommandScript(Module m) 
+    private final Scripts scripts;
+    private final MinecraftServer server;
+    
+    public CommandScript(Scripts scripts, MinecraftServer server)
     {
-        super(m);
+        this.scripts = scripts;
+        this.server = server;
     }
 
     @Override
@@ -40,7 +43,6 @@ public class CommandScript extends ModuleCommand
     @Override
     public void execute(ICommandSource cs, String[] arg) 
     {
-        Module m = this.getModule();
         if(arg.length >= 1)
         {
             switch(arg[0].toLowerCase())
@@ -51,7 +53,7 @@ public class CommandScript extends ModuleCommand
                     if(arg.length >= 2)
                     {
                         String[] pars = Arrays.copyOfRange(arg, 1, arg.length);
-                        KajetansMod.scripts.startScript(pars);
+                        scripts.startScript(pars);
                         return;
                     }
                     break;
@@ -62,13 +64,13 @@ public class CommandScript extends ModuleCommand
                     {
                         try
                         {
-                            PlayerEntity p = Utils.getPlayerByName(arg[1]);
+                            PlayerEntity p = Utils.getPlayerByName(server, arg[1]);
                             String[] pars = Arrays.copyOfRange(arg, 2, arg.length);
-                            KajetansMod.scripts.startPlayerScript(p, pars);
+                            scripts.startPlayerScript(p, pars);
                         }
                         catch(PlayerNotFoundException ex)
                         {
-                            m.send(cs, "Cannot find player '" + arg[1] + "'.");
+                            sendMessage(cs, "cannot find player '" + arg[1] + "'.");
                         }
                         return;
                     }
@@ -81,7 +83,7 @@ public class CommandScript extends ModuleCommand
                     {
                         try
                         {
-                            Script sc = KajetansMod.scripts.getScriptManager().getScript(Integer.parseInt(arg[1]));
+                            Script sc = scripts.getScriptManager().getScript(Integer.parseInt(arg[1]));
                             if(sc == null)
                             {
                                 throw new NumberFormatException();
@@ -89,16 +91,16 @@ public class CommandScript extends ModuleCommand
                             Variable var = sc.getVar(arg[2]);
                             if(var != null)
                             {
-                                m.send(cs, arg[2] + " = " + var.get(sc));
+                                sendMessage(cs, arg[2] + " = " + var.get(sc));
                             }
                             else
                             {
-                                m.send(cs, arg[2] + " = null");
+                                sendMessage(cs, arg[2] + " = null");
                             }
                         }
                         catch(NumberFormatException ex)
                         {
-                            m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
+                            sendMessage(cs, String.format("'%s' is not a valid id", arg[1]));
                         }
                         return;
                     }
@@ -106,20 +108,20 @@ public class CommandScript extends ModuleCommand
                 }
                 case "see":
                 {
-                    Collection<Script> scripts = KajetansMod.scripts.getScriptManager().getScripts();
-                    if(scripts.isEmpty())
+                    Collection<Script> scs = scripts.getScriptManager().getScripts();
+                    if(scs.isEmpty())
                     {
-                        m.send(cs, "Momentan sind keine Scripts aktiv.");
+                        sendMessage(cs, "no scripts are active");
                         return;
                     }
-                    m.send(cs, "Folgende Scripts sind aktiv:");
-                    scripts.forEach(sc ->
+                    sendMessage(cs, "following scripts are active:");
+                    scs.forEach(sc ->
                     {
-                        m.sendHelpListElement(cs, sc.getName(), "(" + sc.getId() + ")");
-                        KajetansMod.scripts.getPlayerList(sc.getId()).forEach(uuid -> 
+                        sendMessage(cs, String.format(" - %s (%d)", sc.getName(), sc.getId()));
+                        scripts.getPlayerList(sc.getId()).forEach(uuid -> 
                         {
-                            ServerPlayerEntity p = KajetansMod.server.getPlayerList().getPlayerByUUID(uuid);
-                            m.sendListElement(cs, p == null ? "null" : p.getName().getFormattedText());
+                            ServerPlayerEntity p = server.getPlayerList().getPlayerByUUID(uuid);
+                            sendMessage(cs, String.format("  - %s", p == null ? "null" : p.getName().getFormattedText()));
                         });
                     });
                     return;
@@ -132,36 +134,36 @@ public class CommandScript extends ModuleCommand
                         {
                             if(arg[1].equals("all"))
                             {
-                                KajetansMod.scripts.clearPlayerRegistry();
-                                if(KajetansMod.scripts.getScriptManager().removeScriptsSafe())
+                                scripts.clearPlayerRegistry();
+                                if(scripts.getScriptManager().removeScriptsSafe())
                                 {
-                                    m.send(cs, "Alle aktiven Scripts wurden beendet.");
+                                    sendMessage(cs, "all active scripts were terminated");
                                 }
                                 else
                                 {
-                                    m.send(cs, "Iterating is not allowed currently");
+                                    sendMessage(cs, "iterating is not allowed currently");
                                 }
                                 return;
                             }
                             int id = Integer.parseInt(arg[1]);
-                            Script qd = KajetansMod.scripts.getScriptManager().getScript(id);
+                            Script qd = scripts.getScriptManager().getScript(id);
                             if(qd != null)
                             {
-                                KajetansMod.scripts.getScriptManager().removeScriptSafe(qd);
-                                m.send(cs, "Das Script '" + qd.getName() + "' wurde beendet.");
+                                scripts.getScriptManager().removeScriptSafe(qd);
+                                sendMessage(cs, String.format("script '%s' was terminated", qd.getName()));
                             }
                             else
                             {
-                                m.send(cs, String.format("Script-ID '%d' is not valid", id));
+                                sendMessage(cs, String.format("script id '%d' is not valid", id));
                             }
                         }
                         catch(NumberFormatException ex)
                         {
-                            m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
+                            sendMessage(cs, String.format("'%s' is not a valid id", arg[1]));
                         } 
                         catch(Exception ex)
                         {
-                            m.send(cs, "Beim Beenden eines Scripts trat ein Fehler auf.");
+                            sendMessage(cs, "exception on script termination");
                             ex.printStackTrace();
                         } 
                         return;
@@ -171,12 +173,12 @@ public class CommandScript extends ModuleCommand
             }
         }
         
-        m.send(cs, "/script ...");
-        m.sendHelpListElement(cs, "start <scripts...>", "Startet ein Script");
-        m.sendHelpListElement(cs, "startp <player> <scripts...>", "Startet ein Script");
-        m.sendHelpListElement(cs, "variable <id> <name>", "Zeigt den Wert einer Variable");       
-        m.sendHelpListElement(cs, "see", "Gibt alle aktiven Scripts aus");
-        m.sendHelpListElement(cs, "term <id/all>", "Entfernt Scripts aus dem RAM");
+        sendMessage(cs, "/script ...");
+        sendMessage(cs, "start <scripts...>", "Startet ein Script");
+        sendMessage(cs, "startp <player> <scripts...>", "Startet ein Script");
+        sendMessage(cs, "variable <id> <name>", "Zeigt den Wert einer Variable");       
+        sendMessage(cs, "see", "Gibt alle aktiven Scripts aus");
+        sendMessage(cs, "term <id/all>", "Entfernt Scripts aus dem RAM");
     }
 }
 

+ 4 - 6
src/main/java/me/km/snuviscript/DummyScriptBank.java

@@ -1,27 +1,25 @@
 package me.km.snuviscript;
 
-import java.util.UUID;
-
 public class DummyScriptBank implements IScriptBank
 {
     @Override
-    public void setVar(String value, String var, UUID uuid)
+    public void setVar(String value, String var, int playerId)
     {
     }
 
     @Override
-    public void deleteVar(String var, UUID uuid)
+    public void deleteVar(String var, int playerId)
     {
     }
 
     @Override
-    public Object getVar(String var, UUID uuid, Object error)
+    public Object getVar(String var, int playerId, Object error)
     {
         return error;
     }
 
     @Override
-    public Object getVar(String var, UUID uuid)
+    public Object getVar(String var, int playerId)
     {
         return null;
     }

+ 4 - 6
src/main/java/me/km/snuviscript/IScriptBank.java

@@ -1,13 +1,11 @@
 package me.km.snuviscript;
 
-import java.util.UUID;
-
 public interface IScriptBank
 {
-    public void setVar(String value, String var, UUID uuid);
-    public void deleteVar(String var, UUID uuid);
-    public Object getVar(String var, UUID uuid, Object error);
-    public Object getVar(String var, UUID uuid);    
+    public void setVar(String value, String var, int playerId);
+    public void deleteVar(String var, int playerId);
+    public Object getVar(String var, int playerId, Object error);
+    public Object getVar(String var, int playerId);    
     public void addMapElement(String map, String key, String value);
     public void removeMapElement(String map, String key);
     public void removeMap(String map);   

+ 147 - 112
src/main/java/me/km/snuviscript/MinecraftFunctions.java

@@ -16,10 +16,12 @@ import me.hammerle.snuviscript.code.Script;
 import me.hammerle.snuviscript.code.ScriptManager;
 import me.hammerle.snuviscript.code.SnuviUtils;
 import me.hammerle.snuviscript.inputprovider.InputProvider;
+import me.km.Server;
+import me.km.blockprotections.IBlockProtection;
+import me.km.databank.DataBank;
 import me.km.utils.Location;
 import me.km.utils.TitleUtils;
 import me.km.utils.Utils;
-import me.km.chatchannel.ChatChannel;
 import me.km.world.WorldManager;
 import me.km.effects.EffectUtils;
 import me.km.entities.EntityHuman;
@@ -47,6 +49,12 @@ import me.km.exception.IllegalStringException;
 import me.km.exception.PlayerNotFoundException;
 import me.km.inventory.CustomContainer;
 import me.km.networking.ModPacketHandler;
+import me.km.overrides.ModEntityPlayerMP;
+import me.km.permissions.PermissionManager;
+import me.km.playerbank.IPlayerBank;
+import me.km.playerbank.PlayerManager;
+import me.km.plots.IProtection;
+import me.km.scheduler.SnuviScheduler;
 import me.km.scoreboard.ScoreboardUtils;
 import me.km.utils.Mapper;
 import net.minecraft.block.BlockState;
@@ -77,6 +85,7 @@ import net.minecraft.network.play.client.CClientStatusPacket;
 import net.minecraft.network.play.server.SSpawnPositionPacket;
 import net.minecraft.potion.Effect;
 import net.minecraft.potion.EffectInstance;
+import net.minecraft.server.MinecraftServer;
 import net.minecraft.server.management.PlayerList;
 import net.minecraft.server.management.ProfileBanEntry;
 import net.minecraft.state.properties.ChestType;
@@ -104,25 +113,29 @@ public class MinecraftFunctions
     public static int inventoryIds = 0;
 
     @SuppressWarnings("")
-    public static void registerFunctions(ScriptManager sm)
+    public static void registerFunctions(ScriptManager sm, Scripts scripts, 
+            PermissionManager perms, SnuviScheduler scheduler, MinecraftServer server, 
+            IPlayerBank playerBank, PlayerManager pManager, CustomEventCaller cec,
+            IScriptBank scriptBank, DataBank dataBank, IBlockProtection blockProtection,
+            IProtection protection)
     {
         // ---------------------------------------------------------------------
         // Command-library  
         // ---------------------------------------------------------------------
         sm.registerFunction("command.add", (sc, in) -> 
         {
-            KajetansMod.scripts.registerScriptCommand(in[0].getString(sc));
+            scripts.registerScriptCommand(in[0].getString(sc));
             return Void.TYPE;
         }); 
         sm.registerFunction("command.remove", (sc, in) -> 
         {
-            KajetansMod.scripts.unregisterScriptCommand(in[0].getString(sc));
+            scripts.unregisterScriptCommand(in[0].getString(sc));
             return Void.TYPE;
         }); 
-        sm.registerFunction("command.exists", (sc, in) -> KajetansMod.scripts.isRegisteredScriptCommand(in[0].getString(sc)));
+        sm.registerFunction("command.exists", (sc, in) -> scripts.isRegisteredScriptCommand(in[0].getString(sc)));
         sm.registerFunction("command.clear", (sc, in) -> 
         {
-            KajetansMod.scripts.clearScriptCommands();
+            scripts.clearScriptCommands();
             return Void.TYPE;
         }); 
         
@@ -131,21 +144,21 @@ public class MinecraftFunctions
         // ---------------------------------------------------------------------
         sm.registerFunction("perm.clear", (sc, in) -> 
         {
-            KajetansMod.perms.clear();
+            perms.clear();
             return Void.TYPE;
         }); 
         sm.registerFunction("perm.registergroup", (sc, in) -> 
         {
-            KajetansMod.perms.registerGroupPermission(in[0].getInt(sc), in[1].getString(sc));
+            perms.registerGroupPermission(in[0].getInt(sc), in[1].getString(sc));
             return Void.TYPE;
         }); 
         sm.registerFunction("perm.registerplayer", (sc, in) -> 
         {
-            KajetansMod.perms.registerPlayerGroup(getUUID(in[0].get(sc)), in[1].getInt(sc));
+            perms.registerPlayerGroup(getUUID(in[0].get(sc)), in[1].getInt(sc));
             return Void.TYPE;
         }); 
-        sm.registerFunction("perm.unregisterplayer", (sc, in) -> KajetansMod.perms.unregisterPlayer(getUUID(in[0].get(sc)), in[1].getInt(sc))); 
-        sm.registerFunction("perm.has", (sc, in) -> KajetansMod.perms.hasPermission((Entity) in[0].get(sc), in[1].getString(sc))); 
+        sm.registerFunction("perm.unregisterplayer", (sc, in) -> perms.unregisterPlayer(getUUID(in[0].get(sc)), in[1].getInt(sc))); 
+        sm.registerFunction("perm.has", (sc, in) -> perms.hasPermission((Entity) in[0].get(sc), in[1].getString(sc))); 
         
         // ---------------------------------------------------------------------
         // Title-library  
@@ -196,7 +209,7 @@ public class MinecraftFunctions
         sm.registerFunction("player.respawn", (sc, in) -> 
         {
             final ServerPlayerEntity p = ((ServerPlayerEntity) in[0].get(sc));
-            KajetansMod.scheduler.scheduleTask(() ->
+            scheduler.scheduleTask(() ->
             {
                 try
                 {
@@ -234,7 +247,7 @@ public class MinecraftFunctions
         });
         sm.registerFunction("player.speak", (sc, in) -> 
         { 
-            sendMessageToGroup(in[0].get(sc), sc, concat(sc, 2, "§7[§r" + in[1].getString(sc) + "§7]§r ", in)); 
+            sendMessageToGroup(server, scripts, perms, in[0].get(sc), sc, concat(sc, 2, "§7[§r" + in[1].getString(sc) + "§7]§r ", in)); 
             return Void.TYPE; 
         });
         sm.registerFunction("player.setcompass", (sc, in) -> 
@@ -262,7 +275,7 @@ public class MinecraftFunctions
             {
                 return ((PlayerEntity) o).getName();
             }
-            return KajetansMod.server.getPlayerProfileCache().getProfileByUUID(getUUID(o.toString())).getName();
+            return server.getPlayerProfileCache().getProfileByUUID(getUUID(o.toString())).getName();
         });
         sm.registerFunction("player.getuuid", (sc, in) -> 
         { 
@@ -271,15 +284,15 @@ public class MinecraftFunctions
             {
                 return ((PlayerEntity) o).getUniqueID();
             }
-            return KajetansMod.playerbank.getDataBank().getUUID(o.toString());
+            return playerBank.getUUID(o.toString());
         });
-        sm.registerFunction("player.getid", (sc, in) -> (double) KajetansMod.playerbank.getPlayerId(getUUID(in[0].get(sc))));
+        sm.registerFunction("player.getid", (sc, in) -> (double) pManager.getPlayerId(getUUID(in[0].get(sc))));
         sm.registerFunction("player.get", (sc, in) -> 
         { 
-            return KajetansMod.server.getPlayerList().getPlayerByUUID(getUUID(in[0].get(sc)));
+            return server.getPlayerList().getPlayerByUUID(getUUID(in[0].get(sc)));
         });
-        sm.registerFunction("player.getuuidfromid", (sc, in) -> KajetansMod.playerbank.getDataBank().getUUIDfromID(in[0].getInt(sc)));
-        sm.registerFunction("player.getnamefromid", (sc, in) -> KajetansMod.playerbank.getDataBank().getNamefromID(in[0].getInt(sc)));
+        sm.registerFunction("player.getuuidfromid", (sc, in) -> playerBank.getUUIDfromID(in[0].getInt(sc)));
+        sm.registerFunction("player.getnamefromid", (sc, in) -> playerBank.getNamefromID(in[0].getInt(sc)));
         sm.registerFunction("player.getip", (sc, in) -> ((ServerPlayerEntity) in[0].get(sc)).connection.netManager.getRemoteAddress().toString());
         sm.registerFunction("player.iscreative", (sc, in) -> ((PlayerEntity) in[0].get(sc)).isCreative());
         sm.registerFunction("player.isspectator", (sc, in) -> ((PlayerEntity) in[0].get(sc)).isSpectator());
@@ -356,12 +369,12 @@ public class MinecraftFunctions
         });
                 
         sm.registerFunction("player.gettargetentity", (sc, in) -> Utils.getTargetedEntity((PlayerEntity) in[0].get(sc), in[1].getDouble(sc), getClass(in[2].getString(sc))));
-        sm.registerFunction("player.hasscript", (sc, in) -> KajetansMod.scripts.isRegistered((PlayerEntity) in[0].get(sc)));
+        sm.registerFunction("player.hasscript", (sc, in) -> scripts.isRegistered((PlayerEntity) in[0].get(sc)));
         sm.registerAlias("player.hasscript", "player.hasquest");
         sm.registerFunction("player.action", (sc, in) -> 
         {     
             StringTextComponent text = new StringTextComponent(SnuviUtils.connect(sc, in, 1));
-            doForGroup(in[0].get(sc), sc, p -> ((ServerPlayerEntity) p).sendStatusMessage(text, true));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ((ServerPlayerEntity) p).sendStatusMessage(text, true));
             return Void.TYPE; 
         }); 
         sm.registerFunction("player.disconnect", (sc, in) -> 
@@ -369,7 +382,7 @@ public class MinecraftFunctions
             ((ServerPlayerEntity) in[0].get(sc)).connection.disconnect(new StringTextComponent(in[1].getString(sc)));
             return Void.TYPE; 
         }); 
-        sm.registerFunction("player.kick", (sc, in) -> KajetansMod.scripts.unregisterPlayer(sc, (PlayerEntity) in[0].get(sc)));  
+        sm.registerFunction("player.kick", (sc, in) -> scripts.unregisterPlayer(sc, (PlayerEntity) in[0].get(sc)));  
         sm.registerFunction("player.playsound", (sc, in) -> 
         { 
             EffectUtils.playSound((ServerPlayerEntity) in[0].get(sc), Mapper.getSound(in[1].getString(sc)), SoundCategory.MASTER);
@@ -460,8 +473,8 @@ public class MinecraftFunctions
         // ---------------------------------------------------------------------    
         // Players-library
         // --------------------------------------------------------------------- 
-        sm.registerFunction("players.getamount", (sc, in) -> (double) KajetansMod.server.getCurrentPlayerCount());
-        sm.registerFunction("players.tolist", (sc, in) -> new ArrayList(KajetansMod.server.getPlayerList().getPlayers()));    
+        sm.registerFunction("players.getamount", (sc, in) -> (double) server.getCurrentPlayerCount());
+        sm.registerFunction("players.tolist", (sc, in) -> new ArrayList(server.getPlayerList().getPlayers()));    
         sm.registerFunction("players.toworldlist", (sc, in) -> new ArrayList(((World) in[0].get(sc)).getPlayers()));
         sm.registerFunction("players.near", (sc, in) -> 
         {     
@@ -531,7 +544,7 @@ public class MinecraftFunctions
         });
         sm.registerFunction("world.unregister", (sc, in) -> 
         {
-            boolean b = WorldManager.unregister(in[0].getString(sc));
+            boolean b = WorldManager.unregister(server, in[0].getString(sc));
             if(b)
             {
                 ModPacketHandler.syncDimensions();
@@ -540,7 +553,7 @@ public class MinecraftFunctions
         });
         sm.registerFunction("world.get", (sc, in) -> 
         {     
-            return WorldManager.get(in[0].getString(sc));
+            return WorldManager.get(server, in[0].getString(sc));
         });
         sm.registerFunction("world.getname", (sc, in) -> 
         {     
@@ -554,7 +567,7 @@ public class MinecraftFunctions
         });  
         sm.registerFunction("world.setgamerule", (sc, in) -> 
         {                    
-            ((World) in[0].get(sc)).getGameRules().setOrCreateGameRule(in[1].getString(sc), in[2].getString(sc), KajetansMod.server);
+            ((World) in[0].get(sc)).getGameRules().setOrCreateGameRule(in[1].getString(sc), in[2].getString(sc), server);
             return Void.TYPE;
         });  
         sm.registerFunction("world.getgamerule", (sc, in) -> 
@@ -575,7 +588,7 @@ public class MinecraftFunctions
         sm.registerFunction("world.getall", (sc, in) -> 
         {    
             ArrayList<World> worlds = new ArrayList<>();
-            for(World w : KajetansMod.server.getWorlds())
+            for(World w : server.getWorlds())
             {
                 worlds.add(w);
             }
@@ -1037,11 +1050,11 @@ public class MinecraftFunctions
         // ---------------------------------------------------------------------    
         // Event-library 
         // ---------------------------------------------------------------------  
-        sm.registerFunction("event.addmovedata", (sc, in) -> (double) CustomEventCaller.registerMoveData(new PlayerMoveData(
+        sm.registerFunction("event.addmovedata", (sc, in) -> (double) cec.registerMoveData(new PlayerMoveData(
                 sc, (Location) in[0].get(sc), (Location) in[1].get(sc), in[2].getInt(sc), in[3].getInt(sc))));
         sm.registerFunction("event.removemovedata", (sc, in) -> 
         { 
-            CustomEventCaller.removeMoveData(in[0].getInt(sc));
+            cec.removeMoveData(in[0].getInt(sc));
             return Void.TYPE; 
         });
         
@@ -1444,9 +1457,9 @@ public class MinecraftFunctions
         sm.registerFunction("gmap.removeall", (sc, in) -> 
         {    
             final String map = in[0].getString(sc);
-            KajetansMod.scheduler.getWorker().add(() -> 
+            scheduler.getWorker().add(() -> 
             {
-                KajetansMod.scripts.getDatabank().removeMap(map); 
+                scriptBank.removeMap(map); 
             });
             return Void.TYPE; 
         });
@@ -1455,9 +1468,9 @@ public class MinecraftFunctions
             final String map = in[0].getString(sc);
             final String key = in[1].getString(sc);
             final String value = in[2].getString(sc);
-            KajetansMod.scheduler.getWorker().add(() -> 
+            scheduler.getWorker().add(() -> 
             {
-                KajetansMod.scripts.getDatabank().addMapElement(map, key, value); 
+                scriptBank.addMapElement(map, key, value); 
             });
             return Void.TYPE; 
         });
@@ -1465,16 +1478,16 @@ public class MinecraftFunctions
         {    
             final String map = in[0].getString(sc);
             final String key = in[1].getString(sc);
-            KajetansMod.scheduler.getWorker().add(() -> 
+            scheduler.getWorker().add(() -> 
             {
-                KajetansMod.scripts.getDatabank().removeMapElement(map, key); 
+                scriptBank.removeMapElement(map, key); 
             });
             return Void.TYPE; 
         });
-        sm.registerFunction("gmap.get", (sc, in) -> KajetansMod.scripts.getDatabank().getMapValue(in[0].getString(sc), in[1].getString(sc)));
+        sm.registerFunction("gmap.get", (sc, in) -> scriptBank.getMapValue(in[0].getString(sc), in[1].getString(sc)));
         sm.registerFunction("gmap.getordefault", (sc, in) -> 
         {
-            Object o = KajetansMod.scripts.getDatabank().getMapValue(in[0].getString(sc), in[1].getString(sc));
+            Object o = scriptBank.getMapValue(in[0].getString(sc), in[1].getString(sc));
             if(o == null)
             {
                 return in[2].get(sc);
@@ -1491,17 +1504,17 @@ public class MinecraftFunctions
             {
                 final String map = in[0].getString(sc);
                 final String key = in[1].getString(sc);
-                KajetansMod.scheduler.getWorker().add(() -> 
+                scheduler.getWorker().add(() -> 
                 {
-                    KajetansMod.scripts.getDatabank().removeDualMapElement(map, key); 
+                    scriptBank.removeDualMapElement(map, key); 
                 });
             }
             else
             {
                 final String map = in[0].getString(sc);
-                KajetansMod.scheduler.getWorker().add(() -> 
+                scheduler.getWorker().add(() -> 
                 {
-                    KajetansMod.scripts.getDatabank().removeDualMap(map); 
+                    scriptBank.removeDualMap(map); 
                 });
             }
             return Void.TYPE; 
@@ -1512,9 +1525,9 @@ public class MinecraftFunctions
             final String key1 = in[1].getString(sc);
             final String key2 = in[2].getString(sc);
             final String value = in[3].getString(sc);
-            KajetansMod.scheduler.getWorker().add(() -> 
+            scheduler.getWorker().add(() -> 
             {
-                KajetansMod.scripts.getDatabank().addDualMapElement(map, key1, key2, value);  
+                scriptBank.addDualMapElement(map, key1, key2, value);  
             });
             return Void.TYPE; 
         });
@@ -1523,19 +1536,19 @@ public class MinecraftFunctions
             final String map = in[0].getString(sc);
             final String key1 = in[1].getString(sc);
             final String key2 = in[2].getString(sc);
-            KajetansMod.scheduler.getWorker().add(() -> 
+            scheduler.getWorker().add(() -> 
             {
-                KajetansMod.scripts.getDatabank().removeDualMapElement(map, key1, key2); 
+                scriptBank.removeDualMapElement(map, key1, key2); 
             });
             return Void.TYPE; 
         });
         sm.registerFunction("gdmap.get", (sc, in) -> 
         {    
-            return KajetansMod.scripts.getDatabank().getDualMapValue(in[0].getString(sc), in[1].getString(sc), in[2].getString(sc)); 
+            return scriptBank.getDualMapValue(in[0].getString(sc), in[1].getString(sc), in[2].getString(sc)); 
         });
         sm.registerFunction("gdmap.getordefault", (sc, in) -> 
         {
-            Object o = KajetansMod.scripts.getDatabank().getDualMapValue(in[0].getString(sc), in[1].getString(sc), in[2].getString(sc));
+            Object o = scriptBank.getDualMapValue(in[0].getString(sc), in[1].getString(sc), in[2].getString(sc));
             if(o == null)
             {
                 return in[3].get(sc);
@@ -1549,7 +1562,7 @@ public class MinecraftFunctions
 
         sm.registerFunction("databank.prepare", (sc, in) -> 
         {    
-            PreparedStatement p = KajetansMod.databank.prepareUnsafeStatement(in[0].getString(sc));
+            PreparedStatement p = dataBank.prepareUnsafeStatement(in[0].getString(sc));
             sc.addCloseable(p);
             return p; 
         });
@@ -1587,7 +1600,7 @@ public class MinecraftFunctions
         sm.registerFunction("databank.workerexecute", (sc, in) -> 
         {    
             final PreparedStatement p = (PreparedStatement) in[0].get(sc);
-            KajetansMod.scheduler.getWorker().add(() -> 
+            scheduler.getWorker().add(() -> 
             {
                 try
                 {
@@ -1595,7 +1608,7 @@ public class MinecraftFunctions
                 }
                 catch(SQLException ex)
                 {
-                    KajetansMod.scheduler.scheduleTask(() -> 
+                    scheduler.scheduleTask(() -> 
                     {
                         sc.getScriptManager().getLogger().print("Worker error", ex, null, sc.getName(), sc, -1);
                     });
@@ -1607,7 +1620,7 @@ public class MinecraftFunctions
                 }
                 catch(SQLException ex)
                 {
-                    KajetansMod.scheduler.scheduleTask(() -> 
+                    scheduler.scheduleTask(() -> 
                     {
                         sc.getScriptManager().getLogger().print("Worker error", ex, null, sc.getName(), sc, -1);
                     });
@@ -1631,12 +1644,12 @@ public class MinecraftFunctions
         {  
             Location l = (Location) in[0].get(sc);
             BlockPos pos = l.getBlockPos();
-            return KajetansMod.plots.getIds(pos.getX(), pos.getY(), pos.getZ(), WorldManager.getName(l.getWorld())); 
+            return protection.getIds(pos.getX(), pos.getY(), pos.getZ(), WorldManager.getName(l.getWorld())); 
         });
         sm.registerFunction("plot.canbuild", (sc, in) -> 
         {    
             Location l = (Location) in[0].get(sc);
-            return KajetansMod.plots.canBuild(l.getWorld(), l.getBlockPos(), (PlayerEntity) in[1].get(sc));
+            return protection.canBuild(l.getWorld(), l.getBlockPos(), (ModEntityPlayerMP) in[1].get(sc));
         });
         
         // ---------------------------------------------------------------------  
@@ -1646,14 +1659,14 @@ public class MinecraftFunctions
         {  
             Location l = (Location) in[0].get(sc);
             BlockPos pos = l.getBlockPos();
-            return KajetansMod.blocks.getDatabank().hasAccess(pos, l.getWorld(), (PlayerEntity) in[1].get(sc));
+            return blockProtection.hasAccess(pos, l.getWorld(), (ModEntityPlayerMP) in[1].get(sc));
         });
         
         // ---------------------------------------------------------------------  
         // Script-library   
         // ---------------------------------------------------------------------    
-        sm.registerFunction("script.playerstolist", (sc, in) -> new ArrayList<>(KajetansMod.scripts.getPlayerList(sc.getId()))); 
-        sm.registerFunction("script.getplayeramount", (sc, in) -> (double) KajetansMod.scripts.getPlayerList(sc.getId()).size()); 
+        sm.registerFunction("script.playerstolist", (sc, in) -> new ArrayList<>(scripts.getPlayerList(sc.getId()))); 
+        sm.registerFunction("script.getplayeramount", (sc, in) -> (double) scripts.getPlayerList(sc.getId()).size()); 
         sm.registerFunction("script.start", (sc, in) -> 
         {  
             Object o = in[0].get(sc);
@@ -1664,7 +1677,7 @@ public class MinecraftFunctions
                 {
                     names[i - 1] = in[i].getString(sc);
                 }
-                return KajetansMod.scripts.startPlayerScript((PlayerEntity) in[0].get(sc), names);
+                return scripts.startPlayerScript((PlayerEntity) in[0].get(sc), names);
             }
             String[] names = new String[in.length];
             names[0] = o.toString();
@@ -1672,19 +1685,19 @@ public class MinecraftFunctions
             {
                 names[i] = in[i].getString(sc);
             }
-            KajetansMod.scripts.startScript(names);
+            scripts.startScript(names);
             return true;
         });
-        sm.registerFunction("script.join", (sc, in) -> KajetansMod.scripts.registerPlayer((Script) in[0].get(sc), (PlayerEntity) in[1].get(sc)));
-        sm.registerFunction("script.kick", (sc, in) -> KajetansMod.scripts.unregisterPlayer(sc, (PlayerEntity) in[0].get(sc)));
+        sm.registerFunction("script.join", (sc, in) -> scripts.registerPlayer((Script) in[0].get(sc), (PlayerEntity) in[1].get(sc)));
+        sm.registerFunction("script.kick", (sc, in) -> scripts.unregisterPlayer(sc, (PlayerEntity) in[0].get(sc)));
         sm.registerFunction("script.getleader", (sc, in) -> 
         { 
-            List<UUID> players = KajetansMod.scripts.getPlayerList(sc.getId());
+            List<UUID> players = scripts.getPlayerList(sc.getId());
             if(players.isEmpty())
             {
                 return null;
             }
-            return KajetansMod.server.getPlayerList().getPlayerByUUID(players.get(0));
+            return server.getPlayerList().getPlayerByUUID(players.get(0));
         });
 
         // ---------------------------------------------------------------------  
@@ -1694,18 +1707,18 @@ public class MinecraftFunctions
         {  
             int id = in[1].getInt(sc);
             String message = SnuviUtils.connect(sc, in, 2);
-            doForGroup(in[0].get(sc), sc, p -> ScoreboardUtils.get((ServerPlayerEntity) p).addText(id, message));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ScoreboardUtils.get((ServerPlayerEntity) p).addText(id, message));
             return Void.TYPE; 
         });
         sm.registerFunction("sb.remove", (sc, in) -> 
         {  
             int id = in[1].getInt(sc);
-            doForGroup(in[0].get(sc), sc, p -> ScoreboardUtils.get((ServerPlayerEntity) p).removeText(id));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ScoreboardUtils.get((ServerPlayerEntity) p).removeText(id));
             return Void.TYPE; 
         });
         sm.registerFunction("sb.reset", (sc, in) -> 
         {  
-            doForGroup(in[0].get(sc), sc, p -> ScoreboardUtils.get((ServerPlayerEntity) p).clear()); 
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ScoreboardUtils.get((ServerPlayerEntity) p).clear(server)); 
             return Void.TYPE; 
         });
         
@@ -1716,18 +1729,18 @@ public class MinecraftFunctions
         {  
             byte id = in[1].getByte(sc);
             String message = SnuviUtils.connect(sc, in, 2);
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.sendToDisplay((ServerPlayerEntity) p, (byte) 1, id, message));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.sendToDisplay((ServerPlayerEntity) p, (byte) 1, id, message));
             return Void.TYPE; 
         }); 
         sm.registerFunction("display.remove", (sc, in) -> 
         {  
             byte id = in[1].getByte(sc);
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.sendToDisplay((ServerPlayerEntity) p, (byte) 2, id, ""));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.sendToDisplay((ServerPlayerEntity) p, (byte) 2, id, ""));
             return Void.TYPE; 
         });
         sm.registerFunction("display.reset", (sc, in) -> 
         {  
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.sendToDisplay((ServerPlayerEntity) p, (byte) 3, (byte) -1, "")); 
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.sendToDisplay((ServerPlayerEntity) p, (byte) 3, (byte) -1, "")); 
             return Void.TYPE; 
         });
         
@@ -1738,7 +1751,7 @@ public class MinecraftFunctions
         {  
             byte index = in[1].getByte(sc);
             String message = SnuviUtils.connect(sc, in, 2);
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.addStatus((ServerPlayerEntity) p, index, message));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.addStatus((ServerPlayerEntity) p, index, message));
             return Void.TYPE; 
         }); 
         sm.registerFunction("status.addtimed", (sc, in) -> 
@@ -1746,18 +1759,18 @@ public class MinecraftFunctions
             byte index = in[1].getByte(sc);
             int time = in[2].getInt(sc);
             String message = SnuviUtils.connect(sc, in, 3);
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.addTimedStatus((ServerPlayerEntity) p, index, message, time));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.addTimedStatus((ServerPlayerEntity) p, index, message, time));
             return Void.TYPE; 
         }); 
         sm.registerFunction("status.remove", (sc, in) -> 
         {  
             byte index = in[1].getByte(sc);
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.removeStatus((ServerPlayerEntity) p, index));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.removeStatus((ServerPlayerEntity) p, index));
             return Void.TYPE; 
         });
         sm.registerFunction("status.reset", (sc, in) -> 
         {  
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.clearStatus((ServerPlayerEntity) p)); 
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.clearStatus((ServerPlayerEntity) p)); 
             return Void.TYPE; 
         });
         
@@ -1773,7 +1786,7 @@ public class MinecraftFunctions
             }
             int iconIndex = in[2].getInt(sc);
             int count = in[3].getInt(sc);
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.setItemStackIndex((ServerPlayerEntity) p, index, iconIndex, count));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.setItemStackIndex((ServerPlayerEntity) p, index, iconIndex, count));
             return Void.TYPE; 
         }); 
         sm.registerFunction("stacks.clearindex", (sc, in) -> 
@@ -1783,18 +1796,18 @@ public class MinecraftFunctions
             {
                 throw new IllegalArgumentException("index must be beetween 0 and 8, given: " + index);
             }
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.setItemStackIndex((ServerPlayerEntity) p, index, 0, 0));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.setItemStackIndex((ServerPlayerEntity) p, index, 0, 0));
             return Void.TYPE; 
         }); 
         sm.registerFunction("stacks.clear", (sc, in) -> 
         {  
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.clearItemStacks((ServerPlayerEntity) p));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.clearItemStacks((ServerPlayerEntity) p));
             return Void.TYPE; 
         });
         sm.registerFunction("stacks.setactive", (sc, in) -> 
         {  
             boolean active = in[1].getBoolean(sc);
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.setItemStackActive((ServerPlayerEntity) p, active));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.setItemStackActive((ServerPlayerEntity) p, active));
             return Void.TYPE; 
         });
         
@@ -1808,18 +1821,18 @@ public class MinecraftFunctions
             int x = in[3].getInt(sc);
             int y = in[4].getInt(sc);
             byte scale = in[5].getByte(sc);
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.sendToHead((ServerPlayerEntity) p, (byte) 1, id, name, x, y, scale));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.sendToHead((ServerPlayerEntity) p, (byte) 1, id, name, x, y, scale));
             return Void.TYPE; 
         }); 
         sm.registerFunction("head.remove", (sc, in) -> 
         {  
             byte id = in[1].getByte(sc);
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.sendToHead((ServerPlayerEntity) p, (byte) 2, id, "", -1, -1, (byte) -1));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.sendToHead((ServerPlayerEntity) p, (byte) 2, id, "", -1, -1, (byte) -1));
             return Void.TYPE; 
         });
         sm.registerFunction("head.reset", (sc, in) -> 
         {  
-            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.sendToHead((ServerPlayerEntity) p, (byte) 3, (byte) -1, "", -1, -1, (byte) -1));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.sendToHead((ServerPlayerEntity) p, (byte) 3, (byte) -1, "", -1, -1, (byte) -1));
             return Void.TYPE; 
         });
         
@@ -1873,7 +1886,9 @@ public class MinecraftFunctions
         sm.registerFunction("inv.open", (sc, in) -> 
         { 
             SnuviInventory si = (SnuviInventory) in[0].get(sc);
-            new ScriptInventoryHolder(si, (ServerPlayerEntity) in[1].get(sc), new StringTextComponent(si.getTitle()), sc).openForPlayer(); 
+            ScriptInventoryHolder sih = new ScriptInventoryHolder(scheduler, si, 
+                    (ServerPlayerEntity) in[1].get(sc), new StringTextComponent(si.getTitle()), sc);
+            sih.openForPlayer(); 
             return Void.TYPE; 
         });
         sm.registerFunction("inv.close", (sc, in) -> 
@@ -1910,14 +1925,14 @@ public class MinecraftFunctions
         {
             try
             {
-                return Utils.getPlayerByName(in[0].getString(sc));
+                return Utils.getPlayerByName(server, in[0].getString(sc));
             }
             catch(PlayerNotFoundException ex)
             {
                 return null;
             }
         });
-        sm.registerFunction("read.location", (sc, in) -> new Location(in[0].getString(sc)));
+        sm.registerFunction("read.location", (sc, in) -> new Location(server, in[0].getString(sc)));
         sm.registerFunction("read.item", (sc, in) -> 
         {
             String s = in[0].getString(sc);
@@ -2054,7 +2069,7 @@ public class MinecraftFunctions
         // ---------------------------------------------------------------------    
         // worker library
         // ---------------------------------------------------------------------  
-        sm.registerFunction("worker.haswork", (sc, in) -> KajetansMod.scheduler.getWorker().hasWork());
+        sm.registerFunction("worker.haswork", (sc, in) -> scheduler.getWorker().hasWork());
         
         // ---------------------------------------------------------------------    
         // ban library
@@ -2066,7 +2081,7 @@ public class MinecraftFunctions
         });
         sm.registerFunction("ban.add", (sc, in) -> 
         {
-            GameProfile gp = KajetansMod.server.getPlayerProfileCache().getProfileByUUID(getUUID(in[0].get(sc)));
+            GameProfile gp = server.getPlayerProfileCache().getProfileByUUID(getUUID(in[0].get(sc)));
             String reason = in[1].getString(sc);
             String banner = in[2].getString(sc);
             ProfileBanEntry entry;
@@ -2080,13 +2095,13 @@ public class MinecraftFunctions
             {
                 entry = new ProfileBanEntry(gp, null, banner, null, reason);
             }
-            KajetansMod.server.getPlayerList().getBannedPlayers().addEntry(entry);
+            server.getPlayerList().getBannedPlayers().addEntry(entry);
             return Void.TYPE;
         });
         sm.registerFunction("ban.remove", (sc, in) -> 
         {
-            GameProfile gp = KajetansMod.server.getPlayerProfileCache().getProfileByUUID(getUUID(in[0].get(sc)));
-            KajetansMod.server.getPlayerList().getBannedPlayers().removeEntry(gp);
+            GameProfile gp = server.getPlayerProfileCache().getProfileByUUID(getUUID(in[0].get(sc)));
+            server.getPlayerList().getBannedPlayers().removeEntry(gp);
             return Void.TYPE;
         });
         
@@ -2095,25 +2110,25 @@ public class MinecraftFunctions
         // ---------------------------------------------------------------------   
         sm.registerFunction("data.set", (sc, in) -> 
         {
-            KajetansMod.playerbank.setPlayerVar(getUUID(in[0].get(sc)), in[1].getString(sc), in[2].get(sc));
+            pManager.setPlayerVar(getUUID(in[0].get(sc)), in[1].getString(sc), in[2].get(sc));
             return Void.TYPE;
         });
         sm.registerFunction("data.settimer", (sc, in) -> 
         {
-            KajetansMod.playerbank.setPlayerTimer(getUUID(in[0].get(sc)), in[1].getString(sc), in[2].getInt(sc));
+            pManager.setPlayerTimer(getUUID(in[0].get(sc)), in[1].getString(sc), in[2].getInt(sc));
             return Void.TYPE;
         });
         sm.registerFunction("data.get", (sc, in) -> 
         {
-            return KajetansMod.playerbank.getPlayerVar(getUUID(in[0].get(sc)), in[1].getString(sc));
+            return pManager.getPlayerVar(getUUID(in[0].get(sc)), in[1].getString(sc));
         });
         sm.registerFunction("data.gettimer", (sc, in) -> 
         {
-            return (double) KajetansMod.playerbank.getPlayerTimer(getUUID(in[0].get(sc)), in[1].getString(sc));
+            return (double) pManager.getPlayerTimer(getUUID(in[0].get(sc)), in[1].getString(sc));
         });
         sm.registerFunction("data.clear", (sc, in) -> 
         {
-            KajetansMod.playerbank.clearPlayerData(getUUID(in[0].get(sc)));
+            pManager.clearPlayerData(getUUID(in[0].get(sc)));
             return Void.TYPE;
         });
         
@@ -2125,19 +2140,19 @@ public class MinecraftFunctions
             Object o = in[0].get(sc);
             if(in.length == 2)
             {
-                return KajetansMod.scripts.getDatabank().getVar(in[1].getString(sc), getUUID(o));
+                return scriptBank.getVar(in[1].getString(sc), getId(playerBank, o));
             }
-            return KajetansMod.scripts.getDatabank().getVar(in[1].getString(sc), getUUID(o), in[2].get(sc));
+            return scriptBank.getVar(in[1].getString(sc), getId(playerBank, o), in[2].get(sc));
         });
         sm.registerAlias("getglobalvar", "ggv");
         sm.registerFunction("setglobalvar", (sc, in) -> 
         { 
             final String value = in[2].getString(sc);
             final String var = in[1].getString(sc);
-            final UUID uuid = getUUID(in[0].get(sc));
-            KajetansMod.scheduler.getWorker().add(() -> 
+            final int id = getId(playerBank, in[0].get(sc));
+            scheduler.getWorker().add(() -> 
             {
-                KajetansMod.scripts.getDatabank().setVar(value, var, uuid);
+                scriptBank.setVar(value, var, id);
             });
             return Void.TYPE; 
         });                          
@@ -2145,24 +2160,24 @@ public class MinecraftFunctions
         sm.registerFunction("delglobalvar", (sc, in) -> 
         { 
             final String var = in[1].getString(sc);
-            final UUID uuid = getUUID(in[0].get(sc));
-            KajetansMod.scheduler.getWorker().add(() -> 
+            final int id = getId(playerBank, in[0].get(sc));
+            scheduler.getWorker().add(() -> 
             {
-                KajetansMod.scripts.getDatabank().deleteVar(var, uuid);
+                scriptBank.deleteVar(var, id);
             });
             return Void.TYPE; 
         }); 
         sm.registerAlias("delglobalvar", "dgv");
         sm.registerFunction("msg", (sc, in) -> 
         { 
-            sendMessageToGroup(in[0].get(sc), sc, concat(sc, 1, "", in)); 
+            sendMessageToGroup(server, scripts, perms, in[0].get(sc), sc, concat(sc, 1, "", in)); 
             return Void.TYPE; 
         });       
         sm.registerFunction("removeformat", (sc, in) -> SnuviUtils.connect(sc, in, 0).replaceAll("§.", ""));           
         sm.registerFunction("command", (sc, in) -> 
         { 
             final String s = SnuviUtils.connect(sc, in, 0);
-            KajetansMod.scheduler.scheduleTask(() -> KajetansMod.commands.handleCommand(KajetansMod.server.getCommandSource(), s)); 
+            scheduler.scheduleTask(() -> Server.executeCommand(s)); 
             return Void.TYPE;
         });
     }
@@ -2203,15 +2218,29 @@ public class MinecraftFunctions
         return UUID.fromString(o.toString());
     }
     
-    public static void doForGroup(Object group, Script sc, Consumer<ICommandSource> c)
+    private static int getId(IPlayerBank bank, Object o)
+    {
+        if(o instanceof ModEntityPlayerMP)
+        {
+            return ((ModEntityPlayerMP) o).getId();
+        }
+        else if(o instanceof Double)
+        {
+            return ((Double) o).intValue();
+        }
+        UUID uuid = getUUID(o);
+        return bank.getId(uuid);
+    }
+    
+    public static void doForGroup(MinecraftServer server, Scripts scripts, PermissionManager perms, Object group, Script sc, Consumer<ICommandSource> c)
     {
         if(group instanceof String)
         {
             switch(group.toString().toLowerCase()) 
             {
                 case "all":
-                    PlayerList list = KajetansMod.server.getPlayerList();
-                    KajetansMod.scripts.getPlayerList(sc.getId()).forEach(uuid -> 
+                    PlayerList list = server.getPlayerList();
+                    scripts.getPlayerList(sc.getId()).forEach(uuid -> 
                     {
                         ServerPlayerEntity p = list.getPlayerByUUID(uuid);
                         if(p != null)
@@ -2221,16 +2250,22 @@ public class MinecraftFunctions
                     });
                     break;
                 case "online":
-                    KajetansMod.server.getPlayerList().getPlayers().forEach(p -> c.accept(p));
+                    server.getPlayerList().getPlayers().forEach(p -> c.accept(p));
                     break;
                 case "dev":
-                    ChatChannel.getDevChannel().forEach((p) -> c.accept(p));
+                    server.getPlayerList().getPlayers().forEach(p -> 
+                    {
+                        if(perms.hasPermission(p, "script.error"))
+                        {
+                            c.accept(p);
+                        }
+                    });
                     break;
                 case "server":
-                    c.accept(KajetansMod.server);
+                    c.accept(server);
                     break;
                 default:
-                    c.accept(Utils.getPlayerByName(group.toString()));
+                    c.accept(Utils.getPlayerByName(server, group.toString()));
                     break;
             }
             return;
@@ -2238,9 +2273,9 @@ public class MinecraftFunctions
         c.accept((PlayerEntity) group);
     } 
     
-    private static void sendMessageToGroup(Object group, Script sc, ITextComponent text)
+    private static void sendMessageToGroup(MinecraftServer server, Scripts scripts, PermissionManager perms, Object group, Script sc, ITextComponent text)
     {
-        doForGroup(group, sc, p -> p.sendMessage(text));
+        doForGroup(server, scripts, perms, group, sc, p -> p.sendMessage(text));
     }
     
     private static ITextComponent concat(Script sc, int start, String pre, InputProvider... ob) throws Exception

+ 33 - 30
src/main/java/me/km/snuviscript/ScriptBank.java

@@ -6,12 +6,20 @@ import java.sql.SQLException;
 import java.util.UUID;
 import me.hammerle.snuviscript.code.SnuviUtils;
 import me.km.KajetansMod;
+import me.km.databank.DataBank;
+import me.km.playerbank.PlayerManager;
 
 public class ScriptBank implements IScriptBank
 {   
-    public ScriptBank() 
+    private final DataBank databank;
+    private final PreparedStatement getVar;
+    private final PreparedStatement getMapValue;
+    private final PreparedStatement getDualMapValue;
+    
+    public ScriptBank(DataBank databank, PlayerManager manager) 
     {
-        KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS scriptdata ("
+        this.databank = databank;
+        databank.execute("CREATE TABLE IF NOT EXISTS scriptdata ("
                 + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
                 + "player_id INT NOT NULL, "
                 + "var VARCHAR(20) NOT NULL, "
@@ -19,7 +27,7 @@ public class ScriptBank implements IScriptBank
                 + "UNIQUE INDEX (player_id,var), "
                 + "FOREIGN KEY (player_id) REFERENCES minecraft.players(id) ON DELETE RESTRICT);");
         
-        KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS scriptmaps ("
+        databank.execute("CREATE TABLE IF NOT EXISTS scriptmaps ("
                 + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
                 + "map VARCHAR(255) NOT NULL, "
                 + "keyname VARCHAR(255) NOT NULL, "
@@ -27,7 +35,7 @@ public class ScriptBank implements IScriptBank
                 + "INDEX (map), "
                 + "UNIQUE INDEX (map,keyname));");
         
-        KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS scriptdualmaps ("
+        databank.execute("CREATE TABLE IF NOT EXISTS scriptdualmaps ("
                 + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
                 + "map VARCHAR(255) NOT NULL, "
                 + "keyname VARCHAR(255) NOT NULL, "
@@ -35,15 +43,19 @@ public class ScriptBank implements IScriptBank
                 + "value VARCHAR(255) NOT NULL, "
                 + "INDEX (map), "
                 + "UNIQUE INDEX (map,keyname,seckeyname));");
+        
+        getVar = databank.prepareStatement("SELECT value from scriptdata WHERE player_id = ? and var = ?;");
+        getMapValue = databank.prepareStatement("SELECT value from scriptmaps WHERE map = ? AND keyname = ?;");
+        getDualMapValue = databank.prepareStatement("SELECT value from scriptdualmaps WHERE map = ? AND keyname = ? AND seckeyname = ?;");
     }
 
     @Override
-    public void setVar(String value, String var, UUID uuid)
+    public void setVar(String value, String var, int playerId)
     {
-        try(PreparedStatement setVar = KajetansMod.databank.prepareStatement(
+        try(PreparedStatement setVar = databank.prepareStatement(
                 "INSERT INTO scriptdata (player_id,var,value) SELECT ?, ?, ? ON DUPLICATE KEY UPDATE scriptdata.value=?;"))
         {
-            setVar.setInt(1, KajetansMod.playerbank.getPlayerId(uuid));
+            setVar.setInt(1, playerId);
             setVar.setString(2, var);
             setVar.setString(3, value);
             setVar.setString(4, value);
@@ -56,12 +68,12 @@ public class ScriptBank implements IScriptBank
     }
 
     @Override
-    public void deleteVar(String var, UUID uuid)
+    public void deleteVar(String var, int playerId)
     {
-        try(PreparedStatement deleteVar = KajetansMod.databank.prepareStatement(
+        try(PreparedStatement deleteVar = databank.prepareStatement(
                 "DELETE FROM scriptdata WHERE player_id = ? AND var = ?;"))
         {
-            deleteVar.setInt(1, KajetansMod.playerbank.getPlayerId(uuid));
+            deleteVar.setInt(1, playerId);
             deleteVar.setString(2, var);
             deleteVar.executeUpdate();
         }
@@ -71,15 +83,12 @@ public class ScriptBank implements IScriptBank
         }
     }
     
-    private final PreparedStatement getVar = KajetansMod.databank.prepareStatement(
-            "SELECT value from scriptdata WHERE player_id = ? and var = ?;");
-    
     @Override
-    public Object getVar(String var, UUID uuid, Object error)
+    public Object getVar(String var, int playerId, Object error)
     {
         try
         {
-            getVar.setInt(1, KajetansMod.playerbank.getPlayerId(uuid));
+            getVar.setInt(1, playerId);
             getVar.setString(2, var);
             try(ResultSet rs = getVar.executeQuery())
             {
@@ -102,15 +111,15 @@ public class ScriptBank implements IScriptBank
     } 
     
     @Override
-    public Object getVar(String var, UUID uuid)
+    public Object getVar(String var, int playerId)
     {
-        return getVar(var, uuid, null);
+        return getVar(var, playerId, null);
     }    
     
     @Override
     public void addMapElement(String map, String key, String value)
     {
-        try(PreparedStatement addMapElement = KajetansMod.databank.prepareStatement(
+        try(PreparedStatement addMapElement = databank.prepareStatement(
                 "INSERT INTO scriptmaps (map,keyname,value) SELECT ?, ?, ? ON DUPLICATE KEY UPDATE value=?;"))
         {
             addMapElement.setString(1, map);
@@ -128,7 +137,7 @@ public class ScriptBank implements IScriptBank
     @Override
     public void removeMapElement(String map, String key)
     {
-        try(PreparedStatement removeMapElement = KajetansMod.databank.prepareStatement(
+        try(PreparedStatement removeMapElement = databank.prepareStatement(
                 "DELETE FROM scriptmaps WHERE map = ? AND keyname = ?;"))
         {
             removeMapElement.setString(1, map);
@@ -144,7 +153,7 @@ public class ScriptBank implements IScriptBank
     @Override
     public void removeMap(String map)
     {
-        try(PreparedStatement removeMap = KajetansMod.databank.prepareStatement(
+        try(PreparedStatement removeMap = databank.prepareStatement(
                 "DELETE FROM scriptmaps WHERE map = ?;"))
         {
             removeMap.setString(1, map);
@@ -156,9 +165,6 @@ public class ScriptBank implements IScriptBank
         }
     }
     
-    private final PreparedStatement getMapValue = KajetansMod.databank.prepareStatement(
-            "SELECT value from scriptmaps WHERE map = ? AND keyname = ?;");
-    
     @Override
     public Object getMapValue(String map, String key)
     {
@@ -189,7 +195,7 @@ public class ScriptBank implements IScriptBank
     @Override
     public void addDualMapElement(String map, String key, String key2, String value)
     {
-        try(PreparedStatement addDualMapElement = KajetansMod.databank.prepareStatement(
+        try(PreparedStatement addDualMapElement = databank.prepareStatement(
                 "INSERT INTO scriptdualmaps (map,keyname,seckeyname,value) SELECT ?, ?, ?, ? ON DUPLICATE KEY UPDATE value=?;"))
         {
             addDualMapElement.setString(1, map);
@@ -208,7 +214,7 @@ public class ScriptBank implements IScriptBank
     @Override
     public void removeDualMapElement(String map, String key)
     {
-        try(PreparedStatement removeDualMapElement = KajetansMod.databank.prepareStatement(
+        try(PreparedStatement removeDualMapElement = databank.prepareStatement(
                 "DELETE FROM scriptdualmaps WHERE map = ? AND keyname = ?;"))
         {
             removeDualMapElement.setString(1, map);
@@ -224,7 +230,7 @@ public class ScriptBank implements IScriptBank
     @Override
     public void removeDualMap(String map)
     {
-        try(PreparedStatement removeDualMap = KajetansMod.databank.prepareStatement(
+        try(PreparedStatement removeDualMap = databank.prepareStatement(
                 "DELETE FROM scriptdualmaps WHERE map = ?;"))
         {
             removeDualMap.setString(1, map);
@@ -239,7 +245,7 @@ public class ScriptBank implements IScriptBank
     @Override
     public void removeDualMapElement(String map, String key, String key2)
     {
-        try(PreparedStatement removeDualMapElement2 = KajetansMod.databank.prepareStatement(
+        try(PreparedStatement removeDualMapElement2 = databank.prepareStatement(
                 "DELETE FROM scriptdualmaps WHERE map = ? AND keyname = ? AND seckeyname = ?;"))
         {
             removeDualMapElement2.setString(1, map);
@@ -253,9 +259,6 @@ public class ScriptBank implements IScriptBank
         }
     } 
 
-    private final PreparedStatement getDualMapValue = KajetansMod.databank.prepareStatement(
-            "SELECT value from scriptdualmaps WHERE map = ? AND keyname = ? AND seckeyname = ?;");
-    
     @Override
     public Object getDualMapValue(String map, String key, String key2)
     {

+ 40 - 29
src/main/java/me/km/snuviscript/ScriptEvents.java

@@ -8,11 +8,11 @@ import java.util.stream.Collectors;
 import me.hammerle.snuviscript.code.Script;
 import me.hammerle.snuviscript.code.SnuviUtils;
 import me.hammerle.snuviscript.inputprovider.Variable;
-import me.km.KajetansMod;
 import me.km.utils.Utils;
 import me.km.entities.EntityHuman;
 import me.km.entities.EntityItemProjectile;
 import me.km.events.PlayerHurtEvent;
+import me.km.permissions.PermissionManager;
 import me.km.utils.Location;
 import net.minecraft.command.ICommandSource;
 import net.minecraft.entity.Entity;
@@ -47,14 +47,25 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
 import net.minecraftforge.fml.common.gameevent.PlayerEvent;
 
 public class ScriptEvents
-{               
+{              
+    private final Scripts scripts;
+    private final MinecraftServer server;
+    private final PermissionManager perms;
+    
+    public ScriptEvents(Scripts scripts, MinecraftServer server, PermissionManager perms)
+    {
+        this.scripts = scripts;
+        this.server = server;
+        this.perms = perms;
+    }
+            
     // -------------------------------------------------------------------------
     // basics
     // -------------------------------------------------------------------------
     
-    private static void handleEvent(PlayerEntity p, String event, Consumer<Script> before, Consumer<Script> after)
+    private void handleEvent(PlayerEntity p, String event, Consumer<Script> before, Consumer<Script> after)
     {      
-        KajetansMod.scripts.getScriptManager().callEvent(event, (sc) -> 
+        scripts.getScriptManager().callEvent(event, (sc) -> 
         {
             ScriptVars.setPlayerVars(sc, p); 
             before.accept(sc);
@@ -62,10 +73,10 @@ public class ScriptEvents
         
         if(p != null)
         {
-            Script data = KajetansMod.scripts.getScript(p);
+            Script data = scripts.getScript(p);
             if(data != null)
             {
-                KajetansMod.scripts.getScriptManager().callEvent(event, data, (sc) -> 
+                scripts.getScriptManager().callEvent(event, data, (sc) -> 
                 {
                     ScriptVars.setPlayerVars(sc, p); 
                     before.accept(sc);
@@ -74,7 +85,7 @@ public class ScriptEvents
         }      
     }
 
-    private static void handleEvent(PlayerEntity p, String event, Consumer<Script> before)
+    private void handleEvent(PlayerEntity p, String event, Consumer<Script> before)
     {      
         handleEvent(p, event, before, null);
     }
@@ -96,7 +107,7 @@ public class ScriptEvents
         }
         catch(Exception ex)
         {
-            KajetansMod.scripts.logger.print("invalid var in '" + name + "' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
+            scripts.getLogger().print(String.format("invalid var in '%s' event", name), ex, null, sc.getName(), sc, sc.getActiveSourceLine());
         }
     }
          
@@ -104,7 +115,7 @@ public class ScriptEvents
     // events
     // -------------------------------------------------------------------------
 
-    public static void onPlayerDataTick(PlayerEntity p, String var)
+    public void onPlayerDataTick(PlayerEntity p, String var)
     {      
         handleEvent(p, "player_data_tick", sc -> 
         {
@@ -112,7 +123,7 @@ public class ScriptEvents
         });
     }
     
-    public static void onPlayerMove(PlayerEntity p, int id)
+    public void onPlayerMove(PlayerEntity p, int id)
     {      
         handleEvent(p, "player_move", sc -> 
         {
@@ -120,9 +131,9 @@ public class ScriptEvents
         });
     }
     
-    public static boolean onInventoryClick(Script script, ITextComponent text, SnuviInventory inv, int slot, ClickType click, PlayerEntity p)
+    public boolean onInventoryClick(Script script, ITextComponent text, SnuviInventory inv, int slot, ClickType click, PlayerEntity p)
     {
-        KajetansMod.scripts.getScriptManager().callEvent("inv_click", script, sc -> 
+        scripts.getScriptManager().callEvent("inv_click", script, sc -> 
         {
             ScriptVars.setPlayerVars(sc, p); 
             sc.setVar("inv_id", (double) inv.getId());
@@ -135,9 +146,9 @@ public class ScriptEvents
         return v != null && v.getBoolean(script);
     }
 
-    public static void onInventoryClose(Script script, ITextComponent text, SnuviInventory inv, PlayerEntity p)
+    public void onInventoryClose(Script script, ITextComponent text, SnuviInventory inv, PlayerEntity p)
     {
-        KajetansMod.scripts.getScriptManager().callEvent("inv_close", script, sc -> 
+        scripts.getScriptManager().callEvent("inv_close", script, sc -> 
         {
             ScriptVars.setPlayerVars(sc, p); 
             sc.setVar("inv_id", (double) inv.getId());
@@ -145,7 +156,7 @@ public class ScriptEvents
         }, null);
     }
     
-    public static void onHumanHurt(PlayerEntity p, EntityHuman h)
+    public void onHumanHurt(PlayerEntity p, EntityHuman h)
     {
         handleEvent(p, "human_hurt", sc -> ScriptVars.setEntityVars(sc, h));
     }
@@ -191,7 +202,7 @@ public class ScriptEvents
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.logger.print("invalid var in 'player_hurt' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
+                scripts.getLogger().print("invalid var in 'player_hurt' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
             }
         });
     } 
@@ -258,7 +269,7 @@ public class ScriptEvents
                 }
                 catch(Exception ex)
                 {
-                    KajetansMod.scripts.logger.print("invalid var in 'player_heal' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
+                    scripts.getLogger().print("invalid var in 'player_heal' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
                 }
             });
         }
@@ -313,7 +324,7 @@ public class ScriptEvents
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.logger.print("invalid var in 'player_death' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
+                scripts.getLogger().print("invalid var in 'player_death' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
             }
         });
     } 
@@ -342,7 +353,7 @@ public class ScriptEvents
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.logger.print("invalid var in 'entity_hurt' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
+                scripts.getLogger().print("invalid var in 'entity_hurt' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
             }
         });
     }
@@ -374,7 +385,7 @@ public class ScriptEvents
         }
         catch(NullPointerException ex)
         {
-            KajetansMod.scripts.sendWarningToConsole(ex.toString() + "  " + ex.getMessage());
+            scripts.getLogger().print(ex);
         }
     } 
             
@@ -416,7 +427,7 @@ public class ScriptEvents
         }           
     }
     
-    public static void onEntityItemProjectileHit(EntityItemProjectile ent, PlayerEntity p, ItemStack stack, List<Entity> ents)
+    public void onEntityItemProjectileHit(EntityItemProjectile ent, PlayerEntity p, ItemStack stack, List<Entity> ents)
     {        
         handleEvent(p, "item_hit", (sc) -> 
         {
@@ -491,7 +502,7 @@ public class ScriptEvents
         }
         handleEvent(p, "player_login", (sc) -> 
         {       
-            PlayerList list = KajetansMod.server.getPlayerList();
+            PlayerList list = server.getPlayerList();
             sc.setVar("is_banned", list.getBannedPlayers().isBanned(p.getGameProfile()));
             sc.setVar("is_whitelisted", list.getWhitelistedPlayers().isWhitelisted(p.getGameProfile()));
         });
@@ -656,7 +667,7 @@ public class ScriptEvents
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.logger.print("invalid var in 'item_use_start' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
+                scripts.getLogger().print("invalid var in 'item_use_start' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
             }
         });
     }
@@ -756,7 +767,7 @@ public class ScriptEvents
     //    }
     //}
     
-    public static void onCustomCommand(PlayerEntity p, String command, String[] args)
+    public void onCustomCommand(PlayerEntity p, String command, String[] args)
     {
         handleEvent(p, "custom_command", (sc) -> 
         {
@@ -772,7 +783,7 @@ public class ScriptEvents
         });
     }
     
-    public static void onFunctionKey(ServerPlayerEntity p, int key)
+    public void onFunctionKey(ServerPlayerEntity p, int key)
     {        
         handleEvent(p, "function_key", (sc) -> 
         {
@@ -785,7 +796,7 @@ public class ScriptEvents
     {    
         handleEvent(e.getPlayer(), "chat", (sc) -> 
         {
-            sc.setVar("message", Utils.colorMessage(e.getMessage(), e.getPlayer()));
+            sc.setVar("message", Utils.colorMessage(perms, e.getMessage(), e.getPlayer()));
             sc.setVar("cancel", e.isCanceled());
         }, (sc) -> 
         {
@@ -796,7 +807,7 @@ public class ScriptEvents
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.logger.print("invalid var in 'chat' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
+                scripts.getLogger().print("invalid var in 'chat' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
             }
         });
     }
@@ -848,7 +859,7 @@ public class ScriptEvents
         return null;
     }
     
-    public static void onMissingCommand(ICommandSource cs, String command)
+    public void onMissingCommand(ICommandSource cs, String command)
     {   
         PlayerEntity p = null;
         if(cs instanceof PlayerEntity)
@@ -863,7 +874,7 @@ public class ScriptEvents
         });
     }
     
-    public static void onMissingPermission(ICommandSource cs, String command)
+    public void onMissingPermission(ICommandSource cs, String command)
     {    
         PlayerEntity p = null;
         if(cs instanceof PlayerEntity)

+ 6 - 4
src/main/java/me/km/snuviscript/ScriptInventoryHolder.java

@@ -1,6 +1,8 @@
 package me.km.snuviscript;
 
+import me.hammerle.snuviscript.code.ISnuviScheduler;
 import me.hammerle.snuviscript.code.Script;
+import me.km.Server;
 import me.km.inventory.CustomContainer;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.entity.player.ServerPlayerEntity;
@@ -11,22 +13,22 @@ public class ScriptInventoryHolder extends CustomContainer
 {
     private final Script sc;
 
-    public ScriptInventoryHolder(SnuviInventory inv, ServerPlayerEntity p, ITextComponent title, Script qd) 
+    public ScriptInventoryHolder(ISnuviScheduler scheduler, SnuviInventory inv, ServerPlayerEntity p, ITextComponent title, Script qd) 
     {
-        super(inv, p, title);
+        super(scheduler, inv, p, title);
         this.sc = qd;
     }
 
     @Override
     public boolean onButtonClick(int slot, int dragType, ClickType click, ServerPlayerEntity p)
     {
-        return ScriptEvents.onInventoryClick(sc, getTitle(), (SnuviInventory) inv, slot, click, p);
+        return Server.scriptEvents.onInventoryClick(sc, getTitle(), (SnuviInventory) inv, slot, click, p);
     }
 
     @Override
     public void onContainerClosed(PlayerEntity p) 
     {
-        ScriptEvents.onInventoryClose(sc, getTitle(), (SnuviInventory) inv, p);
+        Server.scriptEvents.onInventoryClose(sc, getTitle(), (SnuviInventory) inv, p);
         super.onContainerClosed(p);
     }
 }

+ 23 - 39
src/main/java/me/km/snuviscript/ScriptModule.java → src/main/java/me/km/snuviscript/Scripts.java

@@ -3,51 +3,36 @@ package me.km.snuviscript;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import me.km.KajetansMod;
-import me.km.module.Module;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.UUID;
+import me.hammerle.snuviscript.code.ISnuviLogger;
+import me.hammerle.snuviscript.code.ISnuviScheduler;
 import me.hammerle.snuviscript.code.Script;
 import me.hammerle.snuviscript.code.ScriptManager;
-import me.km.chatchannel.ChatChannel;
 import me.km.events.CustomEventCaller;
 import net.minecraft.entity.player.PlayerEntity;
-import net.minecraft.util.text.TextFormatting;
 
-public class ScriptModule extends Module
+public class Scripts
 {
     private final ScriptManager manager;
-    protected final SnuviLogger logger;
-    private final HashMap<UUID, Integer> playerScript;   
-    private final HashMap<Integer, List<UUID>> registeredPlayers; 
-    private final HashSet<String> scriptCommands;
-    private final IScriptBank bank;
+    private final ISnuviLogger logger;
+    private CustomEventCaller cec = null;
     
-    public ScriptModule(String prefix, TextFormatting color) 
+    private final HashMap<UUID, Integer> playerScript = new HashMap<>(); 
+    private final HashMap<Integer, List<UUID>> registeredPlayers = new HashMap<>();
+    private final HashSet<String> scriptCommands = new HashSet<>();
+    
+    public Scripts(ISnuviLogger logger, ISnuviScheduler scheduler) 
     {
-        super(prefix, color);
-        
-        if(KajetansMod.databank.isDummyDatabank())
-        {
-            bank = new DummyScriptBank();
-        }
-        else
-        {
-            bank = new ScriptBank();
-        }
-        
-        logger = new SnuviLogger();
-        manager = new ScriptManager(logger, KajetansMod.scheduler);
-        
-        MinecraftFunctions.registerFunctions(manager);
-        
-        playerScript = new HashMap<>();
-        registeredPlayers = new HashMap<>();
-        scriptCommands = new HashSet<>();
-        
-        registerEvent(new ScriptEvents());
+        this.logger = logger;
+        manager = new ScriptManager(logger, scheduler);
+    }
+    
+    public void setCustomEventCaller(CustomEventCaller cec)
+    {
+        this.cec = cec;
     }
     
     public ScriptManager getScriptManager()
@@ -55,9 +40,9 @@ public class ScriptModule extends Module
         return manager;
     }
     
-    public IScriptBank getDatabank()
+    public ISnuviLogger getLogger()
     {
-        return bank;
+        return logger;
     }
     
     // -------------------------------------------------------------------------
@@ -138,7 +123,7 @@ public class ScriptModule extends Module
         if(sc == null)
         {
             playerScript.remove(p.getUniqueID());
-            ChatChannel.getDevChannel().sendWarning("Das ungültige Script von '" + p.getName() + "' wurde entfernt. (1)");
+            logger.print(String.format("invalid script of '%s' was removed. (1)", p.getName()));
             return null;
         }
         return sc;
@@ -162,7 +147,7 @@ public class ScriptModule extends Module
             Script sc = manager.getScript(id);
             if(sc == null)
             {
-                ChatChannel.getDevChannel().sendWarning("Das ungültige Script von '" + p.getName() + "' wurde entfernt. (2)");
+                logger.print(String.format("invalid script of '%s' was removed. (2)", p.getName()));
                 return true;
             }
             if(sc != callingScript)
@@ -200,8 +185,7 @@ public class ScriptModule extends Module
         {
             getPlayerList(sc.getId()).forEach(uuid -> playerScript.remove(uuid));
             registeredPlayers.remove(sc.getId());
-            
-            CustomEventCaller.removeScriptData(sc);
+            cec.removeScriptData(sc);
         }, names[0], names);
         return true;
     }
@@ -209,6 +193,6 @@ public class ScriptModule extends Module
     public void startScript(String... names)
     {
         Arrays.setAll(names, i -> "scripts/" + names[i] + ".txt");
-        manager.startScript(true, sc -> {}, sc -> CustomEventCaller.removeScriptData(sc), names[0], names);
+        manager.startScript(true, sc -> {}, sc -> cec.removeScriptData(sc), names[0], names);
     }
 }

+ 65 - 57
src/main/java/me/km/snuviscript/SnuviLogger.java

@@ -2,87 +2,95 @@ package me.km.snuviscript;
 
 import me.hammerle.snuviscript.code.ISnuviLogger;
 import me.hammerle.snuviscript.code.Script;
-import me.km.KajetansMod;
-import me.km.module.Module;
-import me.km.chatchannel.ChatChannel;
+import me.km.permissions.PermissionManager;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.util.text.StringTextComponent;
 
 public class SnuviLogger implements ISnuviLogger
 {
+    private boolean printToConsole = true;
+    private MinecraftServer server = null;
+    private PermissionManager perms = null;
+    
+    public void setConsoleLogging(boolean b)
+    {
+        printToConsole = b;
+    }
+    
+    public void setPlayerLoggingData(MinecraftServer server, PermissionManager perms)
+    {
+        this.server = server;
+        this.perms = perms;
+    }
+    
     @Override
     public void print(String message, Exception ex, String function, String scriptname, Script sc, int line) 
     {
-        if(KajetansMod.debugMode)
+        StringBuilder sb = new StringBuilder();
+        sb.append("[§cLogger§r] ");
+        
+        if(ex == null)
         {
-            Module m = KajetansMod.scripts;
-            if(scriptname != null)
-            {
-                if(sc != null)
-                {
-                    m.sendWarningToConsole("error in '" + scriptname + "' " + sc.getId());
-                }
-                else
-                {
-                    m.sendWarningToConsole("error in '" + scriptname + "'");
-                }
-            }
+            sb.append("§edebug: '");
+            sb.append(message);
+            sb.append("'");
+        }
+        else
+        {
+            sb.append("§eexception: '");
+            sb.append(ex.getMessage());
             if(message != null)
             {
-                m.sendHelpListElementToConsole("message", message);
-            }
-            if(ex != null)
-            {
-                m.sendHelpListElementToConsole("exception", ex.getClass().getSimpleName());
-                m.sendHelpListElementToConsole("exception", String.valueOf(ex.getMessage()));
-                ex.printStackTrace();
-            }
-            if(function != null)
-            {
-                m.sendHelpListElementToConsole("function", function);
-            }
-            if(line != -1)
-            {
-                m.sendHelpListElementToConsole("Zeile", String.valueOf(line));
+                sb.append(" - ");
+                sb.append(message);
             }
+            sb.append("'");
         }
         
-        ChatChannel dev = ChatChannel.getDevChannel();
         if(scriptname != null)
         {
-            StringBuilder sb = new StringBuilder();
-            if(ex == null)
-            {
-                sb.append("§edebug");
-            }
-            else
-            {
-                sb.append("error");
-            }
-            sb.append(" in '");
+            sb.append(" in script '");
             sb.append(scriptname);
             sb.append("'");
-            if(sc != null)
-            {
-                sb.append(" ");
-                sb.append(sc.getId());
-            }
-            dev.sendWarning(sb.toString());
-        }
-        if(message != null)
-        {
-            dev.sendList("message", message);
         }
-        if(ex != null)
+        
+        if(sc != null)
         {
-            dev.sendList("exception", ex.getClass().getSimpleName());
-            dev.sendList("exception", ex.getMessage());
+            sb.append(" id '");
+            sb.append(sc.getId());
+            sb.append("'");
         }
+        
         if(function != null)
         {
-            dev.sendList("function", function);
+            sb.append(" in function '");
+            sb.append(function);
+            sb.append("'");
         }
+        
         if(line != -1)
         {
-            dev.sendList("Zeile", String.valueOf(line));
+            sb.append(" in line '");
+            sb.append(line);
+            sb.append("'");
+        }
+        
+        StringTextComponent text = new StringTextComponent(sb.toString());
+
+        if(printToConsole && server != null)
+        {
+            server.sendMessage(text);
+        }
+        
+        if(server != null && perms != null && server.getPlayerList() != null)
+        {
+            server.getPlayerList().getPlayers().forEach(p -> 
+            {
+                if(perms.hasPermission(p, "script.error"))
+                {
+                    p.sendMessage(text);
+                }
+            });
         }
     }
 }

+ 4 - 3
src/main/java/me/km/utils/Location.java

@@ -6,6 +6,7 @@ import me.km.world.WorldManager;
 import me.km.exception.IllegalLocationStringException;
 import net.minecraft.block.BlockState;
 import net.minecraft.entity.Entity;
+import net.minecraft.server.MinecraftServer;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.MathHelper;
 import net.minecraft.util.math.Vec3d;
@@ -55,14 +56,14 @@ public class Location
         this(ent.world, ent.posX, ent.posY, ent.posZ, ent.rotationYaw, ent.rotationPitch);
     }
     
-    public Location(String location) throws IllegalLocationStringException
+    public Location(MinecraftServer server, String location) throws IllegalLocationStringException
     {
         try
         {
             String[] parts = location.split(":");
             if(parts.length >= 6)
             {
-                this.w = WorldManager.get(parts[0]);
+                this.w = WorldManager.get(server, parts[0]);
                 this.x = Double.parseDouble(parts[1]);
                 this.y = Double.parseDouble(parts[2]); 
                 this.z = Double.parseDouble(parts[3]);
@@ -72,7 +73,7 @@ public class Location
             }
             else if(parts.length >= 4)
             {
-                this.w = WorldManager.get(parts[0]);
+                this.w = WorldManager.get(server, parts[0]);
                 this.x = Double.parseDouble(parts[1]);
                 this.y = Double.parseDouble(parts[2]); 
                 this.z = Double.parseDouble(parts[3]);

+ 0 - 50
src/main/java/me/km/utils/RecipeUtils.java

@@ -1,50 +0,0 @@
-package me.km.utils;
-
-/*import java.util.ArrayList;
-import java.util.List;
-import net.minecraft.item.ItemStack;
-import net.minecraft.item.crafting.CraftingManager;
-import net.minecraft.item.crafting.FurnaceRecipes;
-import net.minecraft.item.crafting.IRecipe;*/
-
-public class RecipeUtils 
-{
-    /*private static final ArrayList<IRecipe> RECIPES = new ArrayList<>();
-    
-    private static void pushLastRecipe()
-    {
-        List<IRecipe> list = CraftingManager.getInstance().getRecipeList();
-        RECIPES.add(list.get(list.size() - 1));
-    }
-    
-    public static void registerShapelessRecipe(ItemStack result, ItemStack[] stacks)
-    {
-        CraftingManager.getInstance().addShapelessRecipe(result, (Object[]) stacks);
-        pushLastRecipe();
-    }
-    
-    public static void registerShapedRecipe(ItemStack result, String[] s, ItemStack[] stacks)
-    {
-        int length = s.length;
-        Object[] o = new Object[length + (stacks.length * 2)];
-        System.arraycopy(s, 0, o, 0, length);
-        for(int i = length; i < o.length; i += 2)
-        {
-            o[i] = Character.forDigit(i + 1 - length, 10);
-            o[i + 1] = stacks[i - length];
-        }       
-        CraftingManager.getInstance().addRecipe(result, o);
-        pushLastRecipe();
-    }
-    
-    public static void registerFurnaceRecipe(ItemStack result, ItemStack input)
-    {
-        FurnaceRecipes.instance().addSmeltingRecipe(input, result, 0.1F);
-    }
-    
-    public static void clearRecipes()
-    {
-        CraftingManager.getInstance().getRecipeList().removeAll(RECIPES);
-        RECIPES.clear();
-    }*/
-}

+ 3 - 44
src/main/java/me/km/utils/ReflectionUtils.java

@@ -11,7 +11,6 @@ import net.minecraft.entity.item.ItemEntity;
 import net.minecraft.entity.player.PlayerAbilities;
 import net.minecraft.entity.player.ServerPlayerEntity;
 import net.minecraft.entity.projectile.AbstractArrowEntity;
-import net.minecraft.entity.projectile.ArrowEntity;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.server.management.PlayerList;
 import net.minecraft.util.DamageSource;
@@ -211,50 +210,10 @@ public class ReflectionUtils
         }
         catch(IllegalAccessException | IllegalArgumentException | InvocationTargetException ex)
         {
-            ex.printStackTrace();
+            LogManager.getLogger().warn("setPlayerGameTypeBasedOnOther - " + ex);
         }
     }
     
-    // -----------------------------------------------------------------------------------
-    // explosion stuff
-    // -----------------------------------------------------------------------------------
-    
-    /*private final static Field IS_FLAMING = getField(Explosion.class, "field_77286_a", "causesFire");
-    private final static Field IS_SMOKING = getField(Explosion.class, "field_82755_b", "damagesTerrain");
-    private final static Field EXPLOSION_RNG = getField(Explosion.class, "field_77290_i", "random");
-    private final static Field EXPLOSION_SIZE = getField(Explosion.class, "field_77280_f", "size");
-    private final static Field EXPLODER = getField(Explosion.class, "field_77283_e", "exploder");
-    
-    public static boolean isFlaming(Explosion ex)
-    {
-        return getBoolean(ex, IS_FLAMING, false);
-    }
-    
-    public static boolean isSmoking(Explosion ex)
-    {
-        return getBoolean(ex, IS_SMOKING, false);
-    }
-    
-    public static Random getRandom(Explosion ex)
-    {
-        return getFieldValue(Random.class, ex, EXPLOSION_RNG);
-    }
-    
-    public static float getSize(Explosion ex)
-    {
-        return getFloat(ex, EXPLOSION_SIZE, 1); // 1 for preventing zero dividing
-    }
-    
-    public static void setSize(Explosion ex, float f)
-    {
-        setFloat(ex, EXPLOSION_SIZE, f);
-    }
-    
-    public static Entity getExploder(Explosion ex)
-    {
-        return getFieldValue(Entity.class, ex, EXPLODER);
-    }*/
-    
     // -----------------------------------------------------------------------------------
     // random field gets
     // -----------------------------------------------------------------------------------
@@ -317,7 +276,7 @@ public class ReflectionUtils
         }
         catch(IllegalAccessException | IllegalArgumentException | InvocationTargetException ex)
         {
-            ex.printStackTrace();
+            LogManager.getLogger().warn("applyPotionDamageCalculations - " + ex);
             return damage;
         }
     }
@@ -334,7 +293,7 @@ public class ReflectionUtils
         }
         catch(IllegalAccessException | IllegalArgumentException | InvocationTargetException ex)
         {
-            ex.printStackTrace();
+            LogManager.getLogger().warn("damageArmor - " + ex);
         }
     }
 }

+ 6 - 4
src/main/java/me/km/utils/Utils.java

@@ -5,6 +5,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 import me.km.KajetansMod;
 import me.km.exception.PlayerNotFoundException;
+import me.km.permissions.PermissionManager;
 import net.minecraft.block.BlockState;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.LivingEntity;
@@ -14,6 +15,7 @@ import net.minecraft.entity.projectile.ArrowEntity;
 import net.minecraft.entity.projectile.DamagingProjectileEntity;
 import net.minecraft.entity.projectile.ThrowableEntity;
 import net.minecraft.network.play.server.SEntityVelocityPacket;
+import net.minecraft.server.MinecraftServer;
 import net.minecraft.util.math.AxisAlignedBB;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.Vec3d;
@@ -27,9 +29,9 @@ import net.minecraft.world.World;
 
 public class Utils 
 {    
-    public static String colorMessage(String text, PlayerEntity p) 
+    public static String colorMessage(PermissionManager perms, String text, PlayerEntity p) 
     {
-        if(KajetansMod.perms.hasPermission(p, "color"))
+        if(perms.hasPermission(p, "color"))
         {
             text = text.replace('&', '§');
             return text;
@@ -355,10 +357,10 @@ public class Utils
         return getTargetBlock(ent, range, true, false);
     }
     
-    public static ServerPlayerEntity getPlayerByName(String name) throws PlayerNotFoundException
+    public static ServerPlayerEntity getPlayerByName(MinecraftServer server, String name) throws PlayerNotFoundException
     {
         String nameLower = name.toLowerCase();
-        return KajetansMod.server.getPlayerList().getPlayers().stream()
+        return server.getPlayerList().getPlayers().stream()
                     .filter(pl -> pl.getName().getUnformattedComponentText().toLowerCase().contains(nameLower))
                     .findFirst().orElseThrow(() -> new PlayerNotFoundException(name));
     }

+ 10 - 9
src/main/java/me/km/world/WorldManager.java

@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.function.Consumer;
 import me.km.KajetansMod;
 import me.km.utils.ReflectionUtils;
+import net.minecraft.server.MinecraftServer;
 import net.minecraft.util.ResourceLocation;
 import net.minecraft.world.IWorld;
 import net.minecraft.world.ServerWorld;
@@ -64,9 +65,9 @@ public class WorldManager
         return DimensionManager.getRegistry().getOrDefault(rl);
     }
     
-    private static ServerWorld getWorld(DimensionType type, boolean force)
+    private static ServerWorld getWorld(MinecraftServer server, DimensionType type, boolean force)
     {
-        return DimensionManager.getWorld(KajetansMod.server, type, force, force);
+        return DimensionManager.getWorld(server, type, force, force);
     }
     
     private static boolean containsRegistry(ResourceLocation rl)
@@ -112,9 +113,9 @@ public class WorldManager
     // normal stuff
     // -------------------------------------------------------------------------
     
-    private static ServerWorld getOverworld()
+    private static ServerWorld getOverworld(MinecraftServer server)
     {
-        return KajetansMod.server.getWorld(DimensionType.OVERWORLD);
+        return server.getWorld(DimensionType.OVERWORLD);
     }
     
     public static String getName(IWorld ws)
@@ -136,9 +137,9 @@ public class WorldManager
         return rl == null ? "null" : rl.getPath();
     }
 
-    public static ServerWorld get(String name)
+    public static ServerWorld get(MinecraftServer server, String name)
     {
-        ServerWorld w = getOverworld();
+        ServerWorld w = getOverworld(server);
         String domain;
         if(w.getWorldInfo().getWorldName().startsWith(name))
         {
@@ -153,7 +154,7 @@ public class WorldManager
         {
             return null;
         }
-        return getWorld(type, true);
+        return getWorld(server, type, true);
     }
 
     public static boolean register(String name)
@@ -167,7 +168,7 @@ public class WorldManager
         return true;
     }
     
-    public static boolean unregister(String name)
+    public static boolean unregister(MinecraftServer server, String name)
     {
         ResourceLocation rl = new ResourceLocation(KajetansMod.MODID, name);
         DimensionType removeType = getType(rl);
@@ -175,7 +176,7 @@ public class WorldManager
         {
             return false;
         }
-        ServerWorld ws = getWorld(removeType, false);
+        ServerWorld ws = getWorld(server, removeType, false);
         if(ws != null)
         {
             return false;

+ 9 - 43
src/main/resources/META-INF/mods.toml

@@ -1,45 +1,11 @@
-# This is an example mods.toml file. It contains the data relating to the loading mods.
-# There are several mandatory fields (#mandatory), and many more that are optional (#optional).
-# The overall format is standard TOML format, v0.5.0.
-# Note that there are a couple of TOML lists in this file.
-# Find more information on toml format here:  https://github.com/toml-lang/toml
-# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
-modLoader="javafml" #mandatory
-# A version range to match for said mod loader - for regular FML @Mod it will be the forge version
-loaderVersion="[26,)" #mandatory (24 is current forge version)
-# A URL to refer people to when problems occur with this mod
-#issueTrackerURL="http://my.issue.tracker/" #optional
-# A list of mods - how many allowed here is determined by the individual mod loader
-[[mods]] #mandatory
-# The modid of the mod
-modId="km" #mandatory
-# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
-version="0.0.36" #mandatory
- # A display name for the mod
-displayName="Kajetans Mod" #mandatory
-# A URL to query for updates for this mod. See the JSON update specification <here>
-#updateJSONURL="http://myurl.me/" #optional
-# A URL for the "homepage" for this mod, displayed in the mod UI
-#displayURL="http://example.com/" #optional
-# A file name (in the root of the mod JAR) containing a logo for display
-#logoFile="examplemod.png" #optional
-# A text field displayed in the mod UI
-credits="kajetanjohannes" #optional
-# A text field displayed in the mod UI
-authors="kajetanjohannes" #optional
-# The description text for the mod (multi line!) (#mandatory)
+modLoader="javafml"
+loaderVersion="[26,)"
+[[mods]]
+modId="km"
+version="0.0.36"
+displayName="Kajetans Mod"
+credits="kajetanjohannes"
+authors="kajetanjohannes"
 description='''
 Kajetans Mod for Mundus Crassus
-'''
-# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
-#[[dependencies.examplemod]] #optional
-    # the modid of the dependency
-    #modId="forge" #mandatory
-    # Does this dependency have to exist - if not, ordering below must be specified
-    #mandatory=true #mandatory
-    # The version range of the dependency
-    #versionRange="[25,)" #mandatory
-    # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
-    #ordering="NONE"
-    # Side this dependency is applied on - BOTH, CLIENT or SERVER
-    #side="BOTH"
+'''