Skip to content

Commit

Permalink
add player mecs 'resend_recipes', 'quietly_discover_recipe', fixes #2041
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Dec 14, 2019
1 parent 58eb522 commit 01dcc1c
Show file tree
Hide file tree
Showing 9 changed files with 134 additions and 9 deletions.
Expand Up @@ -2,6 +2,7 @@

import com.denizenscript.denizen.nms.abstracts.ImprovedOfflinePlayer;
import org.bukkit.Chunk;
import org.bukkit.NamespacedKey;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;

Expand Down Expand Up @@ -32,4 +33,8 @@ public abstract class PlayerHelper {
public abstract ImprovedOfflinePlayer getOfflineData(UUID uuid);

public abstract ImprovedOfflinePlayer getOfflineData(OfflinePlayer offlinePlayer);

public abstract void resendRecipes(Player player);

public abstract void quietlyAddRecipe(Player player, NamespacedKey key);
}
Expand Up @@ -3325,6 +3325,34 @@ else if (split.length > 1) {
EquipmentSlot.OFF_HAND, getPlayerEntity().getEquipment().getItemInOffHand());
}

// <--[mechanism]
// @object PlayerTag
// @name resend_recipes
// @input None
// @description
// Sends the player the full list of recipes they have discovered over again.
// This is useful when used alongside <@link mechanism PlayerTag.quietly_discover_recipe>.
// -->
if (mechanism.matches("resend_recipes")) {
NMSHandler.getPlayerHelper().resendRecipes(getPlayerEntity());
}

// <--[mechanism]
// @object PlayerTag
// @name quietly_discover_recipe
// @input ListTag
// @description
// Causes the player to discover a recipe, or list of recipes, without being notified or updated about this happening.
// Generally helpful to follow this with <@link mechanism PlayerTag.resend_recipes>.
// Input is in the Namespace:Key format, for example "minecraft:gold_nugget".
// -->
if (mechanism.matches("quietly_discover_recipe")) {
for (String keyText : mechanism.valueAsType(ListTag.class)) {
NamespacedKey key = Utilities.parseNamespacedKey(keyText);
NMSHandler.getPlayerHelper().quietlyAddRecipe(getPlayerEntity(), key);
}
}

// <--[mechanism]
// @object PlayerTag
// @name discover_recipe
Expand Down
Expand Up @@ -10,6 +10,7 @@
import net.minecraft.server.v1_12_R1.*;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.NamespacedKey;
import org.bukkit.OfflinePlayer;
import org.bukkit.craftbukkit.v1_12_R1.CraftServer;
import org.bukkit.craftbukkit.v1_12_R1.CraftWorld;
Expand Down Expand Up @@ -137,4 +138,14 @@ public ImprovedOfflinePlayer getOfflineData(UUID uuid) {
public ImprovedOfflinePlayer getOfflineData(OfflinePlayer offlinePlayer) {
return new ImprovedOfflinePlayerImpl(offlinePlayer.getUniqueId());
}

@Override
public void resendRecipes(Player player) {
throw new UnsupportedOperationException();
}

@Override
public void quietlyAddRecipe(Player player, NamespacedKey key) {
throw new UnsupportedOperationException();
}
}
Expand Up @@ -31,17 +31,25 @@

