From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Spottedleaf <spottedleaf@spottedleaf.dev>
Date: Mon, 27 Apr 2020 02:48:06 -0700
Subject: [PATCH] Reduce MutableInt allocations from light engine

We can abuse the fact light is single threaded and share an instance
per light engine instance

diff --git a/src/main/java/net/minecraft/world/level/lighting/BlockLightEngine.java b/src/main/java/net/minecraft/world/level/lighting/BlockLightEngine.java
index 729c4b1763a24bac3c0764bea505555a32e54f57..37d7165dfd17da03428f8dbbbf95aa8005be289c 100644
--- a/src/main/java/net/minecraft/world/level/lighting/BlockLightEngine.java
+++ b/src/main/java/net/minecraft/world/level/lighting/BlockLightEngine.java
@@ -15,6 +15,7 @@ import org.apache.commons.lang3.mutable.MutableInt;
 public final class BlockLightEngine extends LayerLightEngine<BlockLightSectionStorage.BlockDataLayerStorageMap, BlockLightSectionStorage> {
     private static final Direction[] DIRECTIONS = Direction.values();
     private final BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos();
+    private final MutableInt mutableInt = new MutableInt(); // Paper
 
     public BlockLightEngine(LightChunkGetter chunkProvider) {
         super(chunkProvider, LightLayer.BLOCK, new BlockLightSectionStorage(chunkProvider));
@@ -44,7 +45,7 @@ public final class BlockLightEngine extends LayerLightEngine<BlockLightSectionSt
             if (direction == null) {
                 return 15;
             } else {
-                MutableInt mutableInt = new MutableInt();
+                //MutableInt mutableint = new MutableInt(); // Paper - share mutableint, single threaded
                 BlockState blockState = this.getStateAndOpacity(targetId, mutableInt);
                 if (mutableInt.getValue() >= 15) {
                     return 15;
diff --git a/src/main/java/net/minecraft/world/level/lighting/SkyLightEngine.java b/src/main/java/net/minecraft/world/level/lighting/SkyLightEngine.java
index 4252247acd5c71e46d90f454663a9737e22e2a61..d122475c1a9d340046c478087d3ff5bf1ff8932c 100644
--- a/src/main/java/net/minecraft/world/level/lighting/SkyLightEngine.java
+++ b/src/main/java/net/minecraft/world/level/lighting/SkyLightEngine.java
@@ -14,6 +14,7 @@ import org.apache.commons.lang3.mutable.MutableInt;
 public final class SkyLightEngine extends LayerLightEngine<SkyLightSectionStorage.SkyDataLayerStorageMap, SkyLightSectionStorage> {
     private static final Direction[] DIRECTIONS = Direction.values();
     private static final Direction[] HORIZONTALS = new Direction[]{Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST};
+    private final MutableInt mutableInt = new MutableInt(); // Paper
 
     public SkyLightEngine(LightChunkGetter chunkProvider) {
         super(chunkProvider, LightLayer.SKY, new SkyLightSectionStorage(chunkProvider));
@@ -25,7 +26,7 @@ public final class SkyLightEngine extends LayerLightEngine<SkyLightSectionStorag
             if (level >= 15) {
                 return level;
             } else {
-                MutableInt mutableInt = new MutableInt();
+                //MutableInt mutableint = new MutableInt(); // Paper - share mutableint, single threaded
                 BlockState blockState = this.getStateAndOpacity(targetId, mutableInt);
                 if (mutableInt.getValue() >= 15) {
                     return 15;
