From 6460da5f11f9c0a62d52da096c1e70e2d8b0fbd4 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/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/DefinedStructure.java b/src/main/java/net/minecraft/server/DefinedStructure.java
index a661789c1e..785a1a2184 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/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/VoxelShape.java b/src/main/java/net/minecraft/server/VoxelShape.java
index 4b5463cca2..53c9f21887 100644
--- a/src/main/java/net/minecraft/server/VoxelShape.java
+++ b/src/main/java/net/minecraft/server/VoxelShape.java
@@ -67,7 +67,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