public class ItemHelperImpl extends ItemHelper {

@Override
public Recipe getRecipeById(NamespacedKey key) {
public static IRecipe getNMSRecipe(NamespacedKey key) {
MinecraftKey nmsKey = CraftNamespacedKey.toMinecraft(key);
Object2ObjectLinkedOpenHashMap<MinecraftKey, IRecipe> recipeMap = ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().recipes;
IRecipe recipe = recipeMap.get(nmsKey);
if (recipe != null) {
return recipe.toBukkitRecipe();
return recipe;
}
return null;
}

@Override
public Recipe getRecipeById(NamespacedKey key) {
IRecipe recipe = getNMSRecipe(key);
if (recipe == null) {
return null;
}
return recipe.toBukkitRecipe();
}

@Override
public void removeRecipe(NamespacedKey key) {
MinecraftKey nmsKey = CraftNamespacedKey.toMinecraft(key);
Expand Down
Expand Up @@ -10,6 +10,7 @@
import net.minecraft.server.v1_13_R2.*;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.NamespacedKey;
import org.bukkit.OfflinePlayer;
import org.bukkit.craftbukkit.v1_13_R2.CraftServer;
import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
Expand Down Expand Up @@ -138,4 +139,22 @@ public ImprovedOfflinePlayer getOfflineData(UUID uuid) {
public ImprovedOfflinePlayer getOfflineData(OfflinePlayer offlinePlayer) {
return new ImprovedOfflinePlayerImpl(offlinePlayer.getUniqueId());
}

@Override
public void resendRecipes(Player player) {
RecipeBookServer recipeBook = ((CraftPlayer) player).getHandle().B();
recipeBook.a(((CraftPlayer) player).getHandle());
}

@Override
public void quietlyAddRecipe(Player player, NamespacedKey key) {
RecipeBookServer recipeBook = ((CraftPlayer) player).getHandle().B();
IRecipe recipe = ItemHelperImpl.getNMSRecipe(key);
if (recipe == null) {
Debug.echoError("Cannot add recipe '" + key + "': it does not exist.");
return;
}
recipeBook.a(recipe);
recipeBook.f(recipe);
}
}
Expand Up @@ -31,18 +31,26 @@

public class ItemHelperImpl extends ItemHelper {

@Override
public Recipe getRecipeById(NamespacedKey key) {
public static IRecipe<?> getNMSRecipe(NamespacedKey key) {
MinecraftKey nmsKey = CraftNamespacedKey.toMinecraft(key);
for (Object2ObjectLinkedOpenHashMap<MinecraftKey, IRecipe<?>> recipeMap : ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().recipes.values()) {
IRecipe<?> recipe = recipeMap.get(nmsKey);
if (recipe != null) {
return recipe.toBukkitRecipe();
return recipe;
}
}
return null;
}

@Override
public Recipe getRecipeById(NamespacedKey key) {
IRecipe<?> recipe = getNMSRecipe(key);
if (recipe == null) {
return null;
}
return recipe.toBukkitRecipe();
}

@Override
public void removeRecipe(NamespacedKey key) {
MinecraftKey nmsKey = CraftNamespacedKey.toMinecraft(key);
Expand Down
Expand Up @@ -10,6 +10,7 @@
import net.minecraft.server.v1_14_R1.*;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.NamespacedKey;
import org.bukkit.OfflinePlayer;
import org.bukkit.craftbukkit.v1_14_R1.CraftServer;
import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
Expand Down Expand Up @@ -139,4 +140,22 @@ public ImprovedOfflinePlayer getOfflineData(UUID uuid) {
public ImprovedOfflinePlayer getOfflineData(OfflinePlayer offlinePlayer) {
return new ImprovedOfflinePlayerImpl(offlinePlayer.getUniqueId());
}

@Override
public void resendRecipes(Player player) {
RecipeBookServer recipeBook = ((CraftPlayer) player).getHandle().B();
recipeBook.a(((CraftPlayer) player).getHandle());
}

@Override
public void quietlyAddRecipe(Player player, NamespacedKey key) {
RecipeBookServer recipeBook = ((CraftPlayer) player).getHandle().B();
IRecipe<?> recipe = ItemHelperImpl.getNMSRecipe(key);
if (recipe == null) {
Debug.echoError("Cannot add recipe '" + key + "': it does not exist.");
return;
}
recipeBook.a(recipe);
recipeBook.f(recipe);
}
}
Expand Up @@ -31,18 +31,26 @@

public class ItemHelperImpl extends ItemHelper {

@Override
public Recipe getRecipeById(NamespacedKey key) {
public static IRecipe<?> getNMSRecipe(NamespacedKey key) {
MinecraftKey nmsKey = CraftNamespacedKey.toMinecraft(key);
for (Object2ObjectLinkedOpenHashMap<MinecraftKey, IRecipe<?>> recipeMap : ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().recipes.values()) {
IRecipe<?> recipe = recipeMap.get(nmsKey);
if (recipe != null) {
return recipe.toBukkitRecipe();
return recipe;
}
}
return null;
}

@Override
public Recipe getRecipeById(NamespacedKey key) {
IRecipe<?> recipe = getNMSRecipe(key);
if (recipe == null) {
return null;
}
return recipe.toBukkitRecipe();
}

@Override
public void removeRecipe(NamespacedKey key) {
MinecraftKey nmsKey = CraftNamespacedKey.toMinecraft(key);
Expand Down
Expand Up @@ -10,6 +10,7 @@
import net.minecraft.server.v1_15_R1.*;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.NamespacedKey;
import org.bukkit.OfflinePlayer;
import org.bukkit.craftbukkit.v1_15_R1.CraftServer;
import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
Expand Down Expand Up @@ -136,4 +137,22 @@ public ImprovedOfflinePlayer getOfflineData(UUID uuid) {
public ImprovedOfflinePlayer getOfflineData(OfflinePlayer offlinePlayer) {
return new ImprovedOfflinePlayerImpl(offlinePlayer.getUniqueId());
}

@Override
public void resendRecipes(Player player) {
RecipeBookServer recipeBook = ((CraftPlayer) player).getHandle().B();
recipeBook.a(((CraftPlayer) player).getHandle());
}

@Override
public void quietlyAddRecipe(Player player, NamespacedKey key) {
RecipeBookServer recipeBook = ((CraftPlayer) player).getHandle().B();
IRecipe<?> recipe = ItemHelperImpl.getNMSRecipe(key);
if (recipe == null) {
Debug.echoError("Cannot add recipe '" + key + "': it does not exist.");
return;
}
recipeBook.a(recipe);
recipeBook.f(recipe);
}
}

0 comments on commit 01dcc1c

Please sign in to comment.