Browse Source

several bugfixes, new snuvi event, some snuvi events set the player now
if possible

Kajetan Johannes Hammerle 4 years ago
parent
commit
7b2f1ff9ce

+ 1 - 37
src/main/java/me/km/Client.java

@@ -124,43 +124,7 @@ public class Client
             ItemStackDisplayGui.INSTANCE.paint();
         }
     }
-    
-    /*private static class Data
-    {
-        private long[] time = new long[10];
-        private int index = 0;
-    }
-    
-    private static java.util.HashMap<Class, Data> testMap = new java.util.HashMap<>();
-    
-    @SubscribeEvent
-    public void test(net.minecraftforge.eventbus.api.Event e)
-    {
-        Class c = e.getClass();
-        Data data = testMap.get(c);
-        if(data != null && data.index >= 10)
-        {
-            if(data.time[9] - data.time[0] < 1_000_000_000)
-            {
-                return;
-            }
-            else
-            {
-                data.index = 0;
-            }
-        }
-        
-        if(data == null)
-        {
-            data = new Data();
-            testMap.put(c, data);
-        }
-        
-        data.time[data.index] = System.nanoTime();
-        data.index++;
-        org.apache.logging.log4j.LogManager.getLogger().warn(c);
-    }*/
-    
+
     @SubscribeEvent
     public void onRenderGui(GuiScreenEvent.InitGuiEvent e)
     {

+ 31 - 18
src/main/java/me/km/CommonEvents.java

@@ -1,9 +1,6 @@
 package me.km;
 
 import me.km.utils.ExplosionUtils;
-import net.minecraft.nbt.CompoundNBT;
-import net.minecraft.nbt.ListNBT;
-import net.minecraft.util.text.StringTextComponent;
 import net.minecraftforge.event.world.ExplosionEvent;
 import net.minecraftforge.eventbus.api.SubscribeEvent;
 
@@ -17,24 +14,40 @@ public class CommonEvents
             ExplosionUtils.explosion(e.getExplosion(), e.getWorld());
         }
     }
+
+    /*private static class Data
+    {
+        private long[] time = new long[10];
+        private int index = 0;
+    }
     
-    /*@SubscribeEvent
-    public void gdfg(net.minecraftforge.event.ServerChatEvent e)
+    private static java.util.HashMap<Class, Data> testMap = new java.util.HashMap<>();
+    
+    @SubscribeEvent
+    public void test(net.minecraftforge.eventbus.api.Event e)
     {
-        CompoundNBT base = new CompoundNBT();
-        
-        base.putString("biome", "minecraft:the_void");
-       
-        ListNBT list = new ListNBT();
-        
-        base.put("layers", list);
-        
-        CompoundNBT layer = new CompoundNBT();
-        layer.putString("block", "minecraft:air");
-        layer.putByte("height", (byte) 1);
+        Class c = e.getClass();
+        Data data = testMap.get(c);
+        if(data != null && data.index >= 10)
+        {
+            if(data.time[9] - data.time[0] < 1_000_000_000)
+            {
+                return;
+            }
+            else
+            {
+                data.index = 0;
+            }
+        }
         
-        list.add(layer);
+        if(data == null)
+        {
+            data = new Data();
+            testMap.put(c, data);
+        }
         
-        e.setComponent(new StringTextComponent(base.toString() + "   " + e.getPlayer().world.getWorldInfo().getGeneratorOptions().toString()));
+        data.time[data.index] = System.nanoTime();
+        data.index++;
+        org.apache.logging.log4j.LogManager.getLogger().warn(c);
     }*/
 }

+ 4 - 4
src/main/java/me/km/overrides/ModPlayerList.java

@@ -305,10 +305,10 @@ public class ModPlayerList extends DedicatedPlayerList
             }
         }
 
-        while(!serverworld.areCollisionShapesEmpty(p) && p.posY < 256.0D)
-        {
-            p.setPosition(p.posX, p.posY + 1.0D, p.posZ);
-        }
+        //while(!serverworld.areCollisionShapesEmpty(p) && p.posY < 256.0D)
+        //{
+        //    p.setPosition(p.posX, p.posY + 1.0D, p.posZ);
+        //}
 
         WorldInfo wi = p.world.getWorldInfo();
         p.connection.sendPacket(new SRespawnPacket(p.dimension, wi.getGenerator(), p.interactionManager.getGameType()));

