From 35b1f286830c7abfb00224e808b8b2cab705bf56 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 30 Mar 2016 19:36:20 -0400
Subject: [PATCH] MC Dev fixes


diff --git a/src/main/java/net/minecraft/server/BaseBlockPosition.java b/src/main/java/net/minecraft/server/BaseBlockPosition.java
index c3e990bdff..e2a7b4be2c 100644
--- a/src/main/java/net/minecraft/server/BaseBlockPosition.java
+++ b/src/main/java/net/minecraft/server/BaseBlockPosition.java
@@ -93,7 +93,7 @@ public class BaseBlockPosition implements Comparable<BaseBlockPosition> {
         return MoreObjects.toStringHelper(this).add("x", this.getX()).add("y", this.getY()).add("z", this.getZ()).toString();
     }
 
-    public int compareTo(Object object) {
+    public int compareTo(BaseBlockPosition object) { // Paper - decompile fix
         return this.l((BaseBlockPosition) object);
     }
 }
diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java
index 002da2a191..9f3aa24590 100644
--- a/src/main/java/net/minecraft/server/BlockPosition.java
+++ b/src/main/java/net/minecraft/server/BlockPosition.java
@@ -150,7 +150,7 @@ public class BlockPosition extends BaseBlockPosition {
         return a(Math.min(blockposition.getX(), blockposition1.getX()), Math.min(blockposition.getY(), blockposition1.getY()), Math.min(blockposition.getZ(), blockposition1.getZ()), Math.max(blockposition.getX(), blockposition1.getX()), Math.max(blockposition.getY(), blockposition1.getY()), Math.max(blockposition.getZ(), blockposition1.getZ()));
     }
 
