112 lines
		
	
	
	
		
			5 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
		
		
			
		
	
	
			112 lines
		
	
	
	
		
			5 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 
								 | 
							
								From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
							 | 
						||
| 
								 | 
							
								From: LemonCaramel <admin@caramel.moe>
							 | 
						||
| 
								 | 
							
								Date: Fri, 16 Jul 2021 00:39:03 +0900
							 | 
						||
| 
								 | 
							
								Subject: [PATCH] Add more Campfire API
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								diff --git a/src/main/java/net/minecraft/world/level/block/entity/CampfireBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/CampfireBlockEntity.java
							 | 
						||
| 
								 | 
							
								index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
							 | 
						||
| 
								 | 
							
								--- a/src/main/java/net/minecraft/world/level/block/entity/CampfireBlockEntity.java
							 | 
						||
| 
								 | 
							
								+++ b/src/main/java/net/minecraft/world/level/block/entity/CampfireBlockEntity.java
							 | 
						||
| 
								 | 
							
								@@ -0,0 +0,0 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
							 | 
						||
| 
								 | 
							
								     private final NonNullList<ItemStack> items;
							 | 
						||
| 
								 | 
							
								     public final int[] cookingProgress;
							 | 
						||
| 
								 | 
							
								     public final int[] cookingTime;
							 | 
						||
| 
								 | 
							
								+    public final boolean[] stopCooking; // Paper
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								     public CampfireBlockEntity(BlockPos pos, BlockState state) {
							 | 
						||
| 
								 | 
							
								         super(BlockEntityType.CAMPFIRE, pos, state);
							 | 
						||
| 
								 | 
							
								         this.items = NonNullList.withSize(4, ItemStack.EMPTY);
							 | 
						||
| 
								 | 
							
								         this.cookingProgress = new int[4];
							 | 
						||
| 
								 | 
							
								         this.cookingTime = new int[4];
							 | 
						||
| 
								 | 
							
								+        this.stopCooking = new boolean[4]; // Paper
							 | 
						||
| 
								 | 
							
								     }
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								     public static void cookTick(Level world, BlockPos pos, BlockState state, CampfireBlockEntity campfire) {
							 | 
						||
| 
								 | 
							
								@@ -0,0 +0,0 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								             if (!itemstack.isEmpty()) {
							 | 
						||
| 
								 | 
							
								                 flag = true;
							 | 
						||
| 
								 | 
							
								+                if (!campfire.stopCooking[i]) { // Paper
							 | 
						||
| 
								 | 
							
								                 int j = campfire.cookingProgress[i]++;
							 | 
						||
| 
								 | 
							
								+                } // Paper
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								                 if (campfire.cookingProgress[i] >= campfire.cookingTime[i]) {
							 | 
						||
| 
								 | 
							
								                     SimpleContainer inventorysubcontainer = new SimpleContainer(new ItemStack[]{itemstack});
							 | 
						||
| 
								 | 
							
								@@ -0,0 +0,0 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
							 | 
						||
| 
								 | 
							
								             System.arraycopy(aint, 0, this.cookingTime, 0, Math.min(this.cookingTime.length, aint.length));
							 | 
						||
| 
								 | 
							
								         }
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								+        // Paper start
							 | 
						||
| 
								 | 
							
								+        if (nbt.contains("Paper.StopCooking", org.bukkit.craftbukkit.util.CraftMagicNumbers.NBT.TAG_BYTE_ARRAY)) {
							 | 
						||
| 
								 | 
							
								+            byte[] abyte = nbt.getByteArray("Paper.StopCooking");
							 | 
						||
| 
								 | 
							
								+            boolean[] cookingState = new boolean[4];
							 | 
						||
| 
								 | 
							
								+            for (int index = 0; index < abyte.length; index++) {
							 | 
						||
| 
								 | 
							
								+                cookingState[index] = abyte[index] == 1;
							 | 
						||
| 
								 | 
							
								+            }
							 | 
						||
| 
								 | 
							
								+            System.arraycopy(cookingState, 0, this.stopCooking, 0, Math.min(this.stopCooking.length, abyte.length));
							 | 
						||
| 
								 | 
							
								+        }
							 | 
						||
| 
								 | 
							
								+        // Paper end
							 | 
						||
| 
								 | 
							
								     }
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								     @Override
							 | 
						||
| 
								 | 
							
								@@ -0,0 +0,0 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
							 | 
						||
| 
								 | 
							
								         ContainerHelper.saveAllItems(nbt, this.items, true);
							 | 
						||
| 
								 | 
							
								         nbt.putIntArray("CookingTimes", this.cookingProgress);
							 | 
						||
| 
								 | 
							
								         nbt.putIntArray("CookingTotalTimes", this.cookingTime);
							 | 
						||
| 
								 | 
							
								+        // Paper start
							 | 
						||
| 
								 | 
							
								+        byte[] cookingState = new byte[4];
							 | 
						||
| 
								 | 
							
								+        for (int index = 0; index < cookingState.length; index++) {
							 | 
						||
| 
								 | 
							
								+            cookingState[index] = (byte) (this.stopCooking[index] ? 1 : 0);
							 | 
						||
| 
								 | 
							
								+        }
							 | 
						||
| 
								 | 
							
								+        nbt.putByteArray("Paper.StopCooking", cookingState);
							 | 
						||
| 
								 | 
							
								+        // Paper end
							 | 
						||
| 
								 | 
							
								     }
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								     @Override
							 | 
						||
