diff --git a/src/main/java/codechicken/nei/WorldOverlayRenderer.java b/src/main/java/codechicken/nei/WorldOverlayRenderer.java index 969e3c8b..40700eac 100644 --- a/src/main/java/codechicken/nei/WorldOverlayRenderer.java +++ b/src/main/java/codechicken/nei/WorldOverlayRenderer.java @@ -24,10 +24,13 @@ public class WorldOverlayRenderer implements IKeyStateTracker { public static int mobOverlay = 0; private static byte[] mobSpawnCache; private static long mobOverlayUpdateTime; + private static String oregenPatternName; + private static boolean hasOregenPatternBeenSet = false; public static void reset() { mobOverlay = 0; chunkOverlay = 0; + hasOregenPatternBeenSet = false; } @Override @@ -279,15 +282,33 @@ public class WorldOverlayRenderer implements IKeyStateTracker { GL11.glVertex3d(x2, y2, z1 + h); } } else if (chunkOverlay == 3) { - int gx1 = (((entity.chunkCoordX < 0 ? entity.chunkCoordX - 3 : entity.chunkCoordX) / 3 * 3) << 4) - - intOffsetX; - int gz1 = (((entity.chunkCoordZ < 0 ? entity.chunkCoordZ - 3 : entity.chunkCoordZ) / 3 * 3) << 4) - - intOffsetZ; - if (entity.chunkCoordX < 0) { - gx1 += 16; + if (!hasOregenPatternBeenSet) { + try { + oregenPatternName = ((Enum) Class.forName("gregtech.common.GT_Worldgenerator") + .getDeclaredField("oregenPattern").get(null)).name(); + } catch (Exception ignored) { + oregenPatternName = "AXISSYMMETRICAL"; + } + hasOregenPatternBeenSet = true; } - if (entity.chunkCoordZ < 0) { - gz1 += 16; + int gx1; + int gz1; + if (oregenPatternName.equals("EQUAL_SPACING")) { + // gt oregen uses new regular pattern + gx1 = ((Math.floorDiv(entity.chunkCoordX, 3) * 3) << 4) - intOffsetX; + gz1 = ((Math.floorDiv(entity.chunkCoordZ, 3) * 3) << 4) - intOffsetZ; + } else { + // gt oregen uses old bugged pattern + gx1 = (((entity.chunkCoordX < 0 ? entity.chunkCoordX - 3 : entity.chunkCoordX) / 3 * 3) << 4) + - intOffsetX; + gz1 = (((entity.chunkCoordZ < 0 ? entity.chunkCoordZ - 3 : entity.chunkCoordZ) / 3 * 3) << 4) + - intOffsetZ; + if (entity.chunkCoordX < 0) { + gx1 += 16; + } + if (entity.chunkCoordZ < 0) { + gz1 += 16; + } } int gx2 = gx1 + 48; int gz2 = gz1 + 48;