Readded set/get horse armor. Added sanitizing of saved disguises loading + logging.
This commit is contained in:
		| @@ -34,4 +34,12 @@ public class HorseWatcher extends AbstractHorseWatcher { | ||||
|         setData(MetaIndex.HORSE_COLOR, getColor().ordinal() & 0xFF | style.ordinal() << 8); | ||||
|         sendData(MetaIndex.HORSE_COLOR); | ||||
|     } | ||||
|  | ||||
|     public void setHorseArmor(ItemStack item) { | ||||
|         getEquipment().setChestplate(item); | ||||
|     } | ||||
|  | ||||
|     public ItemStack getHorseArmor() { | ||||
|         return getEquipment().getChestplate(); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -4,10 +4,12 @@ import com.comphenix.protocol.wrappers.WrappedBlockData; | ||||
| import com.comphenix.protocol.wrappers.WrappedChatComponent; | ||||
| import com.comphenix.protocol.wrappers.WrappedGameProfile; | ||||
| import com.google.gson.*; | ||||
| import com.google.gson.internal.LinkedTreeMap; | ||||
| import com.google.gson.reflect.TypeToken; | ||||
| import com.mojang.authlib.properties.PropertyMap; | ||||
| import me.libraryaddict.disguise.disguisetypes.*; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.ArrowWatcher; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
|  | ||||
| import java.lang.reflect.Field; | ||||
| @@ -61,11 +63,12 @@ public class SerializerFlagWatcher implements JsonDeserializer<FlagWatcher>, Jso | ||||
|         Field field = FlagWatcher.class.getDeclaredField(name); | ||||
|         field.setAccessible(true); | ||||
|         HashMap<Integer, Object> map = (HashMap<Integer, Object>) field.get(watcher); | ||||
|         int count = 0; | ||||
|  | ||||
|         for (Map.Entry<Integer, Object> entry : map.entrySet()) { | ||||
|             if (entry.getValue() instanceof Double) { | ||||
|                 MetaIndex index = MetaIndex.getMetaIndex(flagWatcher, entry.getKey()); | ||||
|             MetaIndex index = MetaIndex.getMetaIndex(flagWatcher, entry.getKey()); | ||||
|  | ||||
|             if (entry.getValue() instanceof Double) { | ||||
|                 Object def = index.getDefault(); | ||||
|  | ||||
|                 if (def instanceof Long) | ||||
| @@ -78,15 +81,24 @@ public class SerializerFlagWatcher implements JsonDeserializer<FlagWatcher>, Jso | ||||
|                     entry.setValue(((Double) entry.getValue()).shortValue()); | ||||
|                 else if (def instanceof Byte) | ||||
|                     entry.setValue(((Double) entry.getValue()).byteValue()); | ||||
|             } else if (entry.getValue() instanceof Map) { | ||||
|                 MetaIndex index = MetaIndex.getMetaIndex(flagWatcher, entry.getKey()); | ||||
|  | ||||
|             } else if (entry.getValue() instanceof LinkedTreeMap) { // If it's deserialized incorrectly as a map | ||||
|                 // If the default value is not VillagerData | ||||
|                 if (!(index.getDefault() instanceof VillagerData)) { | ||||
|                     continue; | ||||
|                 } | ||||
|  | ||||
|                 entry.setValue(new Gson().fromJson(new Gson().toJson(entry.getValue()),VillagerData.class)); | ||||
|                 entry.setValue(new Gson().fromJson(new Gson().toJson(entry.getValue()), VillagerData.class)); | ||||
|             } | ||||
|  | ||||
|             // If the deserialized class is not the same class type as the default | ||||
|             if (!index.getDefault().getClass().isInstance(entry.getValue())) { | ||||
|                 entry.setValue(index.getDefault()); | ||||
|                 count++; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (count > 0) { | ||||
|             DisguiseUtilities.getLogger().info("Fixed " + count + " incorrect disguise flags on saved disguise"); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user