--- ../src-base/minecraft/net/minecraft/entity/DataWatcher.java +++ ../src-work/minecraft/net/minecraft/entity/DataWatcher.java @@ -22,12 +22,22 @@ { private final Entity field_151511_a; private boolean isBlank = true; - private static final HashMap dataTypes = new HashMap(); - private final Map watchedObjects = new HashMap(); + +// private static final HashMap dataTypes = new HashMap(); +// private final Map watchedObjects = new HashMap(); + private boolean objectChanged; private ReadWriteLock lock = new ReentrantReadWriteLock(); private static final String __OBFID = "CL_00001559"; + // Spigot Start + private static final gnu.trove.map.TObjectIntMap classToId = new gnu.trove.map.hash.TObjectIntHashMap( 10, 0.5f, -1 ); + private final gnu.trove.map.TIntObjectMap dataValues = new gnu.trove.map.hash.TIntObjectHashMap( 10, 0.5f, -1 ); + // These exist as an attempt at backwards compatability for (broken) NMS plugins + private static final Map dataTypes = gnu.trove.TDecorators.wrap( classToId ); + private final Map watchedObjects = gnu.trove.TDecorators.wrap( dataValues ); + // Spigot End + public DataWatcher(Entity p_i45313_1_) { this.field_151511_a = p_i45313_1_; @@ -35,9 +45,9 @@ public void addObject(int p_75682_1_, Object p_75682_2_) { - Integer integer = (Integer)dataTypes.get(p_75682_2_.getClass()); + int integer = classToId.get(p_75682_2_.getClass()); - if (integer == null) + if (integer == -1) { throw new IllegalArgumentException("Unknown data type: " + p_75682_2_.getClass()); } @@ -45,15 +55,15 @@ { throw new IllegalArgumentException("Data value id is too big with " + p_75682_1_ + "! (Max is " + 31 + ")"); } - else if (this.watchedObjects.containsKey(Integer.valueOf(p_75682_1_))) + else if (this.dataValues.containsKey(p_75682_1_)) { throw new IllegalArgumentException("Duplicate id value for " + p_75682_1_ + "!"); } else { - DataWatcher.WatchableObject watchableobject = new DataWatcher.WatchableObject(integer.intValue(), p_75682_1_, p_75682_2_); + DataWatcher.WatchableObject watchableobject = new DataWatcher.WatchableObject(integer, p_75682_1_, p_75682_2_); this.lock.writeLock().lock(); - this.watchedObjects.put(Integer.valueOf(p_75682_1_), watchableobject); + this.dataValues.put(p_75682_1_, watchableobject); this.lock.writeLock().unlock(); this.isBlank = false; } @@ -63,7 +73,7 @@ { DataWatcher.WatchableObject watchableobject = new DataWatcher.WatchableObject(p_82709_2_, p_82709_1_, (Object)null); this.lock.writeLock().lock(); - this.watchedObjects.put(Integer.valueOf(p_82709_1_), watchableobject); + this.dataValues.put(p_82709_1_, watchableobject); this.lock.writeLock().unlock(); this.isBlank = false; } @@ -105,7 +115,7 @@ try { - watchableobject = (DataWatcher.WatchableObject)this.watchedObjects.get(Integer.valueOf(p_75691_1_)); + watchableobject = (DataWatcher.WatchableObject)this.dataValues.get(p_75691_1_); } catch (Throwable throwable) { @@ -166,7 +176,7 @@ if (this.objectChanged) { this.lock.readLock().lock(); - Iterator iterator = this.watchedObjects.values().iterator(); + Iterator iterator = this.dataValues.valueCollection().iterator(); while (iterator.hasNext()) { @@ -195,7 +205,7 @@ public void func_151509_a(PacketBuffer p_151509_1_) throws IOException { this.lock.readLock().lock(); - Iterator iterator = this.watchedObjects.values().iterator(); + Iterator iterator = this.dataValues.valueCollection().iterator(); while (iterator.hasNext()) { @@ -209,9 +219,9 @@ public List getAllWatched() { - ArrayList arraylist = null; + ArrayList arraylist = new ArrayList(); this.lock.readLock().lock(); - DataWatcher.WatchableObject watchableobject; + /*DataWatcher.WatchableObject watchableobject; for (Iterator iterator = this.watchedObjects.values().iterator(); iterator.hasNext(); arraylist.add(watchableobject)) { @@ -221,7 +231,8 @@ { arraylist = new ArrayList(); } - } + }*/ + arraylist.addAll(this.dataValues.valueCollection()); this.lock.readLock().unlock(); return arraylist; @@ -318,7 +329,7 @@ while (iterator.hasNext()) { DataWatcher.WatchableObject watchableobject = (DataWatcher.WatchableObject)iterator.next(); - DataWatcher.WatchableObject watchableobject1 = (DataWatcher.WatchableObject)this.watchedObjects.get(Integer.valueOf(watchableobject.getDataValueId())); + DataWatcher.WatchableObject watchableobject1 = (DataWatcher.WatchableObject)this.dataValues.get(watchableobject.getDataValueId()); if (watchableobject1 != null) { @@ -343,13 +354,13 @@ static { - dataTypes.put(Byte.class, Integer.valueOf(0)); - dataTypes.put(Short.class, Integer.valueOf(1)); - dataTypes.put(Integer.class, Integer.valueOf(2)); - dataTypes.put(Float.class, Integer.valueOf(3)); - dataTypes.put(String.class, Integer.valueOf(4)); - dataTypes.put(ItemStack.class, Integer.valueOf(5)); - dataTypes.put(ChunkCoordinates.class, Integer.valueOf(6)); + classToId.put(Byte.class, 0); + classToId.put(Short.class, 1); + classToId.put(Integer.class, 2); + classToId.put(Float.class, 3); + classToId.put(String.class, 4); + classToId.put(ItemStack.class, 5); + classToId.put(ChunkCoordinates.class, 6); } public static class WatchableObject @@ -398,4 +409,4 @@ this.watched = p_75671_1_; } } -} +}