| 
								 | 
							
								diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftCampfire.java b/src/main/java/org/bukkit/craftbukkit/block/CraftCampfire.java
							 | 
						||
| 
								 | 
							
								index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
							 | 
						||
| 
								 | 
							
								--- a/src/main/java/org/bukkit/craftbukkit/block/CraftCampfire.java
							 | 
						||
| 
								 | 
							
								+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftCampfire.java
							 | 
						||
| 
								 | 
							
								@@ -0,0 +0,0 @@ public class CraftCampfire extends CraftBlockEntityState<CampfireBlockEntity> im
							 | 
						||
| 
								 | 
							
								     public void setCookTimeTotal(int index, int cookTimeTotal) {
							 | 
						||
| 
								 | 
							
								         getSnapshot().cookingTime[index] = cookTimeTotal;
							 | 
						||
| 
								 | 
							
								     }
							 | 
						||
| 
								 | 
							
								+
							 | 
						||
| 
								 | 
							
								+    // Paper start
							 | 
						||
| 
								 | 
							
								+    @Override
							 | 
						||
| 
								 | 
							
								+    public void stopCooking() {
							 | 
						||
| 
								 | 
							
								+        for (int i = 0; i < getSnapshot().stopCooking.length; ++i)
							 | 
						||
| 
								 | 
							
								+            this.stopCooking(i);
							 | 
						||
| 
								 | 
							
								+    }
							 | 
						||
| 
								 | 
							
								+
							 | 
						||
| 
								 | 
							
								+    @Override
							 | 
						||
| 
								 | 
							
								+    public void startCooking() {
							 | 
						||
| 
								 | 
							
								+        for (int i = 0; i < getSnapshot().stopCooking.length; ++i)
							 | 
						||
| 
								 | 
							
								+            this.startCooking(i);
							 | 
						||
| 
								 | 
							
								+    }
							 | 
						||
| 
								 | 
							
								+
							 | 
						||
| 
								 | 
							
								+    @Override
							 | 
						||
| 
								 | 
							
								+    public boolean stopCooking(int index) {
							 | 
						||
| 
								 | 
							
								+        org.apache.commons.lang.Validate.isTrue(-1 < index && index < 4, "Slot index must be between 0 (incl) to 3 (incl)");
							 | 
						||
| 
								 | 
							
								+        boolean previous = this.isCookingDisabled(index);
							 | 
						||
| 
								 | 
							
								+        getSnapshot().stopCooking[index] = true;
							 | 
						||
| 
								 | 
							
								+        return previous;
							 | 
						||
| 
								 | 
							
								+    }
							 | 
						||
| 
								 | 
							
								+
							 | 
						||
| 
								 | 
							
								+    @Override
							 | 
						||
| 
								 | 
							
								+    public boolean startCooking(int index) {
							 | 
						||
| 
								 | 
							
								+        org.apache.commons.lang.Validate.isTrue(-1 < index && index < 4, "Slot index must be between 0 (incl) to 3 (incl)");
							 | 
						||
| 
								 | 
							
								+        boolean previous = this.isCookingDisabled(index);
							 | 
						||
| 
								 | 
							
								+        getSnapshot().stopCooking[index] = false;
							 | 
						||
| 
								 | 
							
								+        return previous;
							 | 
						||
| 
								 | 
							
								+    }
							 | 
						||
| 
								 | 
							
								+
							 | 
						||
| 
								 | 
							
								+    @Override
							 | 
						||
| 
								 | 
							
								+    public boolean isCookingDisabled(int index) {
							 | 
						||
| 
								 | 
							
								+        org.apache.commons.lang.Validate.isTrue(-1 < index && index < 4, "Slot index must be between 0 (incl) to 3 (incl)");
							 | 
						||
| 
								 | 
							
								+        return getSnapshot().stopCooking[index];
							 | 
						||
| 
								 | 
							
								+    }
							 | 
						||
| 
								 | 
							
								+    // Paper end
							 | 
						||
| 
								 | 
							
								 }
							 |