Skip to content

Commit

Permalink
item script smithing recipes
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Jul 24, 2021
1 parent 1507af9 commit 63aa0e0
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ public class PlayerSmithsItemScriptEvent extends BukkitScriptEvent implements Li
//
// @Group Player
//
// @Cancellable true
//
// @Triggers when a player upgrades an item on a smithing table.
//
// @Context
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ public void registerStonecuttingRecipe(String keyName, String group, ItemStack r

public abstract PotionEffect getPotionEffect(PotionEffectType type, int duration, int amplifier, boolean ambient, boolean particles, Color color, boolean icon);

public void registerSmithingRecipe(String keyName, ItemStack result, ItemStack[] baseItem, boolean baseExact, ItemStack[] upgradeItem, boolean upgradeExact) {
throw new UnsupportedOperationException();
}

public void setInventoryItem(Inventory inventory, ItemStack item, int slot) {
inventory.setItem(slot, item);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,11 @@ public class ItemScriptContainer extends ScriptContainer {
// # | Only some recipes should have this key.
// experience: 5
// input: ItemTag
// 6:
// # Smithing recipes take one base item and one upgrade item.
// type: smithing
// base: ItemTag
// upgrade: ItemTag
//
// # Set to true to not store the scriptID on the item, treating it as an item dropped by any other plugin.
// # NOTE: THIS IS NOT RECOMMENDED UNLESS YOU HAVE A SPECIFIC REASON TO USE IT.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,28 @@ public void registerStonecuttingRecipe(ItemScriptContainer container, ItemStack
NMSHandler.getItemHelper().registerStonecuttingRecipe(internalId, group, item, items, exact);
}

public void registerSmithingRecipe(ItemScriptContainer container, ItemStack item, String baseItemString, String upgradeItemString, String internalId) {
boolean baseExact = true;
if (baseItemString.startsWith("material:")) {
baseExact = false;
baseItemString = baseItemString.substring("material:".length());
}
ItemStack[] baseItems = textToItemArray(container, baseItemString, baseExact);
if (baseItems == null) {
return;
}
boolean upgradeExact = true;
if (upgradeItemString.startsWith("material:")) {
upgradeExact = false;
upgradeItemString = upgradeItemString.substring("material:".length());
}
ItemStack[] upgradeItems = textToItemArray(container, upgradeItemString, upgradeExact);
if (upgradeItems == null) {
return;
}
NMSHandler.getItemHelper().registerSmithingRecipe(internalId, item, baseItems, baseExact, upgradeItems, upgradeExact);
}

public void rebuildRecipes() {
for (ItemScriptContainer container : item_scripts.values()) {
try {
Expand Down Expand Up @@ -271,6 +293,9 @@ public void rebuildRecipes() {
}
registerFurnaceRecipe(container, item, subSection.getString("input"), exp, cookTime, type, internalId, group);
break;
case "smithing":
registerSmithingRecipe(container, item, subSection.getString("base"), subSection.getString("upgrade"), internalId);
break;
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,15 @@ public void registerStonecuttingRecipe(String keyName, String group, ItemStack r
((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().addRecipe(recipe);
}

@Override
public void registerSmithingRecipe(String keyName, ItemStack result, ItemStack[] baseItem, boolean baseExact, ItemStack[] upgradeItem, boolean upgradeExact) {
MinecraftKey key = new MinecraftKey("denizen", keyName);
RecipeItemStack baseItemRecipe = itemArrayToRecipe(baseItem, baseExact);
RecipeItemStack upgradeItemRecipe = itemArrayToRecipe(upgradeItem, upgradeExact);
RecipeSmithing recipe = new RecipeSmithing(key, baseItemRecipe, upgradeItemRecipe, CraftItemStack.asNMSCopy(result));
((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().addRecipe(recipe);
}

@Override
public void registerShapelessRecipe(String keyName, String group, ItemStack result, List<ItemStack[]> ingredients, boolean[] exact) {
MinecraftKey key = new MinecraftKey("denizen", keyName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,15 @@ public void registerStonecuttingRecipe(String keyName, String group, ItemStack r
((CraftServer) Bukkit.getServer()).getServer().getRecipeManager().addRecipe(recipe);
}

@Override
public void registerSmithingRecipe(String keyName, ItemStack result, ItemStack[] baseItem, boolean baseExact, ItemStack[] upgradeItem, boolean upgradeExact) {
ResourceLocation key = new ResourceLocation("denizen", keyName);
Ingredient baseItemRecipe = itemArrayToRecipe(baseItem, baseExact);
Ingredient upgradeItemRecipe = itemArrayToRecipe(upgradeItem, upgradeExact);
UpgradeRecipe recipe = new UpgradeRecipe(key, baseItemRecipe, upgradeItemRecipe, CraftItemStack.asNMSCopy(result));
((CraftServer) Bukkit.getServer()).getServer().getRecipeManager().addRecipe(recipe);
}

@Override
public void registerShapelessRecipe(String keyName, String group, ItemStack result, List<ItemStack[]> ingredients, boolean[] exact) {
ResourceLocation key = new ResourceLocation("denizen", keyName);
Expand Down

0 comments on commit 63aa0e0

Please sign in to comment.