+ 12 - 0
src/main/java/me/km/plots/DummyProtection.java

@@ -26,4 +26,16 @@ public class DummyProtection implements IProtection
     {
         return true;
     }
+
+    @Override
+    public boolean hasPlots(int x, int y, int z, String worldName)
+    {
+        return false;
+    }
+
+    @Override
+    public boolean hasPlots(IWorld w, BlockPos pos)
+    {
+        return false;
+    }
 }

+ 2 - 0
src/main/java/me/km/plots/IProtection.java

@@ -7,6 +7,8 @@ import net.minecraft.world.IWorld;
 
 public interface IProtection
 {
+    public boolean hasPlots(int x, int y, int z, String worldName);
+    public boolean hasPlots(IWorld w, BlockPos pos);
     public ArrayList<Double> getIds(int x, int y, int z, String worldName);
     public boolean canBuild(int x, int y, int z, String worldName, int playerId);
     public boolean canBuild(IWorld w, BlockPos pos, ModEntityPlayerMP p);

+ 35 - 0
src/main/java/me/km/plots/ProtectionBank.java

@@ -76,6 +76,41 @@ public class ProtectionBank implements IProtection
         return list;
     }
     
+    @Override
+    public boolean hasPlots(int x, int y, int z, String worldName)
+    {
+        try
+        {
+            getIds.setInt(1, x);
+            getIds.setInt(2, x);
+            getIds.setInt(3, y);
+            getIds.setInt(4, y);
+            getIds.setInt(5, z);
+            getIds.setInt(6, z);
+            getIds.setString(7, worldName);
+            try(ResultSet rs = getIds.executeQuery())
+            {
+                return rs.next();
+            }
+            catch(SQLException ex)
+            {
+                ex.printStackTrace();
+            }
+        }
+        catch(SQLException ex)
+        {
+            ex.printStackTrace();
+        }
+        return false;
+    }
+    
+    
+    @Override
+    public boolean hasPlots(IWorld w, BlockPos pos)
+    {
+        return hasPlots(pos.getX(), pos.getY(), pos.getZ(), WorldManager.getName(w));
+    }
+    
     @Override
     public boolean canBuild(int x, int y, int z, String worldName, int playerId)
     {

+ 40 - 5
src/main/java/me/km/plots/ProtectionEvents.java

@@ -4,14 +4,14 @@ import me.km.overrides.ModEntityPlayerMP;
 import me.km.permissions.PermissionManager;
 import net.minecraft.block.Block;
 import net.minecraft.block.Blocks;
+import net.minecraft.entity.Entity;
 import net.minecraft.entity.EntityType;
-import net.minecraft.entity.item.ItemFrameEntity;
-import net.minecraft.entity.merchant.villager.VillagerEntity;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.RayTraceResult;
 import net.minecraft.world.dimension.DimensionType;
 import net.minecraftforge.event.entity.EntityJoinWorldEvent;
 import net.minecraftforge.event.entity.EntityStruckByLightningEvent;
+import net.minecraftforge.event.entity.ProjectileImpactEvent;
 import net.minecraftforge.event.entity.living.LivingAttackEvent;
 import net.minecraftforge.event.entity.player.AttackEntityEvent;
 import net.minecraftforge.event.entity.player.FillBucketEvent;
@@ -138,17 +138,52 @@ public class ProtectionEvents
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void onEntityHit(AttackEntityEvent e)
     {
-        if(e.getTarget() instanceof ItemFrameEntity)
+        EntityType type = e.getTarget().getType();
+        if(type == EntityType.ITEM_FRAME || type == EntityType.PAINTING || type == EntityType.ARMOR_STAND)
         {
             ModEntityPlayerMP p = (ModEntityPlayerMP) e.getEntityPlayer();
             if(!perms.hasPermission(p, PLOT_BYPASS) && 
-            !bank.canBuild(p.world, e.getTarget().getPosition(), p))
+                !bank.canBuild(p.world, e.getTarget().getPosition(), p))
             {
                 e.setCanceled(true);
             }
         }
     }
     
