Browse Source

support for the core mod, new permission system

Kajetan Johannes Hammerle 6 years ago
parent
commit
62c8f9c360
50 changed files with 325 additions and 811 deletions
  1. 1 0
      build.gradle
  2. 0 5
      src/main/java/me/km/ClientProxy.java
  3. 1 17
      src/main/java/me/km/CommonProxy.java
  4. 11 20
      src/main/java/me/km/KajetansMod.java
  5. 1 1
      src/main/java/me/km/afk/CommandAFK.java
  6. 0 45
      src/main/java/me/km/api/CommandOverloader.java
  7. 4 4
      src/main/java/me/km/api/ModuleCommand.java
  8. 0 55
      src/main/java/me/km/api/VanillaModuleCommand.java
  9. 0 49
      src/main/java/me/km/api/WorldEditCommand.java
  10. 4 4
      src/main/java/me/km/blockprotections/BlockProtection.java
  11. 1 5
      src/main/java/me/km/blockprotections/BlockProtectionBank.java
  12. 8 8
      src/main/java/me/km/blockprotections/CommandBlock.java
  13. 1 1
      src/main/java/me/km/blockprotections/SemiProtections.java
  14. 0 24
      src/main/java/me/km/blocks/BlockNoTrampleFarmland.java
  15. 0 10
      src/main/java/me/km/blocks/ModBlocks.java
  16. 8 1
      src/main/java/me/km/chatmanager/ChatListener.java
  17. 1 1
      src/main/java/me/km/chatmanager/ChatManager.java
  18. 1 1
      src/main/java/me/km/commands/CommandBed.java
  19. 1 1
      src/main/java/me/km/commands/CommandFly.java
  20. 1 1
      src/main/java/me/km/commands/CommandGameMode.java
  21. 2 2
      src/main/java/me/km/commands/CommandHome.java
  22. 1 1
      src/main/java/me/km/commands/CommandKill.java
  23. 1 1
      src/main/java/me/km/commands/CommandPvP.java
  24. 1 2
      src/main/java/me/km/commands/CommandSetBed.java
  25. 0 1
      src/main/java/me/km/commands/CommandSetHome.java
  26. 1 1
      src/main/java/me/km/commands/CommandWarp.java
  27. 17 0
      src/main/java/me/km/databank/DataBank.java
  28. 10 15
      src/main/java/me/km/databank/SimpleDataBank.java
  29. 0 34
      src/main/java/me/km/events/PlayerJoinMessageEvent.java
  30. 0 27
      src/main/java/me/km/events/PlayerLeaveMessageEvent.java
  31. 0 66
      src/main/java/me/km/events/PlayerRespawnAtEvent.java
  32. 0 5
      src/main/java/me/km/jobsystem/JobBank.java
  33. 9 4
      src/main/java/me/km/networking/PlayerDisplayGui.java
  34. 44 87
      src/main/java/me/km/permissions/PermissionManager.java
  35. 115 34
      src/main/java/me/km/permissions/Permissions.java
  36. 5 9
      src/main/java/me/km/playerbank/ModDedicatedPlayerList.java
  37. 0 108
      src/main/java/me/km/playerbank/ModNetHandlerPlayServer.java
  38. 0 5
      src/main/java/me/km/playerbank/PlayerBank.java
  39. 7 24
      src/main/java/me/km/playerbank/PlayerLogInOut.java
  40. 16 16
      src/main/java/me/km/plots/CommandPlot.java
  41. 1 5
      src/main/java/me/km/plots/ProtectionBank.java
  42. 3 3
      src/main/java/me/km/plots/ProtectionBlockAction.java
  43. 1 1
      src/main/java/me/km/plots/ProtectionBucketUse.java
  44. 2 2
      src/main/java/me/km/plots/ProtectionEntity.java
  45. 10 3
      src/main/java/me/km/plots/ProtectionInteract.java
  46. 2 2
      src/main/java/me/km/plots/ProtectionMarkPlot.java
  47. 0 21
      src/main/java/me/km/scoreboard/ScoreBoardLeave.java
  48. 10 6
      src/main/java/me/km/snuviscript/MinecraftFunctions.java
  49. 1 5
      src/main/java/me/km/snuviscript/ScriptBank.java
  50. 22 68
      src/main/java/me/km/snuviscript/ScriptEvents.java

+ 1 - 0
build.gradle

@@ -56,6 +56,7 @@ dependencies {
     // http://www.gradle.org/docs/current/userguide/dependency_management.html
     compile 'mysql:mysql-connector-java:5.1.42'
     compile files('./../../SnuviScriptRecoded/dist/SnuviScriptRecoded.jar')
+    compile files('./../KajetansCoreMod/build/libs/kcm-1.0.jar')
 }
 
 processResources {

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

@@ -114,11 +114,6 @@ public class ClientProxy extends CommonProxy
         }, ModItems.coloredSoup);
     }
 
-    @Override
-    public void overloadPlayerList(MinecraftServer server) 
-    {
-    }
-
     @SideOnly(Side.CLIENT)
     private final static ModelHat STRAW_HAT = new ModelHat(1);
     @SideOnly(Side.CLIENT)

+ 1 - 17
src/main/java/me/km/CommonProxy.java

@@ -40,23 +40,7 @@ public class CommonProxy
         MinecraftForge.EVENT_BUS.register(new BlockEvents());
         MinecraftForge.EVENT_BUS.register(new CustomEventCaller());
     }
