From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Mon, 19 Oct 2020 15:14:01 -0500
Subject: [PATCH] Infinite fuel furnace


diff --git a/src/main/java/net/minecraft/server/TileEntityFurnace.java b/src/main/java/net/minecraft/server/TileEntityFurnace.java
index 935c7f111a7d7b9cc7c8e384d43e7ab6092cfc5f..48359a7e79b64026e38e7cd17505d8944106e089 100644
--- a/src/main/java/net/minecraft/server/TileEntityFurnace.java
+++ b/src/main/java/net/minecraft/server/TileEntityFurnace.java
@@ -279,6 +279,22 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I
         if (!this.world.isClientSide) {
             ItemStack itemstack = (ItemStack) this.items.get(1);
 
+            // Purpur start
+            boolean infiniteFuel = false;
+            if (world.purpurConfig.furnaceInfiniteFuel && !isBurning() && itemstack.isEmpty() && !items.get(0).isEmpty() && world.getTime() % 20 == 0) {
+                BlockPosition pos = getPosition().down();
+                IBlockData iblockdata = world.getTypeIfLoaded(pos);
+                if (iblockdata != null && iblockdata.equals(Blocks.LAVA)) {
+                    Fluid fluid = iblockdata.getFluid();
+                    if (fluid != null && fluid.isSource()) {
+                        world.setTypeAndData(pos, Blocks.AIR.getBlockData(), 3);
+                        itemstack = Items.LAVA_BUCKET.createItemStack();
+                        infiniteFuel = true;
+                    }
+                }
+            }
+            // Purpur end
+
             if (!this.isBurning() && (itemstack.isEmpty() || ((ItemStack) this.items.get(0)).isEmpty())) {
                 if (!this.isBurning() && this.cookTime > 0) {
                     this.cookTime = MathHelper.clamp(this.cookTime - 2, 0, this.cookTimeTotal);
@@ -332,6 +348,8 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I
                 flag1 = true;
                 this.world.setTypeAndData(this.position, (IBlockData) this.world.getType(this.position).set(BlockFurnace.LIT, this.isBurning()), 3);
             }
+
+            if (infiniteFuel) this.items.set(1, ItemStack.NULL_ITEM); // Purpur
         }
 
         if (flag1) {
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 0b58a2e99a2f89d450d7980eb4837172e8a10dba..0cae636df21d73f88acc4dbbf7563cf8a44c5a58 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -351,6 +351,11 @@ public class PurpurWorldConfig {
         farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
     }
 
+    public boolean furnaceInfiniteFuel = false;
+    private void furnaceSettings() {
+        furnaceInfiniteFuel = getBoolean("blocks.furnace.infinite-fuel", furnaceInfiniteFuel);
+    }
+
     public boolean lavaInfinite = false;
     public int lavaInfiniteRequiredSources = 2;
     public int lavaSpeedNether = 10;