+    @SubscribeEvent
+    public void onThrowableImpace(ProjectileImpactEvent.Throwable e)
+    {
+        Entity ent = e.getThrowable().getThrower();
+        if(ent == null || !(ent instanceof ModEntityPlayerMP))
+        {
+            if(bank.hasPlots(0, 0, 0, PLOT_BYPASS))
+            {
+                e.setCanceled(true);
+            }
+        }
+        else if(!perms.hasPermission(ent, PLOT_BYPASS) && !bank.canBuild(ent.world, ent.getPosition(), (ModEntityPlayerMP) ent))
+        {
+            e.setCanceled(true);
+        }
+    }
+    
+    @SubscribeEvent
+    public void onThrowableImpace(ProjectileImpactEvent.Arrow e)
+    {
+        Entity ent = e.getArrow().getShooter();
+        if(ent == null || !(ent instanceof ModEntityPlayerMP))
+        {
+            if(bank.hasPlots(0, 0, 0, PLOT_BYPASS))
+            {
+                e.setCanceled(true);
+            }
+        }
+        else if(!perms.hasPermission(ent, PLOT_BYPASS) && !bank.canBuild(ent.world, ent.getPosition(), (ModEntityPlayerMP) ent))
+        {
+            e.setCanceled(true);
+        }
+    }
+    
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void EntityProtectionPotion(EntityStruckByLightningEvent e)
     {
@@ -205,7 +240,7 @@ public class ProtectionEvents
     @SubscribeEvent
     public void onAttackVillager(LivingAttackEvent e)
     { 
-        if(e.getEntityLiving() instanceof VillagerEntity && !e.getSource().isCreativePlayer())
+        if(e.getEntityLiving().getType() == EntityType.VILLAGER && !e.getSource().isCreativePlayer())
         {
             e.setCanceled(true);
         }

+ 45 - 23
src/main/java/me/km/snuviscript/MinecraftFunctions.java

@@ -84,7 +84,10 @@ import net.minecraft.entity.projectile.SmallFireballEntity;
 import net.minecraft.entity.projectile.SnowballEntity;
 import net.minecraft.entity.projectile.SpectralArrowEntity;
 import net.minecraft.entity.projectile.WitherSkullEntity;
+import net.minecraft.inventory.EnderChestInventory;
 import net.minecraft.inventory.EquipmentSlotType;
+import net.minecraft.inventory.container.ChestContainer;
+import net.minecraft.inventory.container.SimpleNamedContainerProvider;
 import net.minecraft.item.ArmorItem;
 import net.minecraft.item.Item;
 import net.minecraft.item.Items;
@@ -194,9 +197,9 @@ public class MinecraftFunctions
         // Title-library  
         // ---------------------------------------------------------------------
         sm.registerFunction("table.getstart", (sc, in) -> TableUtils.getTableStart(in[0].getInt(sc), in[1].getInt(sc), in[2].getString(sc)));
-        sm.registerFunction("title.getmiddle", (sc, in) -> TableUtils.getTableMiddle(in[0].getInt(sc), in[1].getInt(sc), in[2].getString(sc)));
-        sm.registerFunction("title.getend", (sc, in) -> TableUtils.getTableEnd(in[0].getInt(sc), in[1].getInt(sc), in[2].getString(sc)));
-        sm.registerFunction("title.get", (sc, in) -> 
+        sm.registerFunction("table.getmiddle", (sc, in) -> TableUtils.getTableMiddle(in[0].getInt(sc), in[1].getInt(sc), in[2].getString(sc)));
+        sm.registerFunction("table.getend", (sc, in) -> TableUtils.getTableEnd(in[0].getInt(sc), in[1].getInt(sc), in[2].getString(sc)));
+        sm.registerFunction("table.get", (sc, in) -> 
         { 
             String[] columns = new String[in.length - 2];
             for(int i = 0; i < columns.length; i++)
@@ -209,7 +212,7 @@ public class MinecraftFunctions
         // ---------------------------------------------------------------------
         // table library  
         // ---------------------------------------------------------------------
-        sm.registerFunction("table.settime", (sc, in) -> 
+        sm.registerFunction("title.settime", (sc, in) -> 
         {
             ((ServerPlayerEntity) in[0].get(sc)).connection.sendPacket(new STitlePacket(in[1].getInt(sc), in[2].getInt(sc), in[3].getInt(sc)));
             return Void.TYPE;
@@ -470,12 +473,21 @@ public class MinecraftFunctions
         sm.registerAlias("player.setspawn", "player.setbedspawn");
         sm.registerFunction("player.damageitem", (sc, in) -> 
         {   
-            ((PlayerEntity) in[0].get(sc)).getHeldItemMainhand().damageItem(in[1].getInt(sc), (PlayerEntity) in[0].get(sc), (c) -> {}); 
+            PlayerEntity p =(PlayerEntity) in[0].get(sc);
+            p.getHeldItemMainhand().damageItem(in[1].getInt(sc), p, (c) -> {}); 
             return Void.TYPE; 
         });
         sm.registerFunction("player.openenderchest", (sc, in) -> 
         {   
-            ((PlayerEntity) in[1].get(sc)).getInventoryEnderChest().openInventory((PlayerEntity) in[0].get(sc));
+            PlayerEntity p1 = (PlayerEntity) in[0].get(sc);
+            PlayerEntity p2 = (PlayerEntity) in[1].get(sc);
+            
+            EnderChestInventory inv = p2.getInventoryEnderChest();
+            p1.openContainer(new SimpleNamedContainerProvider((id, pInv, p) -> 
+            {
+               return ChestContainer.createGeneric9X3(id, pInv, inv);
+            }, new StringTextComponent(in[2].getString(sc))));
+
             return Void.TYPE; 
         });
         sm.registerFunction("player.getlevel", (sc, in) -> (double) ((PlayerEntity) in[0].get(sc)).experienceLevel);
@@ -504,11 +516,7 @@ public class MinecraftFunctions
         sm.registerFunction("player.gethead", (sc, in) -> 
         {
             ItemStack stack = new ItemStack(Items.PLAYER_HEAD);
-            CompoundNBT com = stack.getTag();
-            if(com == null)
-            {
-                return stack;
-            }
+            CompoundNBT com = stack.getOrCreateTag();
             GameProfile gp = new GameProfile(getUUID(in[0].get(sc)), in[1].getString(sc));
             gp = SkullTileEntity.updateGameProfile(gp);
             com.put("SkullOwner", NBTUtil.writeGameProfile(new CompoundNBT(), gp));
@@ -696,7 +704,7 @@ public class MinecraftFunctions
             return Void.TYPE; 
         });                  
         sm.registerFunction("item.gettag", (sc, in) -> ItemTags.getCollection().get(new ResourceLocation(in[0].getString(sc))));
-        sm.registerFunction("item.hastag", (sc, in) -> ((Tag<Item>) in[0].get(sc)).contains(((ItemStack) in[0].get(sc)).getItem()));
+        sm.registerFunction("item.hastag", (sc, in) -> ((Tag<Item>) in[0].get(sc)).contains(((ItemStack) in[1].get(sc)).getItem()));
         sm.registerFunction("item.get", (sc, in) -> ((ItemStack) in[0].get(sc)).getItem());
         sm.registerFunction("item.gettype", (sc, in) -> ((ItemStack) in[0].get(sc)).getItem().getRegistryName().toString());     
         sm.registerFunction("item.getamount", (sc, in) -> (double) ((ItemStack) in[0].get(sc)).getCount()); 
@@ -909,7 +917,7 @@ public class MinecraftFunctions
         // Block-library
         // ---------------------------------------------------------------------    
         sm.registerFunction("block.gettag", (sc, in) -> BlockTags.getCollection().get(new ResourceLocation(in[0].getString(sc))));
-        sm.registerFunction("block.hastag", (sc, in) -> ((Tag<Block>) in[0].get(sc)).contains((Block) in[0].get(sc)));
+        sm.registerFunction("block.hastag", (sc, in) -> ((Tag<Block>) in[0].get(sc)).contains((Block) in[1].get(sc)));
         sm.registerFunction("block.gettype", (sc, in) -> 
         {
             Location l = (Location) in[0].get(sc);
@@ -1167,6 +1175,16 @@ public class MinecraftFunctions
             ((LivingEntity) in[0].get(sc)).attackEntityFrom(DamageSource.GENERIC, in[1].getFloat(sc));
             return Void.TYPE; 
         }); 
+        sm.registerFunction("entity.fromsource", (sc, in) -> 
+        { 
+            DamageSource ds = (DamageSource) in[0].get(sc);
+            Entity ent = ds.getTrueSource();
+            if(ent == null)
+            {
+                return ds.getImmediateSource();
+            }
+            return ent;
+        });
         sm.registerFunction("entity.getdamagesource", (sc, in) -> 
         { 
             Object o = in[0].get(sc);
@@ -1491,6 +1509,7 @@ public class MinecraftFunctions
             ((AgeableEntity) in[0].get(sc)).setGrowingAge(in[1].getInt(sc));
             return Void.TYPE;
         });
+        sm.registerFunction("entity.gettype", (sc, in) -> ((Entity) in[0].get(sc)).getType().getRegistryName().getPath());
         
         // ---------------------------------------------------------------------    
         // human commands
@@ -1702,7 +1721,10 @@ public class MinecraftFunctions
         sm.registerFunction("databank.prepare", (sc, in) -> 
         {    
             PreparedStatement p = dataBank.prepareUnsafeStatement(in[0].getString(sc));
-            sc.addCloseable(p);
+            if(in.length <= 1 || in[1].getBoolean(sc))
+            {
+                sc.addCloseable(p);
+            }
             return p; 
         });
         sm.registerFunction("databank.setint", (sc, in) -> 
@@ -2233,16 +2255,16 @@ public class MinecraftFunctions
         sm.registerFunction("text.copytext", (sc, in) -> 
         {
             String s = in[1].getString(sc);
-            s = s.replace('{', 'Ɛ');
-            s = s.replace('}', 'Ƒ');
-            s = s.replace('[', 'ƒ');
-            s = s.replace(']', 'Ɠ');
-            s = s.replace('(', 'ƕ');
-            s = s.replace(')', 'Ɩ');
+            //s = s.replace('{', 'Ɛ');
+            //s = s.replace('}', 'Ƒ');
+            //s = s.replace('[', 'ƒ');
+            //s = s.replace(']', 'Ɠ');
+            //s = s.replace('(', 'ƕ');
+            //s = s.replace(')', 'Ɩ');
             s = s.replace(" ", "%20");
-            s = s.replace('\'', 'Ɩ');
-            s = s.replace('"', 'Ɩ');
-            s = s.replace("\\", "");
+            //s = s.replace('\'', 'Ɩ');
+            //s = s.replace('"', 'Ɩ');
+            //s = s.replace("\\", "");
 
             StringTextComponent text = new StringTextComponent(in[0].getString(sc));
             Style style = text.getStyle();

+ 33 - 37
src/main/java/me/km/snuviscript/ScriptEvents.java

@@ -36,6 +36,7 @@ import net.minecraftforge.event.entity.EntityMountEvent;
 import net.minecraftforge.event.entity.ProjectileImpactEvent;
 import net.minecraftforge.event.entity.item.ItemTossEvent;
 import net.minecraftforge.event.entity.living.*;
+import net.minecraftforge.event.entity.player.AttackEntityEvent;
 import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
 import net.minecraftforge.event.entity.player.FillBucketEvent;
 import net.minecraftforge.event.entity.player.ItemFishedEvent;
@@ -284,20 +285,13 @@ public class ScriptEvents
     {        
         if(!(e.getEntityLiving() instanceof PlayerEntity))
         {
-            handleEvent(null, "entity_death", (sc) -> 
+            PlayerEntity p = Utils.getDamager(e.getSource());
+            handleEvent(p, "entity_death", (sc) -> 
             {
+                sc.setVar("entity_damage_cause", e.getSource());
                 LivingEntity ent = e.getEntityLiving();
                 ScriptVars.setEntityVars(sc, ent);
-                PlayerEntity p = Utils.getDamager(e.getSource());
-                if(p != null)
-                {
-                    sc.setVar("player_involved", true);
-                    ScriptVars.setPlayerVars(sc, p);
-                }  
-                else
-                {
-                    sc.setVar("player_involved", false);
-                }
+                sc.setVar("player_involved", p != null);
                 sc.setVar("cancel", e.isCanceled()); 
             }, (sc) -> 
             {
@@ -309,6 +303,7 @@ public class ScriptEvents
         handleEvent(p, "player_death", (sc) -> 
         {
             sc.setVar("clear", false);
+            sc.setVar("player_damage_cause", e.getSource());
             PlayerEntity ent = Utils.getDamager(e.getSource());
             if(ent != null)
             {
@@ -367,20 +362,12 @@ public class ScriptEvents
     {             
         try
         {
-            handleEvent(null, "entity_drop", (sc) -> 
+            PlayerEntity p = Utils.getDamager(e.getSource());
+            handleEvent(p, "entity_drop", (sc) -> 
             {
                 sc.setVar("drops", e.getDrops());
                 ScriptVars.setEntityVars(sc, e.getEntityLiving());
-                PlayerEntity p = Utils.getDamager(e.getSource());
-                if(p != null)
-                {
-                    sc.setVar("player_involved", true);
-                    ScriptVars.setPlayerVars(sc, p);
-                }  
-                else
-                {
-                    sc.setVar("player_involved", false);
-                }
+                sc.setVar("player_involved", p != null);
                 sc.setVar("cancel", e.isCanceled()); 
             }, (sc) -> 
             {
@@ -412,23 +399,19 @@ public class ScriptEvents
     @SubscribeEvent
     public void onProjectileHit(ProjectileImpactEvent e)
     {        
-        PlayerEntity p = Utils.getPlayerFromProjectile(e.getEntity());
-        if(p != null)
+        handleEvent(Utils.getPlayerFromProjectile(e.getEntity()), "throw_hit", (sc) -> 
         {
-            handleEvent(p, "throw_hit", (sc) -> 
+            if(e.getRayTraceResult().getType() == RayTraceResult.Type.ENTITY && e.getRayTraceResult().hitInfo != null)
             {
-                if(e.getRayTraceResult().getType() == RayTraceResult.Type.ENTITY && e.getRayTraceResult().hitInfo != null)
-                {
-                    sc.setVar("is_entity_hit", true);
-                    sc.setVar("entity_hit", e.getRayTraceResult().hitInfo);
-                }
-                else
-                {
-                    sc.setVar("is_entity_hit", false);
-                }
-                ScriptVars.setEntityVars(sc, e.getEntity());
-            });
-        }           
+                sc.setVar("is_entity_hit", true);
+                sc.setVar("entity_hit", e.getRayTraceResult().hitInfo);
+            }
+            else
+            {
+                sc.setVar("is_entity_hit", false);
+            }
+            ScriptVars.setEntityVars(sc, e.getEntity());
+        });      
     }
     
     public void onEntityItemProjectileHit(EntityItemProjectile ent, PlayerEntity p, ItemStack stack, List<Entity> ents)
@@ -885,4 +868,17 @@ public class ScriptEvents
             sc.setVar("sender_name", getName(cs));
         });
     }
+    
+    @SubscribeEvent(priority = EventPriority.HIGHEST)
+    public void onEntityHit(AttackEntityEvent e)
+    {
+        handleEvent(e.getPlayer(), "player_attack_entity", (sc) -> 
+        {
+            ScriptVars.setEntityVars(sc, e.getTarget());
+            sc.setVar("cancel", e.isCanceled()); 
+        }, (sc) -> 
+        {
+            simpleCancel(sc, e, "player_attack_entity");
+        });
+    }
 }