Sfoglia il codice sorgente

bugfixes, improved tablist changing

Kajetan Johannes Hammerle 5 anni fa
parent
commit
639abf92ba

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

@@ -8,8 +8,6 @@ import me.km.scheduler.SnuviScheduler;
 import me.km.utils.ReflectionUtils;
 import net.minecraft.entity.LivingEntity;
 import net.minecraft.entity.SharedMonsterAttributes;
-import net.minecraft.entity.player.PlayerEntity;
-import net.minecraft.entity.player.ServerPlayerEntity;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.util.CombatRules;
 import net.minecraft.util.DamageSource;

+ 0 - 30
src/main/java/me/km/events/PlayerTabListNameEvent.java

@@ -1,30 +0,0 @@
-package me.km.events;
-
-import me.km.overrides.ModEntityPlayerMP;
-
-public class PlayerTabListNameEvent
-{
-    private final ModEntityPlayerMP p;
-    private String name;
-    
-    public PlayerTabListNameEvent(ModEntityPlayerMP p)
-    {
-        this.p = p;
-        this.name = p.getName().getString();
-    }
-
-    public ModEntityPlayerMP getPlayer()
-    {
-        return p;
-    }
-    
-    public String getName()
-    {
-        return name;
-    }
-    
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-}

+ 10 - 4
src/main/java/me/km/overrides/ModEntityPlayerMP.java

@@ -3,8 +3,8 @@ package me.km.overrides;
 import com.mojang.authlib.GameProfile;
 import java.util.HashMap;
 import me.km.Server;
-import me.km.events.PlayerTabListNameEvent;
 import net.minecraft.entity.player.ServerPlayerEntity;
+import net.minecraft.network.play.server.SPlayerListItemPacket;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.server.management.PlayerInteractionManager;
 import net.minecraft.util.text.ITextComponent;
@@ -17,6 +17,7 @@ public class ModEntityPlayerMP extends ServerPlayerEntity
     private int id = -1;
     private final HashMap<String, Integer> timedData;
     private final HashMap<String, Object> data;
+    private StringTextComponent displayName = null;
     
     public ModEntityPlayerMP(MinecraftServer ms, ServerWorld w, GameProfile gp, PlayerInteractionManager pim)
     {
@@ -47,13 +48,18 @@ public class ModEntityPlayerMP extends ServerPlayerEntity
         board.update(this);
         tickData();
     }
+    
+    public void setTabListDisplayName(String name)
+    {
+        displayName = new StringTextComponent(name);
+        server.getPlayerList().sendPacketToAllPlayers(
+                new SPlayerListItemPacket(SPlayerListItemPacket.Action.UPDATE_DISPLAY_NAME, this));
+    }
 
     @Override
     public ITextComponent getTabListDisplayName()
     {
-        PlayerTabListNameEvent e = new PlayerTabListNameEvent(this);
-        Server.scriptEvents.onGetPlayerName(e);
-        return new StringTextComponent(e.getName());
+        return displayName;
     }
     
     public void setId(int id)

+ 22 - 7
src/main/java/me/km/snuviscript/MinecraftFunctions.java

@@ -99,6 +99,7 @@ import net.minecraft.nbt.NBTUtil;
 import net.minecraft.network.play.client.CChatMessagePacket;
 import net.minecraft.network.play.client.CClientStatusPacket;
 import net.minecraft.network.play.server.SEntityVelocityPacket;
+import net.minecraft.network.play.server.SPlaySoundEffectPacket;
 import net.minecraft.network.play.server.SSpawnPositionPacket;
 import net.minecraft.network.play.server.STitlePacket;
 import net.minecraft.network.play.server.SUpdateTileEntityPacket;
@@ -546,6 +547,11 @@ public class MinecraftFunctions
             ((PlayerEntity) in[0].get(sc)).getInventoryEnderChest().setInventorySlotContents(in[1].getInt(sc), ((ItemStack) in[2].get(sc)).copy()); 
             return Void.TYPE;
         });
+        sm.registerFunction("player.setdisplayname", (sc, in) -> 
+        {     
+            ((ModEntityPlayerMP) in[0].get(sc)).setTabListDisplayName(in[1].getString(sc));
+            return Void.TYPE;
+        });
 
         // ---------------------------------------------------------------------    
         // Players-library
@@ -715,7 +721,7 @@ public class MinecraftFunctions
             ((ItemStack) in[0].get(sc)).setCount(in[1].getInt(sc));
             return Void.TYPE; 
         });   