-    public static Iterable<BlockPosition> a(int i, int j, int k, int l, int i1, int j1) {
+    public static Iterable<BlockPosition> a(int x0, int y0, int z0, int l, int i1, int j1) {
         return () -> {
             return new AbstractIterator() {
                 private boolean g = true;
@@ -161,21 +161,21 @@ public class BlockPosition extends BaseBlockPosition {
                 protected BlockPosition a() {
                     if (this.g) {
                         this.g = false;
-                        this.h = i;
-                        this.i = j;
-                        this.j = k;
-                        return new BlockPosition(i, j, k);
+                        this.h = x0;
+                        this.i = y0;
+                        this.j = z0;
+                        return new BlockPosition(x0, y0, z0);
                     } else if (this.h == l && this.i == i1 && this.j == j1) {
                         return (BlockPosition) this.endOfData();
                     } else {
                         if (this.h < l) {
                             ++this.h;
                         } else if (this.i < i1) {
-                            this.h = i;
+                            this.h = x0;
                             ++this.i;
                         } else if (this.j < j1) {
-                            this.h = i;
-                            this.i = j;
+                            this.h = x0;
+                            this.i = y0;
                             ++this.j;
                         }
 
@@ -213,8 +213,11 @@ public class BlockPosition extends BaseBlockPosition {
                         if (this.g.b < l) {
                             ++this.g.b;
                         } else if (this.g.c < i1) {
+                            this.g.b = i; // Paper - Readd line removed by the decompiler
                             ++this.g.c;
                         } else if (this.g.d < j1) {
+                            this.g.b = i; // Paper - Readd line removed by the decompiler
+                            this.g.c = j; // Paper - Readd line removed by the decompiler
                             ++this.g.d;
                         }
 
diff --git a/src/main/java/net/minecraft/server/ChunkSection.java b/src/main/java/net/minecraft/server/ChunkSection.java
index 650ef14758..35aea4829f 100644
--- a/src/main/java/net/minecraft/server/ChunkSection.java
+++ b/src/main/java/net/minecraft/server/ChunkSection.java
@@ -15,7 +15,7 @@ public class ChunkSection {
 
     public ChunkSection(int i, boolean flag) {
         this.yPos = i;
-        this.blockIds = new DataPaletteBlock(ChunkSection.GLOBAL_PALETTE, Block.REGISTRY_ID, GameProfileSerializer::d, GameProfileSerializer::a, Blocks.AIR.getBlockData());
+        this.blockIds = new DataPaletteBlock<>(ChunkSection.GLOBAL_PALETTE, Block.REGISTRY_ID, GameProfileSerializer::d, GameProfileSerializer::a, Blocks.AIR.getBlockData()); // Paper - Decompile error
         this.emittedLight = new NibbleArray();
         if (flag) {
             this.skyLight = new NibbleArray();
diff --git a/src/main/java/net/minecraft/server/DataPaletteBlock.java b/src/main/java/net/minecraft/server/DataPaletteBlock.java
index 20b1bc1b48..030ec87047 100644
--- a/src/main/java/net/minecraft/server/DataPaletteBlock.java
+++ b/src/main/java/net/minecraft/server/DataPaletteBlock.java
@@ -75,14 +75,14 @@ public class DataPaletteBlock<T> implements DataPaletteExpandable<T> {
     public int onResize(int i, T t0) {
         this.b();
         DataBits databits = this.a;
-        DataPalette datapalette = this.h;
+        DataPalette<T> datapalette = this.h; // Paper - decompile fix
 
         this.b(i);
 
         int j;
 
         for (j = 0; j < databits.b(); ++j) {
-            Object object = datapalette.a(databits.a(j));
+            T object = datapalette.a(databits.a(j)); // Paper - decompile fix
 
             if (object != null) {
                 this.setBlockIndex(j, object);
@@ -111,7 +111,7 @@ public class DataPaletteBlock<T> implements DataPaletteExpandable<T> {
     }
 
     protected T a(int i) {
-        Object object = this.h.a(this.a.a(i));
+        T object = this.h.a(this.a.a(i)); // Paper - decompile fix
 
         return object == null ? this.g : object;
     }
@@ -138,7 +138,7 @@ public class DataPaletteBlock<T> implements DataPaletteExpandable<T> {
         int j = along.length * 64 / 4096;
 
         if (this.h == this.b) {
-            DataPaletteHash datapalettehash = new DataPaletteHash(this.d, i, this.c, this.e, this.f);
+            DataPaletteHash<T> datapalettehash = new DataPaletteHash<>(this.d, i, this.c, this.e, this.f); // Paper - decompile fix
 
             datapalettehash.a(nbttaglist);
             DataBits databits = new DataBits(i, 4096, along);
diff --git a/src/main/java/net/minecraft/server/DedicatedPlayerList.java b/src/main/java/net/minecraft/server/DedicatedPlayerList.java
index 1b91759cb2..ba1e38f8e0 100644
--- a/src/main/java/net/minecraft/server/DedicatedPlayerList.java
+++ b/src/main/java/net/minecraft/server/DedicatedPlayerList.java
@@ -135,8 +135,4 @@ public class DedicatedPlayerList extends PlayerList {
     public boolean f(GameProfile gameprofile) {
         return this.getOPs().b(gameprofile);
     }
-
-    public MinecraftServer getServer() {
-        return this.getServer();
-    }
 }
diff --git a/src/main/java/net/minecraft/server/DefinedStructure.java b/src/main/java/net/minecraft/server/DefinedStructure.java
index cd883e8529..bb1d00e440 100644
--- a/src/main/java/net/minecraft/server/DefinedStructure.java
+++ b/src/main/java/net/minecraft/server/DefinedStructure.java
@@ -88,7 +88,7 @@ public class DefinedStructure {
     }
 
     private void a(World world, BlockPosition blockposition, BlockPosition blockposition1) {
-        List list = world.a(Entity.class, new AxisAlignedBB(blockposition, blockposition1), (entity) -> {
+        List list = world.a(Entity.class, new AxisAlignedBB(blockposition, blockposition1),(Predicate<? super Entity>) (entity) -> { // Paper - decompile fix
             return !(entity instanceof EntityHuman);
         });
 
@@ -285,21 +285,24 @@ public class DefinedStructure {
                         voxelshapebitset.a(blockposition3.getX() - i2, blockposition3.getY() - j2, blockposition3.getZ() - l1, true, true);
                     }
 
-                    voxelshapebitset.a((enumdirection, i, j, k) -> {
-                        BlockPosition blockposition = new BlockPosition(l + i, i1 + j, j1 + k);
-                        BlockPosition blockposition1 = blockposition.shift(enumdirection);
-                        IBlockData iblockdata = generatoraccess.getType(blockposition);
+                    // Paper start - decompile fixes
+                    int finalL = l1;
+                    voxelshapebitset.a((enumdirection, i_, j_, k_) -> {
+                        BlockPosition innerBlockposition = new BlockPosition(i2 + i_, j2 + j_, finalL + k_);
+                        BlockPosition blockposition1 = innerBlockposition.shift(enumdirection);
+                        IBlockData iblockdata = generatoraccess.getType(innerBlockposition);
                         IBlockData iblockdata1 = generatoraccess.getType(blockposition1);
-                        IBlockData iblockdata2 = iblockdata.updateState(enumdirection, iblockdata1, generatoraccess, blockposition, blockposition1);
+                        IBlockData iblockdata2 = iblockdata.updateState(enumdirection, iblockdata1, generatoraccess, innerBlockposition, blockposition1);
 
                         if (iblockdata != iblockdata2) {
-                            generatoraccess.setTypeAndData(blockposition, iblockdata2, k1 & -2 | 16);
+                            generatoraccess.setTypeAndData(innerBlockposition, iblockdata2, i & -2 | 16);
                         }
 
-                        IBlockData iblockdata3 = iblockdata1.updateState(enumdirection.opposite(), iblockdata2, generatoraccess, blockposition1, blockposition);
+                        IBlockData iblockdata3 = iblockdata1.updateState(enumdirection.opposite(), iblockdata2, generatoraccess, blockposition1, innerBlockposition);
 
                         if (iblockdata1 != iblockdata3) {
-                            generatoraccess.setTypeAndData(blockposition1, iblockdata3, k1 & -2 | 16);
+                            generatoraccess.setTypeAndData(blockposition1, iblockdata3, i & -2 | 16);
+                            // Paper end - decompile fixes
                         }
 
                     });
@@ -734,7 +737,7 @@ public class DefinedStructure {
         public IBlockData a(int i) {
             IBlockData iblockdata = (IBlockData) this.b.fromId(i);
 
-            return iblockdata == null ? DefinedStructure.a.a : iblockdata;
+            return iblockdata == null ? a : iblockdata; // Paper - decompile error - Blocks.AIR.getBlockData()
         }
 
         public Iterator<IBlockData> iterator() {
diff --git a/src/main/java/net/minecraft/server/EnumDirection.java b/src/main/java/net/minecraft/server/EnumDirection.java
index 188d49d820..854ad49b6c 100644
--- a/src/main/java/net/minecraft/server/EnumDirection.java
+++ b/src/main/java/net/minecraft/server/EnumDirection.java
@@ -255,7 +255,7 @@ public enum EnumDirection implements INamable {
             return Iterators.forArray(this.c);
         }
 
-        public boolean test(@Nullable Object object) {
+        public boolean test(@Nullable EnumDirection object) { // Paper - Decompile fix
             return this.a((EnumDirection) object);
         }
     }
@@ -293,9 +293,10 @@ public enum EnumDirection implements INamable {
                 return d0;
             }
 
-            public boolean test(@Nullable Object object) {
-                return super.a((EnumDirection) object);
-            }
+            // Paper - Decompile fix
+            //public boolean test(@Nullable Object object) {
+            //    return super.a((EnumDirection) object);
+            //}
         },
         Y("y") {
             ;
@@ -307,9 +308,10 @@ public enum EnumDirection implements INamable {
                 return d1;
             }
 
-            public boolean test(@Nullable Object object) {
-                return super.a((EnumDirection) object);
-            }
+            // Paper - Decompile fix
+            //public boolean test(@Nullable Object object) {
+            //   return super.a((EnumDirection) object);
+            //}
         },
         Z("z") {
             ;
@@ -321,9 +323,10 @@ public enum EnumDirection implements INamable {
                 return d2;
             }
 
-            public boolean test(@Nullable Object object) {
-                return super.a((EnumDirection) object);
-            }
+            // Paper - Decompile fix
+            //public boolean test(@Nullable Object object) {
+            //    return super.a((EnumDirection) object);
+            //}
         };
 
         private static final Map<String, EnumDirection.EnumAxis> d = (Map) Arrays.stream(values()).collect(Collectors.toMap(EnumDirection.EnumAxis::a, (enumdirection_enumaxis) -> {
@@ -377,7 +380,7 @@ public enum EnumDirection implements INamable {
 
         public abstract double a(double d0, double d1, double d2);
 
-        public boolean test(@Nullable Object object) {
+        public boolean test(@Nullable EnumDirection object) { // Paper - Decompile fix
             return this.a((EnumDirection) object);
         }
 
diff --git a/src/main/java/net/minecraft/server/LocaleLanguage.java b/src/main/java/net/minecraft/server/LocaleLanguage.java
index 8f06c58485..4361b2cee5 100644
--- a/src/main/java/net/minecraft/server/LocaleLanguage.java
+++ b/src/main/java/net/minecraft/server/LocaleLanguage.java
@@ -34,7 +34,7 @@ public class LocaleLanguage {
                 Entry entry = (Entry) iterator.next();
                 String s = LocaleLanguage.b.matcher(ChatDeserializer.a((JsonElement) entry.getValue(), (String) entry.getKey())).replaceAll("%$1s");
 
-                this.d.put(entry.getKey(), s);
+                this.d.put((String) entry.getKey(), s); // Paper - Decompile fix
             }
 
             this.e = SystemUtils.b();
diff --git a/src/main/java/net/minecraft/server/LootSelectorEntry.java b/src/main/java/net/minecraft/server/LootSelectorEntry.java
index 3cd5045636..3d501aee30 100644
--- a/src/main/java/net/minecraft/server/LootSelectorEntry.java
+++ b/src/main/java/net/minecraft/server/LootSelectorEntry.java
@@ -85,11 +85,11 @@ public abstract class LootSelectorEntry {
             return jsonobject;
         }
 
-        public JsonElement serialize(Object object, Type type, JsonSerializationContext jsonserializationcontext) {
+        public JsonElement serialize(LootSelectorEntry object, Type type, JsonSerializationContext jsonserializationcontext) { // Paper - decompile fix
             return this.a((LootSelectorEntry) object, type, jsonserializationcontext);
         }
 
-        public Object deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException {
+        public LootSelectorEntry deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { // Paper - decompile fix
             return this.a(jsonelement, type, jsondeserializationcontext);
         }
     }
diff --git a/src/main/java/net/minecraft/server/MathHelper.java b/src/main/java/net/minecraft/server/MathHelper.java
index 28fb88dade..5329102dd7 100644
--- a/src/main/java/net/minecraft/server/MathHelper.java
+++ b/src/main/java/net/minecraft/server/MathHelper.java
@@ -8,7 +8,7 @@ import java.util.function.IntPredicate;
 public class MathHelper {
 
     public static final float a = c(2.0F);
-    private static final float[] b = (float[]) SystemUtils.a((Object) (new float[65536]), (afloat) -> {
+    private static final float[] b = (float[]) SystemUtils.a((new float[65536]), (afloat) -> { // Paper - Decompile fix
         for (int i = 0; i < afloat.length; ++i) {
             afloat[i] = (float) Math.sin((double) i * 3.141592653589793D * 2.0D / 65536.0D);
         }
diff --git a/src/main/java/net/minecraft/server/NBTBase.java b/src/main/java/net/minecraft/server/NBTBase.java
index 8170a84280..e21e60b003 100644
--- a/src/main/java/net/minecraft/server/NBTBase.java
+++ b/src/main/java/net/minecraft/server/NBTBase.java
@@ -20,7 +20,7 @@ public interface NBTBase {
 
     byte getTypeId();
 
-    static default NBTBase createTag(byte b0) {
+    static NBTBase createTag(byte b0) { // Paper - decompile fix
         switch (b0) {
         case 0:
             return new NBTTagEnd();
@@ -66,7 +66,7 @@ public interface NBTBase {
         }
     }
 
-    static default String n(int i) {
+    static String n(int i) { // Paper - decompile fix
         switch (i) {
         case 0:
             return "TAG_End";
diff --git a/src/main/java/net/minecraft/server/NBTList.java b/src/main/java/net/minecraft/server/NBTList.java
index 1a81d8e5f6..057c2077a0 100644
--- a/src/main/java/net/minecraft/server/NBTList.java
+++ b/src/main/java/net/minecraft/server/NBTList.java
@@ -13,7 +13,7 @@ public abstract class NBTList<T extends NBTBase> extends AbstractList<T> impleme
     }
 
     public T set(int i, T t0) {
-        NBTBase nbtbase = this.get(i);
+        T nbtbase = this.get(i); // Paper - decompile fix
 
         this.a(i, t0);
         return nbtbase;
@@ -25,11 +25,5 @@ public abstract class NBTList<T extends NBTBase> extends AbstractList<T> impleme
 
     public abstract void b(int i);
 
-    public Object set(int i, Object object) {
-        return this.set(i, (NBTBase) object);
-    }
-
-    public Object get(int i) {
-        return this.get(i);
-    }
+    public abstract NBTList<T> clone(); // Paper - decompile fix
 }
diff --git a/src/main/java/net/minecraft/server/NBTTagByteArray.java b/src/main/java/net/minecraft/server/NBTTagByteArray.java
index 11ffa6c342..5d61cf70bc 100644
--- a/src/main/java/net/minecraft/server/NBTTagByteArray.java
+++ b/src/main/java/net/minecraft/server/NBTTagByteArray.java
@@ -66,7 +66,8 @@ public class NBTTagByteArray extends NBTList<NBTTagByte> {
         return stringbuilder.append(']').toString();
     }
 
-    public NBTBase clone() {
+    @Override
+    public NBTTagByteArray clone() { // Paper - decompile fix
         byte[] abyte = new byte[this.data.length];
 
         System.arraycopy(this.data, 0, abyte, 0, this.data.length);
diff --git a/src/main/java/net/minecraft/server/NBTTagIntArray.java b/src/main/java/net/minecraft/server/NBTTagIntArray.java
index f5c9b97d5c..d121ad4f7a 100644
--- a/src/main/java/net/minecraft/server/NBTTagIntArray.java
+++ b/src/main/java/net/minecraft/server/NBTTagIntArray.java
@@ -132,7 +132,7 @@ public class NBTTagIntArray extends NBTList<NBTTagInt> {
         return this.a(i);
     }
 
-    public NBTBase clone() {
+    public NBTTagIntArray clone() { // Paper - decompile fix
         return this.c();
     }
 }
diff --git a/src/main/java/net/minecraft/server/NBTTagList.java b/src/main/java/net/minecraft/server/NBTTagList.java
index b3c944d701..a8280acf94 100644
--- a/src/main/java/net/minecraft/server/NBTTagList.java
+++ b/src/main/java/net/minecraft/server/NBTTagList.java
@@ -14,7 +14,7 @@ import org.apache.logging.log4j.Logger;
 public class NBTTagList extends NBTList<NBTBase> {
 
     private static final Logger f = LogManager.getLogger();
-    private List<NBTBase> list = Lists.newArrayList();
+    public List<NBTBase> list = Lists.newArrayList(); // Paper
     private byte type = 0;
 
     public NBTTagList() {}
@@ -294,23 +294,7 @@ public class NBTTagList extends NBTList<NBTBase> {
         return this.type;
     }
 
-    public NBTBase clone() {
+    public NBTTagList clone() {
         return this.c();
     }
-
-    public Object remove(int i) {
-        return this.remove(i);
-    }
-
-    public Object set(int i, Object object) {
-        return this.set(i, (NBTBase) object);
-    }
-
-    public Object get(int i) {
-        return this.get(i);
-    }
-
-    public boolean add(Object object) {
-        return this.add((NBTBase) object);
-    }
 }
diff --git a/src/main/java/net/minecraft/server/ProtoChunk.java b/src/main/java/net/minecraft/server/ProtoChunk.java
index 528eb255ec..541435d3e5 100644
--- a/src/main/java/net/minecraft/server/ProtoChunk.java
+++ b/src/main/java/net/minecraft/server/ProtoChunk.java
@@ -65,7 +65,7 @@ public class ProtoChunk implements IChunkAccess {
         this.b = chunkcoordintpair;
         this.p = chunkconverter;
         Predicate predicate = (block) -> {
-            return block == null || block.getBlockData().isAir();
+            return block == null || ((Block) block).getBlockData().isAir(); // Paper - decompile fix
         };
         IRegistry iregistry = IRegistry.BLOCK;
 
@@ -325,8 +325,8 @@ public class ProtoChunk implements IChunkAccess {
     }
 
     private HeightMap c(HeightMap.Type heightmap_type) {
-        return (HeightMap) this.f.computeIfAbsent(heightmap_type, (heightmap_type) -> {
-            HeightMap heightmap = new HeightMap(this, heightmap_type);
+        return (HeightMap) this.f.computeIfAbsent(heightmap_type, (heightmap_type1) -> { // Paper - decompile fix
+            HeightMap heightmap = new HeightMap(this, heightmap_type1); // Paper - decompile fix
 
             heightmap.a();
             return heightmap;
@@ -372,13 +372,13 @@ public class ProtoChunk implements IChunkAccess {
 
     @Nullable
     public LongSet b(String s) {
-        return (LongSet) this.o.computeIfAbsent(s, (s) -> {
+        return (LongSet) this.o.computeIfAbsent(s, (s1) -> { // Paper - decompile fix
             return new LongOpenHashSet();
         });
     }
 
     public void a(String s, long i) {
-        ((LongSet) this.o.computeIfAbsent(s, (s) -> {
+        ((LongSet) this.o.computeIfAbsent(s, (s1) -> { // Paper - decompile fix
             return new LongOpenHashSet();
         })).add(i);
         this.c = true;
@@ -493,7 +493,7 @@ public class ProtoChunk implements IChunkAccess {
     }
 
     public BitSet a(WorldGenStage.Features worldgenstage_features) {
-        return (BitSet) this.t.computeIfAbsent(worldgenstage_features, (worldgenstage_features) -> {
+        return (BitSet) this.t.computeIfAbsent(worldgenstage_features, (worldgenstage_features1) -> { // Paper - decompile fix
             return new BitSet(65536);
         });
     }
diff --git a/src/main/java/net/minecraft/server/RegistryBlockID.java b/src/main/java/net/minecraft/server/RegistryBlockID.java
index ef332d6517..7cc7eb7735 100644
--- a/src/main/java/net/minecraft/server/RegistryBlockID.java
+++ b/src/main/java/net/minecraft/server/RegistryBlockID.java
@@ -8,7 +8,7 @@ import java.util.Iterator;
 import java.util.List;
 import javax.annotation.Nullable;
 
-public class RegistryBlockID<T> implements Registry<T> {
+public class RegistryBlockID<T> implements Registry { // Paper - decompile fix
 
     private int a;
     private final IdentityHashMap<T, Integer> b;
@@ -27,7 +27,7 @@ public class RegistryBlockID<T> implements Registry<T> {
         this.b.put(t0, Integer.valueOf(i));
 
         while (this.c.size() <= i) {
-            this.c.add((Object) null);
+            this.c.add(null); // Paper - decompile fix
         }
 
         this.c.set(i, t0);
diff --git a/src/main/java/net/minecraft/server/RegistryID.java b/src/main/java/net/minecraft/server/RegistryID.java
index 3b8f6ec167..bde5714dd6 100644
--- a/src/main/java/net/minecraft/server/RegistryID.java
+++ b/src/main/java/net/minecraft/server/RegistryID.java
@@ -6,7 +6,7 @@ import java.util.Arrays;
 import java.util.Iterator;
 import javax.annotation.Nullable;
 
-public class RegistryID<K> implements Registry<K> {
+public class RegistryID<K> implements Registry { // Paper - decompile fix
 
     private static final Object a = null;
     private K[] b;
@@ -17,9 +17,9 @@ public class RegistryID<K> implements Registry<K> {
 
     public RegistryID(int i) {
         i = (int) ((float) i / 0.8F);
-        this.b = (Object[]) (new Object[i]);
+        this.b = (K[]) (new Object[i]); // Paper - decompile fix
         this.c = new int[i];
-        this.d = (Object[]) (new Object[i]);
+        this.d = (K[]) (new Object[i]); // Paper - decompile fix
     }
 
     public int getId(@Nullable K k0) {
@@ -51,12 +51,12 @@ public class RegistryID<K> implements Registry<K> {
     }
 
     private void d(int i) {
-        Object[] aobject = this.b;
+        K[] aobject = this.b; // Paper - decompile fix
         int[] aint = this.c;
 
-        this.b = (Object[]) (new Object[i]);
+        this.b = (K[]) (new Object[i]); // Paper - decompile fix
         this.c = new int[i];
-        this.d = (Object[]) (new Object[i]);
+        this.d = (K[]) (new Object[i]); // Paper - decompile fix
         this.e = 0;
         this.f = 0;
 
diff --git a/src/main/java/net/minecraft/server/ServerPing.java b/src/main/java/net/minecraft/server/ServerPing.java
index 2179664a0c..d7e1ecc031 100644
--- a/src/main/java/net/minecraft/server/ServerPing.java
+++ b/src/main/java/net/minecraft/server/ServerPing.java
@@ -102,11 +102,11 @@ public class ServerPing {
             return jsonobject;
         }
 
-        public JsonElement serialize(Object object, Type type, JsonSerializationContext jsonserializationcontext) {
+        public JsonElement serialize(ServerPing object, Type type, JsonSerializationContext jsonserializationcontext) { // Paper - decompile fix
             return this.a((ServerPing) object, type, jsonserializationcontext);
         }
 
-        public Object deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException {
+        public ServerPing deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { // Paper - decompile fix
             return this.a(jsonelement, type, jsondeserializationcontext);
         }
     }
@@ -147,11 +147,11 @@ public class ServerPing {
                 return jsonobject;
             }
 
-            public JsonElement serialize(Object object, Type type, JsonSerializationContext jsonserializationcontext) {
+            public JsonElement serialize(ServerPing.ServerData object, Type type, JsonSerializationContext jsonserializationcontext) { // Paper - decompile fix
                 return this.a((ServerPing.ServerData) object, type, jsonserializationcontext);
             }
 
-            public Object deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException {
+            public ServerPing.ServerData deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { // Paper - decompile fix
                 return this.a(jsonelement, type, jsondeserializationcontext);
             }
         }
@@ -235,11 +235,11 @@ public class ServerPing {
                 return jsonobject;
             }
 
-            public JsonElement serialize(Object object, Type type, JsonSerializationContext jsonserializationcontext) {
+            public JsonElement serialize(ServerPing.ServerPingPlayerSample object, Type type, JsonSerializationContext jsonserializationcontext) { // Paper - decompile fix
                 return this.a((ServerPing.ServerPingPlayerSample) object, type, jsonserializationcontext);
             }
 
-            public Object deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException {
+            public ServerPing.ServerPingPlayerSample deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { // Paper - decompile fix
                 return this.a(jsonelement, type, jsondeserializationcontext);
             }
         }
diff --git a/src/main/java/net/minecraft/server/ShapeDetector.java b/src/main/java/net/minecraft/server/ShapeDetector.java
index 43596cb2d5..3faf74a22f 100644
--- a/src/main/java/net/minecraft/server/ShapeDetector.java
+++ b/src/main/java/net/minecraft/server/ShapeDetector.java
@@ -171,7 +171,7 @@ public class ShapeDetector {
             return new ShapeDetectorBlock(this.a, blockposition, this.b);
         }
 
-        public Object load(Object object) throws Exception {
+        public ShapeDetectorBlock load(BlockPosition object) throws Exception { // Paper - Decompile fix
             return this.a((BlockPosition) object);
         }
     }
diff --git a/src/main/java/net/minecraft/server/VoxelShape.java b/src/main/java/net/minecraft/server/VoxelShape.java
index 0b3141d3e7..700900256b 100644
--- a/src/main/java/net/minecraft/server/VoxelShape.java
+++ b/src/main/java/net/minecraft/server/VoxelShape.java
@@ -69,7 +69,7 @@ public abstract class VoxelShape {
         ArrayList arraylist = Lists.newArrayList();
 
         this.b((d0, d1, d2, d3, d4, d5) -> {
-            list.add(new AxisAlignedBB(d0, d1, d2, d3, d4, d5));
+            arraylist.add(new AxisAlignedBB(d0, d1, d2, d3, d4, d5)); // Paper - decompile fix
         });
         return arraylist;
     }
-- 
2.18.0