mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2025-02-22 14:41:48 +01:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
90dc0bfa9c
9
pom.xml
9
pom.xml
@ -132,7 +132,7 @@
|
||||
<dependency>
|
||||
<groupId>net.Indyuce</groupId>
|
||||
<artifactId>MMOCore</artifactId>
|
||||
<version>1.8.0</version>
|
||||
<version>1.8.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
@ -227,13 +227,6 @@
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.Zrips.CMI</groupId>
|
||||
<artifactId>CMI</artifactId>
|
||||
<version>8.6.5.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.herocraftonline</groupId>
|
||||
<artifactId>heroes</artifactId>
|
||||
|
@ -18,14 +18,23 @@ import net.Indyuce.mmoitems.api.util.MMOItemReforger;
|
||||
import net.Indyuce.mmoitems.api.util.NumericStatFormula;
|
||||
import net.Indyuce.mmoitems.api.util.message.FFPMMOItems;
|
||||
import net.Indyuce.mmoitems.command.MMOItemsCommandTreeRoot;
|
||||
import net.Indyuce.mmoitems.comp.*;
|
||||
import net.Indyuce.mmoitems.comp.MMOItemsMetrics;
|
||||
import net.Indyuce.mmoitems.comp.MMOItemsRewardTypes;
|
||||
import net.Indyuce.mmoitems.comp.McMMONonRPGHook;
|
||||
import net.Indyuce.mmoitems.comp.PhatLootsHook;
|
||||
import net.Indyuce.mmoitems.comp.RealDualWieldHook;
|
||||
import net.Indyuce.mmoitems.comp.WorldEditSupport;
|
||||
import net.Indyuce.mmoitems.comp.denizen.DenizenHook;
|
||||
import net.Indyuce.mmoitems.comp.eco.VaultSupport;
|
||||
import net.Indyuce.mmoitems.comp.enchants.CrazyEnchantsStat;
|
||||
import net.Indyuce.mmoitems.comp.enchants.EnchantPlugin;
|
||||
import net.Indyuce.mmoitems.comp.enchants.MythicEnchantsSupport;
|
||||
import net.Indyuce.mmoitems.comp.enchants.advanced_enchants.AdvancedEnchantmentsHook;
|
||||
import net.Indyuce.mmoitems.comp.inventory.*;
|
||||
import net.Indyuce.mmoitems.comp.inventory.DefaultPlayerInventory;
|
||||
import net.Indyuce.mmoitems.comp.inventory.OrnamentPlayerInventory;
|
||||
import net.Indyuce.mmoitems.comp.inventory.PlayerInventory;
|
||||
import net.Indyuce.mmoitems.comp.inventory.PlayerInventoryHandler;
|
||||
import net.Indyuce.mmoitems.comp.inventory.RPGInventoryHook;
|
||||
import net.Indyuce.mmoitems.comp.itemglow.ItemGlowListener;
|
||||
import net.Indyuce.mmoitems.comp.itemglow.NoGlowListener;
|
||||
import net.Indyuce.mmoitems.comp.mmocore.MMOCoreMMOLoader;
|
||||
@ -42,12 +51,39 @@ import net.Indyuce.mmoitems.comp.rpg.RPGHandler;
|
||||
import net.Indyuce.mmoitems.gui.PluginInventory;
|
||||
import net.Indyuce.mmoitems.gui.edition.recipe.RecipeBrowserGUI;
|
||||
import net.Indyuce.mmoitems.gui.listener.GuiListener;
|
||||
import net.Indyuce.mmoitems.listener.*;
|
||||
import net.Indyuce.mmoitems.manager.*;
|
||||
import net.Indyuce.mmoitems.listener.CraftingListener;
|
||||
import net.Indyuce.mmoitems.listener.CustomBlockListener;
|
||||
import net.Indyuce.mmoitems.listener.CustomSoundListener;
|
||||
import net.Indyuce.mmoitems.listener.DisableInteractions;
|
||||
import net.Indyuce.mmoitems.listener.DurabilityListener;
|
||||
import net.Indyuce.mmoitems.listener.ElementListener;
|
||||
import net.Indyuce.mmoitems.listener.EquipListener;
|
||||
import net.Indyuce.mmoitems.listener.ItemListener;
|
||||
import net.Indyuce.mmoitems.listener.ItemUse;
|
||||
import net.Indyuce.mmoitems.listener.PlayerListener;
|
||||
import net.Indyuce.mmoitems.manager.AbilityManager;
|
||||
import net.Indyuce.mmoitems.manager.BlockManager;
|
||||
import net.Indyuce.mmoitems.manager.ConfigManager;
|
||||
import net.Indyuce.mmoitems.manager.CraftingManager;
|
||||
import net.Indyuce.mmoitems.manager.DropTableManager;
|
||||
import net.Indyuce.mmoitems.manager.EntityManager;
|
||||
import net.Indyuce.mmoitems.manager.ItemManager;
|
||||
import net.Indyuce.mmoitems.manager.LayoutManager;
|
||||
import net.Indyuce.mmoitems.manager.LoreFormatManager;
|
||||
import net.Indyuce.mmoitems.manager.PluginUpdateManager;
|
||||
import net.Indyuce.mmoitems.manager.RecipeManager;
|
||||
import net.Indyuce.mmoitems.manager.SetManager;
|
||||
import net.Indyuce.mmoitems.manager.StatManager;
|
||||
import net.Indyuce.mmoitems.manager.TemplateManager;
|
||||
import net.Indyuce.mmoitems.manager.TierManager;
|
||||
import net.Indyuce.mmoitems.manager.TypeManager;
|
||||
import net.Indyuce.mmoitems.manager.UpgradeManager;
|
||||
import net.Indyuce.mmoitems.manager.WorldGenManager;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
@ -79,7 +115,7 @@ public class MMOItems extends LuminePlugin {
|
||||
private final ItemManager itemManager = new ItemManager();
|
||||
private final PlayerInventoryHandler inventory = new PlayerInventoryHandler();
|
||||
private final List<StringInputParser> stringInputParsers = new ArrayList<>();
|
||||
private final List<EnchantPlugin> enchantPlugins = new ArrayList<>();
|
||||
private final List<EnchantPlugin<? extends Enchantment>> enchantPlugins = new ArrayList<>();
|
||||
|
||||
private DropTableManager dropTableManager;
|
||||
private WorldGenManager worldGenManager;
|
||||
@ -99,8 +135,7 @@ public class MMOItems extends LuminePlugin {
|
||||
public void load() {
|
||||
plugin = this;
|
||||
|
||||
if (getServer().getPluginManager().getPlugin("WorldEdit") != null)
|
||||
try {
|
||||
if (getServer().getPluginManager().getPlugin("WorldEdit") != null) try {
|
||||
new WorldEditSupport();
|
||||
getLogger().log(Level.INFO, "Hooked onto WorldEdit");
|
||||
} catch (Exception exception) {
|
||||
@ -117,8 +152,7 @@ public class MMOItems extends LuminePlugin {
|
||||
typeManager.reload();
|
||||
templateManager.preloadTemplates();
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("MMOCore") != null)
|
||||
new MMOCoreMMOLoader();
|
||||
if (Bukkit.getPluginManager().getPlugin("MMOCore") != null) new MMOCoreMMOLoader();
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("mcMMO") != null)
|
||||
//statManager.register(McMMOHook.MCMMO_SUPER_TOOL);
|
||||
@ -129,18 +163,11 @@ public class MMOItems extends LuminePlugin {
|
||||
statManager.register(AdvancedEnchantmentsHook.DISABLE_ADVANCED_ENCHANTMENTS);
|
||||
}
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("MythicEnchants") != null)
|
||||
enchantPlugins.add(new MythicEnchantsSupport());
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("Depenizen") != null) {
|
||||
new DenizenHook();
|
||||
getLogger().log(Level.INFO, "Hooked onto Denizen");
|
||||
}
|
||||
if (Bukkit.getPluginManager().getPlugin("MythicEnchants") != null) enchantPlugins.add(new MythicEnchantsSupport());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enable() {
|
||||
|
||||
new SpigotPlugin(39267, this).checkForUpdate();
|
||||
new MMOItemsMetrics();
|
||||
|
||||
@ -158,8 +185,7 @@ public class MMOItems extends LuminePlugin {
|
||||
// registering here so the stats will load with the templates
|
||||
if (Bukkit.getPluginManager().getPlugin("MythicMobs") != null) {
|
||||
new MythicMobsLoader();
|
||||
if (getConfig().getBoolean("lootsplosion.enabled"))
|
||||
Bukkit.getPluginManager().registerEvents(new LootsplosionListener(), this);
|
||||
if (getConfig().getBoolean("lootsplosion.enabled")) Bukkit.getPluginManager().registerEvents(new LootsplosionListener(), this);
|
||||
getLogger().log(Level.INFO, "Hooked onto MythicMobs");
|
||||
}
|
||||
|
||||
@ -185,8 +211,7 @@ public class MMOItems extends LuminePlugin {
|
||||
blockManager = new BlockManager();
|
||||
equipListener = new EquipListener();
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("Vault") != null)
|
||||
vaultSupport = new VaultSupport();
|
||||
if (Bukkit.getPluginManager().getPlugin("Vault") != null) vaultSupport = new VaultSupport();
|
||||
|
||||
getLogger().log(Level.INFO, "Loading crafting stations, please wait..");
|
||||
layoutManager.reload();
|
||||
@ -225,8 +250,7 @@ public class MMOItems extends LuminePlugin {
|
||||
}, 100, getConfig().getInt("inventory-update-delay"));
|
||||
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("mcMMO") != null)
|
||||
Bukkit.getPluginManager().registerEvents(new McMMONonRPGHook(), this);
|
||||
if (Bukkit.getPluginManager().getPlugin("mcMMO") != null) Bukkit.getPluginManager().registerEvents(new McMMONonRPGHook(), this);
|
||||
|
||||
/*
|
||||
* Registers Player Inventories. Each of these add locations of items to search for
|
||||
@ -237,8 +261,7 @@ public class MMOItems extends LuminePlugin {
|
||||
getInventory().register(new RPGInventoryHook());
|
||||
getLogger().log(Level.INFO, "Hooked onto RPGInventory");
|
||||
}
|
||||
if (MMOItems.plugin.getConfig().getBoolean("iterate-whole-inventory"))
|
||||
getInventory().register(new OrnamentPlayerInventory());
|
||||
if (MMOItems.plugin.getConfig().getBoolean("iterate-whole-inventory")) getInventory().register(new OrnamentPlayerInventory());
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("CrazyEnchantments") != null) {
|
||||
getStats().register(new CrazyEnchantsStat());
|
||||
@ -259,8 +282,7 @@ public class MMOItems extends LuminePlugin {
|
||||
if (Bukkit.getPluginManager().getPlugin("GlowAPI") != null && Bukkit.getPluginManager().getPlugin("PacketListenerApi") != null) {
|
||||
Bukkit.getPluginManager().registerEvents(new ItemGlowListener(), this);
|
||||
getLogger().log(Level.INFO, "Hooked onto GlowAPI (Item Glow)");
|
||||
} else
|
||||
Bukkit.getPluginManager().registerEvents(new NoGlowListener(), this);
|
||||
} else Bukkit.getPluginManager().registerEvents(new NoGlowListener(), this);
|
||||
}
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("RealDualWield") != null) {
|
||||
@ -282,6 +304,11 @@ public class MMOItems extends LuminePlugin {
|
||||
}).runTaskLater(this, 1L);
|
||||
}
|
||||
|
||||
/*if (Bukkit.getPluginManager().getPlugin("Denizen") != null) {
|
||||
new DenizenHook();
|
||||
getLogger().log(Level.INFO, "Hooked onto Denizen");
|
||||
}*/
|
||||
|
||||
// compatibility with /reload
|
||||
Bukkit.getScheduler().runTask(this, () -> Bukkit.getOnlinePlayers().forEach(PlayerData::load));
|
||||
|
||||
@ -297,8 +324,7 @@ public class MMOItems extends LuminePlugin {
|
||||
}
|
||||
|
||||
recipeManager.load(book, amounts);
|
||||
if (amounts)
|
||||
Bukkit.getPluginManager().registerEvents(new CraftingListener(), this);
|
||||
if (amounts) Bukkit.getPluginManager().registerEvents(new CraftingListener(), this);
|
||||
|
||||
// amount and bukkit recipes
|
||||
getLogger().log(Level.INFO, "Loading recipes, please wait...");
|
||||
@ -369,12 +395,10 @@ public class MMOItems extends LuminePlugin {
|
||||
Validate.notNull(handler, "RPGHandler cannot be null");
|
||||
|
||||
// unregister events from current rpgPlugin instance
|
||||
if (rpgPlugin != null && rpgPlugin instanceof Listener && isEnabled())
|
||||
HandlerList.unregisterAll((Listener) rpgPlugin);
|
||||
if (rpgPlugin != null && rpgPlugin instanceof Listener && isEnabled()) HandlerList.unregisterAll((Listener) rpgPlugin);
|
||||
|
||||
rpgPlugin = handler;
|
||||
if (handler instanceof Listener && isEnabled())
|
||||
Bukkit.getPluginManager().registerEvents((Listener) handler, this);
|
||||
if (handler instanceof Listener && isEnabled()) Bukkit.getPluginManager().registerEvents((Listener) handler, this);
|
||||
}
|
||||
|
||||
public PluginUpdateManager getUpdates() {
|
||||
@ -509,7 +533,7 @@ public class MMOItems extends LuminePlugin {
|
||||
return vaultSupport != null && vaultSupport.getPermissions() != null;
|
||||
}
|
||||
|
||||
public List<EnchantPlugin> getEnchantPlugins() {
|
||||
public List<EnchantPlugin<? extends Enchantment>> getEnchantPlugins() {
|
||||
return enchantPlugins;
|
||||
}
|
||||
|
||||
@ -533,8 +557,7 @@ public class MMOItems extends LuminePlugin {
|
||||
* For example, required level, is that vanilla XP levels, MMOCore levels, McMMO Leves or what?
|
||||
*/
|
||||
public void findRpgPlugin() {
|
||||
if (rpgPlugin != null)
|
||||
return;
|
||||
if (rpgPlugin != null) return;
|
||||
|
||||
String preferred = plugin.getConfig().getString("preferred-rpg-provider", null);
|
||||
if (preferred != null) {
|
||||
@ -597,8 +620,7 @@ public class MMOItems extends LuminePlugin {
|
||||
|
||||
// Valid template?
|
||||
MMOItemTemplate found = getTemplates().getTemplate(type, id);
|
||||
if (found == null)
|
||||
return null;
|
||||
if (found == null) return null;
|
||||
|
||||
// Build if found
|
||||
return found.newBuilder(player).build();
|
||||
@ -617,8 +639,7 @@ public class MMOItems extends LuminePlugin {
|
||||
|
||||
// Valid MMOItem?
|
||||
MMOItem m = getMMOItem(type, id, player);
|
||||
if (m == null)
|
||||
return null;
|
||||
if (m == null) return null;
|
||||
|
||||
// Build if found
|
||||
return m.newBuilder().build();
|
||||
@ -637,8 +658,7 @@ public class MMOItems extends LuminePlugin {
|
||||
|
||||
// Valid template?
|
||||
MMOItemTemplate found = getTemplates().getTemplate(type, id);
|
||||
if (found == null)
|
||||
return null;
|
||||
if (found == null) return null;
|
||||
|
||||
// Build if found
|
||||
return found.newBuilder(itemLevel, itemTier).build();
|
||||
@ -657,8 +677,7 @@ public class MMOItems extends LuminePlugin {
|
||||
|
||||
// Valid MMOItem?
|
||||
MMOItem m = getMMOItem(type, id, itemLevel, itemTier);
|
||||
if (m == null)
|
||||
return null;
|
||||
if (m == null) return null;
|
||||
|
||||
// Build if found
|
||||
return m.newBuilder().build();
|
||||
|
@ -139,7 +139,12 @@ public abstract class Ability<T extends AbilityMetadata> implements CooldownObje
|
||||
/**
|
||||
* Performing a right click while sneaking
|
||||
*/
|
||||
SHIFT_RIGHT_CLICK;
|
||||
SHIFT_RIGHT_CLICK,
|
||||
|
||||
/**
|
||||
* When player Sneaks
|
||||
*/
|
||||
SNEAK;
|
||||
|
||||
private final boolean message;
|
||||
|
||||
|
@ -3,6 +3,7 @@ package net.Indyuce.mmoitems.api;
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.api.item.NBTItem;
|
||||
import io.lumine.mythic.lib.api.player.EquipmentSlot;
|
||||
import io.lumine.mythic.lib.api.util.ui.SilentNumbers;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.item.util.identify.UnidentifiedItem;
|
||||
import net.Indyuce.mmoitems.manager.TypeManager;
|
||||
@ -46,7 +47,7 @@ public class Type {
|
||||
public static final Type ORNAMENT = new Type(TypeSet.EXTRA, "ORNAMENT", false, EquipmentSlot.ANY);
|
||||
|
||||
// extra
|
||||
public static final Type ARMOR = new Type(TypeSet.EXTRA, "ARMOR", false, EquipmentSlot.ARMOR);
|
||||
public static final Type ARMOR = new Type(TypeSet.EXTRA, "ARMOR", false, EquipmentSlot.ARMOR, true);
|
||||
public static final Type TOOL = new Type(TypeSet.EXTRA, "TOOL", false, EquipmentSlot.MAIN_HAND);
|
||||
public static final Type CONSUMABLE = new Type(TypeSet.EXTRA, "CONSUMABLE", false, EquipmentSlot.MAIN_HAND);
|
||||
public static final Type MISCELLANEOUS = new Type(TypeSet.EXTRA, "MISCELLANEOUS", false, EquipmentSlot.MAIN_HAND);
|
||||
@ -59,6 +60,12 @@ public class Type {
|
||||
private String name;
|
||||
private final TypeSet set;
|
||||
|
||||
public boolean isFourGUIMode() {
|
||||
return fourGUIMode;
|
||||
}
|
||||
|
||||
private final boolean fourGUIMode;
|
||||
|
||||
/**
|
||||
* Used for item type restrictions for gem stones to easily check if the
|
||||
* item is a weapon.
|
||||
@ -89,10 +96,13 @@ public class Type {
|
||||
private final List<ItemStat> available = new ArrayList<>();
|
||||
|
||||
public Type(TypeSet set, String id, boolean weapon, EquipmentSlot equipType) {
|
||||
this(set, id, weapon, equipType, false);
|
||||
}
|
||||
public Type(TypeSet set, String id, boolean weapon, EquipmentSlot equipType, boolean fourGUI) {
|
||||
this.set = set;
|
||||
this.id = id.toUpperCase().replace("-", "_").replace(" ", "_");
|
||||
this.equipType = equipType;
|
||||
|
||||
this.fourGUIMode = fourGUI;
|
||||
this.weapon = weapon;
|
||||
}
|
||||
|
||||
@ -103,6 +113,7 @@ public class Type {
|
||||
set = parent.set;
|
||||
weapon = parent.weapon;
|
||||
equipType = parent.equipType;
|
||||
this.fourGUIMode = config.getBoolean("AlternateGUIMode", parent.fourGUIMode);
|
||||
}
|
||||
|
||||
public void load(ConfigurationSection config) {
|
||||
|
@ -27,16 +27,16 @@ public class PlaceholderCondition extends Condition {
|
||||
switch (comparator) {
|
||||
case "<":
|
||||
return Double.valueOf(placeholders) < Double.valueOf(compareTo);
|
||||
case "<=":
|
||||
case "<+":
|
||||
return Double.valueOf(placeholders) <= Double.valueOf(compareTo);
|
||||
case ">":
|
||||
return Double.valueOf(placeholders) > Double.valueOf(compareTo);
|
||||
case ">=":
|
||||
case ">+":
|
||||
return Double.valueOf(placeholders) >= Double.valueOf(compareTo);
|
||||
case "==":
|
||||
case "=":
|
||||
case "++":
|
||||
case "+":
|
||||
return Double.valueOf(placeholders) == Double.valueOf(compareTo);
|
||||
case "!=":
|
||||
case "!+":
|
||||
return Double.valueOf(placeholders) != Double.valueOf(compareTo);
|
||||
case "equals":
|
||||
return placeholders.equals(compareTo);
|
||||
|
@ -69,6 +69,9 @@ public class GemStone extends UseItem {
|
||||
// Check for success rate
|
||||
double successRate = getNBTItem().getStat(ItemStats.SUCCESS_RATE.getId());
|
||||
|
||||
if (successRate == 0.0)
|
||||
successRate = 100;
|
||||
|
||||
// Call the Bukkit event
|
||||
ApplyGemStoneEvent called = new ApplyGemStoneEvent(playerData, mmoitem, targetMMO,
|
||||
RANDOM.nextDouble() > successRate / 100 ? ResultType.FAILURE : ResultType.SUCCESS);
|
||||
|
@ -34,7 +34,7 @@ public class ItemSkin extends UseItem {
|
||||
return new ApplyResult(ResultType.NONE);
|
||||
|
||||
if (MMOItems.plugin.getConfig().getBoolean("locked-skins") && target.getBoolean("MMOITEMS_HAS_SKIN")) {
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 2);
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||
Message.SKIN_REJECTED.format(ChatColor.RED, "#item#", MMOUtils.getDisplayName(target.getItem()))
|
||||
.send(player);
|
||||
return new ApplyResult(ResultType.NONE);
|
||||
|
@ -369,7 +369,7 @@ public class MMOItemReforger {
|
||||
*
|
||||
* @param options Additional options to pass onto the modules.
|
||||
*
|
||||
* @return If reforged successfully ~ <code>true</code> unless cancelled.
|
||||
* @return If reforged successfully. Basically <code>true</code>, unless cancelled.
|
||||
*/
|
||||
public boolean reforge(@NotNull ReforgeOptions options) {
|
||||
//RFG//MMOItems.log("§8Reforge §4RFG§7 Reforging " + SilentNumbers.getItemName(getStack()));
|
||||
|
@ -79,6 +79,7 @@ public class ReloadCommandTreeNode extends CommandTreeNode {
|
||||
sender.sendMessage(MMOItems.plugin.getPrefix() + "- " + ChatColor.RED
|
||||
+ (MMOItems.plugin.getRecipes().getLoadedLegacyRecipes().size()
|
||||
+ MMOItems.plugin.getRecipes().getLegacyCustomRecipes().size()
|
||||
+ MMOItems.plugin.getRecipes().getBooklessRecipes().size()
|
||||
+ MMOItems.plugin.getRecipes().getCustomRecipes().size())
|
||||
+ ChatColor.GRAY + " Recipes");
|
||||
}
|
||||
|
@ -1,74 +0,0 @@
|
||||
package net.Indyuce.mmoitems.comp.denizen;
|
||||
|
||||
import com.denizenscript.denizen.objects.ItemTag;
|
||||
import com.denizenscript.denizencore.objects.ObjectFetcher;
|
||||
import com.denizenscript.denizencore.objects.ObjectTag;
|
||||
import com.denizenscript.denizencore.objects.core.MapTag;
|
||||
import com.denizenscript.denizencore.objects.properties.PropertyParser;
|
||||
import com.denizenscript.denizencore.tags.TagManager;
|
||||
import com.denizenscript.depenizen.bukkit.Bridge;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.Type;
|
||||
|
||||
/**
|
||||
* Basic integration with Denizen
|
||||
*/
|
||||
public class DenizenBridge extends Bridge {
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
|
||||
/*
|
||||
* This registers sub tags in the custom coded denizen tags
|
||||
*/
|
||||
/* ObjectFetcher.registerWithObjectFetcher(MMOItemTag.class, MMOItemTag.tagProcessor);*/
|
||||
ObjectFetcher.registerWithObjectFetcher(MMOItemTemplateTag.class, MMOItemTemplateTag.tagProcessor);
|
||||
|
||||
/*
|
||||
* Implement some properties to the already existing ItemTag
|
||||
*/
|
||||
PropertyParser.registerProperty(MMOItemsItemProperty.class, ItemTag.class);
|
||||
|
||||
/*
|
||||
* This implements a way to retrieve an MMOItem as itemStack.
|
||||
*
|
||||
* Usage:
|
||||
* <mmoitem_template[type=TYPE;id=ID_HERE]>
|
||||
*/
|
||||
TagManager.registerTagHandler("mmoitem_template", attribute -> {
|
||||
if (!attribute.hasContext(1)) {
|
||||
attribute.echoError("Please provide an item type and ID.");
|
||||
return null;
|
||||
}
|
||||
|
||||
MapTag map = attribute.contextAsType(1, MapTag.class);
|
||||
if (map == null) {
|
||||
attribute.echoError("Invalid MapTag input");
|
||||
return null;
|
||||
}
|
||||
|
||||
ObjectTag type = map.getObject("type");
|
||||
ObjectTag id = map.getObject("id");
|
||||
if (type == null || id == null) {
|
||||
attribute.echoError("Invalid MapTag input - missing 'type' or 'id'");
|
||||
return null;
|
||||
}
|
||||
|
||||
String typeName = type.toString().replace("-", "_").toUpperCase();
|
||||
Type parsedType = MMOItems.plugin.getTypes().get(typeName);
|
||||
if (parsedType == null) {
|
||||
attribute.echoError("Invalid type - cannot find type with name '" + typeName + "'");
|
||||
return null;
|
||||
}
|
||||
|
||||
// Format ID and return item
|
||||
String formattedId = id.toString().replace("-", "_").toUpperCase();
|
||||
if (!MMOItems.plugin.getTemplates().hasTemplate(parsedType, formattedId)) {
|
||||
attribute.echoError("Invalid template ID - cannot find template with name '" + formattedId + "'");
|
||||
return null;
|
||||
}
|
||||
|
||||
return new MMOItemTemplateTag(parsedType, formattedId);
|
||||
});
|
||||
}
|
||||
}
|
@ -1,18 +1,72 @@
|
||||
package net.Indyuce.mmoitems.comp.denizen;
|
||||
|
||||
import com.denizenscript.depenizen.bukkit.Depenizen;
|
||||
import com.denizenscript.denizen.objects.ItemTag;
|
||||
import com.denizenscript.denizencore.objects.ObjectFetcher;
|
||||
import com.denizenscript.denizencore.objects.ObjectTag;
|
||||
import com.denizenscript.denizencore.objects.core.MapTag;
|
||||
import com.denizenscript.denizencore.objects.properties.PropertyParser;
|
||||
import com.denizenscript.denizencore.tags.TagManager;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import org.bukkit.Bukkit;
|
||||
import net.Indyuce.mmoitems.api.Type;
|
||||
|
||||
public class DenizenHook {
|
||||
|
||||
/**
|
||||
* Putting this here so that the Depenizen import does not
|
||||
* appear in the main MMOItems class which would cause an issue
|
||||
* for all servers without Denizen
|
||||
*/
|
||||
public DenizenHook() {
|
||||
Depenizen depenizen = (Depenizen) Bukkit.getPluginManager().getPlugin("Depenizen");
|
||||
depenizen.registerBridge(MMOItems.plugin.getName(), () -> new DenizenBridge());
|
||||
/*
|
||||
* This registers sub tags in the custom coded denizen tags
|
||||
*/
|
||||
/* ObjectFetcher.registerWithObjectFetcher(MMOItemTag.class, MMOItemTag.tagProcessor);*/
|
||||
ObjectFetcher.registerWithObjectFetcher(MMOItemTemplateTag.class, MMOItemTemplateTag.tagProcessor);
|
||||
|
||||
/*
|
||||
* Implement some properties to the already existing ItemTag
|
||||
*/
|
||||
PropertyParser.registerProperty(MMOItemsItemProperty.class, ItemTag.class);
|
||||
|
||||
/*
|
||||
* This implements a way to retrieve an MMOItem as itemStack.
|
||||
*
|
||||
* Usage:
|
||||
* <mmoitem_template[type=TYPE;id=ID_HERE]>
|
||||
*/
|
||||
TagManager.registerTagHandler("mmoitem_template", attribute -> {
|
||||
if (!attribute.hasContext(1)) {
|
||||
attribute.echoError("Please provide an item type and ID.");
|
||||
return null;
|
||||
}
|
||||
|
||||
MapTag map = attribute.contextAsType(1, MapTag.class);
|
||||
if (map == null) {
|
||||
attribute.echoError("Invalid MapTag input");
|
||||
return null;
|
||||
}
|
||||
|
||||
ObjectTag type = map.getObject("type");
|
||||
ObjectTag id = map.getObject("id");
|
||||
if (type == null || id == null) {
|
||||
attribute.echoError("Invalid MapTag input - missing 'type' or 'id'");
|
||||
return null;
|
||||
}
|
||||
|
||||
String typeName = type.toString().replace("-", "_").toUpperCase();
|
||||
Type parsedType = MMOItems.plugin.getTypes().get(typeName);
|
||||
if (parsedType == null) {
|
||||
attribute.echoError("Invalid type - cannot find type with name '" + typeName + "'");
|
||||
return null;
|
||||
}
|
||||
|
||||
// Format ID and return item
|
||||
String formattedId = id.toString().replace("-", "_").toUpperCase();
|
||||
if (!MMOItems.plugin.getTemplates().hasTemplate(parsedType, formattedId)) {
|
||||
attribute.echoError("Invalid template ID - cannot find template with name '" + formattedId + "'");
|
||||
return null;
|
||||
}
|
||||
|
||||
return new MMOItemTemplateTag(parsedType, formattedId);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,6 @@ import net.Indyuce.mmoitems.api.ItemTier;
|
||||
import net.Indyuce.mmoitems.api.Type;
|
||||
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
@ -78,8 +77,7 @@ public class MMOItemTemplateTag extends SimpleTag {
|
||||
* MMOItemTag of the generated item.
|
||||
*/
|
||||
tagProcessor.registerTag("generate", (attribute, object) -> {
|
||||
if (!attribute.hasContext(1))
|
||||
return new ItemTag(object.getTemplate().newBuilder().build().newBuilder().build());
|
||||
if (!attribute.hasContext(1)) return new ItemTag(object.getTemplate().newBuilder().build().newBuilder().build());
|
||||
|
||||
MapTag map = attribute.contextAsType(1, MapTag.class);
|
||||
if (map == null) {
|
||||
@ -96,31 +94,29 @@ public class MMOItemTemplateTag extends SimpleTag {
|
||||
// Specified level
|
||||
ObjectTag levelTag = map.getObject("level");
|
||||
int level = -1;
|
||||
if (levelTag != null)
|
||||
try {
|
||||
level = Integer.valueOf(levelTag.toString());
|
||||
if (levelTag != null) try {
|
||||
level = Integer.parseInt(levelTag.toString());
|
||||
} catch (IllegalArgumentException exception) {
|
||||
attribute.echoError("Bad level input: " + levelTag.toString() + " is not a valid integer");
|
||||
attribute.echoError("Bad level input: " + levelTag + " is not a valid integer");
|
||||
return null;
|
||||
}
|
||||
|
||||
// Match level
|
||||
ObjectTag matchLevelTag = map.getObject("match-level");
|
||||
boolean matchLevel = matchLevelTag != null && Boolean.valueOf(matchLevelTag.toString());
|
||||
boolean matchLevel = matchLevelTag != null && Boolean.parseBoolean(matchLevelTag.toString());
|
||||
|
||||
// Item tier param
|
||||
ObjectTag tierTag = map.getObject("tier");
|
||||
ItemTier tier = null;
|
||||
if (tierTag != null)
|
||||
try {
|
||||
if (tierTag != null) try {
|
||||
tier = MMOItems.plugin.getTiers().getOrThrow(tierTag.toString().toUpperCase().replace("-", "_"));
|
||||
} catch (IllegalArgumentException exception) {
|
||||
attribute.echoError(exception.getMessage());
|
||||
}
|
||||
|
||||
// Find item level
|
||||
int itemLevel = level >= 0 ? level : (matchLevel && playerTag != null ?
|
||||
MMOItems.plugin.getTemplates().rollLevel(PlayerData.get(((PlayerTag) playerTag).getPlayerEntity()).getRPG().getLevel()) : 1 + random.nextInt(100));
|
||||
int itemLevel = level >= 0 ? level : (matchLevel && playerTag != null ? MMOItems.plugin.getTemplates()
|
||||
.rollLevel(PlayerData.get(((PlayerTag) playerTag).getPlayerEntity()).getRPG().getLevel()) : 1 + random.nextInt(100));
|
||||
|
||||
// Find item tier
|
||||
ItemTier itemTier = tier != null ? tier : MMOItems.plugin.getTemplates().rollTier();
|
||||
@ -131,8 +127,7 @@ public class MMOItemTemplateTag extends SimpleTag {
|
||||
}
|
||||
|
||||
public static MMOItemTemplateTag valueOf(String string, TagContext context) {
|
||||
if (string == null)
|
||||
return null;
|
||||
if (string == null) return null;
|
||||
|
||||
try {
|
||||
String[] split = string.substring("mmoitem_template@".length()).split("\\.");
|
||||
|
@ -23,7 +23,7 @@ public class MythicMobsAbility extends Ability<MythicMobsAbilityMetadata> {
|
||||
private final Skill skill;
|
||||
|
||||
public MythicMobsAbility(String id, FileConfiguration config) {
|
||||
super(id, config.getString("name"), CastingMode.ON_HIT, CastingMode.WHEN_HIT, CastingMode.LEFT_CLICK, CastingMode.RIGHT_CLICK, CastingMode.SHIFT_LEFT_CLICK, CastingMode.SHIFT_RIGHT_CLICK);
|
||||
super(id, config.getString("name"), CastingMode.ON_HIT, CastingMode.WHEN_HIT, CastingMode.LEFT_CLICK, CastingMode.RIGHT_CLICK, CastingMode.SHIFT_LEFT_CLICK, CastingMode.SHIFT_RIGHT_CLICK, CastingMode.SNEAK);
|
||||
|
||||
String skillName = config.getString("mythicmobs-skill-id");
|
||||
Validate.notNull(skillName, "Could not find MM skill name");
|
||||
|
@ -24,6 +24,7 @@ import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@ -38,6 +39,8 @@ public class ItemBrowser extends PluginInventory {
|
||||
private boolean deleteMode;
|
||||
|
||||
private static final int[] slots = { 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34 };
|
||||
//private static final int[] slotsAlt = { 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43 };
|
||||
private static final int[] slotsAlt = { 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34 };
|
||||
|
||||
public ItemBrowser(Player player) {
|
||||
this(player, null);
|
||||
@ -49,10 +52,13 @@ public class ItemBrowser extends PluginInventory {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
int[] getUsedSlots(@Nullable Type forType) { return forType == null ? slots : forType.isFourGUIMode() ? slotsAlt : slots; }
|
||||
|
||||
@Override
|
||||
public Inventory getInventory() {
|
||||
int min = (page - 1) * slots.length;
|
||||
int max = page * slots.length;
|
||||
int[] usedSlots = getUsedSlots(type);
|
||||
int min = (page - 1) * usedSlots.length;
|
||||
int max = page * usedSlots.length;
|
||||
int n = 0;
|
||||
|
||||
/*
|
||||
@ -125,7 +131,7 @@ public class ItemBrowser extends PluginInventory {
|
||||
ItemStack item = template.newBuilder(playerData.getRPG()).build().newBuilder().build();
|
||||
if (item == null || item.getType() == Material.AIR) {
|
||||
cached.put(template.getId(), error);
|
||||
inv.setItem(slots[n++], error);
|
||||
inv.setItem(usedSlots[n++], error);
|
||||
continue;
|
||||
}
|
||||
NBTItem nbtItem = NBTItem.get(item);
|
||||
@ -148,7 +154,7 @@ public class ItemBrowser extends PluginInventory {
|
||||
|
||||
cached.put(template.getId(), nbtItem.toItem());
|
||||
|
||||
inv.setItem(slots[n++], cached.get(template.getId()));
|
||||
inv.setItem(usedSlots[n++], cached.get(template.getId()));
|
||||
}
|
||||
|
||||
ItemStack noItem = VersionMaterial.GRAY_STAINED_GLASS_PANE.toItem();
|
||||
@ -192,8 +198,8 @@ public class ItemBrowser extends PluginInventory {
|
||||
inv.setItem(45, downloadPack);
|
||||
}
|
||||
|
||||
while (n < slots.length)
|
||||
inv.setItem(slots[n++], noItem);
|
||||
while (n < usedSlots.length)
|
||||
inv.setItem(usedSlots[n++], noItem);
|
||||
if (!deleteMode)
|
||||
inv.setItem(51, create);
|
||||
inv.setItem(47, delete);
|
||||
|
@ -63,6 +63,11 @@ public class RMGRR_Shapeless implements RecipeRegistry {
|
||||
|
||||
// Add
|
||||
ProvidedUIFilter p = RecipeMakerGUI.readIngredientFrom(str, ffp);
|
||||
|
||||
// Not air right
|
||||
if (p.isAir()) { continue; }
|
||||
|
||||
// Ok snooze
|
||||
nonAirFound = true;
|
||||
poofs.add(new MythicRecipeIngredient(p));
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import io.lumine.mythic.lib.api.crafting.recipes.ShapelessRecipe;
|
||||
import io.lumine.mythic.lib.api.crafting.uimanager.ProvidedUIFilter;
|
||||
import io.lumine.mythic.lib.api.util.Ref;
|
||||
import io.lumine.mythic.lib.api.util.ui.FriendlyFeedbackProvider;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.crafting.recipe.CustomSmithingRecipe;
|
||||
import net.Indyuce.mmoitems.api.crafting.recipe.SmithingCombinationType;
|
||||
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
|
||||
@ -86,8 +87,8 @@ public class RMGRR_Smithing implements RecipeRegistry {
|
||||
// Read the options and output
|
||||
int outputAmount = recipeSection.getInt(RBA_AmountOutput.AMOUNT_INGREDIENTS, 1);
|
||||
boolean dropGems = recipeSection.getBoolean(RBA_DropGems.SMITH_GEMS, false);
|
||||
SmithingCombinationType upgradeEffect = readSCT(recipeSection.getString(RBA_SmithingEnchantments.SMITH_ENCHANTS));
|
||||
SmithingCombinationType enchantEffect = readSCT(recipeSection.getString(RBA_SmithingUpgrades.SMITH_UPGRADES));
|
||||
SmithingCombinationType enchantEffect = readSCT(recipeSection.getString(RBA_SmithingEnchantments.SMITH_ENCHANTS));
|
||||
SmithingCombinationType upgradeEffect = readSCT(recipeSection.getString(RBA_SmithingUpgrades.SMITH_UPGRADES));
|
||||
|
||||
// Build Output
|
||||
CustomSmithingRecipe outputRecipe = new CustomSmithingRecipe(template, dropGems, enchantEffect, upgradeEffect, outputAmount);
|
||||
|
@ -277,8 +277,11 @@ public class ItemUse implements Listener {
|
||||
return;
|
||||
|
||||
NBTItem item = NBTItem.get(event.getBow());
|
||||
if (!item.hasType())
|
||||
return;
|
||||
Type type = Type.get(item.getType());
|
||||
|
||||
|
||||
PlayerData playerData = PlayerData.get((Player) event.getEntity());
|
||||
if (type != null) {
|
||||
Weapon weapon = new Weapon(playerData, item);
|
||||
|
@ -60,6 +60,12 @@ public class PlayerListener implements Listener {
|
||||
PlayerData.get(player).castAbilities(damager, CastingMode.WHEN_HIT);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void castWhenSneakAbilities(PlayerToggleSneakEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
PlayerData.get(player).castAbilities(null, CastingMode.SNEAK);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void castClickAbilities(PlayerInteractEvent event) {
|
||||
if (event.getAction() == Action.PHYSICAL)
|
||||
@ -148,6 +154,9 @@ public class PlayerListener implements Listener {
|
||||
return;
|
||||
|
||||
NBTItem nbtItem = MythicLib.plugin.getVersion().getWrapper().getNBTItem(item.getItem());
|
||||
if (!nbtItem.hasType())
|
||||
return;
|
||||
|
||||
Type type = Type.get(nbtItem.getType());
|
||||
PlayerData playerData = PlayerData.get((Player) event.getEntity().getShooter());
|
||||
|
||||
|
@ -214,6 +214,7 @@ public class RecipeManager implements Reloadable {
|
||||
return legacyCraftingRecipes;
|
||||
}
|
||||
public HashMap<NamespacedKey, MythicRecipeBlueprint> getCustomRecipes() { return customRecipes; }
|
||||
public ArrayList<MythicRecipeBlueprint> getBooklessRecipes() { return booklessRecipes; }
|
||||
|
||||
@Nullable
|
||||
ArrayList<NamespacedKey> generatedNKs;
|
||||
|
Loading…
Reference in New Issue
Block a user