This commit is contained in:
Jules 2020-07-29 10:57:40 +02:00
commit 2e99b03387
6 changed files with 97 additions and 12 deletions

View File

@ -0,0 +1,21 @@
package net.Indyuce.mmoitems.api.crafting.trigger;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.mmogroup.mmolib.api.MMOLineConfig;
import org.bukkit.Bukkit;
public class CommandTrigger extends Trigger {
private final String command;
public CommandTrigger(MMOLineConfig config) {
super("command");
config.validate("format");
command = config.getString("format");
}
@Override
public void whenCrafting(PlayerData data) {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("%player%", data.getPlayer().getName()));
}
}

View File

@ -0,0 +1,23 @@
package net.Indyuce.mmoitems.api.crafting.trigger;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.mmogroup.mmolib.api.MMOLineConfig;
import org.bukkit.Bukkit;
public class MessageTrigger extends Trigger {
private final String message;
public MessageTrigger(MMOLineConfig config) {
super("message");
config.validate("format");
message = config.getString("format");
}
@Override
public void whenCrafting(PlayerData data) {
data.getPlayer().sendMessage(MMOItems.plugin.getPlaceholderParser().parse(data.getPlayer(),
message.replace("%player%", data.getPlayer().getName())));
}
}

View File

@ -0,0 +1,25 @@
package net.Indyuce.mmoitems.api.crafting.trigger;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.mmogroup.mmolib.api.MMOLineConfig;
import org.bukkit.Sound;
public class SoundTrigger extends Trigger {
private final Sound sound;
private final float vol, pitch;
public SoundTrigger(MMOLineConfig config) {
super("sound");
config.validate("sound");
sound = Sound.valueOf(config.getString("sound").toUpperCase().replace("-", "_"));
vol = config.contains("volume") ? (float) config.getDouble("volume") : 1f;
pitch = config.contains("pitch") ? (float) config.getDouble("pitch") : 1f;
}
@Override
public void whenCrafting(PlayerData player) {
player.getPlayer().playSound(player.getPlayer().getLocation(), sound, vol, pitch);
}
}

View File

@ -1,5 +1,6 @@
package net.Indyuce.mmoitems.comp.parse.placeholders;
import net.asangarin.hexcolors.ColorParse;
import org.bukkit.OfflinePlayer;
import me.clip.placeholderapi.PlaceholderAPI;
@ -11,6 +12,6 @@ public class PlaceholderAPIParser implements PlaceholderParser {
@Override
public String parse(OfflinePlayer player, String string) {
return PlaceholderAPI.setPlaceholders(player, string.replace("%player%", player.getName()));
return new ColorParse('&', PlaceholderAPI.setPlaceholders(player, string.replace("%player%", player.getName()))).toChatColor();
}
}

View File

@ -1,13 +1,11 @@
package net.Indyuce.mmoitems.listener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.recipe.workbench.CachedRecipe;
import net.Indyuce.mmoitems.api.recipe.workbench.CustomRecipe;
import net.Indyuce.mmoitems.api.recipe.workbench.ingredients.WorkbenchIngredient;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@ -19,10 +17,8 @@ import org.bukkit.event.inventory.PrepareItemCraftEvent;
import org.bukkit.inventory.CraftingInventory;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.recipe.workbench.CachedRecipe;
import net.Indyuce.mmoitems.api.recipe.workbench.CustomRecipe;
import net.Indyuce.mmoitems.api.recipe.workbench.ingredients.WorkbenchIngredient;
import java.util.*;
import java.util.Map.Entry;
public class CraftingListener implements Listener {
Map<UUID, CachedRecipe> cachedRecipe = new HashMap<>();
@ -86,7 +82,16 @@ public class CraftingListener implements Listener {
for (CustomRecipe recipe : MMOItems.plugin.getRecipes().getCustomRecipes()) {
if (!recipe.fitsPlayerCrafting() && inv.getMatrix().length == 4)
continue;
int airCount = 0;
for(Entry<Integer, WorkbenchIngredient> ingredient : recipe.getIngredients()){
if(ingredient.getValue().matches(new ItemStack(Material.AIR))){
airCount++;
}
}
if(recipe.isEmpty() || airCount > 8){
continue;
}
CachedRecipe cached = new CachedRecipe();
boolean matches = true;
List<Integer> slotsChecked = new ArrayList<>();

View File

@ -12,6 +12,9 @@ import java.util.function.Function;
import java.util.function.Predicate;
import java.util.logging.Level;
import net.Indyuce.mmoitems.api.crafting.trigger.CommandTrigger;
import net.Indyuce.mmoitems.api.crafting.trigger.MessageTrigger;
import net.Indyuce.mmoitems.api.crafting.trigger.SoundTrigger;
import org.bukkit.configuration.file.YamlConfiguration;
import com.google.gson.JsonParser;
@ -49,6 +52,7 @@ public class CraftingManager {
private final Map<String, CraftingStation> stations = new HashMap<>();
public CraftingManager() {
// conditions
registerCondition("level", config -> new LevelCondition(config), new ConditionalDisplay("&a" + AltChar.check + " Requires Level #level#", "&c" + AltChar.cross + " Requires Level #level#"));
registerCondition("permission", config -> new PermissionCondition(config), null);
registerCondition("mana", config -> new ManaCondition(config), new ConditionalDisplay("&a" + AltChar.check + " Requires #mana# Mana", "&c" + AltChar.cross + " Requires #mana# Mana"));
@ -57,6 +61,12 @@ public class CraftingManager {
registerCondition("class", config -> new ClassCondition(config), new ConditionalDisplay("&a" + AltChar.check + " Required Class: #class#", "&c" + AltChar.cross + " Required Class: #class#"));
registerCondition("ingredient", config -> new IngredientCondition(), null);
// triggers
registerTrigger("command", config -> new CommandTrigger(config));
registerTrigger("message", config -> new MessageTrigger(config));
registerTrigger("sound", config -> new SoundTrigger(config));
// ingredients
registerIngredient("vanilla", config -> new VanillaIngredient(config), new ConditionalDisplay("&8" + AltChar.check + " &7#amount# #item#", "&c" + AltChar.cross + " &7#amount# #item#"), nbt -> true, item -> item.getItem().getType().name().toLowerCase() + "_" + (item.getItem().hasItemMeta() ? item.getItem().getItemMeta().getDisplayName() : null));
registerIngredient("mmoitem", config -> new MMOItemIngredient(config), new ConditionalDisplay("&8" + AltChar.check + " &7#amount# #level##item#", "&c" + AltChar.cross + " &7#amount# #level##item#"), nbt -> nbt.hasType(), item -> {
String upgradeString = item.getString("MMOITEMS_UPGRADE");