aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/1061-Add-recipeBrewTime.patch
blob: 34513fe035e577f4578041aa1a040b84283de2cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
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 68c529cb38d61cd3a0f39bef0f666057fc219c9b..6ec207e91f93b3ab625515dc75367ba399818876 100644
--- a/src/main/java/net/minecraft/world/inventory/BrewingStandMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/BrewingStandMenu.java
@@ -41,14 +41,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();
@@ -60,7 +60,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
 
         int j;
 
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 bf2c303a314205590a2839e0f729af3a9ff40a86..0a93bacd62249bae1800ff306b8a7c765b0e5a8b 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
@@ -49,6 +49,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;
@@ -99,6 +100,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;
                 }
@@ -114,13 +120,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
             }
         };
     }
@@ -188,7 +199,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 c92e51227cf2c0046a558b012c078c46582aed44..4f60ff23422ed268ee1e76190e5bac1fc2f7cdc1 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
 }