Browse Source

player data, player tick data, new snuvi commands

Kajetan Johannes Hammerle 5 years ago
parent
commit
ec4814a151

+ 3 - 2
src/main/java/me/km/events/CustomEventCaller.java

@@ -60,6 +60,7 @@ public class CustomEventCaller
     {      
         if(e.phase == TickEvent.Phase.END)
         {
+            KajetansMod.playerbank.tickPlayerData();
             ScoreboardUtils.update();
             if(!ADD_QUEUE.isEmpty())
             {
@@ -171,10 +172,10 @@ public class CustomEventCaller
 
             float damageAmount = getRealDamage(e.getAmount(), ds, liv);
             float f = damageAmount;
-            damageAmount = Math.max(damageAmount - liv.getAbsorptionAmount(), 0.0F);
+            damageAmount = Math.max(damageAmount - liv.getAbsorptionAmount(), 0.0f);
             liv.setAbsorptionAmount(liv.getAbsorptionAmount() - (f - damageAmount));
 
-            if (damageAmount != 0.0F)
+            if(damageAmount != 0.0f)
             {
                 float f1 = liv.getHealth();
                 liv.setHealth(f1 - damageAmount);

+ 84 - 3
src/main/java/me/km/playerbank/PlayerManager.java

@@ -3,9 +3,11 @@ package me.km.playerbank;
 import java.util.HashMap;
 import java.util.UUID;
 import me.kcm.events.PlayerConnectionEvent;
+import me.km.KajetansMod;
 import me.km.module.Module;
 import me.km.databank.DataBank;
 import me.km.scoreboard.ScoreboardUtils;
+import me.km.snuviscript.ScriptEvents;
 import me.km.world.ModDimensions;
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.util.text.TextFormatting;
@@ -18,6 +20,9 @@ public class PlayerManager extends Module
     private final PlayerBank 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);
@@ -76,9 +81,85 @@ public class PlayerManager extends Module
     @SubscribeEvent(priority = EventPriority.LOW)
     public void onPlayerLeaveCleanup(PlayerEvent.PlayerLoggedOutEvent e)
     {      
-        EntityPlayer p = e.player;
-        ScoreboardUtils.remove(p.getUniqueID());
-        playerIds.remove(p.getUniqueID());
+        UUID uuid = e.player.getUniqueID();
+        ScoreboardUtils.remove(uuid);
+        playerIds.remove(uuid);
+        playerData.remove(uuid);
+        playerTickData.remove(uuid);
+    }
+    
+    public void tickPlayerData()
+    {
+        playerTickData.forEach((uuid, map) -> 
+        {
+            EntityPlayer p = KajetansMod.server.getPlayerList().getPlayerByUUID(uuid);
+            if(p == null)
+            {
+                return;
+            }
+            map.entrySet().removeIf(entry -> 
+            {
+                int time = entry.getValue() - 1;
+                if(time <= 0)
+                {
+                    if(time == 0)
+                    {
+                        ScriptEvents.onPlayerDataTick(p, entry.getKey());
+                    }
+                    return true;
+                }
+                entry.setValue(time);
+                return false;
+            });
+        });
+    }
+    
+    public void setPlayerVar(UUID uuid, String varname, Object value)
+    {
+        HashMap<String, Object> map = playerData.get(uuid);
+        if(map == null)
+        {
+            map = new HashMap<>();
+            playerData.put(uuid, map);
+        }
+        map.put(varname, value);
+    }
+    
+    public Object getPlayerVar(UUID uuid, String varname)
+    {
+        HashMap<String, Object> map = playerData.get(uuid);
+        if(map == null)
+        {
+            return null;
+        }
+        return map.get(varname);
+    }
+    
+    public void setPlayerTimer(UUID uuid, String varname, int time)
+    {
+        HashMap<String, Integer> map = playerTickData.get(uuid);
+        if(map == null)
+        {
+            map = new HashMap<>();
+            playerTickData.put(uuid, map);
+        }
+        map.put(varname, time);
+    }
+    
+    public int getPlayerTimer(UUID uuid, String varname)
+    {
+        HashMap<String, Integer> map = playerTickData.get(uuid);
+        if(map == null)
+        {
+            return -1;
+        }
+        return map.getOrDefault(varname, -1);
+    }
+    
+    public void clearPlayerData(UUID uuid)
+    {
+        playerTickData.remove(uuid);
+        playerData.remove(uuid);
     }
     
     @SubscribeEvent

+ 2 - 2
src/main/java/me/km/scheduler/TaskTicker.java

@@ -7,11 +7,11 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
 import net.minecraftforge.fml.common.gameevent.TickEvent;
 
 public class TaskTicker implements ModuleListener
-{
+{    
     public TaskTicker(Module m) 
     {
     }
-
+    
     @SubscribeEvent
     public void tickServer(TickEvent.ServerTickEvent e) 
     {

+ 86 - 0
src/main/java/me/km/snuviscript/MinecraftFunctions.java

@@ -1167,10 +1167,34 @@ public class MinecraftFunctions
             CustomEventCaller.removeMoveData(in[0].getInt(sc));
             return Void.TYPE; 
         });
+        
+        // ---------------------------------------------------------------------    
+        // damage stuff
+        // ---------------------------------------------------------------------  
+        sm.registerFunction("damage.ismagic", (sc, in) -> 
+        {
+            DamageSource ds = ((DamageSource) in[0].get(sc));
+            return ds.isMagicDamage() && !ds.isDamageAbsolute();
+        });   
+        sm.registerFunction("damage.isphysical", (sc, in) -> 
+        {
+            DamageSource ds = ((DamageSource) in[0].get(sc));
+            return (!ds.isMagicDamage() || ds.isDamageAbsolute()) && !ds.isUnblockable();
+        });   
+        sm.registerFunction("damage.gettype", (sc, in) -> ((DamageSource) in[0].get(sc)).getDamageType()); 
 
         // ---------------------------------------------------------------------    
         // entity commands
         // ---------------------------------------------------------------------  
+        sm.registerFunction("entity.getlook", (sc, in) -> 
+        {
+            Object[] o = new Object[3];
+            Vec3d v = ((Entity) in[0].get(sc)).getLookVec();
+            o[0] = v.x;
+            o[1] = v.y;
+            o[2] = v.z;
+            return o;
+        });  
         sm.registerFunction("entity.getlocation", (sc, in) -> new Location((Entity) in[0].get(sc)));   
         sm.registerFunction("entity.damage", (sc, in) -> 
         { 
@@ -1881,6 +1905,36 @@ public class MinecraftFunctions
             return Void.TYPE; 
         });
         
+        // ---------------------------------------------------------------------  
+        // status - library   
+        // ---------------------------------------------------------------------  
+        sm.registerFunction("status.add", (sc, in) -> 
+        {  
+            byte index = in[1].getByte(sc);
+            String message = SnuviUtils.connect(sc, in, 2);
+            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.addStatus((EntityPlayerMP) p, index, message));
+            return Void.TYPE; 
+        }); 
+        sm.registerFunction("status.addtimed", (sc, in) -> 
+        {  
+            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((EntityPlayerMP) 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((EntityPlayerMP) p, index));
+            return Void.TYPE; 
+        });
+        sm.registerFunction("status.reset", (sc, in) -> 
+        {  
+            doForGroup(in[0].get(sc), sc, p -> ModPacketHandler.clearStatus((EntityPlayerMP) p)); 
+            return Void.TYPE; 
+        });
+        
         // ---------------------------------------------------------------------  
         // ItemStack-Display-library   
         // ---------------------------------------------------------------------  
@@ -2178,6 +2232,11 @@ public class MinecraftFunctions
         // ---------------------------------------------------------------------    
         // ban library
         // ---------------------------------------------------------------------  
+        sm.registerFunction("ban.kick", (sc, in) -> 
+        {
+            ((EntityPlayerMP) in[0].get(sc)).connection.disconnect(new TextComponentString(in[1].getString(sc)));
+            return Void.TYPE;
+        });
         sm.registerFunction("ban.add", (sc, in) -> 
         {
             GameProfile gp = KajetansMod.server.getPlayerProfileCache().getProfileByUUID(getUUID(in[0].get(sc)));
@@ -2204,6 +2263,33 @@ public class MinecraftFunctions
             return Void.TYPE;
         });
         
+        // ---------------------------------------------------------------------    
+        // player data
+        // ---------------------------------------------------------------------   
+        sm.registerFunction("data.set", (sc, in) -> 
+        {
+            KajetansMod.playerbank.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));
+            return Void.TYPE;
+        });
+        sm.registerFunction("data.get", (sc, in) -> 
+        {
+            return KajetansMod.playerbank.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));
+        });
+        sm.registerFunction("data.clear", (sc, in) -> 
+        {
+            KajetansMod.playerbank.clearPlayerData(getUUID(in[0].get(sc)));
+            return Void.TYPE;
+        });
+        
         // ---------------------------------------------------------------------    
         // Ohne library
         // ---------------------------------------------------------------------   

