You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
6.0 KiB
152 lines
6.0 KiB
--- ../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_; |
|
} |
|
} |
|
-} |
|
+}
|
|
|