Skip to content

Commit

Permalink
add enchants into existing items (#283)
Browse files Browse the repository at this point in the history
Co-authored-by: Travja <the.only.t.craft@gmail.com>
  • Loading branch information
MaksyKun and Travja authored Jan 25, 2025
1 parent 5c57c7a commit 79f65f6
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.enchantment.PrepareItemEnchantEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityDamageEvent.DamageModifier;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.event.inventory.PrepareAnvilEvent;
import org.bukkit.event.inventory.PrepareGrindstoneEvent;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.FixedMetadataValue;
Expand All @@ -33,6 +36,7 @@
import studio.magemonkey.divinity.manager.damage.DamageMeta;
import studio.magemonkey.divinity.modules.list.arrows.ArrowManager;
import studio.magemonkey.divinity.modules.list.arrows.ArrowManager.QArrow;
import studio.magemonkey.divinity.modules.list.itemgenerator.ItemGeneratorManager;
import studio.magemonkey.divinity.stats.EntityStats;
import studio.magemonkey.divinity.stats.ProjectileStats;
import studio.magemonkey.divinity.stats.items.ItemStats;
Expand Down Expand Up @@ -471,4 +475,24 @@ private static void scaleValuesWithCore(LivingEntity damager,
});
}
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onAnvilUse(PrepareAnvilEvent e) {
ItemStack result = e.getResult();
if (result == null) return;
ItemGeneratorManager.updateGeneratorItemLore(result);
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEnchantingTable(PrepareItemEnchantEvent e) {
ItemStack result = e.getItem();
ItemGeneratorManager.updateGeneratorItemLore(result);
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onGrindStone(PrepareGrindstoneEvent e) {
ItemStack result = e.getResult();
if (result == null) return;
ItemGeneratorManager.updateGeneratorItemLore(result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BlockStateMeta;
import org.bukkit.inventory.meta.ItemMeta;
Expand All @@ -31,6 +32,7 @@
import studio.magemonkey.codex.util.random.Rnd;
import studio.magemonkey.divinity.Divinity;
import studio.magemonkey.divinity.config.Config;
import studio.magemonkey.divinity.config.EngineCfg;
import studio.magemonkey.divinity.hooks.EHook;
import studio.magemonkey.divinity.hooks.external.FabledHook;
import studio.magemonkey.divinity.modules.EModule;
Expand Down Expand Up @@ -828,7 +830,8 @@ protected ItemStack build(int itemLvl, int uses, @Nullable ItemType mat) {
item.setItemMeta(meta);

// Add enchants
int enchRoll = Rnd.get(this.getMinEnchantments(), this.getMaxEnchantments());
int enchRoll =
Rnd.get(this.getMinEnchantments(), this.getMaxEnchantments());
int enchCount = 0;
List<Map.Entry<Enchantment, String[]>> enchants = new ArrayList<>(this.enchantsList.entrySet());
Collections.shuffle(enchants);
Expand Down Expand Up @@ -1279,4 +1282,45 @@ private static List<String> interpolatePrefixWithAllSuffixes(String modifiedName

return names;
}

public static void updateGeneratorItemLore(ItemStack item) {
if (item.getItemMeta() == null) return;
String itemId = Divinity.getInstance().getModuleCache().getTierManager().getItemId(item);
if (itemId == null) return;
ItemGeneratorManager.GeneratorItem reference =
Divinity.getInstance().getModuleCache().getTierManager().getItemById(itemId);
if (reference == null) return;

ItemMeta meta = item.getItemMeta();
List<String> lore = meta.getLore();
if (lore == null) return;

// Iterate through all enchantments and make sure we delete all existent lore entries
// Note: If there was no %ENCHANTS% before, we add it here since we need it later
for (Enchantment enchantment : Enchantment.values()) {
String value = EngineCfg.LORE_STYLE_ENCHANTMENTS_FORMAT_MAIN
.replace("%name%", Divinity.getInstance().lang().getEnchantment(enchantment))
.replace("%value%", "");
lore.removeIf(line -> {
if (!lore.contains("%ENCHANTS%") && line.contains(value)) {
if (lore.contains(line))
lore.set(lore.indexOf(line), "%ENCHANTS%");
return false;
}
return line.contains(value);
});
}

// If the item had no enchantments before, but the itemflag is no set either, add %ENCHANTS% to the lore with ignored order
if (!lore.contains("%ENCHANTS%")
&& !reference.getFlags().contains(ItemFlag.HIDE_ENCHANTS)
&& reference.getLore().contains("%ENCHANTS%"))
lore.add("%ENCHANTS%");

meta.setLore(lore);
item.setItemMeta(meta);

// If everythings fine now, the lore should contain %ENCHANTS% which can be replaced by the enchantments now
LoreUT.replaceEnchants(item);
}
}

0 comments on commit 79f65f6

Please sign in to comment.