+ 11 - 3
src/main/java/me/km/snuviscript/ScriptEvents.java

@@ -108,6 +108,14 @@ public class ScriptEvents
     // events
     // -------------------------------------------------------------------------
 
+    public static void onPlayerDataTick(EntityPlayer p, String var)
+    {      
+        handleEvent(p, "player_data_tick", sc -> 
+        {
+            sc.setVar("var", var);
+        });
+    }
+    
     public static void onPlayerMove(EntityPlayer p, int id)
     {      
         handleEvent(p, "player_move", sc -> 
@@ -166,7 +174,7 @@ public class ScriptEvents
         {
             sc.setVar("player_killed", p.getHealth() <= e.getAmount());   
             sc.setVar("player_damage", (double) e.getAmount());   
-            sc.setVar("player_damage_cause", e.getSource().getDamageType());
+            sc.setVar("player_damage_cause", e.getSource());
             EntityPlayer ent = Utils.getDamager(e.getSource());
             if(ent != null)
             {
@@ -202,7 +210,7 @@ public class ScriptEvents
             handleEvent(p, "player_is_attacked", (sc) -> 
             {
                 sc.setVar("player_killed", p.getHealth() <= e.getAmount());   
-                sc.setVar("player_damage_cause", e.getSource().getDamageType());
+                sc.setVar("player_damage_cause", e.getSource());
                 EntityPlayer ent = Utils.getDamager(e.getSource());
                 if(ent != null)
                 {
@@ -327,7 +335,7 @@ public class ScriptEvents
             sc.setVar("entity_killed", e.getEntityLiving().getHealth() <= e.getAmount());        
             ScriptVars.setEntityVars(sc, e.getEntity()); 
             sc.setVar("entity_damage", (double) e.getAmount());   
-            sc.setVar("entity_damage_cause", e.getSource().getDamageType());
+            sc.setVar("entity_damage_cause", e.getSource());
             sc.setVar("cancel", e.isCanceled());   
         }, (sc) -> 
         {

+ 13 - 3
src/main/java/me/km/snuviscript/SnuviLogger.java

@@ -47,14 +47,24 @@ public class SnuviLogger implements ISnuviLogger
         ChatChannel dev = ChatChannel.getDevChannel();
         if(scriptname != null)
         {
-            if(sc != null)
+            StringBuilder sb = new StringBuilder();
+            if(ex == null)
             {
-                dev.sendWarning("error in '" + scriptname + "' " + sc.getId());
+                sb.append("§edebug");
             }
             else
             {
-                dev.sendWarning("error in '" + scriptname + "'");
+                sb.append("error");
+            }
+            sb.append(" in '");
+            sb.append(scriptname);
+            sb.append("'");
+            if(sc != null)
+            {
+                sb.append(" ");
+                sb.append(sc.getId());
             }
+            dev.sendWarning(sb.toString());
         }
         if(message != null)
         {