/** * Returns a String representation of a MerchantRecipe. Spaces are used as * delimeters between attributes. Utilizes * {@link ItemStackConverter ItemStackConverter} for the ItemStacks. * </b> * @param merchantRecipe - The MerchantRecipe to stringify. * @return A String that can be stored and passed in to * {@link #fromString(String) fromString(String)} later. * @throws IllegalArgumentException If MerchantRecipe is null. */ public static String toString(MerchantRecipe merchantRecipe) throws IllegalArgumentException { if (merchantRecipe == null) { throw new IllegalArgumentException("Cannot stringify a null MerchantRecipe!"); } String ret = new String(); ret += ItemStackConverter.toString(merchantRecipe.getResult()) + " "; for (ItemStack itemStack : merchantRecipe.getIngredients()) { ret += ItemStackConverter.toString(itemStack) + ","; } ret += " " + merchantRecipe.getUses(); ret += " " + merchantRecipe.getMaxUses(); ret += " " + merchantRecipe.hasExperienceReward(); return ret; }
/** * Takes in a String produced by * {@link #toString(MerchantRecipe) toString(MerchantRecipe)} and converts * it to a MerchantRecipe. * @param string - The String to convert. * @return A MerchantRecipe with the attributes specified in the String. * @throws IllegalArgumentException If the String has an unexpected number * of attributes. */ public static MerchantRecipe fromString(String string) throws IllegalArgumentException { String[] attributes = string.split(" "); if (attributes.length != 5) { throw new IllegalArgumentException("Input string has an unexpected number of attributes!"); } String resultString = attributes[0], ingredientString = attributes[1], usesString = attributes[2], maxUsesString = attributes[3], experienceString = attributes[4]; ItemStack result = itemStackListFromString(resultString).get(0); ArrayList<ItemStack> ingredients = itemStackListFromString(ingredientString); int uses = Integer.parseInt(usesString); int maxUses = Integer.parseInt(maxUsesString); boolean experience = Boolean.parseBoolean(experienceString); MerchantRecipe ret = new MerchantRecipe(result, uses, maxUses, experience); ret.setIngredients(ingredients); return ret; }
@Override public boolean openTradeWindow(String title, List<ItemStack[]> recipes, Player player) { // create empty merchant: Merchant merchant = Bukkit.createMerchant(title); // create list of merchant recipes: List<MerchantRecipe> merchantRecipes = new ArrayList<MerchantRecipe>(); for (ItemStack[] recipe : recipes) { // skip invalid recipes: if (recipe == null || recipe.length != 3 || Utils.isEmpty(recipe[0]) || Utils.isEmpty(recipe[2])) { continue; } // create and add merchant recipe: merchantRecipes.add(this.createMerchantRecipe(recipe[0], recipe[1], recipe[2])); } // set merchant's recipes: merchant.setRecipes(merchantRecipes); // increase 'talked-to-villager' statistic: player.incrementStatistic(Statistic.TALKED_TO_VILLAGER); // open merchant: return player.openMerchant(merchant, true) != null; }
@Override public ItemStack[] getUsedTradingRecipe(MerchantInventory merchantInventory) { MerchantRecipe merchantRecipe = merchantInventory.getSelectedRecipe(); List<ItemStack> ingredients = merchantRecipe.getIngredients(); ItemStack[] recipe = new ItemStack[3]; recipe[0] = ingredients.get(0); recipe[1] = null; if (ingredients.size() > 1) { ItemStack buyItem2 = ingredients.get(1); if (!Utils.isEmpty(buyItem2)) { recipe[1] = buyItem2; } } recipe[2] = merchantRecipe.getResult(); return recipe; }
@Override public List<MerchantRecipe> getRecipes() { return Collections.unmodifiableList(Lists.transform(getHandle().getOffers(null), new Function<net.minecraft.server.MerchantRecipe, MerchantRecipe>() { @Override public MerchantRecipe apply(net.minecraft.server.MerchantRecipe recipe) { return recipe.asBukkit(); } })); }
@Override public void setRecipes(List<MerchantRecipe> list) { MerchantRecipeList recipes = getHandle().getOffers(null); recipes.clear(); for (MerchantRecipe m : list) { recipes.add(CraftMerchantRecipe.fromBukkit(m).toMinecraft()); } }
public CraftMerchantRecipe(ItemStack result, int uses, int maxUses, boolean experienceReward) { super(result, uses, maxUses, experienceReward); this.handle = new net.minecraft.server.MerchantRecipe( null, null, CraftItemStack.asNMSCopy(result), uses, maxUses, this ); }
public net.minecraft.server.MerchantRecipe toMinecraft() { List<ItemStack> ingredients = getIngredients(); Preconditions.checkState(!ingredients.isEmpty(), "No offered ingredients"); handle.buyingItem1 = CraftItemStack.asNMSCopy(ingredients.get(0)); if (ingredients.size() > 1) { handle.buyingItem2 = CraftItemStack.asNMSCopy(ingredients.get(1)); } return handle; }
public static CraftMerchantRecipe fromBukkit(MerchantRecipe recipe) { if (recipe instanceof CraftMerchantRecipe) { return (CraftMerchantRecipe) recipe; } else { CraftMerchantRecipe craft = new CraftMerchantRecipe(recipe.getResult(), recipe.getUses(), recipe.getMaxUses(), recipe.hasExperienceReward()); craft.setIngredients(recipe.getIngredients()); return craft; } }
private MerchantRecipe createMerchantRecipe(ItemStack buyItem1, ItemStack buyItem2, ItemStack sellingItem) { assert !Utils.isEmpty(sellingItem) && !Utils.isEmpty(buyItem1); MerchantRecipe recipe = new MerchantRecipe(sellingItem, 10000); // no max-uses limit recipe.setExperienceReward(false); // no experience rewards recipe.addIngredient(buyItem1); if (!Utils.isEmpty(buyItem2)) { recipe.addIngredient(buyItem2); } return recipe; }
public static List<MerchantRecipe> stringToRecipe(String s){ List<MerchantRecipe> recipes = new ArrayList<>(); List<String> recipe = Arrays.asList(s.replace("[", "").replace("]", "").split(",")); return recipes; }
public MerchantRecipe[] getRecipes(){ Villager v; if (!mu.isVillager(entity)) return null; v = (Villager)entity; return v.getRecipes().toArray(new MerchantRecipe[v.getRecipes().size()]); }
public List<MerchantRecipe> getRecipes() { if (entity instanceof Villager) { return ((Villager)entity).getRecipes(); } return new ArrayList<>(); }
public EEntity setRecipes(List<MerchantRecipe> recipes) { if (entity instanceof Villager) { ((Villager)entity).setRecipes(recipes); } return this; }
public MerchantRecipe getRecipe(int i) { if (entity instanceof Villager) { return ((Villager)entity).getRecipe(i); } return null; }
public EEntity setRecipe(int i, MerchantRecipe recipe) { if (entity instanceof Villager) { ((Villager)entity).setRecipe(i, recipe); } return this; }
public void openTrading() { // As task because of inventory issues new BukkitRunnable() { @SuppressWarnings("deprecation") @Override public void run() { try { EntityVillager entityVillager = VillagerItemShop.this.createVillager(); CraftVillager craftVillager = (CraftVillager) entityVillager.getBukkitEntity(); EntityHuman entityHuman = VillagerItemShop.this.getEntityHuman(); // set location List<MerchantRecipe> recipeList = new ArrayList<MerchantRecipe>(); for (VillagerTrade trade : VillagerItemShop.this.category .getFilteredOffers()) { ItemStack reward = trade.getRewardItem(); Method colorable = Utils.getColorableMethod(reward.getType()); if (Utils.isColorable(reward)) { reward .setDurability(game.getPlayerTeam(player).getColor().getDyeColor().getWoolData()); } else if (colorable != null) { ItemMeta meta = reward.getItemMeta(); colorable.setAccessible(true); colorable.invoke(meta, new Object[]{VillagerItemShop.this.game .getPlayerTeam(VillagerItemShop.this.player).getColor().getColor()}); reward.setItemMeta(meta); } if (!(trade.getHandle() .getInstance() instanceof net.minecraft.server.v1_9_R2.MerchantRecipe)) { continue; } MerchantRecipe recipe = new MerchantRecipe(trade.getRewardItem(), 1024); recipe.addIngredient(trade.getItem1()); if (trade.getItem2() != null) { recipe.addIngredient(trade.getItem2()); } recipeList.add(recipe); } craftVillager.setRecipes(recipeList); craftVillager.setRiches(0); entityVillager.setTradingPlayer(entityHuman); ((CraftPlayer) player).getHandle().openTrade(entityVillager); ((CraftPlayer) player).getHandle().b(StatisticList.F); } catch (Exception ex) { BedwarsRel.getInstance().getBugsnag().notify(ex); ex.printStackTrace(); } } }.runTask(BedwarsRel.getInstance()); }
public void openTrading() { // As task because of inventory issues new BukkitRunnable() { @SuppressWarnings("deprecation") @Override public void run() { try { EntityVillager entityVillager = VillagerItemShop.this.createVillager(); CraftVillager craftVillager = (CraftVillager) entityVillager.getBukkitEntity(); EntityHuman entityHuman = VillagerItemShop.this.getEntityHuman(); // set location List<MerchantRecipe> recipeList = new ArrayList<MerchantRecipe>(); for (VillagerTrade trade : VillagerItemShop.this.category .getFilteredOffers()) { ItemStack reward = trade.getRewardItem(); Method colorable = Utils.getColorableMethod(reward.getType()); if (Utils.isColorable(reward)) { reward .setDurability(game.getPlayerTeam(player).getColor().getDyeColor().getWoolData()); } else if (colorable != null) { ItemMeta meta = reward.getItemMeta(); colorable.setAccessible(true); colorable.invoke(meta, new Object[]{VillagerItemShop.this.game .getPlayerTeam(VillagerItemShop.this.player).getColor().getColor()}); reward.setItemMeta(meta); } if (!(trade.getHandle() .getInstance() instanceof net.minecraft.server.v1_9_R1.MerchantRecipe)) { continue; } MerchantRecipe recipe = new MerchantRecipe(trade.getRewardItem(), 1024); recipe.addIngredient(trade.getItem1()); if (trade.getItem2() != null) { recipe.addIngredient(trade.getItem2()); } recipeList.add(recipe); } craftVillager.setRecipes(recipeList); craftVillager.setRiches(0); entityVillager.setTradingPlayer(entityHuman); ((CraftPlayer) player).getHandle().openTrade(entityVillager); ((CraftPlayer) player).getHandle().b(StatisticList.F); } catch (Exception ex) { BedwarsRel.getInstance().getBugsnag().notify(ex); ex.printStackTrace(); } } }.runTask(BedwarsRel.getInstance()); }
public void openTrading() { // As task because of inventory issues new BukkitRunnable() { @SuppressWarnings("deprecation") @Override public void run() { try { EntityVillager entityVillager = VillagerItemShop.this.createVillager(); CraftVillager craftVillager = (CraftVillager) entityVillager.getBukkitEntity(); EntityHuman entityHuman = VillagerItemShop.this.getEntityHuman(); // set location List<MerchantRecipe> recipeList = new ArrayList<MerchantRecipe>(); for (VillagerTrade trade : VillagerItemShop.this.category .getFilteredOffers()) { ItemStack reward = trade.getRewardItem(); Method colorable = Utils.getColorableMethod(reward.getType()); if (Utils.isColorable(reward)) { reward .setDurability(game.getPlayerTeam(player).getColor().getDyeColor().getWoolData()); } else if (colorable != null) { ItemMeta meta = reward.getItemMeta(); colorable.setAccessible(true); colorable.invoke(meta, new Object[]{VillagerItemShop.this.game .getPlayerTeam(VillagerItemShop.this.player).getColor().getColor()}); reward.setItemMeta(meta); } if (!(trade.getHandle() .getInstance() instanceof net.minecraft.server.v1_11_R1.MerchantRecipe)) { continue; } MerchantRecipe recipe = new MerchantRecipe(trade.getRewardItem(), 1024); recipe.addIngredient(trade.getItem1()); if (trade.getItem2() != null) { recipe.addIngredient(trade.getItem2()); } else { recipe.addIngredient(new ItemStack(Material.AIR)); } recipe.setUses(0); recipe.setExperienceReward(false); recipeList.add(recipe); } craftVillager.setRecipes(recipeList); craftVillager.setRiches(0); entityVillager.setTradingPlayer(entityHuman); ((CraftPlayer) player).getHandle().openTrade(entityVillager); } catch (Exception ex) { BedwarsRel.getInstance().getBugsnag().notify(ex); ex.printStackTrace(); } } }.runTask(BedwarsRel.getInstance()); }
public void openTrading() { // As task because of inventory issues new BukkitRunnable() { @SuppressWarnings("deprecation") @Override public void run() { try { EntityVillager entityVillager = VillagerItemShop.this.createVillager(); CraftVillager craftVillager = (CraftVillager) entityVillager.getBukkitEntity(); EntityHuman entityHuman = VillagerItemShop.this.getEntityHuman(); // set location List<MerchantRecipe> recipeList = new ArrayList<MerchantRecipe>(); for (VillagerTrade trade : VillagerItemShop.this.category .getFilteredOffers()) { ItemStack reward = trade.getRewardItem(); Method colorable = Utils.getColorableMethod(reward.getType()); if (Utils.isColorable(reward)) { reward .setDurability(game.getPlayerTeam(player).getColor().getDyeColor().getWoolData()); } else if (colorable != null) { ItemMeta meta = reward.getItemMeta(); colorable.setAccessible(true); colorable.invoke(meta, new Object[]{VillagerItemShop.this.game .getPlayerTeam(VillagerItemShop.this.player).getColor().getColor()}); reward.setItemMeta(meta); } if (!(trade.getHandle() .getInstance() instanceof net.minecraft.server.v1_12_R1.MerchantRecipe)) { continue; } MerchantRecipe recipe = new MerchantRecipe(trade.getRewardItem(), 1024); recipe.addIngredient(trade.getItem1()); if (trade.getItem2() != null) { recipe.addIngredient(trade.getItem2()); } else { recipe.addIngredient(new ItemStack(Material.AIR)); } recipe.setUses(0); recipe.setExperienceReward(false); recipeList.add(recipe); } craftVillager.setRecipes(recipeList); craftVillager.setRiches(0); entityVillager.setTradingPlayer(entityHuman); ((CraftPlayer) player).getHandle().openTrade(entityVillager); } catch (Exception ex) { BedwarsRel.getInstance().getBugsnag().notify(ex); ex.printStackTrace(); } } }.runTask(BedwarsRel.getInstance()); }
public void openTrading() { // As task because of inventory issues new BukkitRunnable() { @SuppressWarnings("deprecation") @Override public void run() { try { EntityVillager entityVillager = VillagerItemShop.this.createVillager(); CraftVillager craftVillager = (CraftVillager) entityVillager.getBukkitEntity(); EntityHuman entityHuman = VillagerItemShop.this.getEntityHuman(); // set location List<MerchantRecipe> recipeList = new ArrayList<MerchantRecipe>(); for (VillagerTrade trade : VillagerItemShop.this.category .getFilteredOffers()) { ItemStack reward = trade.getRewardItem(); Method colorable = Utils.getColorableMethod(reward.getType()); if (Utils.isColorable(reward)) { reward .setDurability(game.getPlayerTeam(player).getColor().getDyeColor().getWoolData()); } else if (colorable != null) { ItemMeta meta = reward.getItemMeta(); colorable.setAccessible(true); colorable.invoke(meta, new Object[]{VillagerItemShop.this.game .getPlayerTeam(VillagerItemShop.this.player).getColor().getColor()}); reward.setItemMeta(meta); } if (!(trade.getHandle() .getInstance() instanceof net.minecraft.server.v1_10_R1.MerchantRecipe)) { continue; } MerchantRecipe recipe = new MerchantRecipe(trade.getRewardItem(), 1024); recipe.addIngredient(trade.getItem1()); if (trade.getItem2() != null) { recipe.addIngredient(trade.getItem2()); } recipeList.add(recipe); } craftVillager.setRecipes(recipeList); craftVillager.setRiches(0); entityVillager.setTradingPlayer(entityHuman); ((CraftPlayer) player).getHandle().openTrade(entityVillager); ((CraftPlayer) player).getHandle().b(StatisticList.F); } catch (Exception ex) { BedwarsRel.getInstance().getBugsnag().notify(ex); ex.printStackTrace(); } } }.runTask(BedwarsRel.getInstance()); }
@Override public MerchantRecipe getRecipe(int i) { return getHandle().getOffers(null).get(i).asBukkit(); }
@Override public void setRecipe(int i, MerchantRecipe merchantRecipe) { getHandle().getOffers(null).set(i, CraftMerchantRecipe.fromBukkit(merchantRecipe).toMinecraft()); }
@Override public MerchantRecipe getSelectedRecipe() { return getInventory().getRecipe().asBukkit(); }
public CraftMerchantRecipe(net.minecraft.server.MerchantRecipe merchantRecipe) { super(CraftItemStack.asBukkitCopy(merchantRecipe.sellingItem), 0); this.handle = merchantRecipe; addIngredient(CraftItemStack.asBukkitCopy(merchantRecipe.buyingItem1)); addIngredient(CraftItemStack.asBukkitCopy(merchantRecipe.buyingItem2)); }