geforkt von Mirrors/Paper
9147456fc9
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: ab8ace685 SPIGOT-7236: Bone meal doesn't increase use statistic 7dcb59b8e Avoid switch on material in previous commit Spigot Changes: 19641c75 SPIGOT-7235: World.Spigot#strikeLightningEffect doesn't do anything
113 Zeilen
5.2 KiB
Diff
113 Zeilen
5.2 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 06df710f58ca7d55b19c0db9d393a73ca6e5aa79..830326496e2f961682daadc7a7859247042b4cdd 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
|
|
@@ -39,6 +39,7 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
|
|
public final int[] cookingProgress;
|
|
public final int[] cookingTime;
|
|
private final RecipeManager.CachedCheck<Container, CampfireCookingRecipe> quickCheck;
|
|
+ public final boolean[] stopCooking; // Paper
|
|
|
|
public CampfireBlockEntity(BlockPos pos, BlockState state) {
|
|
super(BlockEntityType.CAMPFIRE, pos, state);
|
|
@@ -46,6 +47,7 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
|
|
this.cookingProgress = new int[4];
|
|
this.cookingTime = new int[4];
|
|
this.quickCheck = RecipeManager.createCheck(RecipeType.CAMPFIRE_COOKING);
|
|
+ this.stopCooking = new boolean[4]; // Paper
|
|
}
|
|
|
|
public static void cookTick(Level world, BlockPos pos, BlockState state, CampfireBlockEntity campfire) {
|
|
@@ -56,7 +58,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});
|
|
@@ -165,6 +169,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
|
|
@@ -173,6 +187,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
|
|
}
|