diff --git a/src/main/java/net/Indyuce/mmoitems/api/crafting/trigger/MMOItemTrigger.java b/src/main/java/net/Indyuce/mmoitems/api/crafting/trigger/MMOItemTrigger.java new file mode 100644 index 00000000..2a917205 --- /dev/null +++ b/src/main/java/net/Indyuce/mmoitems/api/crafting/trigger/MMOItemTrigger.java @@ -0,0 +1,41 @@ +package net.Indyuce.mmoitems.api.crafting.trigger; + +import net.Indyuce.mmoitems.MMOItems; +import net.Indyuce.mmoitems.api.Type; +import net.Indyuce.mmoitems.api.player.PlayerData; +import net.mmogroup.mmolib.api.MMOLineConfig; +import net.mmogroup.mmolib.api.util.SmartGive; +import org.apache.commons.lang.Validate; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public class MMOItemTrigger extends Trigger { + private final Type type; + private final String id; + private final int amount; + + public MMOItemTrigger(MMOLineConfig config) { + super("mmoitem"); + + config.validate("type", "id"); + + String format = config.getString("type").toUpperCase().replace("-", "_").replace(" ", "_"); + Validate.isTrue(MMOItems.plugin.getTypes().has(format), "Could not find item type " + format); + type = MMOItems.plugin.getTypes().get(format); + + id = config.getString("id").replace("-", "_").toUpperCase(); + amount = config.args().length > 0 ? Math.max(1, Integer.parseInt(config.args()[0])) : 1; + Validate.isTrue(type.getConfigFile().getConfig().contains(id), "Could not find item id " + id); + } + + @Override + public void whenCrafting(PlayerData data) { + ItemStack item = MMOItems.plugin.getItems().getItem(type, id); + if (item == null || item.getType() == Material.AIR) + return; + + item.setAmount(amount); + if (item != null && item.getType() != Material.AIR) + new SmartGive(data.getPlayer()).give(item); + } +} diff --git a/src/main/java/net/Indyuce/mmoitems/api/crafting/trigger/SoundTrigger.java b/src/main/java/net/Indyuce/mmoitems/api/crafting/trigger/SoundTrigger.java index cd1f91d1..5701d083 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/crafting/trigger/SoundTrigger.java +++ b/src/main/java/net/Indyuce/mmoitems/api/crafting/trigger/SoundTrigger.java @@ -19,7 +19,7 @@ public class SoundTrigger extends Trigger { } @Override - public void whenCrafting(PlayerData player) { - player.getPlayer().playSound(player.getPlayer().getLocation(), sound, vol, pitch); + public void whenCrafting(PlayerData data) { + data.getPlayer().playSound(data.getPlayer().getLocation(), sound, vol, pitch); } } diff --git a/src/main/java/net/Indyuce/mmoitems/api/crafting/trigger/VanillaTrigger.java b/src/main/java/net/Indyuce/mmoitems/api/crafting/trigger/VanillaTrigger.java new file mode 100644 index 00000000..90724aa7 --- /dev/null +++ b/src/main/java/net/Indyuce/mmoitems/api/crafting/trigger/VanillaTrigger.java @@ -0,0 +1,26 @@ +package net.Indyuce.mmoitems.api.crafting.trigger; + +import net.Indyuce.mmoitems.api.player.PlayerData; +import net.mmogroup.mmolib.api.MMOLineConfig; +import net.mmogroup.mmolib.api.util.SmartGive; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public class VanillaTrigger extends Trigger { + private final Material material; + private final int amount; + + public VanillaTrigger(MMOLineConfig config) { + super("vanilla"); + + config.validate("type"); + + material = Material.valueOf(config.getString("type").toUpperCase().replace("-", "_")); + amount = config.contains("amount") ? Math.max(1, config.getInt("amount")) : 1; + } + + @Override + public void whenCrafting(PlayerData data) { + new SmartGive(data.getPlayer()).give(new ItemStack(material, amount)); + } +} diff --git a/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsHook.java b/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsHook.java index a7056f2c..841cbf0c 100644 --- a/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsHook.java +++ b/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsHook.java @@ -2,6 +2,7 @@ package net.Indyuce.mmoitems.comp.mythicmobs; import java.util.logging.Level; +import net.Indyuce.mmoitems.api.crafting.trigger.MMOItemTrigger; import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; @@ -39,6 +40,7 @@ public class MythicMobsHook implements Listener { MMOItems.plugin.getCrafting().registerIngredient("mythicitem", config -> new MythicItemIngredient(config), new ConditionalDisplay("&8" + AltChar.check + " &7#amount# #item#", "&c" + AltChar.cross + " &7#amount# #item#"), nbt -> nbt.hasTag("MYTHIC_TYPE"), nbt -> nbt.getString("MYTHIC_TYPE").toLowerCase()); + //MMOItems.plugin.getCrafting().registerTrigger("mmskill", config -> new MythicMobsSkillTrigger(config)); } /* diff --git a/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsSkillTrigger.java b/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsSkillTrigger.java new file mode 100644 index 00000000..9d833e5d --- /dev/null +++ b/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsSkillTrigger.java @@ -0,0 +1,35 @@ +package net.Indyuce.mmoitems.comp.mythicmobs; + +import io.lumine.xikage.mythicmobs.MythicMobs; +import io.lumine.xikage.mythicmobs.skills.Skill; +import net.Indyuce.mmoitems.api.crafting.trigger.Trigger; +import net.Indyuce.mmoitems.api.player.PlayerData; +import net.mmogroup.mmolib.api.MMOLineConfig; +import org.apache.commons.lang.Validate; +import org.bukkit.entity.Entity; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class MythicMobsSkillTrigger extends Trigger { + + private final Skill skill; + + public MythicMobsSkillTrigger(MMOLineConfig config) { + super("mmskill"); + + config.validate("id"); + String id = config.getString("id"); + Optional opt = MythicMobs.inst().getSkillManager().getSkill(id); + Validate.isTrue(opt.isPresent(), "Could not find MM skill " + id); + skill = opt.get(); + } + + @Override + public void whenCrafting(PlayerData data) { + List targets = new ArrayList<>(); + targets.add(data.getPlayer()); + MythicMobs.inst().getAPIHelper().castSkill(data.getPlayer(), this.skill.getInternalName(), data.getPlayer(), data.getPlayer().getEyeLocation(), targets, null, 1); + } +} diff --git a/src/main/java/net/Indyuce/mmoitems/manager/CraftingManager.java b/src/main/java/net/Indyuce/mmoitems/manager/CraftingManager.java index a2ed25bf..96b7b030 100644 --- a/src/main/java/net/Indyuce/mmoitems/manager/CraftingManager.java +++ b/src/main/java/net/Indyuce/mmoitems/manager/CraftingManager.java @@ -12,9 +12,7 @@ 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 net.Indyuce.mmoitems.api.crafting.trigger.*; import org.bukkit.configuration.file.YamlConfiguration; import com.google.gson.JsonParser; @@ -34,7 +32,6 @@ import net.Indyuce.mmoitems.api.crafting.condition.StaminaCondition; import net.Indyuce.mmoitems.api.crafting.ingredient.Ingredient; import net.Indyuce.mmoitems.api.crafting.ingredient.MMOItemIngredient; import net.Indyuce.mmoitems.api.crafting.ingredient.VanillaIngredient; -import net.Indyuce.mmoitems.api.crafting.trigger.Trigger; import net.mmogroup.mmolib.api.util.AltChar; import net.mmogroup.mmolib.api.MMOLineConfig; import net.mmogroup.mmolib.api.item.NBTItem; @@ -65,6 +62,8 @@ public class CraftingManager { registerTrigger("command", config -> new CommandTrigger(config)); registerTrigger("message", config -> new MessageTrigger(config)); registerTrigger("sound", config -> new SoundTrigger(config)); + registerTrigger("vanilla", config -> new VanillaTrigger(config)); + registerTrigger("mmoitem", config -> new MMOItemTrigger(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));