-    
-    public void overloadPlayerList(MinecraftServer server)
-    {
-        // This prevents clients from crashing, the custom player list only loads on servers
-        overloadPlayerListWorkaround(server);
-    }
-    
-    @SideOnly(Side.SERVER)
-    private void overloadPlayerListWorkaround(MinecraftServer server)
-    {
-        if(server instanceof DedicatedServer)
-        {
-            DedicatedServer dedi = (DedicatedServer) server;
-            dedi.setPlayerList(new ModDedicatedPlayerList(dedi));
-        }
-    }
-    
+
     public ModelBiped getCylinderModel()
     {
         return null;

+ 11 - 20
src/main/java/me/km/KajetansMod.java

@@ -1,9 +1,9 @@
 package me.km;
 
+import me.kcm.command.ModServerCommandManager;
 import me.km.capabilities.CapabilitiesEvents;
 import me.km.api.Module;
 import me.km.api.SimpleConfig;
-import me.km.api.CommandOverloader;
 import me.km.blockprotections.BlockProtectionBank;
 import me.km.capabilities.DamageUtils;
 import me.km.chatmanager.ChatManager;
@@ -31,7 +31,6 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
 import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
 import net.minecraftforge.fml.common.event.FMLServerAboutToStartEvent;
 import net.minecraftforge.fml.common.event.FMLServerStoppingEvent;
-import net.minecraftforge.fml.common.event.FMLServerStartedEvent;
 import net.minecraftforge.fml.common.registry.GameRegistry;
 import net.minecraftforge.fml.relauncher.Side;
 import net.minecraftforge.fml.relauncher.SideOnly;
@@ -61,6 +60,8 @@ public class KajetansMod
     public static SkillManager skills;
     public static Module scrolls;
     public static ScoreboardAPI scoreboard;
+    
+    @SideOnly(Side.SERVER)
     public static PermissionManager perms;
     
     @SidedProxy(serverSide = "me.km.CommonProxy", clientSide = "me.km.ClientProxy")
@@ -157,17 +158,12 @@ public class KajetansMod
     {
         // takes place after setting of playerlist but before world load
         server = e.getServer();
-        proxy.overloadPlayerList(server);
     }
     
-    private FMLServerStartingEvent event;
-    
     @Mod.EventHandler
     public void serverStarting(FMLServerStartingEvent e) 
     {
         singlePlayer = e.getServer().isSinglePlayer();
-        // Workaround
-        event = e;
         if(singlePlayer)
         {
             return;
@@ -201,6 +197,7 @@ public class KajetansMod
         // Scheduler
         scheduler = new SnuviScheduler("Scheduler", "Scheduler", TextFormatting.GREEN);
         scheduler.registerEvents("me.km.scheduler");
+        databank.startReconnecting(scheduler);
 
         // Spielerdatenbank
         playerbank = new PlayerManager("PlayerBank", "PlayerBank", TextFormatting.RED, databank);
@@ -275,31 +272,25 @@ public class KajetansMod
         environment.registerEvents("me.km.environment");
 
         // Scoreboard
-        scoreboard = new ScoreboardAPI("Scoreboard", "Scoreboard", TextFormatting.GOLD);
-        scoreboard.registerEvents("me.km.scoreboard");
+        scoreboard = new ScoreboardAPI("Scoreboard", "Scoreboard", TextFormatting.GREEN);
 
         // Permissions
         perms = new PermissionManager("Permissions", "Perms", TextFormatting.DARK_PURPLE);
         perms.registerEvents("me.km.permissions");
+        setPermissionManager();
 
         scripts.startScript("startscript");
     }
     
-    @Mod.EventHandler
-    public void overwriteCommandsOnFullStart(FMLServerStartedEvent e) 
+    @SideOnly(Side.SERVER)
+    private void setPermissionManager() // dependency workaround
     {
-        if(singlePlayer)
+        if(server.commandManager instanceof ModServerCommandManager)
         {
-            return;
+            ((ModServerCommandManager) server.commandManager).setPermissionManager(perms);
         }
-        // Workaround
-        KajetansMod.scheduler.scheduleTask(() -> 
-        {
-            CommandOverloader.overloadCommands(event, generalCommands);
-            event = null;
-        }, 60);
     }
-    
+
     @Mod.EventHandler
     public void onServerStop(FMLServerStoppingEvent e) 
     {

+ 1 - 1
src/main/java/me/km/afk/CommandAFK.java

@@ -26,7 +26,7 @@ public class CommandAFK extends ModuleCommand
         EntityPlayer affectedPlayer;
         try
         {
-            if(!KajetansMod.perms.has(cs, Permissions.AFK))
+            if(!KajetansMod.perms.hasPermission(cs, Permissions.AFK))
             {
                 throw new IndexOutOfBoundsException();
             }   

+ 0 - 45
src/main/java/me/km/api/CommandOverloader.java

@@ -1,45 +0,0 @@
-package me.km.api;
-
-import me.km.KajetansMod;
-import me.km.permissions.Permissions;
-import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
-
-public class CommandOverloader 
-{
-    public static void overloadCommands(FMLServerStartingEvent e, Module m)
-    {
-        if(!KajetansMod.debugMode)
-        {
-            KajetansMod.server.commandManager.getCommands().values().stream()
-                    // Overload only vanilla commands
-                    .filter(command -> !(command instanceof ModuleCommand))
-                    // Prevent overloading of already overloaded commands (summon, ...)
-                    .filter(command -> m.getCommand(command.getName()) == null) 
-                    .forEach(command -> 
-            {
-                Permissions perm;
-                try
-                {
-                    if(command.getClass().getName().startsWith("com.sk89q."))
-                    {
-                        m.registerCommand(e, new WorldEditCommand(command, m));
-                        m.sendToConsole(command.getName() + " wurde überschrieben.");
-                        return;
-                    }
-                    else
-                    {
-                        perm = Permissions.valueOf(command.getName());
-                    }
-                }
-                catch(IllegalArgumentException ex)
-                {
-                    m.sendWarningToConsole("Ungültige Permission für Command-Name: " + command.getName());
-                    perm = Permissions.VANILLA;
-                }
-                m.registerCommand(e, new VanillaModuleCommand(command, m, perm));
-                m.sendToConsole(command.getName() + " wurde überschrieben.");
-            });
-            m.sendToConsole("Alle Commands wurden überschrieben.");
-        }
-    }
-}

+ 4 - 4
src/main/java/me/km/api/ModuleCommand.java

@@ -18,7 +18,7 @@ public abstract class ModuleCommand extends CommandBase
     private final String name;
     private String usage;
     private String description;
-    private Permissions perm;
+    private String perm;
     private List<String> aliases;
     
     public ModuleCommand(String name, Module m) 
@@ -77,12 +77,12 @@ public abstract class ModuleCommand extends CommandBase
         return description;
     }
     
-    public void setPermission(Permissions perm)
+    public void setPermission(String perm)
     {
         this.perm = perm;
     }
     
-    public Permissions getPermission()
+    public String getPermission()
     {
         return perm;
     }
@@ -112,7 +112,7 @@ public abstract class ModuleCommand extends CommandBase
     @Override
     public boolean checkPermission(MinecraftServer server, ICommandSender cs) 
     {
-        return KajetansMod.perms.has(cs, perm);
+        return KajetansMod.perms.hasPermission(cs, perm);
     }
     
     @Override

+ 0 - 55
src/main/java/me/km/api/VanillaModuleCommand.java

@@ -1,55 +0,0 @@
-package me.km.api;
-
-import java.util.List;
-import me.km.KajetansMod;
-import me.km.permissions.Permissions;
-import net.minecraft.command.CommandException;
-import net.minecraft.command.ICommand;
-import net.minecraft.command.ICommandSender;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.text.TextComponentTranslation;
-import net.minecraft.util.text.TextFormatting;
-
-public class VanillaModuleCommand extends ModuleCommand
-{
-    private final ICommand vanillaCommand;
-    
-    public VanillaModuleCommand(ICommand command, Module m, Permissions perm) 
-    {
-        super(command.getName(), m);
-        super.setDescription("A vanilla command");
-        TextComponentTranslation text = new TextComponentTranslation(command.getUsage(null));
-        super.setUsage(text.getFormattedText());
-        super.setPermission(perm);
-        vanillaCommand = command;
-    }
-
-    @Override
-    public boolean execute(ICommandSender cs, String[] arg) 
-    {
-        try
-        {
-            vanillaCommand.execute(KajetansMod.server, cs, arg);
-        }
-        catch (CommandException ex)
-        {
-            TextComponentTranslation text = new TextComponentTranslation(ex.getMessage(), ex.getErrorObjects());
-            text.getStyle().setColor(TextFormatting.RED);
-            cs.sendMessage(text);
-        }
-        return true;
-    }
-
-    @Override
-    public List<String> getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos targetPos) 
-    {
-        return vanillaCommand.getTabCompletions(server, sender, args, targetPos);
-    }
-
-    @Override
-    public List<String> getAliases() 
-    {
-        return vanillaCommand.getAliases();
-    }
-}

+ 0 - 49
src/main/java/me/km/api/WorldEditCommand.java

@@ -1,49 +0,0 @@
-package me.km.api;
-
-import java.util.List;
-import me.km.KajetansMod;
-import me.km.permissions.Permissions;
-import net.minecraft.command.ICommand;
-import net.minecraft.command.ICommandSender;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.util.math.BlockPos;
-
-public class WorldEditCommand extends ModuleCommand
-{
-    private final ICommand command;
-    
-    public WorldEditCommand(ICommand command, Module m) 
-    {
-        super(command.getName(), m);
-        super.setDescription("A worldedit command");
-        super.setUsage(command.getUsage(null));
-        super.setPermission(Permissions.WORLDEDIT);
-        this.command = command;
-    }
-
-    @Override
-    public boolean execute(ICommandSender cs, String[] arg) 
-    {
-        try
-        {
-            command.execute(KajetansMod.server, cs, arg);
-        }
-        catch(Exception ex)
-        {
-            this.getModule().send(cs, "WorldEdit-Error");
-        }
-        return true;
-    }
-
-    @Override
-    public List<String> getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos targetPos) 
-    {
-        return command.getTabCompletions(server, sender, args, targetPos);
-    }
-    
-    @Override
-    public List<String> getAliases() 
-    {
-        return command.getAliases();
-    }
-}

+ 4 - 4
src/main/java/me/km/blockprotections/BlockProtection.java

@@ -48,7 +48,7 @@ public class BlockProtection extends ModuleListener
         if(b == Blocks.CHEST || b == Blocks.TRAPPED_CHEST)
         {
             BlockPos otherChest = Utils.getSameNearbyBlock(w, e.getPos(), b);
-            if(otherChest != null && !bank.hasAccess(otherChest, w, p.getGameProfile(), true) && !KajetansMod.perms.has(p, Permissions.BLOCK_BYPASS))
+            if(otherChest != null && !bank.hasAccess(otherChest, w, p.getGameProfile(), true) && !KajetansMod.perms.hasPermission(p, Permissions.BLOCK_BYPASS))
             {
                 this.getModule().send(p, "Du darfst diesen Block hier nicht setzen");
                 e.setCanceled(true);
@@ -62,7 +62,7 @@ public class BlockProtection extends ModuleListener
             BlockPos pos = e.getPos().add(0, 1, 0);
             if(w.getBlockState(pos).getBlock() instanceof BlockContainer)
             {
-                if(!bank.hasAccess(pos, w, p, true) && !KajetansMod.perms.has(p, Permissions.BLOCK_BYPASS))
+                if(!bank.hasAccess(pos, w, p, true) && !KajetansMod.perms.hasPermission(p, Permissions.BLOCK_BYPASS))
                 {
                     this.getModule().send(p, "Du darfst diesen Block hier nicht setzen");
                     e.setCanceled(true);
@@ -92,7 +92,7 @@ public class BlockProtection extends ModuleListener
             {
                 return;
             }       
-            if(bank.hasAccess(pos, w, p, false) || KajetansMod.perms.has(p, Permissions.BLOCK_BYPASS))
+            if(bank.hasAccess(pos, w, p, false) || KajetansMod.perms.hasPermission(p, Permissions.BLOCK_BYPASS))
             {
                 bank.removeBlock(pos, w, p);
                 return;
@@ -120,7 +120,7 @@ public class BlockProtection extends ModuleListener
         {
             pos = pos.add(0, -1, 0);
         }
-        if(bank.hasAccess(pos, e.getWorld(), p, true) || KajetansMod.perms.has(p, Permissions.BLOCK_BYPASS))
+        if(bank.hasAccess(pos, e.getWorld(), p, true) || KajetansMod.perms.hasPermission(p, Permissions.BLOCK_BYPASS))
         {
             return;
         }  

+ 1 - 5
src/main/java/me/km/blockprotections/BlockProtectionBank.java

@@ -20,11 +20,7 @@ public class BlockProtectionBank extends SimpleDataBank
     public BlockProtectionBank(Module m, DataBank c) 
     {
         super(m, c);
-    }
-    
-    @Override
-    protected void init() 
-    {
+        
         // BlockProtectionBank - Coords und ID
         if(!this.doesTableExist("block"))
         {

+ 8 - 8
src/main/java/me/km/blockprotections/CommandBlock.java

@@ -54,7 +54,7 @@ public class CommandBlock extends ModuleCommand
         Module m = this.getModule();
         EntityPlayerMP p = (EntityPlayerMP) cs;
         World w = p.getEntityWorld();
-        if(!KajetansMod.worldManager.getWorldPreferences(w).blockProtection && !KajetansMod.perms.has(cs, Permissions.BLOCK_BYPASS))
+        if(!KajetansMod.worldManager.getWorldPreferences(w).blockProtection && !KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_BYPASS))
         {
             m.send(cs, "Du darfst hier keine Blöcke schützen.");
             return true;
@@ -64,7 +64,7 @@ public class CommandBlock extends ModuleCommand
             BlockPos pos = Utils.getPlayerTarget(p);  
             IBlockState state = w.getBlockState(pos);
             Block b = state.getBlock();
-            if(!Utils.shouldBeProtected(b) && !KajetansMod.perms.has(cs, Permissions.BLOCK_ALL))
+            if(!Utils.shouldBeProtected(b) && !KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_ALL))
             {
                 m.send(cs, "Du kannst diesen Block nicht bearbeiten.");
                 m.send(cs, "Du bist auf folgenden Block gerichtet: " + b.toString());
@@ -79,7 +79,7 @@ public class CommandBlock extends ModuleCommand
                 case "protect":  
                 {
                     String name = null;
-                    if(arg.length >= 2 && KajetansMod.perms.has(cs, Permissions.BLOCK_OTHER))
+                    if(arg.length >= 2 && KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_OTHER))
                     {
                         name = arg[1];
                     }
@@ -102,7 +102,7 @@ public class CommandBlock extends ModuleCommand
                         this.getModule().send(p, "Der Block ist nicht gesichert.");
                         return true;
                     }
-                    if(!bank.hasAccess(pos, w, p, false) && !KajetansMod.perms.has(cs, Permissions.BLOCK_BYPASS))
+                    if(!bank.hasAccess(pos, w, p, false) && !KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_BYPASS))
                     {
                         m.send(cs, "Du hast keinen Zugriff auf diesen Block.");
                         return true;
@@ -133,7 +133,7 @@ public class CommandBlock extends ModuleCommand
                             this.getModule().send(p, "Der Block ist nicht gesichert.");
                             return true;
                         }
-                        if(!bank.hasAccess(pos, w, p, false) && !KajetansMod.perms.has(cs, Permissions.BLOCK_BYPASS))
+                        if(!bank.hasAccess(pos, w, p, false) && !KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_BYPASS))
                         {
                             m.send(cs, "Du hast keinen Zugriff auf diesen Block.");
                             return true;
@@ -166,7 +166,7 @@ public class CommandBlock extends ModuleCommand
                             this.getModule().send(p, "Der Block ist nicht gesichert.");
                             return true;
                         }
-                        if(!bank.hasAccess(pos, w, p, true) && !KajetansMod.perms.has(cs, Permissions.BLOCK_BYPASS))
+                        if(!bank.hasAccess(pos, w, p, true) && !KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_BYPASS))
                         {
                             m.send(cs, "Du hast keinen Zugriff auf diesen Block.");
                             return true;
@@ -192,7 +192,7 @@ public class CommandBlock extends ModuleCommand
                 }
                 case "clear":
                 {
-                    if(KajetansMod.perms.has(cs, Permissions.BLOCK_CLEAR))
+                    if(KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_CLEAR))
                     {
                         checker = false;
                         SnuviScheduler.scheduleAsyncTask(() -> 
@@ -266,7 +266,7 @@ public class CommandBlock extends ModuleCommand
         m.sendHelpListElement(cs, "info", "Gibt Information über den Block");
         m.sendHelpListElement(cs, "share <player>", "Teilt eine Block-Protection mit einem Spieler");
         m.sendHelpListElement(cs, "kick <player>", "Kickt einen Spieler von einer Block-Protection");
-        if(KajetansMod.perms.has(cs, Permissions.BLOCK_CLEAR))
+        if(KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_CLEAR))
         {
             m.sendHelpListElement(cs, "clear", "Entfernt ungültige Block-Protections auf jeden Block");
         }

+ 1 - 1
src/main/java/me/km/blockprotections/SemiProtections.java

@@ -25,7 +25,7 @@ public class SemiProtections extends ModuleListener
     public void onBlockBreak(BlockEvent.BreakEvent e)
     {
         EntityPlayer p = e.getPlayer();
-        if(KajetansMod.perms.has(p, Permissions.BLOCK_BYPASS) && p.isCreative())
+        if(KajetansMod.perms.hasPermission(p, Permissions.BLOCK_BYPASS) && p.isCreative())
         {
             return;
         }

+ 0 - 24
src/main/java/me/km/blocks/BlockNoTrampleFarmland.java

@@ -1,24 +0,0 @@
-package me.km.blocks;
-
-import net.minecraft.block.BlockFarmland;
-import net.minecraft.block.SoundType;
-import net.minecraft.entity.Entity;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.world.World;
-
-public class BlockNoTrampleFarmland extends BlockFarmland
-{
-    public BlockNoTrampleFarmland()
-    {
-        super.setHardness(0.6F);
-        super.setSoundType(SoundType.GROUND);
-        super.setUnlocalizedName("farmland");
-        super.useNeighborBrightness = true;
-    }
-    
-    @Override
-    public void onFallenUpon(World worldIn, BlockPos pos, Entity entityIn, float fallDistance) 
-    {
-        entityIn.fall(fallDistance, 1.0F);
-    }
-}

+ 0 - 10
src/main/java/me/km/blocks/ModBlocks.java

@@ -10,7 +10,6 @@ import net.minecraft.block.SoundType;
 import net.minecraft.block.material.MapColor;
 import net.minecraft.block.material.Material;
 import net.minecraft.creativetab.CreativeTabs;
-import net.minecraft.init.Blocks;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemBlock;
 import net.minecraftforge.fml.common.registry.GameRegistry;
@@ -134,15 +133,6 @@ public class ModBlocks
         
         // slabs
         gravelSlab = register(r, (BlockModSlab) new BlockModSlab(Material.SAND, "gravel_slab", "gravelSlab").setSoundType(SoundType.GROUND).setHardness(0.6F));
-        
-        // overwrites
-        register(r, Blocks.FARMLAND, new BlockNoTrampleFarmland());
-    }
-    
-    private static void register(IForgeRegistry<Block> r, Block old, Block newBlock)
-    {
-        newBlock.setRegistryName(old.getRegistryName());
-        r.register(newBlock);
     }
     
     public static void initItemBlocks(IForgeRegistry<Item> r) 

+ 8 - 1
src/main/java/me/km/chatmanager/ChatListener.java

@@ -1,5 +1,6 @@
 package me.km.chatmanager;
 
+import me.kcm.events.PlayerTabListNameEvent;
 import me.km.KajetansMod;
 import me.km.api.Module;
 import me.km.api.ModuleListener;
@@ -10,7 +11,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
 
 public class ChatListener extends ModuleListener
 {
-    private ChatManager manager;
+    private final ChatManager manager;
     
     public ChatListener(Module m) 
     {
@@ -35,4 +36,10 @@ public class ChatListener extends ModuleListener
             e.setDisplayname(s);
         }
     }
+    
+    @SubscribeEvent
+    public void onGetPlayerName(PlayerTabListNameEvent e)
+    {
+        e.setName(new TextComponentString(KajetansMod.chatManager.getFullName(e.getEntityPlayer())));
+    }
 }

+ 1 - 1
src/main/java/me/km/chatmanager/ChatManager.java

@@ -175,7 +175,7 @@ public class ChatManager extends Module
     public static String colorMessage(String text, ICommandSender cs) 
     {
         text = text.replace("&k", "");
-        if(KajetansMod.perms.has(cs, Permissions.USE_COLOR))
+        if(KajetansMod.perms.hasPermission(cs, Permissions.USE_COLOR))
         {
             text = text.replace("&", "§");
             return text;

+ 1 - 1
src/main/java/me/km/commands/CommandBed.java

@@ -32,7 +32,7 @@ public class CommandBed extends ModuleCommand
         }
         EntityPlayer p = (EntityPlayer) cs;
         
-        if(arg.length == 0 || !KajetansMod.perms.has(cs, Permissions.BED_OTHER))
+        if(arg.length == 0 || !KajetansMod.perms.hasPermission(cs, Permissions.BED_OTHER))
         {
             BlockPos pos = p.getBedLocation(p.dimension);
             if(pos == null)

+ 1 - 1
src/main/java/me/km/commands/CommandFly.java

@@ -26,7 +26,7 @@ public class CommandFly extends ModuleCommand
         EntityPlayerMP affectedPlayer;
         try
         {
-            if(arg.length >= 1 && !KajetansMod.perms.has(cs, Permissions.FLY_OTHER))
+            if(arg.length >= 1 && !KajetansMod.perms.hasPermission(cs, Permissions.FLY_OTHER))
             {
                 this.getModule().send(cs, "Du darfst nur deinen eigenen Fly setzen.");
                 return true;

+ 1 - 1
src/main/java/me/km/commands/CommandGameMode.java

@@ -33,7 +33,7 @@ public class CommandGameMode extends ModuleCommand
         EntityPlayer affectedPlayer;
         try
         {
-            if(arg.length >= 2 && !KajetansMod.perms.has(cs, Permissions.GAMEMODE_OTHER))
+            if(arg.length >= 2 && !KajetansMod.perms.hasPermission(cs, Permissions.GAMEMODE_OTHER))
             {
                 this.getModule().send(cs, "Du darfst nur deinen eigenen GameMode setzen.");
                 return true;

+ 2 - 2
src/main/java/me/km/commands/CommandHome.java

@@ -39,7 +39,7 @@ public class CommandHome extends ModuleCommand
         if(arg.length >= 1)
         {
             homename = arg[0];          
-            if(arg[0].contains(":") && KajetansMod.perms.has(cs, Permissions.HOME_OTHER))
+            if(arg[0].contains(":") && KajetansMod.perms.hasPermission(cs, Permissions.HOME_OTHER))
             {               
                 String[] split = homename.split(":");
                 String uuid = KajetansMod.playerbank.getDataBank().getUUID(split[0]);
@@ -72,7 +72,7 @@ public class CommandHome extends ModuleCommand
         if(arg.length == 0 || homename.equals(""))
         {
             m.send(cs, "Folgende Homepunkte stehen zur Verfügung:");      
-            Arrays.stream(homes).forEach(h -> {m.sendListElement(cs, h.getName().replaceAll(".yml", ""));});
+            Arrays.stream(homes).forEach(h -> {m.sendListElement(cs, h.getName().replaceAll(".snuvic", ""));});
             return true;
         }
                   

+ 1 - 1
src/main/java/me/km/commands/CommandKill.java

@@ -24,7 +24,7 @@ public class CommandKill extends ModuleCommand
     @Override
     public boolean execute(ICommandSender cs, String[] arg) 
     {
-        if(arg.length == 0 || !KajetansMod.perms.has(cs, Permissions.KILL_OTHER))
+        if(arg.length == 0 || !KajetansMod.perms.hasPermission(cs, Permissions.KILL_OTHER))
         {
             if(!(cs instanceof EntityPlayer))
             {

+ 1 - 1
src/main/java/me/km/commands/CommandPvP.java

@@ -27,7 +27,7 @@ public class CommandPvP extends ModuleCommand
         EntityPlayer affectedPlayer;
         try
         {
-            if(!KajetansMod.perms.has(cs, Permissions.PVP_OTHER))
+            if(!KajetansMod.perms.hasPermission(cs, Permissions.PVP_OTHER))
             {
                 throw new IndexOutOfBoundsException();
             }

+ 1 - 2
src/main/java/me/km/commands/CommandSetBed.java

@@ -35,8 +35,7 @@ public class CommandSetBed extends ModuleCommand
             this.getModule().send(cs, "Du musst auf ein Bett gerichtet sein.");
             return true;
         }
-        p.setSpawnPoint(pos, false);
-        p.bedLocation = pos;
+        p.setSpawnChunk(pos, true, p.world.provider.getDimension());
         this.getModule().send(cs, "Dein Bett-Spawn wurde gesetzt.");
         return true;
     }

+ 0 - 1
src/main/java/me/km/commands/CommandSetHome.java

@@ -5,7 +5,6 @@ import me.km.api.Location;
 import me.km.api.Module;
 import me.km.api.ModuleCommand;
 import me.km.api.SimpleConfig;
-import me.km.api.Utils;
 import me.km.permissions.Permissions;
 import net.minecraft.command.ICommandSender;
 import net.minecraft.entity.player.EntityPlayer;

+ 1 - 1
src/main/java/me/km/commands/CommandWarp.java

@@ -35,7 +35,7 @@ public class CommandWarp extends ModuleCommand
         {
             return new ArrayList<>();
         }
-        return Arrays.stream(files).map(w -> w.getName().substring(0, w.getName().length() - 6)).collect(Collectors.toList());
+        return Arrays.stream(files).map(w -> w.getName().substring(0, w.getName().length() - 7)).collect(Collectors.toList());
     }
     
     @Override

+ 17 - 0
src/main/java/me/km/databank/DataBank.java

@@ -5,6 +5,7 @@ import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.sql.Statement;
 import me.km.api.Module;
+import me.km.scheduler.SnuviScheduler;
 import net.minecraft.util.text.TextFormatting;
 
 public class DataBank extends Module
@@ -64,4 +65,20 @@ public class DataBank extends Module
         }
         return c.createStatement();
     } 
+    
+    public void startReconnecting(SnuviScheduler scheduler)
+    {
+        scheduler.scheduleRepeatingTask(() -> 
+        {
+            try(Statement stmt = createStatement()) 
+            {
+                // pointless query just for reconnecting
+                stmt.executeUpdate("SHOW TABLES IN minecraft");
+            }
+            catch(SQLException ex) 
+            {
+                sendToConsole("reconnect was done");
+            }
+        }, 100, 12000); // doing this every 10 minutes
+    }
 }

+ 10 - 15
src/main/java/me/km/databank/SimpleDataBank.java

@@ -17,25 +17,20 @@ public abstract class SimpleDataBank
     {
         this.c = c;
         this.m = m;
-        
-        init();
     }
     
-    public Module getModule()
+    public final Module getModule()
     {
         return m;
     }
     
-    protected abstract void init();
-    
     /** Führt den gegebenen Query aus und gibt den Erfolg zurück.
      *
      * @param query ein Query, irgendetwas mit "INSERT, UPDATE, ..."
      * @param ignore gibt keine Fehlermeldung aus, falls auf <code> true </code>
      * @return <code> true </code> falls kein Error auftrat, sonst <code> false </code>
      */
-    
-    public boolean update(String query, boolean ignore)
+    public final boolean update(String query, boolean ignore)
     {
         try(Statement stmt = c.createStatement()) 
         {
@@ -62,7 +57,7 @@ public abstract class SimpleDataBank
      * @return das gewünschte Objekt, null falls ein Fehler auftrat oder der ResultSet leer ist
      */
     @SuppressWarnings("unchecked")
-    public <T> T getFirst(String query, Class<T> r)
+    public final <T> T getFirst(String query, Class<T> r)
     {
         //System.out.println(query);
         try(Statement stmt = c.createStatement();)
@@ -88,7 +83,7 @@ public abstract class SimpleDataBank
      * @param query ein Query, irgendetwas mit "SELECT"
      * @return der gewünschte Byte, null falls ein Fehler auftrat oder der ResultSet leer ist
      */
-    public Byte getFirstByte(String query)
+    public final Byte getFirstByte(String query)
     {
         //System.out.println(query);
         try(Statement stmt = c.createStatement();)
@@ -115,7 +110,7 @@ public abstract class SimpleDataBank
      * @return alle Spalten als Liste, bei einem Error kann sie null sein
      */
     @SuppressWarnings("unchecked")
-    public ArrayList<Object> getFirstRow(String query)
+    public final ArrayList<Object> getFirstRow(String query)
     {
         //System.out.println(query);
         ArrayList<Object> list = new ArrayList();
@@ -152,7 +147,7 @@ public abstract class SimpleDataBank
      * @return alle Spalten als Liste, bei einem Error kann sie null sein
      */
     @SuppressWarnings("unchecked")
-    public ArrayList<Object> getFirstColumn(String query)
+    public final ArrayList<Object> getFirstColumn(String query)
     {
         //System.out.println(query);
         ArrayList<Object> list = new ArrayList();
@@ -184,7 +179,7 @@ public abstract class SimpleDataBank
      * @return alle Spalten als Liste, bei einem Error kann sie null sein
      */
     @SuppressWarnings("unchecked")
-    public ArrayList<Byte> getFirstByteColumn(String query)
+    public final ArrayList<Byte> getFirstByteColumn(String query)
     {
         //System.out.println(query);
         ArrayList<Byte> list = new ArrayList();
@@ -216,7 +211,7 @@ public abstract class SimpleDataBank
      * @return alle Spalten als Liste in einer Liste, bei einem Error kann sie null sein
      */
     @SuppressWarnings("unchecked")
-    public ArrayList<ArrayList<Object>> get(String query)
+    public final ArrayList<ArrayList<Object>> get(String query)
     {
         //System.out.println(query);
         ArrayList<ArrayList<Object>> list = new ArrayList();
@@ -267,7 +262,7 @@ public abstract class SimpleDataBank
      * @param query ein Query, irgendetwas mit "SELECT"
      * @return zwei Spalten als List-Map, bei einem Error kann sie null sein
      */
-    public Table getTable(String query)
+    public final Table getTable(String query)
     {
         Table table = new Table(2);
         try(Statement stmt = c.createStatement();)
@@ -297,7 +292,7 @@ public abstract class SimpleDataBank
      * @param table der Name der Tabelle
      * @return <code> true </code> falls die Tabelle existiert, sonst <code> false </code>
      */
-    public boolean doesTableExist(String table)
+    public final boolean doesTableExist(String table)
     {
         try(Statement stmt = c.createStatement();)
         {

+ 0 - 34
src/main/java/me/km/events/PlayerJoinMessageEvent.java

@@ -1,34 +0,0 @@
-package me.km.events;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraftforge.event.entity.player.PlayerEvent;
-import net.minecraftforge.fml.common.eventhandler.Cancelable;
-
-@Cancelable
-public class PlayerJoinMessageEvent extends PlayerEvent
-{
-    private String message;
-    private final boolean nameChange;
-    
-    public PlayerJoinMessageEvent(EntityPlayer player, boolean nameChange, String message) 
-    {
-        super(player);
-        this.message = message;
-        this.nameChange = nameChange;
-    }
-
-    public void setMessage(String message) 
-    {
-        this.message = message;
-    }
-
-    public String getMessage() 
-    {
-        return message;
-    }
-    
-    public boolean hasNameChanged()
-    {
-        return nameChange;
-    }
-}

+ 0 - 27
src/main/java/me/km/events/PlayerLeaveMessageEvent.java

@@ -1,27 +0,0 @@
-package me.km.events;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraftforge.event.entity.player.PlayerEvent;
-import net.minecraftforge.fml.common.eventhandler.Cancelable;
-
-@Cancelable
-public class PlayerLeaveMessageEvent extends PlayerEvent
-{
-    private String message;
-    
-    public PlayerLeaveMessageEvent(EntityPlayer player, String message) 
-    {
-        super(player);
-        this.message = message;
-    }
-
-    public void setMessage(String message) 
-    {
-        this.message = message;
-    }
-
-    public String getMessage() 
-    {
-        return message;
-    }
-}

+ 0 - 66
src/main/java/me/km/events/PlayerRespawnAtEvent.java

@@ -1,66 +0,0 @@
-package me.km.events;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.util.math.Vec3d;
-import net.minecraft.world.WorldServer;
-import net.minecraftforge.event.entity.player.PlayerEvent;
-
-public class PlayerRespawnAtEvent extends PlayerEvent
-{
-    private WorldServer w;
-    private Vec3d v;
-    private boolean force;
-    private boolean forceKeepInventory;
-    
-    public PlayerRespawnAtEvent(EntityPlayer player, WorldServer w, double x, double y, double z) 
-    {
-        super(player);
-        this.w = w;
-        this.v = new Vec3d(x, y, z);
-        this.force = false;
-        this.forceKeepInventory = false;
-    }
-    
-    public WorldServer getWorld()
-    {
-        return w;
-    }
-    
-    public void setWorld(WorldServer w)
-    {
-        if(this.w != w)
-        {
-            this.force = true;
-        }
-        this.w = w;
-    }
-    
-    public Vec3d getRespawnLoc()
-    {
-        return v;
-    }
-    
-    public void setRespawnLoc(Vec3d v)
-    {
-        if(this.v != v)
-        {
-            this.force = true;
-        }
-        this.v = v;
-    }
-    
-    public boolean isForced()
-    {
-        return force;
-    }
-    
-    public void setForcedInventoryKeeping(boolean b)
-    {
-        this.forceKeepInventory = b;
-    }
-    
-    public boolean isInventoryKeepingForced()
-    {
-        return forceKeepInventory;
-    }
-}

+ 0 - 5
src/main/java/me/km/jobsystem/JobBank.java

@@ -11,11 +11,6 @@ public class JobBank extends SimpleDataBank
     public JobBank(Module m, DataBank c) 
     {
         super(m, c);
-    }
-    
-    @Override
-    protected void init() 
-    {
         // Speicher für den aktuellen Beruf
         if(!this.doesTableExist("currentjob"))
         {

+ 9 - 4
src/main/java/me/km/networking/PlayerDisplayGui.java

@@ -13,14 +13,19 @@ import net.minecraftforge.fml.relauncher.SideOnly;
 @SideOnly(Side.CLIENT)
 public class PlayerDisplayGui extends Gui
 {
+    /*
+        TODO
+        Make player head rendering work, see
+        net.minecraft.client.gui.GuiPlayerTabOverlay
+    */
     private static final ResourceLocation CUSTOM_ICONS = new ResourceLocation(KajetansMod.MODID, "textures/gui/icons.png");
     
     public final static PlayerDisplayGui INSTANCE = new PlayerDisplayGui(Minecraft.getMinecraft());
     
     private class IconStorage
     {
-        private Icon icon;
-        private int count;
+        private final Icon icon;
+        private final int count;
         
         public IconStorage(int id, int count)
         {
@@ -87,8 +92,8 @@ public class PlayerDisplayGui extends Gui
         }
     }
     
-    private TreeMap<Integer, LineData> strings;
-    private Minecraft mc;
+    private final TreeMap<Integer, LineData> strings;
+    private final Minecraft mc;
     
     public PlayerDisplayGui(Minecraft mc)
     {

+ 44 - 87
src/main/java/me/km/permissions/PermissionManager.java

@@ -1,70 +1,47 @@
 package me.km.permissions;
 
 import java.util.ArrayList;
-import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.UUID;
+import me.kcm.command.ICommandManager;
 import me.km.KajetansMod;
 import me.km.api.Module;
+import me.km.snuviscript.ScriptEvents;
+import net.minecraft.command.ICommand;
 import net.minecraft.command.ICommandSender;
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.server.MinecraftServer;
+import net.minecraft.util.text.TextComponentString;
 import net.minecraft.util.text.TextFormatting;
+import net.minecraftforge.fml.relauncher.Side;
+import net.minecraftforge.fml.relauncher.SideOnly;
 
-public class PermissionManager extends Module
+@SideOnly(Side.SERVER)
+public class PermissionManager extends Module implements ICommandManager
 {
     private final HashMap<UUID, ArrayList<Integer>> playerGroups;
-    private final ArrayList<EnumSet<Permissions>> enumGroupPerms;
     private final ArrayList<HashSet<String>> stringGroupPerms;
     
     public PermissionManager(String mname, String prefix, TextFormatting color) 
     {
         super(mname, prefix, color);
         playerGroups = new HashMap<>();
-        enumGroupPerms = new ArrayList<>();
         stringGroupPerms = new ArrayList<>();
     }
 
     public void clear()
     {
         playerGroups.clear();
-        enumGroupPerms.clear();
         stringGroupPerms.clear();
     }
     
-    // -----------------------------------------------------------------------------------
+    // -------------------------------------------------------------------------
     // Permission-Check
-    // -----------------------------------------------------------------------------------
+    // -------------------------------------------------------------------------
     
-    public boolean has(ICommandSender cs, Permissions perm)
-    {
-        if(KajetansMod.debugMode)
-        {
-            return true;
-        }
-        if(cs instanceof EntityPlayer)
-        {
-            ArrayList<Integer> groups = playerGroups.get(((EntityPlayer) cs).getUniqueID());
-            if(groups == null)
-            {
-                //falling back to default group
-                if(!enumGroupPerms.isEmpty())
-                {
-                    return enumGroupPerms.get(0).contains(perm);
-                }
-                else
-                {
-                    return false;
-                }
-            }
-            // check for valid group id takes place at the registry
-            return groups.stream().anyMatch(i -> enumGroupPerms.get(i).contains(perm));
-        }
-        return cs instanceof MinecraftServer;
-    }
-    
-    public boolean has(ICommandSender cs, String perm)
+    @Override
+    public boolean hasPermission(ICommandSender cs, String perm) 
     {
         if(KajetansMod.debugMode)
         {
@@ -90,26 +67,10 @@ public class PermissionManager extends Module
         }
         return cs instanceof MinecraftServer;
     }
-    
-    public boolean has(ICommandSender cs, Object perm)
-    {
-        if(perm == null)
-        {
-            return false;
-        }
-        else if(perm.getClass() == Permissions.class)
-        {
-            return has(cs, (Permissions) perm);
-        }
-        else
-        {
-            return has(cs, perm.toString());
-        }
-    }
-    
-    // -----------------------------------------------------------------------------------
+
+    // -------------------------------------------------------------------------
     // Permission-Registry
-    // -----------------------------------------------------------------------------------
+    // -------------------------------------------------------------------------
     
     public void registerPlayerGroup(UUID uuid, int id)
     {
@@ -134,45 +95,41 @@ public class PermissionManager extends Module
         {
             throw new IllegalArgumentException("empty permission string");
         }
-        else if(isUppercase(perm))
-        {
-            // guess it's an enum ...
-            Permissions permission = Permissions.valueOf(perm);
-            if(id >= enumGroupPerms.size())
-            {
-                EnumSet<Permissions> set = EnumSet.of(permission);
-                enumGroupPerms.add(set);
-                // keep other permissions at same id level
-                stringGroupPerms.add(new HashSet<>());
-                return;
-            }
-            enumGroupPerms.get(id).add(permission);
-        }
-        else
+        if(id >= stringGroupPerms.size())
         {
-            // just a string ...
-            if(id >= stringGroupPerms.size())
-            {
-                HashSet<String> set = new HashSet<>();
-                set.add(perm);
-                stringGroupPerms.add(set);
-                // keep other permissions at same id level
-                enumGroupPerms.add(EnumSet.noneOf(Permissions.class));
-                return;
-            }
-            stringGroupPerms.get(id).add(perm);
+            HashSet<String> set = new HashSet<>();
+            set.add(perm);
+            stringGroupPerms.add(set);
+            return;
         }
+        stringGroupPerms.get(id).add(perm);
     }
     
-    private boolean isUppercase(String s)
+    // -------------------------------------------------------------------------
+    // command manager
+    // -------------------------------------------------------------------------
+    
+    @Override
+    public boolean executeCustomCommand(ICommandSender cs, String command, String[] args) 
     {
-        for(char c : s.toCharArray())
+        System.out.println(command + " " + String.join(" ", args));
+        if(cs instanceof EntityPlayer && KajetansMod.scripts.isRegisteredScriptCommand(command))
         {
-            if(Character.isLowerCase(c))
-            {
-                return false;
-            }
+            KajetansMod.scripts.getEvent(ScriptEvents.class).onCustomCommand((EntityPlayer) cs, command, args);
+            return true;
         }
-        return true;
+        return false;
+    }
+
+    @Override
+    public void printMissingCommand(ICommandSender cs, String command) 
+    {
+        cs.sendMessage(new TextComponentString("Keine Command " + command));
+    }
+
+    @Override
+    public void printMissingPermission(ICommandSender cs, ICommand command) 
+    {
+        cs.sendMessage(new TextComponentString("Keine Perms für " + command.getName()));
     }
 }

+ 115 - 34
src/main/java/me/km/permissions/Permissions.java

@@ -1,46 +1,127 @@
 package me.km.permissions;
 
-public enum Permissions 
+public class Permissions 
 {
-    // Commands
-    TEST, SPAWN, SET_SPAWN, HEAL, SET_BED, TEMP_BAN, TELEPORT, SPAWNER, SUMMON, SKULL,
-    SILENT, SIGN, SET_WARP, DEL_WARP, FLY, FLY_OTHER, GAMEMODE, GAMEMODE_OTHER, GOD, MORE,
-    LASTSEEN, HOME, HOME_OTHER, DEL_HOME, KILL, KILL_OTHER, HAT, LIST, REPAIR, PVP,
-    PVP_OTHER, LIGHTUPDATE, LAG, COORDS, INVSEE, SET_HOME, KICK, ADD_USER, ENDERCHEST,
-    EXP, SAY, BAN, BACK, BED, BED_OTHER, POTION, MSG, ANSWER, ITEMINFO, FEED, MEMORY,
-    POSITION, SEEN, TIME, TOP, TP_POS, USER, WARP, BOOK, GROW, ENCHANT, SPEED,
-    TELEPORT_ACCEPT, WORLD, WEATHER, GAMERULE,
-    
-    // Chat-Manager
-    COLOR, USE_COLOR, NICKNAME, FAKERANK, 
-    
-    // Block-Protections
-    BLOCK_BYPASS, BLOCK, BLOCK_ALL, BLOCK_OTHER, BLOCK_CLEAR,
-    
     // AFK-Manager
-    AFK, AFK_OTHER,
-    
+    public final static String AFK = "afk";
+    public final static String AFK_OTHER = "afk.other";
+
+    // Block-Protections
+    public final static String BLOCK_BYPASS = "block.bypass";
+    public final static String BLOCK = "block";
+    public final static String BLOCK_ALL = "block.all";
+    public final static String BLOCK_OTHER = "block.other";
+    public final static String BLOCK_CLEAR = "block.clear";
+
+    // Chat-Manager
+    public final static String COLOR = "color";
+    public final static String USE_COLOR = "usecolor";
+    public final static String NICKNAME = "nickname";
+    public final static String FAKERANK = "fakerank";
+
+    // Commands
+    public final static String TEST = "test"; 
+    public final static String SPAWN = "spawn"; 
+    public final static String SET_SPAWN = "setspawn"; 
+    public final static String HEAL = "heal"; 
+    public final static String SET_BED = "setbed"; 
+    public final static String TEMP_BAN = "tempban"; 
+    public final static String TELEPORT = "xxx"; 
+    public final static String SPAWNER = "xxx"; 
+    public final static String SUMMON = "xxx"; 
+    public final static String SKULL = "xxx"; 
+    public final static String SILENT = "xxx"; 
+    public final static String SIGN = "xxx"; 
+    public final static String SET_WARP = "xxx"; 
+    public final static String DEL_WARP = "xxx"; 
+    public final static String FLY = "xxx"; 
+    public final static String FLY_OTHER = "xxx"; 
+    public final static String GAMEMODE = "xxx"; 
+    public final static String GAMEMODE_OTHER = "xxx"; 
+    public final static String GOD = "xxx"; 
+    public final static String MORE = "xxx"; 
+    public final static String LASTSEEN = "xxx"; 
+    public final static String HOME = "xxx"; 
+    public final static String HOME_OTHER = "xxx"; 
+    public final static String DEL_HOME = "xxx"; 
+    public final static String KILL = "xxx"; 
+    public final static String KILL_OTHER = "xxx"; 
+    public final static String HAT = "xxx"; 
+    public final static String LIST = "xxx"; 
+    public final static String REPAIR = "xxx"; 
+    public final static String PVP = "xxx"; 
+    public final static String PVP_OTHER = "xxx"; 
+    public final static String LIGHTUPDATE = "xxx"; 
+    public final static String LAG = "xxx"; 
+    public final static String COORDS = "xxx"; 
+    public final static String INVSEE = "xxx"; 
+    public final static String SET_HOME = "xxx"; 
+    public final static String KICK = "xxx"; 
+    public final static String ADD_USER = "xxx"; 
+    public final static String ENDERCHEST = "xxx"; 
+    public final static String EXP = "xxx"; 
+    public final static String SAY = "xxx";
+    public final static String BAN = "xxx"; 
+    public final static String BACK = "xxx";
+    public final static String BED = "xxx";
+    public final static String BED_OTHER = "xxx"; 
+    public final static String POTION = "xxx"; 
+    public final static String MSG = "xxx";
+    public final static String ANSWER = "xxx";
+    public final static String ITEMINFO = "xxx"; 
+    public final static String FEED = "xxx";
+    public final static String MEMORY = "xxx";
+    public final static String POSITION = "xxx"; 
+    public final static String SEEN = "xxx"; 
+    public final static String TIME = "xxx";
+    public final static String TOP = "xxx"; 
+    public final static String TP_POS = "xxx"; 
+    public final static String USER = "xxx"; 
+    public final static String WARP = "xxx";
+    public final static String BOOK = "xxx"; 
+    public final static String GROW = "xxx";
+    public final static String ENCHANT = "xxx";
+    public final static String SPEED = "xxx";
+    public final static String TELEPORT_ACCEPT = "xxx";
+    public final static String WORLD = "xxx"; 
+    public final static String WEATHER = "xxx";
+    public final static String GAMERULE = "xxx";
+
     // Data-Tools
-    DATATOOLS, VILLAGER, HUMAN,
-    
+    public final static String DATATOOLS = "xxx"; 
+    public final static String VILLAGER = "xxx"; 
+    public final static String HUMAN = "xxx"; 
+
     // Effects
-    WAND,
-    
+    public final static String WAND = "xxx"; 
+
     // Environment
-    HEAL_STATS, TEMPERATURE,
-    
+    public final static String HEAL_STATS = "xxx"; 
+    public final static String TEMPERATURE = "xxx"; 
+
     // Jobs
-    JOB, RECIPE, ACTIVE_SKILLS, SKILLS,
-    
+    public final static String JOB = "xxx"; 
+    public final static String RECIPE = "xxx";
+    public final static String ACTIVE_SKILLS = "xxx"; 
+    public final static String SKILLS = "xxx";
+
     // Plots
-    PLOT, PLOT_CREATE, PLOT_INFO, PLOT_TAG, PLOT_SHARE, PLOT_SIGN, PLOT_BYPASS, PLOT_MARK,
-    
+    public final static String PLOT = "xxx"; 
+    public final static String PLOT_CREATE = "xxx";
+    public final static String PLOT_INFO = "xxx"; 
+    public final static String PLOT_TAG = "xxx"; 
+    public final static String PLOT_SHARE = "xxx"; 
+    public final static String PLOT_SIGN = "xxx"; 
+    public final static String PLOT_BYPASS = "xxx";
+    public final static String PLOT_MARK = "xxx"; 
+
     // Scrolls
-    SCROLL,
-    
+    public final static String SCROLL = "xxx"; 
+
     // Quests / Scripts
-    QUEST, SCRIPT, QUESTINFO, GIVEUP, SCRIPT_ERROR,
-    
-    // Special
-    VANILLA, WORLDEDIT
+    public final static String QUEST = "xxx"; 
+    public final static String SCRIPT = "xxx"; 
+    public final static String QUESTINFO = "xxx"; 
+    public final static String GIVEUP = "xxx"; 
+    public final static String SCRIPT_ERROR = "xxx"; 
 }

+ 5 - 9
src/main/java/me/km/playerbank/ModDedicatedPlayerList.java

@@ -7,8 +7,8 @@ import java.util.Map;
 import java.util.UUID;
 import me.km.KajetansMod;
 import me.km.dimensions.ModDimensions;
-import me.km.events.PlayerJoinMessageEvent;
-import me.km.events.PlayerRespawnAtEvent;
+//import me.km.events.PlayerJoinMessageEvent;
+//import me.km.events.PlayerRespawnAtEvent;
 import me.km.utils.ReflectionUtils;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.player.EntityPlayer;
@@ -48,9 +48,9 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 @SideOnly(Side.SERVER)
-public class ModDedicatedPlayerList extends DedicatedPlayerList
+public class ModDedicatedPlayerList //extends DedicatedPlayerList
 {
-    private final DedicatedServer mcServer;
+    /*private final DedicatedServer mcServer;
     private static final Logger LOG = LogManager.getLogger();
     private final List<EntityPlayerMP> playerEntityList;
     private final Map<UUID, EntityPlayerMP> uuidToPlayerMap;
@@ -70,10 +70,6 @@ public class ModDedicatedPlayerList extends DedicatedPlayerList
         {
             target.interactionManager.setGameType(source.interactionManager.getGameType());
         }
-        /*else if(this.gameType != null)
-        {
-            target.interactionManager.setGameType(this.gameType);
-        }*/
         target.interactionManager.initializeGameType(worldIn.getWorldInfo().getGameType());
     }
     
@@ -339,5 +335,5 @@ public class ModDedicatedPlayerList extends DedicatedPlayerList
         newP.setHealth(newP.getHealth());
         net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerRespawnEvent(newP, conqueredEnd);
         return newP;
-    }
+    }*/
 }

+ 0 - 108
src/main/java/me/km/playerbank/ModNetHandlerPlayServer.java

@@ -1,108 +0,0 @@
-package me.km.playerbank;
-
-import me.km.KajetansMod;
-import me.km.events.PlayerLeaveMessageEvent;
-import me.km.snuviscript.ScriptEvents;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.EntityPlayerMP;
-import net.minecraft.network.NetHandlerPlayServer;
-import net.minecraft.network.NetworkManager;
-import net.minecraft.network.PacketThreadUtil;
-import net.minecraft.network.play.client.CPacketAnimation;
-import net.minecraft.network.play.client.CPacketChatMessage;
-import net.minecraft.network.play.server.SPacketChat;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.util.text.ITextComponent;
-import net.minecraft.util.text.TextComponentString;
-import net.minecraft.util.text.TextComponentTranslation;
-import net.minecraft.util.text.TextFormatting;
-import net.minecraftforge.common.MinecraftForge;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-public class ModNetHandlerPlayServer extends NetHandlerPlayServer
-{
-    private static final Logger LOGGER = LogManager.getLogger();
-    private final MinecraftServer serverController;
-    private final ScriptEvents scriptEvents;
-
-    public ModNetHandlerPlayServer(MinecraftServer server, NetworkManager nm, EntityPlayerMP p) 
-    {
-        super(server, nm, p);
-        serverController = server;
-        scriptEvents = KajetansMod.scripts.getEvent(ScriptEvents.class);
-    }
-    
-    @Override
-    public void processChatMessage(CPacketChatMessage packetIn) 
-    {
-        PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld());
-        if(packetIn.getMessage().startsWith("/"))
-        {
-            String s = packetIn.getMessage();
-            int i = s.indexOf(" ");
-            String command;
-            String left;
-            if(i == -1)
-            {
-                command = s.substring(1).toLowerCase();
-                left = "";
-            }   
-            else
-            {
-                command = s.substring(1, i).toLowerCase();
-                left = s.substring(i);
-            }
-            if(KajetansMod.scripts.isRegisteredScriptCommand(command))
-            {
-                if (this.player.getChatVisibility() == EntityPlayer.EnumChatVisibility.HIDDEN)
-                {
-                    TextComponentTranslation trans = new TextComponentTranslation("chat.cannotSend", new Object[0]);
-                    trans.getStyle().setColor(TextFormatting.RED);
-                    this.sendPacket(new SPacketChat(trans));
-                }
-                else
-                {
-                    this.player.markPlayerActive();
-                    scriptEvents.onCustomCommand(this.player, command, left);
-                }
-            }
-            else
-            {
-                super.processChatMessage(new CPacketChatMessage("/" + command + left));
-            }
-            return;
-        }
-        super.processChatMessage(packetIn);
-    }
-    
-    @Override
-    public void onDisconnect(ITextComponent reason)
-    {
-        LOGGER.info("{} lost connection: {}", new Object[] {this.player.getName(), reason});
-        this.serverController.refreshStatusNextTick();        
-        // Custom Leave Message - Start
-        PlayerLeaveMessageEvent event = new PlayerLeaveMessageEvent(this.player, "No message was set.");
-        if(!MinecraftForge.EVENT_BUS.post(event))
-        {
-            TextComponentString text = new TextComponentString(event.getMessage());
-            this.serverController.getPlayerList().sendMessage(text);
-        }
-        // Custom Leave Message - End
-        this.player.mountEntityAndWakeUp();
-        this.serverController.getPlayerList().playerLoggedOut(this.player);
-
-        if (this.serverController.isSinglePlayer() && this.player.getName().equals(this.serverController.getServerOwner()))
-        {
-            LOGGER.info("Stopping singleplayer server as player logged out");
-            this.serverController.initiateShutdown();
-        }
-    }
-
-    @Override
-    public void handleAnimation(CPacketAnimation packetIn) 
-    {
-        super.handleAnimation(packetIn);
-        scriptEvents.onArmSwing(this.player, packetIn.getHand());
-    }
-}

+ 0 - 5
src/main/java/me/km/playerbank/PlayerBank.java

@@ -12,11 +12,6 @@ public class PlayerBank extends SimpleDataBank
     public PlayerBank(Module m, DataBank c) 
     {
         super(m, c);
-    }
-    
-    @Override
-    protected void init() 
-    {
         // Player-Databank
         if(!this.doesTableExist("players"))
         {

+ 7 - 24
src/main/java/me/km/playerbank/PlayerLogInOut.java

@@ -1,16 +1,13 @@
 package me.km.playerbank;
 
+import me.kcm.events.PlayerConnectionEvent;
 import me.km.KajetansMod;
 import me.km.api.Module;
 import me.km.api.ModuleListener;
 import me.km.api.Utils;
-import me.km.commands.CommandSilent;
 import me.km.commands.CommandTeleportAccept;
-import me.km.events.PlayerJoinMessageEvent;
-import me.km.events.PlayerLeaveMessageEvent;
-import me.km.permissions.Permissions;
+import me.km.dimensions.ModDimensions;
 import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.EntityPlayerMP;
 import net.minecraftforge.fml.common.eventhandler.EventPriority;
 import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
 import net.minecraftforge.fml.common.gameevent.PlayerEvent;
@@ -58,30 +55,16 @@ public class PlayerLogInOut extends ModuleListener
     }
     
     @SubscribeEvent(priority = EventPriority.LOW)
-    public void silentJoin(PlayerJoinMessageEvent e)
-    {
-        if(KajetansMod.perms.has(e.getEntityPlayer(), Permissions.SILENT) && 
-            KajetansMod.generalCommands.getCommand(CommandSilent.class).silentjoin)
-        {
-            e.setCanceled(true);
-        }
-    }
-    
-    @SubscribeEvent(priority = EventPriority.LOW)
-    public void onPlayerLeaveCleanup(PlayerLeaveMessageEvent e)
+    public void onPlayerLeaveCleanup(PlayerEvent.PlayerLoggedOutEvent e)
     {      
-        EntityPlayer p = e.getEntityPlayer();
+        EntityPlayer p = e.player;
         KajetansMod.generalCommands.getCommand(CommandTeleportAccept.class).tpaccept.remove(p.getUniqueID());
+        KajetansMod.scoreboard.removeScoreboard(p.getUniqueID());
     }
     
     @SubscribeEvent
-    public void changeConnectionOnJoin(PlayerEvent.PlayerLoggedInEvent e)
+    public void onPlayerConnection(PlayerConnectionEvent e)
     {      
-        if(e.player != null && e.player instanceof EntityPlayerMP)
-        {
-            EntityPlayerMP p = (EntityPlayerMP) e.player;
-            // new handler sets connection with player in constructor, doing it twice
-            p.connection = new ModNetHandlerPlayServer(p.mcServer, p.connection.netManager, p);
-        }
+        ModDimensions.sendNotificationsForDimensions(e.getEntityPlayer());
     }
 }

+ 16 - 16
src/main/java/me/km/plots/CommandPlot.java

@@ -57,7 +57,7 @@ public class CommandPlot extends ModuleCommand
                 case "create":
                 case "add":
                 {
-                    if(!KajetansMod.perms.has(cs, Permissions.PLOT_CREATE))
+                    if(!KajetansMod.perms.hasPermission(cs, Permissions.PLOT_CREATE))
                     {
                         break;
                     }
@@ -86,7 +86,7 @@ public class CommandPlot extends ModuleCommand
                 case "create3d":
                 case "add3d":
                 {
-                    if(!KajetansMod.perms.has(cs, Permissions.PLOT_CREATE))
+                    if(!KajetansMod.perms.hasPermission(cs, Permissions.PLOT_CREATE))
                     {
                         break;
                     }
@@ -115,7 +115,7 @@ public class CommandPlot extends ModuleCommand
                 case "e":
                 case "expand":
                 {
-                    if(!KajetansMod.perms.has(cs, Permissions.PLOT_CREATE) || arg.length < 2)
+                    if(!KajetansMod.perms.hasPermission(cs, Permissions.PLOT_CREATE) || arg.length < 2)
                     {
                         break;
                     }
@@ -224,7 +224,7 @@ public class CommandPlot extends ModuleCommand
                 }
                 case "name":
                 {
-                    if(!KajetansMod.perms.has(cs, Permissions.PLOT_CREATE) || arg.length < 2)
+                    if(!KajetansMod.perms.hasPermission(cs, Permissions.PLOT_CREATE) || arg.length < 2)
                     {
                         break;
                     }
@@ -254,7 +254,7 @@ public class CommandPlot extends ModuleCommand
                 case "i":
                 case "info":
                 {
-                    if(KajetansMod.perms.has(cs, Permissions.PLOT_INFO))
+                    if(KajetansMod.perms.hasPermission(cs, Permissions.PLOT_INFO))
                     {
                         if(!(cs instanceof EntityPlayer))
                         {
@@ -271,7 +271,7 @@ public class CommandPlot extends ModuleCommand
                 case "remove":
                 case "delete":
                 {
-                    if(KajetansMod.perms.has(cs, Permissions.PLOT_CREATE))
+                    if(KajetansMod.perms.hasPermission(cs, Permissions.PLOT_CREATE))
                     {
                         Integer id;
                         if(arg.length >= 2)
@@ -308,7 +308,7 @@ public class CommandPlot extends ModuleCommand
                 case "at":
                 case "addtag":
                 {
-                    if(KajetansMod.perms.has(cs, Permissions.PLOT_TAG) && arg.length >= 2)
+                    if(KajetansMod.perms.hasPermission(cs, Permissions.PLOT_TAG) && arg.length >= 2)
                     {
                         Integer id;
                         if(arg.length >= 3)
@@ -345,7 +345,7 @@ public class CommandPlot extends ModuleCommand
                 case "rt":
                 case "removetag":
                 {
-                    if(KajetansMod.perms.has(cs, Permissions.PLOT_TAG) && arg.length >= 2)
+                    if(KajetansMod.perms.hasPermission(cs, Permissions.PLOT_TAG) && arg.length >= 2)
                     {
                         Integer id;
                         if(arg.length >= 3)
@@ -381,7 +381,7 @@ public class CommandPlot extends ModuleCommand
                 }
                 case "share":
                 {
-                    if(KajetansMod.perms.has(cs, Permissions.PLOT_SHARE) && arg.length >= 2)
+                    if(KajetansMod.perms.hasPermission(cs, Permissions.PLOT_SHARE) && arg.length >= 2)
                     {
                         Integer id;
                         if(arg.length >= 3)
@@ -423,7 +423,7 @@ public class CommandPlot extends ModuleCommand
                 }
                 case "kick":
                 {
-                    if(KajetansMod.perms.has(cs, Permissions.PLOT_SHARE) && arg.length >= 2)
+                    if(KajetansMod.perms.hasPermission(cs, Permissions.PLOT_SHARE) && arg.length >= 2)
                     {
                         Integer id;
                         if(arg.length >= 3)
@@ -465,7 +465,7 @@ public class CommandPlot extends ModuleCommand
                 }
                 case "sign":
                 {
-                    if(KajetansMod.perms.has(cs, Permissions.PLOT_SIGN) && arg.length >= 3)
+                    if(KajetansMod.perms.hasPermission(cs, Permissions.PLOT_SIGN) && arg.length >= 3)
                     {
                         if(!(cs instanceof EntityPlayer))
                         {
@@ -530,11 +530,11 @@ public class CommandPlot extends ModuleCommand
         }
         // Help Menu
         m.send(cs, "/plot ...");
-        if(KajetansMod.perms.has(cs, Permissions.PLOT_INFO))
+        if(KajetansMod.perms.hasPermission(cs, Permissions.PLOT_INFO))
         {
             m.sendHelpListElement(cs, "info", "Gibt Infos über die aktuelle Position");
         }
-        if(KajetansMod.perms.has(cs, Permissions.PLOT_CREATE))
+        if(KajetansMod.perms.hasPermission(cs, Permissions.PLOT_CREATE))
         {
             m.sendHelpListElement(cs, "create [player]", "Erstellt ein Plot (30 - 255)");
             m.sendHelpListElement(cs, "create3D [player]", "Erstellt ein Plot");
@@ -542,17 +542,17 @@ public class CommandPlot extends ModuleCommand
             m.sendHelpListElement(cs, "expand <blocks>", "Erweitert die aktuelle Auswahl");
             m.sendHelpListElement(cs, "name [id] <name>", "Gibt einem Plot einen Namen");
         }
-        if(KajetansMod.perms.has(cs, Permissions.PLOT_TAG))
+        if(KajetansMod.perms.hasPermission(cs, Permissions.PLOT_TAG))
         {
             m.sendHelpListElement(cs, "addtag <tag> [id]", "Fügt einen Tag hinzu");
             m.sendHelpListElement(cs, "removetag <tag> [id]", "Entfernt einen Tag");
         }
-        if(KajetansMod.perms.has(cs, Permissions.PLOT_SHARE))
+        if(KajetansMod.perms.hasPermission(cs, Permissions.PLOT_SHARE))
         {
             m.sendHelpListElement(cs, "share <player> [id]", "Fügt einen Spieler hinzu");
             m.sendHelpListElement(cs, "kick <player> [id]", "Entfernt einen Spieler");
         }
-        if(KajetansMod.perms.has(cs, Permissions.PLOT_SIGN))
+        if(KajetansMod.perms.hasPermission(cs, Permissions.PLOT_SIGN))
         {
             m.sendHelpListElement(cs, "sign <price> <id>", "Ändert ein Schild zum Verkaufsschild");
         }

+ 1 - 5
src/main/java/me/km/plots/ProtectionBank.java

@@ -62,11 +62,7 @@ public class ProtectionBank extends SimpleDataBank
         protectetEntities.add(EntitySquid.class);
         protectetEntities.add(EntityOcelot.class);
         protectetEntities.add(EntityVillager.class);
-    }
-    
-    @Override
-    protected void init() 
-    {
+
         // PlotBank
         if(!this.doesTableExist("plots"))
         {

+ 3 - 3
src/main/java/me/km/plots/ProtectionBlockAction.java

@@ -24,7 +24,7 @@ public class ProtectionBlockAction extends Protection
     public void onBlockPlace(BlockEvent.PlaceEvent e)
     {
         EntityPlayer p = e.getPlayer();
-        if(KajetansMod.perms.has(p, Permissions.PLOT_BYPASS))
+        if(KajetansMod.perms.hasPermission(p, Permissions.PLOT_BYPASS))
         {
             return;
         }     
@@ -42,12 +42,12 @@ public class ProtectionBlockAction extends Protection
     public void onBlockBreak(BlockEvent.BreakEvent e)
     {
         EntityPlayer p = e.getPlayer();
-        if(KajetansMod.perms.has(p, Permissions.PLOT_MARK) && p.getHeldItemMainhand().getItem() == Items.WOODEN_SWORD && p.isCreative())
+        if(KajetansMod.perms.hasPermission(p, Permissions.PLOT_MARK) && p.getHeldItemMainhand().getItem() == Items.WOODEN_SWORD && p.isCreative())
         {
             e.setCanceled(true);
             return;
         }
-        if(KajetansMod.perms.has(p, Permissions.PLOT_BYPASS))
+        if(KajetansMod.perms.hasPermission(p, Permissions.PLOT_BYPASS))
         {
             return;
         }

+ 1 - 1
src/main/java/me/km/plots/ProtectionBucketUse.java

@@ -22,7 +22,7 @@ public class ProtectionBucketUse extends Protection
     {
         EntityPlayer p = e.getEntityPlayer(); 
         RayTraceResult ray = e.getTarget();
-        if(ray == null || KajetansMod.perms.has(p, Permissions.PLOT_BYPASS))
+        if(ray == null || KajetansMod.perms.hasPermission(p, Permissions.PLOT_BYPASS))
         {
             return;
         }

+ 2 - 2
src/main/java/me/km/plots/ProtectionEntity.java

@@ -44,7 +44,7 @@ public class ProtectionEntity extends Protection
             EntityPlayer p = Utils.getDamager(e.getSource());
             if(p != null)
             {
-                if(KajetansMod.perms.has(p, Permissions.PLOT_BYPASS) || this.getProtectionBank().canBuild(w, pos, p))
+                if(KajetansMod.perms.hasPermission(p, Permissions.PLOT_BYPASS) || this.getProtectionBank().canBuild(w, pos, p))
                 {
                     return;
                 }
@@ -61,7 +61,7 @@ public class ProtectionEntity extends Protection
         {
             EntityPotion potion = (EntityPotion) e.getEntityThrowable();
             EntityLivingBase ent = potion.getThrower();
-            if(ent instanceof EntityPlayer && !KajetansMod.perms.has(ent, Permissions.PLOT_BYPASS) &&
+            if(ent instanceof EntityPlayer && !KajetansMod.perms.hasPermission(ent, Permissions.PLOT_BYPASS) &&
                 !this.getProtectionBank().canBuild(potion.world, potion.getPosition(), (EntityPlayer) ent))
             {
                 e.setCanceled(true);

+ 10 - 3
src/main/java/me/km/plots/ProtectionInteract.java

@@ -1,5 +1,6 @@
 package me.km.plots;
 
+import me.kcm.events.FarmlandTrampleEvent;
 import me.km.KajetansMod;
 import me.km.api.Module;
 import me.km.permissions.Permissions;
@@ -21,7 +22,7 @@ public class ProtectionInteract extends Protection
     public void onPlayerInteract(PlayerInteractEvent.LeftClickBlock e) 
     {
         EntityPlayer p = e.getEntityPlayer();
-        if(KajetansMod.perms.has(p, Permissions.PLOT_BYPASS))
+        if(KajetansMod.perms.hasPermission(p, Permissions.PLOT_BYPASS))
         {
             return;
         }  
@@ -36,7 +37,7 @@ public class ProtectionInteract extends Protection
     public void onPlayerInteract(PlayerInteractEvent.RightClickBlock e) 
     {
         EntityPlayer p = e.getEntityPlayer();
-        if(KajetansMod.perms.has(p, Permissions.PLOT_BYPASS))
+        if(KajetansMod.perms.hasPermission(p, Permissions.PLOT_BYPASS))
         {
             return;
         }    
@@ -57,11 +58,17 @@ public class ProtectionInteract extends Protection
     public void protectFromInteract(PlayerInteractEvent.EntityInteract e)
     {      
         EntityPlayer p = e.getEntityPlayer();
-        if(KajetansMod.perms.has(p, Permissions.PLOT_BYPASS) || 
+        if(KajetansMod.perms.hasPermission(p, Permissions.PLOT_BYPASS) || 
             this.getProtectionBank().canBuild(e.getWorld(), e.getTarget().getPosition(), p))
         {
             return;
         }
         e.setCanceled(true);
     }
+    
+    @SubscribeEvent(priority = EventPriority.HIGHEST)
+    public void protectFromInteract(FarmlandTrampleEvent e)
+    {      
+        e.setCanceled(true);
+    }
 }

+ 2 - 2
src/main/java/me/km/plots/ProtectionMarkPlot.java

@@ -32,7 +32,7 @@ public class ProtectionMarkPlot extends Protection
             return;
         }
         EntityPlayer p = e.getEntityPlayer();
-        if(KajetansMod.perms.has(p, Permissions.PLOT_MARK) && p.getHeldItemMainhand().getItem() == Items.WOODEN_SWORD && p.isCreative())
+        if(KajetansMod.perms.hasPermission(p, Permissions.PLOT_MARK) && p.getHeldItemMainhand().getItem() == Items.WOODEN_SWORD && p.isCreative())
         {
             BlockPos pos = e.getPos();
             coord2.put(p.getUniqueID(), pos);
@@ -49,7 +49,7 @@ public class ProtectionMarkPlot extends Protection
             return;
         }
         EntityPlayer p = e.getEntityPlayer();
-        if(KajetansMod.perms.has(p, Permissions.PLOT_MARK) && p.getHeldItemMainhand().getItem() == Items.WOODEN_SWORD && p.isCreative())
+        if(KajetansMod.perms.hasPermission(p, Permissions.PLOT_MARK) && p.getHeldItemMainhand().getItem() == Items.WOODEN_SWORD && p.isCreative())
         {
             BlockPos pos = e.getPos();
             coord1.put(p.getUniqueID(), pos);

+ 0 - 21
src/main/java/me/km/scoreboard/ScoreBoardLeave.java

@@ -1,21 +0,0 @@
-package me.km.scoreboard;
-
-import me.km.KajetansMod;
-import me.km.api.Module;
-import me.km.api.ModuleListener;
-import me.km.events.PlayerLeaveMessageEvent;
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-
-public class ScoreBoardLeave extends ModuleListener
-{
-    public ScoreBoardLeave(Module m) 
-    {
-        super(m);
-    }
-    
-    @SubscribeEvent
-    public void onPlayerLeaveCleanup(PlayerLeaveMessageEvent e)
-    {      
-        KajetansMod.scoreboard.removeScoreboard(e.getEntityPlayer().getUniqueID());
-    }
-}

+ 10 - 6
src/main/java/me/km/snuviscript/MinecraftFunctions.java

@@ -18,10 +18,10 @@ import me.hammerle.snuviscript.math.Fraction;
 import me.km.api.Location;
 import me.km.api.TitleAPI;
 import me.km.api.Utils;
+import me.km.commands.CommandSilent;
 import me.km.dimensions.ModDimensions;
 import me.km.effects.EffectUtils;
 import me.km.inventory.InventoryUtils;
-import me.km.permissions.Permissions;
 import me.km.table.Table;
 import me.km.utils.ItemStackUtils;
 import me.km.utils.ReflectionUtils;
@@ -68,6 +68,7 @@ import me.km.exception.IllegalStringException;
 import me.km.inventory.CustomContainer;
 import me.km.networking.ModPacketHandler;
 import me.km.pathfinder.PathfinderUtils;
+import me.km.permissions.Permissions;
 import me.km.skills.LeveledSkill;
 import me.km.skills.Skill;
 import me.km.table.TableAPI;
@@ -124,8 +125,7 @@ public class MinecraftFunctions
             KajetansMod.perms.registerPlayerGroup(UUID.fromString(in[0].getString(sc)), in[1].getInt(sc));
             return Void.TYPE;
         }); 
-        parser.registerFunction("perm.get", (sc, in) -> Permissions.valueOf(in[0].getString(sc))); 
-        parser.registerFunction("perm.has", (sc, in) -> KajetansMod.perms.has((ICommandSender) in[0].get(sc), in[1].get(sc))); 
+        parser.registerFunction("perm.has", (sc, in) -> KajetansMod.perms.hasPermission((ICommandSender) in[0].get(sc), in[1].getString(sc))); 
         
         // ---------------------------------------------------------------------
         // Title-Bibliothek  
@@ -345,21 +345,25 @@ public class MinecraftFunctions
             EffectUtils.playSound((EntityPlayerMP) in[0].get(sc), SoundEvent.REGISTRY.getObject(new ResourceLocation(in[1].getString(sc))), SoundCategory.MASTER);
             return Void.TYPE; 
         });
-        parser.registerFunction("player.getbedspawn", (sc, in) -> 
+        parser.registerFunction("player.getspawn", (sc, in) -> 
         {   
             WorldServer ws = ModDimensions.getWorldFromName(in[1].getString(sc));
             return new Location(ws, ((EntityPlayer) in[0].get(sc)).getBedLocation(ws.provider.getDimension()));
         });
-        parser.registerFunction("player.setbedspawn", (sc, in) -> 
+        parser.registerAlias("player.getspawn", "player.getbedspawn");
+        parser.registerFunction("player.setspawn", (sc, in) -> 
         {     
-            ((EntityPlayer) in[0].get(sc)).bedLocation = ((Location) in[1].get(sc)).getBlockPos(); 
+            Location l = (Location) in[1].get(sc);
+            ((EntityPlayerMP) in[0].get(sc)).setSpawnChunk(l.getBlockPos(), true, l.getWorld().provider.getDimension());
             return Void.TYPE; 
         });
+        parser.registerAlias("player.setspawn", "player.setbedspawn");
         parser.registerFunction("player.damageitem", (sc, in) -> 
         {   
             ((EntityPlayer) in[0].get(sc)).getHeldItemMainhand().damageItem(in[1].getInt(sc), (EntityPlayer) in[0].get(sc)); 
             return Void.TYPE; 
         });
+        parser.registerFunction("player.silentjoin", (sc, in) -> KajetansMod.perms.hasPermission((EntityPlayer) in[0].get(sc), Permissions.SILENT) && KajetansMod.generalCommands.getCommand(CommandSilent.class).silentjoin);
 
         // ---------------------------------------------------------------------    
         // Players-Bibliothek

+ 1 - 5
src/main/java/me/km/snuviscript/ScriptBank.java

@@ -11,11 +11,7 @@ public class ScriptBank extends SimpleDataBank
     public ScriptBank(Module m, DataBank c) 
     {
         super(m, c);
-    }
-    
-    @Override
-    protected void init() 
-    {
+        
         // Globale Variablen
         if(!this.doesTableExist("questdata"))
         {

+ 22 - 68
src/main/java/me/km/snuviscript/ScriptEvents.java

@@ -11,8 +11,8 @@ import me.hammerle.snuviscript.code.Compiler;
 import me.hammerle.snuviscript.code.Script;
 import me.hammerle.snuviscript.code.SnuviParser;
 import me.hammerle.snuviscript.math.Fraction;
+import me.kcm.events.PlayerPreRespawnEvent;
 import me.km.KajetansMod;
-import me.km.api.Location;
 import me.km.api.ModuleListener;
 import me.km.api.Module;
 import me.km.api.Utils;
@@ -21,9 +21,6 @@ import me.km.effects.PlayerUsesEffectEvent;
 import me.km.entities.EntityHuman;
 import me.km.entities.EntityItemProjectile;
 import me.km.events.PlayerHurtEvent;
-import me.km.events.PlayerJoinMessageEvent;
-import me.km.events.PlayerLeaveMessageEvent;
-import me.km.events.PlayerRespawnAtEvent;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.EntityLivingBase;
 import net.minecraft.entity.passive.EntitySheep;
@@ -36,7 +33,6 @@ import net.minecraft.server.management.PlayerList;
 import net.minecraft.util.EnumHand;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.RayTraceResult;
-import net.minecraft.world.WorldServer;
 import net.minecraftforge.event.CommandEvent;
 import net.minecraftforge.event.entity.EntityMountEvent;
 import net.minecraftforge.event.entity.ThrowableImpactEvent;
@@ -51,6 +47,7 @@ import net.minecraftforge.event.world.BlockEvent;
 import net.minecraftforge.fml.common.eventhandler.Event;
 import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
 import net.minecraftforge.fml.common.gameevent.PlayerEvent;
+import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent;
 
 public class ScriptEvents extends ModuleListener
 {               
@@ -163,26 +160,15 @@ public class ScriptEvents extends ModuleListener
     }
     
     @SubscribeEvent
-    public void onPlayerRespawn(PlayerRespawnAtEvent e)
+    public void onPlayerPostRespawn(PlayerRespawnEvent e)
     {
-        handleEvent(e.getEntityPlayer(), "player_respawn", (sc) -> 
-        {
-            sc.setVar("keep_inventory", e.isInventoryKeepingForced());
-            sc.setVar("respawn_loc", new Location(e.getWorld(), e.getRespawnLoc()));
-        }, (sc) -> 
-        {
-            try 
-            {
-                e.setForcedInventoryKeeping(sc.getVar("keep_inventory").getBoolean(sc));
-                Location l = (Location) sc.getVar("respawn_loc").get(sc);
-                e.setRespawnLoc(l.getPos());
-                e.setWorld((WorldServer) l.getWorld());
-            } 
-            catch(ClassCastException | NullPointerException ex) 
-            {
-                KajetansMod.scripts.logger.print("invalid var in 'player_respawn' event", ex, null, sc.getName(), sc, sc.getActiveRealLine());
-            }
-        });
+        handleEvent(e.player, "player_post_respawn", null);
+    }
+    
+    @SubscribeEvent
+    public void onPlayerPreRespawn(PlayerPreRespawnEvent e)
+    {
+        handleEvent(e.getEntityPlayer(), "player_pre_respawn", null);
     }
     
     @SubscribeEvent
@@ -471,48 +457,14 @@ public class ScriptEvents extends ModuleListener
     }
     
     @SubscribeEvent
-    public void onPlayerJoin(PlayerJoinMessageEvent e)
+    public void onPlayerLogout(PlayerEvent.PlayerLoggedOutEvent e)
     {    
-        EntityPlayer p = e.getEntityPlayer();
-        handleEvent(p, "player_join_server", (sc) -> 
-        {       
-            sc.setVar("message", e.getMessage());
-            sc.setVar("changed_name", e.hasNameChanged());
-            sc.setVar("cancel", e.isCanceled()); 
-        }, (sc) -> 
-        {
-            try
-            {
-                e.setMessage(sc.getVar("message").getString(sc)); 
-                e.setCanceled(sc.getVar("cancel").getBoolean(sc)); 
-            }
-            catch(Exception ex)
-            {
-                KajetansMod.scripts.logger.print("invalid var in 'player_join_server' event", ex, null, sc.getName(), sc, sc.getActiveRealLine());
-            }
-        });
-    }
-    
-    @SubscribeEvent
-    public void onPlayerLeave(PlayerLeaveMessageEvent e)
-    {      
-        EntityPlayer p = e.getEntityPlayer();
-        handleEvent(p, "player_leave", (sc) -> 
-        {       
-            sc.setVar("message", e.getMessage());
-            sc.setVar("cancel", e.isCanceled()); 
-        }, (sc) -> 
+        EntityPlayer p = e.player;
+        if(p == null)
         {
-            try
-            {
-                e.setMessage(sc.getVar("message").getString(sc)); 
-                e.setCanceled(sc.getVar("cancel").getBoolean(sc)); 
-            }
-            catch(Exception ex)
-            {
-                KajetansMod.scripts.logger.print("invalid var in 'player_leave' event", ex, null, sc.getName(), sc, sc.getActiveRealLine());
-            }
-        });
+            return;
+        }
+        handleEvent(p, "player_logout", null);
     }
     
     @SubscribeEvent
@@ -766,17 +718,19 @@ public class ScriptEvents extends ModuleListener
         }
     }
     
-    public void onCustomCommand(EntityPlayer p, String command, String args)
+    public void onCustomCommand(EntityPlayer p, String command, String[] args)
     {
         handleEvent(p, "custom_command", (sc) -> 
         {
             sc.setVar("command", command);
-            if(args.length() == 0)
+            if(args.length == 0)
             {
                 sc.setVar("args", new ArrayList<>());
-                return;
             }
-            sc.setVar("args", Arrays.stream(args.trim().split(" ")).map(s -> Compiler.convert(s)).collect(Collectors.toList()));
+            else
+            {
+                sc.setVar("args", Arrays.stream(args).map(s -> Compiler.convert(s)).collect(Collectors.toList()));
+            }
         });
     }