aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2022-02-19 14:00:33 -0800
committerGitHub <[email protected]>2022-02-19 14:00:33 -0800
commit36a1650dbfb1f43e38b6f61fc05e65dc82de0736 (patch)
tree28b9ddc0686592f4c04732033f4b96b733612856
parent7b8e0c3acfd9e50cba28daf643fc4635a3f00997 (diff)
downloadPaper-36a1650dbfb1f43e38b6f61fc05e65dc82de0736.tar.gz
Paper-36a1650dbfb1f43e38b6f61fc05e65dc82de0736.zip
Furnace RecipesUsed API (#7399)
-rw-r--r--patches/api/0368-Furnace-RecipesUsed-API.patch51
-rw-r--r--patches/server/0871-Furnace-RecipesUsed-API.patch48
2 files changed, 99 insertions, 0 deletions
diff --git a/patches/api/0368-Furnace-RecipesUsed-API.patch b/patches/api/0368-Furnace-RecipesUsed-API.patch
new file mode 100644
index 0000000000..7fed82db21
--- /dev/null
+++ b/patches/api/0368-Furnace-RecipesUsed-API.patch
@@ -0,0 +1,51 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Thu, 13 Jan 2022 15:21:08 -0800
+Subject: [PATCH] Furnace RecipesUsed API
+
+
+diff --git a/src/main/java/org/bukkit/block/Furnace.java b/src/main/java/org/bukkit/block/Furnace.java
+index dbdf3dbe9517b09a7965cf9d65cae1edd87af67d..8745e5aeaa81cd42d6625f415c623daa28776647 100644
+--- a/src/main/java/org/bukkit/block/Furnace.java
++++ b/src/main/java/org/bukkit/block/Furnace.java
+@@ -92,6 +92,40 @@ public interface Furnace extends Container {
+ * @throws IllegalArgumentException if value is more than 200
+ */
+ public void setCookSpeedMultiplier(double multiplier);
++
++ /**
++ * Gets the number of times a recipe has been used since the
++ * last player removed items from the result slot. This is used
++ * to calculate experience rewards when withdrawing items from furnaces.
++ *
++ * @param furnaceRecipe the recipe to query the count for
++ * @return the count or 0 if none found
++ */
++ int getRecipeUsedCount(@NotNull org.bukkit.NamespacedKey furnaceRecipe);
++
++ /**
++ * Checks if the recipe has a used count present on this furnace.
++ *
++ * @param furnaceRecipe the recipe to check if a count exists for
++ * @return true if there is a positive count, else false
++ */
++ boolean hasRecipeUsedCount(@NotNull org.bukkit.NamespacedKey furnaceRecipe);
++
++ /**
++ * Sets the number of times a recipe has been used. This is used
++ * to calculate experience rewards when withdrawing items from furnaces.
++ *
++ * @param furnaceRecipe the recipe to set the count for
++ * @param count the count, a non-positive number will remove the recipe
++ */
++ void setRecipeUsedCount(@NotNull org.bukkit.inventory.CookingRecipe<?> furnaceRecipe, int count);
++
++ /**
++ * Sets all recipes used by this furnace.
++ *
++ * @param recipesUsed the recipes used
++ */
++ void setRecipesUsed(@NotNull Map<CookingRecipe<?>, Integer> recipesUsed);
+ // Paper end
+
+ @NotNull
diff --git a/patches/server/0871-Furnace-RecipesUsed-API.patch b/patches/server/0871-Furnace-RecipesUsed-API.patch
new file mode 100644
index 0000000000..2e6cf1c2fe
--- /dev/null
+++ b/patches/server/0871-Furnace-RecipesUsed-API.patch
@@ -0,0 +1,48 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Thu, 13 Jan 2022 15:20:47 -0800
+Subject: [PATCH] Furnace RecipesUsed API
+
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java b/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java
+index 3da4616c904d47bbecae0d4cb6970496fbec9a8b..f49bb90e6c30dd928b352c867819b687e4557893 100644
+--- a/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java
++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java
+@@ -93,5 +93,37 @@ public abstract class CraftFurnace<T extends AbstractFurnaceBlockEntity> extends
+ snapshot.cookSpeedMultiplier = multiplier;
+ snapshot.cookingTotalTime = AbstractFurnaceBlockEntity.getTotalCookTime(this.isPlaced() ? this.world.getHandle() : null, snapshot.recipeType, snapshot, snapshot.cookSpeedMultiplier); // Update the snapshot's current total cook time to scale with the newly set multiplier
+ }
++
++ @Override
++ public int getRecipeUsedCount(org.bukkit.NamespacedKey furnaceRecipe) {
++ return this.getSnapshot().getRecipesUsed().getInt(org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(furnaceRecipe));
++ }
++
++ @Override
++ public boolean hasRecipeUsedCount(org.bukkit.NamespacedKey furnaceRecipe) {
++ return this.getSnapshot().getRecipesUsed().containsKey(org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(furnaceRecipe));
++ }
++
++ @Override
++ public void setRecipeUsedCount(org.bukkit.inventory.CookingRecipe<?> furnaceRecipe, int count) {
++ final net.minecraft.resources.ResourceLocation location = org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(furnaceRecipe.getKey());
++ java.util.Optional<? extends net.minecraft.world.item.crafting.Recipe<?>> nmsRecipe = (this.isPlaced() ? this.world.getHandle().getRecipeManager() : net.minecraft.server.MinecraftServer.getServer().getRecipeManager()).byKey(location);
++ com.google.common.base.Preconditions.checkArgument(nmsRecipe.isPresent() && nmsRecipe.get() instanceof net.minecraft.world.item.crafting.AbstractCookingRecipe, furnaceRecipe.getKey() + " is not recognized as a valid and registered furnace recipe");
++ if (count > 0) {
++ this.getSnapshot().getRecipesUsed().put(location, count);
++ } else {
++ this.getSnapshot().getRecipesUsed().removeInt(location);
++ }
++ }
++
++ @Override
++ public void setRecipesUsed(java.util.Map<org.bukkit.inventory.CookingRecipe<?>, Integer> recipesUsed) {
++ this.getSnapshot().getRecipesUsed().clear();
++ recipesUsed.forEach((recipe, integer) -> {
++ if (integer != null) {
++ this.setRecipeUsedCount(recipe, integer);
++ }
++ });
++ }
+ // Paper end
+ }