-        sm.registerFunction("item.getname", (sc, in) -> ((ItemStack) in[0].get(sc)).getDisplayName());
+        sm.registerFunction("item.getname", (sc, in) -> ((ItemStack) in[0].get(sc)).getDisplayName().getFormattedText());
         sm.registerFunction("item.setname", (sc, in) -> 
         {   
             ((ItemStack) in[0].get(sc)).setDisplayName(new StringTextComponent(SnuviUtils.connect(sc, in, 1))); 
@@ -1160,6 +1166,13 @@ public class MinecraftFunctions
         // ---------------------------------------------------------------------    
         // entity commands
         // ---------------------------------------------------------------------  
+        sm.registerFunction("entity.setburning", (sc, in) -> 
+        {
+            
+            ((Entity) in[0].get(sc)).setFire(in[1].getInt(sc));
+            return Void.TYPE; 
+        });  
+        sm.registerFunction("entity.isburning", (sc, in) -> ((Entity) in[0].get(sc)).isBurning());  
         sm.registerFunction("entity.getlook", (sc, in) -> 
         {
             Object[] o = new Object[3];
@@ -2139,21 +2152,23 @@ public class MinecraftFunctions
         // particle library   
         // --------------------------------------------------------------------- 
         sm.registerFunction("sound.get", (sc, in) -> Mapper.getSound(in[0].getString(sc)));
+        sm.registerFunction("sound.getcategory", (sc, in) -> Mapper.getSoundCategory(in[0].getString(sc)));
         sm.registerFunction("sound.spawn", (sc, in) -> 
         { 
             Location l = (Location) in[0].get(sc);
             ServerWorld sw = (ServerWorld) l.getWorld();
-            float volume = in.length >= 3 ? in[2].getFloat(sc) : 1.0f;
-            float pitch = in.length >= 4 ? in[3].getFloat(sc) : (sw.rand.nextFloat() * 0.1f + 0.9f);
-            sw.playSound(null, l.getX(), l.getY(), l.getZ(), (SoundEvent) in[1].get(sc), SoundCategory.MASTER, volume, pitch);
+            float volume = in.length >= 4 ? in[3].getFloat(sc) : 1.0f;
+            float pitch = in.length >= 5 ? in[4].getFloat(sc) : (sw.rand.nextFloat() * 0.1f + 0.9f);
+            sw.playSound(null, l.getX(), l.getY(), l.getZ(), (SoundEvent) in[1].get(sc), (SoundCategory) in[2].get(sc), volume, pitch);
             return Void.TYPE; 
         });
         sm.registerFunction("sound.spawnforplayer", (sc, in) -> 
         { 
             ServerPlayerEntity p = (ServerPlayerEntity) in[0].get(sc);
-            float volume = in.length >= 3 ? in[2].getFloat(sc) : 1.0f;
-            float pitch = in.length >= 4 ? in[3].getFloat(sc) : (p.world.rand.nextFloat() * 0.1f + 0.9f);
-            p.playSound((SoundEvent) in[1].get(sc), volume, pitch);
+            float volume = in.length >= 4 ? in[3].getFloat(sc) : 1.0f;
+            float pitch = in.length >= 5 ? in[4].getFloat(sc) : (p.world.rand.nextFloat() * 0.1f + 0.9f);
+            p.connection.sendPacket(new SPlaySoundEffectPacket((SoundEvent) in[1].get(sc), 
+                    (SoundCategory) in[2].get(sc), p.posX, p.posY, p.posZ, volume, pitch));
             return Void.TYPE; 
         });
 

+ 1 - 21
src/main/java/me/km/snuviscript/ScriptEvents.java

@@ -11,7 +11,6 @@ import me.km.utils.Utils;
 import me.km.entities.EntityHuman;
 import me.km.entities.EntityItemProjectile;
 import me.km.events.CommandEvent;
-import me.km.events.PlayerTabListNameEvent;
 import me.km.inventory.ModInventory;
 import me.km.permissions.PermissionManager;
 import me.km.utils.Location;
@@ -817,30 +816,11 @@ public class ScriptEvents
             }
         });
     }
-    
-    public void onGetPlayerName(PlayerTabListNameEvent e)
-    {
-        handleEvent(e.getPlayer(), "tab_list", (sc) -> 
-        {
-            sc.setVar("tab_name", e.getName());
-        }, (sc) -> 
-        {
-            try
-            {
-                ifVarNotNull(sc, "tab_name", v -> e.setName(v.getString(sc)));
-            }
-            catch(Exception ex)
-            {
-                scripts.getLogger().print("invalid var in 'tab_list' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
-            }
-        });
-    }
-    
+
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void onExplosion(ExplosionEvent.Start e)
     {
         e.setCanceled(true);
-        
         handleEvent(null, "explosion", (sc) -> 
         {
             sc.setVar("loc", new Location(e.getWorld(), e.getExplosion().getPosition()));

+ 13 - 0
src/main/java/me/km/utils/Mapper.java

@@ -8,6 +8,7 @@ import net.minecraft.potion.Effect;
 import net.minecraft.state.IProperty;
 import net.minecraft.state.properties.BlockStateProperties;
 import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.SoundCategory;
 import net.minecraft.util.SoundEvent;
 import net.minecraft.world.GameRules;
 import net.minecraftforge.registries.ForgeRegistries;
@@ -19,6 +20,18 @@ public class Mapper
         return ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation(name));
     }
     
+    public static SoundCategory getSoundCategory(String name)
+    {
+        for(SoundCategory sc : SoundCategory.values())
+        {
+            if(sc.getName().equals(name))
+            {
+                return sc;
+            }
+        }
+        return SoundCategory.MASTER;
+    }
+    
     public static Enchantment getEnchantment(String name)
     {
         return ForgeRegistries.ENCHANTMENTS.getValue(new ResourceLocation(name));

BIN
src/main/resources/assets/km/textures/item/coin/coin_gold.png