mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-04 22:14:40 +01:00
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 7c48b26dc4baa3b4046840356132170c6e05a1d6..073ec046c1c09436dfca34045acc5df12ab82eda 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
|
||
|
@@ -32,12 +32,14 @@ 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) {
|
||
|
@@ -48,7 +50,9 @@ 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});
|
||
|
@@ -155,6 +159,16 @@ 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
|
||
|
@@ -163,6 +177,13 @@ 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 391ff41951f51a5f9225bf4a9e28c0a4d064d8c9..eafba0532920a3162575dbe656e07734605590f5 100644
|
||
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftCampfire.java
|
||
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftCampfire.java
|
||
|
@@ -47,4 +47,40 @@ 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
|
||
|
}
|