Fixed nasty datawatcher bug which 'randomly' crashes the client
This commit is contained in:
		@@ -2,17 +2,22 @@ package me.libraryaddict.disguise.DisguiseTypes;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Constructor;
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.AgeableWatcher;
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.LivingWatcher;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.DataWatcher;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.Entity;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.EntityLiving;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.EntityTypes;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.ItemStack;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.MathHelper;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.EnumArt;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.WatchableObject;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity;
 | 
			
		||||
import org.bukkit.craftbukkit.v1_5_R3.inventory.CraftItemStack;
 | 
			
		||||
@@ -128,7 +133,19 @@ public class Disguise {
 | 
			
		||||
            mods.write(8, yawValue);
 | 
			
		||||
            mods.write(9, (byte) (int) (entity.pitch * 256.0F / 360.0F));
 | 
			
		||||
            mods.write(10, (byte) (int) (((EntityLiving) entity).aA * 256.0F / 360.0F));
 | 
			
		||||
            mods.write(11, entity.getDataWatcher());
 | 
			
		||||
            DataWatcher newWatcher = new DataWatcher();
 | 
			
		||||
            try {
 | 
			
		||||
                Field map = newWatcher.getClass().getDeclaredField("c");
 | 
			
		||||
                map.setAccessible(true);
 | 
			
		||||
                HashMap c = (HashMap) map.get(newWatcher);
 | 
			
		||||
                List<WatchableObject> list = entity.getDataWatcher().c();
 | 
			
		||||
                int i = 0;
 | 
			
		||||
                for (Object obj : watcher.convert(list))
 | 
			
		||||
                    c.put(i++, obj);
 | 
			
		||||
            } catch (Exception ex) {
 | 
			
		||||
                ex.printStackTrace();
 | 
			
		||||
            }
 | 
			
		||||
            mods.write(11, newWatcher);
 | 
			
		||||
            // TODO May need to do the list
 | 
			
		||||
 | 
			
		||||
        } else if (getType().isMisc()) {
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,8 @@ public class FlagWatcher {
 | 
			
		||||
        while (itel.hasNext()) {
 | 
			
		||||
            WatchableObject watch = itel.next();
 | 
			
		||||
            sentValues.add(watch.a());
 | 
			
		||||
            // Its sending the air metadata. This is the least commonly sent metadata which all entitys still share.
 | 
			
		||||
            // I send my custom values if I see this!
 | 
			
		||||
            if (watch.a() == 1)
 | 
			
		||||
                sendAllCustom = true;
 | 
			
		||||
            if (entityValues.containsKey(watch.a())) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user