mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-21 18:15:54 +01:00
8c5b837e05
Firstly, the old methods all routed to the CompletableFuture method. However, the CF method could not guarantee that if the caller was off-main that the future would be "completed" on-main. Since the callback methods used the CF one, this meant that the callback methods did not guarantee that the callbacks were to be called on the main thread. Now, all methods route to getChunkAtAsync(x, z, gen, urgent, cb) so that the methods with the callback are guaranteed to invoke the callback on the main thread. The CF behavior remains unchanged; it may still appear to complete on main if invoked off-main. Secondly, remove the scheduleOnMain invocation in the async chunk completion. This unnecessarily delays the callback by 1 tick. Thirdly, add getChunksAtAsync(minX, minZ, maxX, maxZ, ...) which will load chunks within an area. This method is provided as a helper as keeping all chunks loaded within an area can be complicated to implement for plugins (due to the lacking ticket API), and is already implemented internally anyways. Fourthly, remove the ticket addition that occured with getChunkAt and getChunkAtAsync. The ticket addition may delay the unloading of the chunk unnecessarily. It also fixes a very rare timing bug where the future/callback would be completed after the chunk unloads.
182 lines
9.3 KiB
Diff
182 lines
9.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Tamion <70228790+notTamion@users.noreply.github.com>
|
|
Date: Sun, 15 Sep 2024 19:17:12 +0200
|
|
Subject: [PATCH] Add recipeBrewTime
|
|
|
|
== AT ==
|
|
public net.minecraft.world.inventory.BrewingStandMenu brewingStandData
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/inventory/BrewingSimpleContainerData.java b/src/main/java/io/papermc/paper/inventory/BrewingSimpleContainerData.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..84dead75191634c3aa6031781a2ff3087171793b
|
|
--- /dev/null
|
|
+++ b/src/main/java/io/papermc/paper/inventory/BrewingSimpleContainerData.java
|
|
@@ -0,0 +1,11 @@
|
|
+package io.papermc.paper.inventory;
|
|
+
|
|
+import net.minecraft.world.inventory.SimpleContainerData;
|
|
+
|
|
+public class BrewingSimpleContainerData extends SimpleContainerData {
|
|
+
|
|
+ public BrewingSimpleContainerData() {
|
|
+ super(3);
|
|
+ this.set(2, 400);
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/net/minecraft/world/inventory/BrewingStandMenu.java b/src/main/java/net/minecraft/world/inventory/BrewingStandMenu.java
|
|
index 182c87a0b7081f6a777c4c7969961c30438b0d86..3be46ecfa382e15d09a88912c498abb6034c3a90 100644
|
|
--- a/src/main/java/net/minecraft/world/inventory/BrewingStandMenu.java
|
|
+++ b/src/main/java/net/minecraft/world/inventory/BrewingStandMenu.java
|
|
@@ -42,14 +42,14 @@ public class BrewingStandMenu extends AbstractContainerMenu {
|
|
// CraftBukkit end
|
|
|
|
public BrewingStandMenu(int syncId, Inventory playerInventory) {
|
|
- this(syncId, playerInventory, new SimpleContainer(5), new SimpleContainerData(2));
|
|
+ this(syncId, playerInventory, new SimpleContainer(5), new io.papermc.paper.inventory.BrewingSimpleContainerData()); // Paper - Add totalBrewTime
|
|
}
|
|
|
|
public BrewingStandMenu(int syncId, Inventory playerInventory, Container inventory, ContainerData propertyDelegate) {
|
|
super(MenuType.BREWING_STAND, syncId);
|
|
this.player = playerInventory; // CraftBukkit
|
|
checkContainerSize(inventory, 5);
|
|
- checkContainerDataCount(propertyDelegate, 2);
|
|
+ checkContainerDataCount(propertyDelegate, 3); // Paper - Add recipeBrewTime
|
|
this.brewingStand = inventory;
|
|
this.brewingStandData = propertyDelegate;
|
|
PotionBrewing potionbrewer = playerInventory.player.level().potionBrewing();
|
|
@@ -61,7 +61,20 @@ public class BrewingStandMenu extends AbstractContainerMenu {
|
|
// Paper end - custom potion mixes
|
|
this.ingredientSlot = this.addSlot(new BrewingStandMenu.IngredientsSlot(potionbrewer, inventory, 3, 79, 17));
|
|
this.addSlot(new BrewingStandMenu.FuelSlot(inventory, 4, 17, 17));
|
|
- this.addDataSlots(propertyDelegate);
|
|
+ // Paper start - Add recipeBrewTime
|
|
+ this.addDataSlots(new SimpleContainerData(2) {
|
|
+ @Override
|
|
+ public int get(final int index) {
|
|
+ if (index == 0) return 400 * propertyDelegate.get(index) / propertyDelegate.get(2);
|
|
+ return propertyDelegate.get(index);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void set(final int index, final int value) {
|
|
+ propertyDelegate.set(index, value);
|
|
+ }
|
|
+ });
|
|
+ // Paper end - Add recipeBrewTime
|
|
this.addStandardInventorySlots(playerInventory, 8, 84);
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
|
|
index 4ea29e8f2b39d7b44e0461d6a2cdd3fc257abd44..02fc9ce21c7d367055da350d21be4870d4242f3a 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
|
|
@@ -50,6 +50,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
|
public static final int NUM_DATA_VALUES = 2;
|
|
private NonNullList<ItemStack> items;
|
|
public int brewTime;
|
|
+ public int recipeBrewTime = 400; // Paper - Add recipeBrewTime
|
|
private boolean[] lastPotionCount;
|
|
private Item ingredient;
|
|
public int fuel;
|
|
@@ -100,6 +101,11 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
|
case 1:
|
|
j = BrewingStandBlockEntity.this.fuel;
|
|
break;
|
|
+ // Paper start - Add recipeBrewTime
|
|
+ case 2:
|
|
+ j = BrewingStandBlockEntity.this.recipeBrewTime;
|
|
+ break;
|
|
+ // Paper end - Add recipeBrewTime
|
|
default:
|
|
j = 0;
|
|
}
|
|
@@ -115,13 +121,18 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
|
break;
|
|
case 1:
|
|
BrewingStandBlockEntity.this.fuel = value;
|
|
+ // Paper start - Add recipeBrewTime
|
|
+ case 2:
|
|
+ BrewingStandBlockEntity.this.recipeBrewTime = value;
|
|
+ break;
|
|
+ // Paper end - Add recipeBrewTime
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public int getCount() {
|
|
- return 2;
|
|
+ return 3; // Paper - Add recipeBrewTime
|
|
}
|
|
};
|
|
}
|
|
@@ -189,7 +200,8 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
|
// CraftBukkit start
|
|
BrewingStartEvent event = new BrewingStartEvent(CraftBlock.at(world, pos), CraftItemStack.asCraftMirror(itemstack1), 400);
|
|
world.getCraftServer().getPluginManager().callEvent(event);
|
|
- blockEntity.brewTime = event.getTotalBrewTime(); // 400 -> event.getTotalBrewTime()
|
|
+ blockEntity.recipeBrewTime = event.getRecipeBrewTime(); // Paper - use recipe brew time from event
|
|
+ blockEntity.brewTime = event.getBrewingTime(); // 400 -> event.getTotalBrewTime() // Paper - use brewing time from event
|
|
// CraftBukkit end
|
|
blockEntity.ingredient = itemstack1.getItem();
|
|
setChanged(world, pos, state);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java
|
|
index e9f55c898de827afe6c9f951cbe1b46eea5f4149..f330c17b11566102b4db430fef013101b3275bda 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java
|
|
@@ -41,6 +41,19 @@ public class CraftBrewingStand extends CraftContainer<BrewingStandBlockEntity> i
|
|
this.getSnapshot().brewTime = brewTime;
|
|
}
|
|
|
|
+ // Paper start - Add recipeBrewTime
|
|
+ @Override
|
|
+ public void setRecipeBrewTime(int recipeBrewTime) {
|
|
+ com.google.common.base.Preconditions.checkArgument(recipeBrewTime > 0, "recipeBrewTime must be positive");
|
|
+ this.getSnapshot().recipeBrewTime = recipeBrewTime;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getRecipeBrewTime() {
|
|
+ return this.getSnapshot().recipeBrewTime;
|
|
+ }
|
|
+ // Paper end - Add recipeBrewTime
|
|
+
|
|
@Override
|
|
public int getFuelLevel() {
|
|
return this.getSnapshot().fuel;
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
|
|
index 674e3a827f8fb64e5c0beefb3c1874d6e8aee4e5..6d3f9d5dab6c9a2860ae31cae24310aa2d62da7c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
|
|
@@ -163,7 +163,7 @@ public class CraftContainer extends AbstractContainerMenu {
|
|
this.delegate = new EnchantmentMenu(windowId, bottom);
|
|
break;
|
|
case BREWING:
|
|
- this.delegate = new BrewingStandMenu(windowId, bottom, top, new SimpleContainerData(2));
|
|
+ this.delegate = new BrewingStandMenu(windowId, bottom, top, new io.papermc.paper.inventory.BrewingSimpleContainerData()); // Paper - Add recipeBrewTime
|
|
break;
|
|
case HOPPER:
|
|
this.delegate = new HopperMenu(windowId, bottom, top);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/view/CraftBrewingStandView.java b/src/main/java/org/bukkit/craftbukkit/inventory/view/CraftBrewingStandView.java
|
|
index aeb5a9c996ba6b6d812735bc78e3e5aec2c9d269..6e88347d74f6bd20d7808e0d556997ab73861e7c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/inventory/view/CraftBrewingStandView.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/view/CraftBrewingStandView.java
|
|
@@ -35,4 +35,17 @@ public class CraftBrewingStandView extends CraftInventoryView<BrewingStandMenu,
|
|
Preconditions.checkArgument(brewingTicks > 0, "The given brewing ticks must be greater than 0");
|
|
this.container.setData(BrewingStandBlockEntity.DATA_BREW_TIME, brewingTicks);
|
|
}
|
|
+
|
|
+ // Paper start - Add recipeBrewTime
|
|
+ @Override
|
|
+ public void setRecipeBrewTime(int recipeBrewTime) {
|
|
+ com.google.common.base.Preconditions.checkArgument(recipeBrewTime > 0, "recipeBrewTime must be positive");
|
|
+ this.container.brewingStandData.set(2, recipeBrewTime);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getRecipeBrewTime() {
|
|
+ return this.container.brewingStandData.get(2);
|
|
+ }
|
|
+ // Paper end - Add recipeBrewTime
|
|
}
|