made improvements to the enchantment system by making more things use EnchantmentWrapper instead of CustomEnchantment

also added OverridableVanillaEnchantmentWrapper
This commit is contained in:
XTerPL 2025-01-24 23:13:01 +01:00
parent f124798e1b
commit e6b2008618
18 changed files with 187 additions and 141 deletions

View file

@ -29,7 +29,8 @@ public enum BlazingEnchantmentTarget implements ItemPredicate {
HOE("Hoe", Material.WOODEN_HOE, Material.STONE_HOE, Material.IRON_HOE, Material.GOLDEN_HOE, Material.DIAMOND_HOE, Material.NETHERITE_HOE),
SHIELD("Shield", Material.SHIELD), ELYTRA("Elytra", Material.ELYTRA),
WEAPON_TRIDENT("Weapons OR Trident", Material.WOODEN_SWORD, Material.STONE_SWORD, Material.IRON_SWORD, Material.GOLDEN_SWORD,
Material.DIAMOND_SWORD, Material.NETHERITE_SWORD, Material.TRIDENT);
Material.DIAMOND_SWORD, Material.NETHERITE_SWORD, Material.TRIDENT),
BOW_ROCKET("Bow OR Firework Rocket", Material.BOW, Material.FIREWORK_ROCKET);
final Set<Material> allowed;
final String description;

View file

@ -21,15 +21,11 @@ import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.TextDecoration;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Entity;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import java.util.Map;
import java.util.Set;
public abstract class CustomEnchantment implements EnchantmentWrapper {
@ -49,42 +45,6 @@ public abstract class CustomEnchantment implements EnchantmentWrapper {
return PaperEnchantmentTarget.BREAKABLE;
}
public boolean canEnchantItem(@NotNull ItemStack itemStack) {
Map<CustomEnchantment, Integer> customEnchantmentLevels = EnchantmentHelper.getCustomEnchantments(itemStack);
for(Map.Entry<CustomEnchantment, Integer> entry : customEnchantmentLevels.entrySet()) {
if(conflictsWith(entry.getKey()) || entry.getKey().conflictsWith(this)) {
return false;
}
}
ItemMeta meta = itemStack.getItemMeta();
Map<Enchantment, Integer> enchantmentLevels = Map.of();
if(meta != null) {
enchantmentLevels = itemStack.getItemMeta().getEnchants();
}
for(Map.Entry<Enchantment, Integer> entry : enchantmentLevels.entrySet()) {
if(conflictsWith(entry.getKey())) {
return false;
}
}
if(itemStack.getItemMeta() instanceof EnchantmentStorageMeta esm) {
Map<Enchantment, Integer> storedEnchantmentLevels = esm.getStoredEnchants();
for(Map.Entry<Enchantment, Integer> entry : storedEnchantmentLevels.entrySet()) {
if(conflictsWith(entry.getKey())) {
return false;
}
}
}
return canGoOnItem(itemStack);
}
@Override
public boolean canGoOnItem(ItemStack tool) {
return getItemTarget().matchItem(tool) || tool.getType() == Material.BOOK
@ -129,7 +89,7 @@ public abstract class CustomEnchantment implements EnchantmentWrapper {
}
@Override
public Component getLevelessComponent() {
public Component getDescription() {
return Component.text(getDisplayName()).color(getEnchantmentType().getColor()).decoration(TextDecoration.ITALIC, false);
}
@ -137,4 +97,9 @@ public abstract class CustomEnchantment implements EnchantmentWrapper {
public boolean isTreasure() {
return false;
}
@Override
public boolean canBeRemoved() {
return getEnchantmentType().canBeRemoved();
}
}

View file

@ -35,6 +35,22 @@ import java.util.*;
public class EnchantmentHelper implements ItemChangeProvider {
private static final NamespacedKey key = BlazingGames.get().key("custom_enchantments");
public static Map<EnchantmentWrapper, Integer> getEnchantmentWrappers(ItemStack stack) {
if(stack == null || !stack.hasItemMeta()) {
return new HashMap<>();
}
HashMap<EnchantmentWrapper, Integer> enchantments = new HashMap<>();
for(EnchantmentWrapper wrapper : EnchantmentWrappers.list(false)) {
if(wrapper.has(stack)) {
enchantments.put(wrapper, wrapper.getLevel(stack));
}
}
return enchantments;
}
public static Map<CustomEnchantment, Integer> getCustomEnchantments(ItemStack stack) {
if(stack == null || !stack.hasItemMeta()) {
return new HashMap<>();
@ -148,7 +164,7 @@ public class EnchantmentHelper implements ItemChangeProvider {
return ItemPredicates.enchantability.matchItem(stack);
}
public static ItemStack enchantTool(ItemStack stack, CustomEnchantment enchantment, int level) {
public static ItemStack enchantTool(ItemStack stack, EnchantmentWrapper enchantment, int level) {
ItemStack result = stack.clone();
if(!canEnchantItem(result)) {
@ -156,13 +172,8 @@ public class EnchantmentHelper implements ItemChangeProvider {
}
if(enchantment.canEnchantItem(result)) {
int current = getCustomEnchantmentLevel(result, enchantment);
int current = enchantment.getLevel(result);
if(current == level && current > 0) {
if(enchantment.canUpgradeLevel(current)) {
level++;
}
}
if(current > level) {
level = current;
}
@ -173,7 +184,7 @@ public class EnchantmentHelper implements ItemChangeProvider {
level = 0;
}
return setCustomEnchantment(result, enchantment, level);
return enchantment.apply(result, level);
}
return result;
@ -244,9 +255,9 @@ public class EnchantmentHelper implements ItemChangeProvider {
return result;
}
Map<CustomEnchantment, Integer> enchantmentLevels = getCustomEnchantments(enchantingItem);
Map<EnchantmentWrapper, Integer> enchantmentLevels = getEnchantmentWrappers(enchantingItem);
for(Map.Entry<CustomEnchantment, Integer> enchantment : enchantmentLevels.entrySet()) {
for(Map.Entry<EnchantmentWrapper, Integer> enchantment : enchantmentLevels.entrySet()) {
result = enchantTool(result, enchantment.getKey(), enchantment.getValue());
}
@ -257,18 +268,18 @@ public class EnchantmentHelper implements ItemChangeProvider {
return !getCustomEnchantments(stack).isEmpty();
}
public static ItemStack removeCustomEnchantments(ItemStack stack) {
public static ItemStack removeEnchantments(ItemStack stack) {
ItemStack result = stack.clone();
if(!canEnchantItem(result)) {
return result;
}
Set<CustomEnchantment> enchantments = getCustomEnchantments(stack).keySet();
Set<EnchantmentWrapper> enchantments = getEnchantmentWrappers(stack).keySet();
for(CustomEnchantment enchantment : enchantments) {
if(enchantment.getEnchantmentType().canBeRemoved()) {
result = removeCustomEnchantment(result, enchantment);
for(EnchantmentWrapper enchantment : enchantments) {
if(enchantment.canBeRemoved()) {
result = enchantment.remove(result);
}
}
@ -276,19 +287,19 @@ public class EnchantmentHelper implements ItemChangeProvider {
}
// This version of the getCustomEnchantmentLevel function ignores enchanted books
public static int getActiveCustomEnchantmentLevel(ItemStack stack, CustomEnchantment enchantment) {
public static int getActiveEnchantmentWrapperLevel(ItemStack stack, EnchantmentWrapper enchantment) {
if(stack != null && stack.getType() == Material.ENCHANTED_BOOK) {
return 0;
}
return getCustomEnchantmentLevel(stack, enchantment);
return enchantment.getLevel(stack);
}
// This version of the hasCustomEnchantment function ignores enchanted books
public static boolean hasActiveCustomEnchantment(ItemStack stack, CustomEnchantment enchantment) {
return getActiveCustomEnchantmentLevel(stack, enchantment) > 0;
public static boolean hasActiveEnchantmentWrapper(ItemStack stack, EnchantmentWrapper enchantment) {
return getActiveEnchantmentWrapperLevel(stack, enchantment) > 0;
}
public static Map<CustomEnchantment, Integer> getActiveCustomEnchantments(ItemStack stack) {
public static Map<CustomEnchantment, Integer> getActiveEnchantmentWrappers(ItemStack stack) {
if(stack != null && stack.getType() == Material.ENCHANTED_BOOK) {
return new HashMap<>();
}
@ -342,7 +353,7 @@ public class EnchantmentHelper implements ItemChangeProvider {
meta = result.getItemMeta();
}
if(hasCustomEnchantment(stack, CustomEnchantments.UNSHINY)) {
if(CustomEnchantments.UNSHINY.has(stack)) {
meta.setEnchantmentGlintOverride(false);
}
}

View file

@ -51,7 +51,7 @@ public class EnchantmentTome extends ContextlessItem {
}
protected Component getComponent() {
return getWrapper().getLevelessComponent();
return getWrapper().getDescription();
}
public EnchantmentWrapper getWrapper() {
return wrapper;

View file

@ -29,19 +29,39 @@ import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public interface EnchantmentWrapper {
ItemStack apply(ItemStack tool, int level);
int getLevel(ItemStack tool);
boolean canEnchantItem(ItemStack tool);
boolean canGoOnItem(ItemStack tool);
default boolean canEnchantItem(ItemStack tool) {
for(Map.Entry<EnchantmentWrapper, Integer> entry : EnchantmentHelper.getEnchantmentWrappers(tool).entrySet()) {
if(this.conflictsWith(entry.getKey()))
{
return false;
}
if(entry.getKey().conflictsWith(this))
{
return false;
}
}
return this.canGoOnItem(tool);
}
default ItemStack remove(ItemStack tool) {
return apply(tool, 0);
}
default boolean conflictsWith(EnchantmentWrapper wrapper) {
if(wrapper instanceof VanillaEnchantmentWrapper vanilla) {
return conflictsWith(vanilla.getEnchantment());
}
if(wrapper instanceof CustomEnchantment custom) {
conflictsWith(custom);
return conflictsWith(custom);
}
return false;
}
@ -56,7 +76,7 @@ public interface EnchantmentWrapper {
NamespacedKey getKey();
Component getComponent(int level);
Component getLevelessComponent();
Component getDescription();
default String getWarning(int level) {
return null;
@ -122,7 +142,7 @@ public interface EnchantmentWrapper {
meta.setMaxStackSize(getMaxLevel());
meta.setHideTooltip(false);
meta.setEnchantmentGlintOverride(level > 0);
meta.itemName(level > 0 ? getComponent(level) : getLevelessComponent());
meta.itemName(level > 0 ? getComponent(level) : getDescription());
meta.lore(lore);
meta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP);
result.setItemMeta(meta);
@ -149,4 +169,10 @@ public interface EnchantmentWrapper {
default int getMaxLevel() {
return getRecipes().size();
}
default boolean has(ItemStack stack) {
return getLevel(stack) != 0;
}
boolean canBeRemoved();
}

View file

@ -17,6 +17,7 @@ package de.blazemcworld.blazinggames.enchantments.sys;
import de.blazemcworld.blazinggames.enchantments.sys.VanillaEnchantmentWrapper.Warning;
import de.blazemcworld.blazinggames.enchantments.sys.altar.AltarRecipe;
import de.blazemcworld.blazinggames.items.predicates.BreakableItemPredicate;
import de.blazemcworld.blazinggames.items.predicates.ColorlessItemPredicate;
import de.blazemcworld.blazinggames.items.CustomItems;
import de.blazemcworld.blazinggames.items.predicates.MaterialItemPredicate;
@ -113,7 +114,8 @@ public class EnchantmentWrappers {
new AltarRecipe(4,4, 4, 32, new MaterialItemPredicate(Material.BLAZE_POWDER))
);
public static VanillaEnchantmentWrapper MENDING =
new VanillaEnchantmentWrapper(Enchantment.MENDING, () -> new ItemStack(Material.SHULKER_SHELL),
new OverridableVanillaEnchantmentWrapper(Enchantment.MENDING, () -> new ItemStack(Material.SHULKER_SHELL),
new OverridableVanillaEnchantmentWrapper.VanillaEnchantmentOverrides().conflicts(),
new AltarRecipe(4,10, 15, CustomItems.NETHER_STAR_CHUNK)
);
public static VanillaEnchantmentWrapper LOYALTY =
@ -209,7 +211,8 @@ public class EnchantmentWrappers {
new AltarRecipe(3,2, 8, 32, new MaterialItemPredicate(Material.BLAZE_POWDER))
);
public static VanillaEnchantmentWrapper UNBREAKING =
new VanillaEnchantmentWrapper(Enchantment.UNBREAKING, () -> new ItemStack(Material.BEDROCK),
new OverridableVanillaEnchantmentWrapper(Enchantment.UNBREAKING, () -> new ItemStack(Material.BEDROCK),
new OverridableVanillaEnchantmentWrapper.VanillaEnchantmentOverrides().target(BreakableItemPredicate.instance),
new AltarRecipe(2,1, 2, 32, new MaterialItemPredicate(Material.IRON_INGOT)),
new AltarRecipe(3,2, 4, 32, new MaterialItemPredicate(Material.OBSIDIAN)),
new AltarRecipe(4,3, 8, 2, new MaterialItemPredicate(Material.NETHERITE_SCRAP))
@ -225,7 +228,9 @@ public class EnchantmentWrappers {
new AltarRecipe(3,3, 4, 16, new MaterialItemPredicate(Material.PUFFERFISH))
);
public static VanillaEnchantmentWrapper INFINITY =
new VanillaEnchantmentWrapper(Enchantment.INFINITY, () -> new ItemStack(Material.CHORUS_FLOWER),
new OverridableVanillaEnchantmentWrapper(Enchantment.INFINITY, () -> new ItemStack(Material.CHORUS_FLOWER),
new OverridableVanillaEnchantmentWrapper.VanillaEnchantmentOverrides().target(BlazingEnchantmentTarget.BOW_ROCKET)
.conflicts(),
new AltarRecipe(4,1, 8, 64, new MaterialItemPredicate(Material.ARROW))
);
public static VanillaEnchantmentWrapper EFFICIENCY =
@ -299,18 +304,20 @@ public class EnchantmentWrappers {
);
}
public static Set<EnchantmentWrapper> list() {
public static Set<EnchantmentWrapper> list(boolean removeTreasure) {
Set<EnchantmentWrapper> wrappers = new HashSet<>(CustomEnchantments.list());
wrappers.addAll(vanilla());
wrappers.removeIf(EnchantmentWrapper::isTreasure);
if(removeTreasure) {
wrappers.removeIf(EnchantmentWrapper::isTreasure);
}
return wrappers;
}
public static @Nullable EnchantmentWrapper getByKey(NamespacedKey key) {
for(EnchantmentWrapper curr : list()) {
for(EnchantmentWrapper curr : list(false)) {
if(curr.getKey().equals(key)) {
return curr;
}

View file

@ -0,0 +1,79 @@
/*
* Copyright 2025 The Blazing Games Maintainers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.blazemcworld.blazinggames.enchantments.sys;
import de.blazemcworld.blazinggames.BlazingGames;
import de.blazemcworld.blazinggames.enchantments.sys.altar.AltarRecipe;
import de.blazemcworld.blazinggames.items.predicates.ItemPredicate;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
public class OverridableVanillaEnchantmentWrapper extends VanillaEnchantmentWrapper {
public static class VanillaEnchantmentOverrides {
private ItemPredicate target;
private List<Enchantment> conflicts = null;
public VanillaEnchantmentOverrides target(ItemPredicate target) {
this.target = target;
return this;
}
public VanillaEnchantmentOverrides conflicts(Enchantment... conflicts) {
return conflicts(List.of(conflicts));
}
public VanillaEnchantmentOverrides conflicts(List<Enchantment> conflicts) {
this.conflicts = new ArrayList<>(conflicts);
return this;
}
}
private final VanillaEnchantmentOverrides overrides;
public OverridableVanillaEnchantmentWrapper(Enchantment enchantment, Supplier<ItemStack> icon, List<Warning> warnings, VanillaEnchantmentOverrides overrides, AltarRecipe... recipes) {
super(enchantment, icon, warnings, recipes);
this.overrides = overrides;
}
public OverridableVanillaEnchantmentWrapper(Enchantment enchantment, Supplier<ItemStack> icon, VanillaEnchantmentOverrides overrides, AltarRecipe... recipes) {
super(enchantment, icon, recipes);
this.overrides = overrides;
}
@Override
public boolean canGoOnItem(ItemStack tool) {
if(overrides.target != null) {
return overrides.target.matchItem(tool);
}
return super.canGoOnItem(tool);
}
@Override
public boolean conflictsWith(Enchantment other) {
BlazingGames.get().log(overrides.conflicts);
if(overrides.conflicts != null) {
return overrides.conflicts.contains(other);
}
return super.conflictsWith(other);
}
}

View file

@ -24,10 +24,8 @@ import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
public class VanillaEnchantmentWrapper implements EnchantmentWrapper {
@ -67,36 +65,6 @@ public class VanillaEnchantmentWrapper implements EnchantmentWrapper {
return tool.getEnchantmentLevel(enchantment);
}
@Override
public boolean canEnchantItem(ItemStack tool) {
Map<CustomEnchantment, Integer> customEnchantmentLevels = EnchantmentHelper.getCustomEnchantments(tool);
for(Map.Entry<CustomEnchantment, Integer> entry : customEnchantmentLevels.entrySet()) {
if(entry.getKey().conflictsWith(enchantment)) {
return false;
}
}
if(tool.getItemMeta() != null && tool.getItemMeta().hasConflictingEnchant(enchantment)) {
for(Map.Entry<Enchantment, Integer> entry : tool.getItemMeta().getEnchants().entrySet()) {
if(entry.getKey().equals(enchantment)) {
continue;
}
if(entry.getKey().conflictsWith(enchantment)) {
return false;
}
}
}
if(tool.getItemMeta() instanceof EnchantmentStorageMeta esm) {
if(esm.hasConflictingStoredEnchant(enchantment)) {
return false;
}
}
return canGoOnItem(tool);
}
@Override
public boolean canGoOnItem(ItemStack tool) {
return enchantment.canEnchantItem(tool) || tool.getType() == Material.BOOK
@ -124,7 +92,7 @@ public class VanillaEnchantmentWrapper implements EnchantmentWrapper {
}
@Override
public Component getLevelessComponent() {
public Component getDescription() {
TextColor color = NamedTextColor.GRAY;
if(enchantment.isCursed()) {
@ -149,6 +117,11 @@ public class VanillaEnchantmentWrapper implements EnchantmentWrapper {
return recipes;
}
@Override
public boolean canBeRemoved() {
return enchantment.isCursed();
}
public Enchantment getEnchantment() {
return enchantment;
}

View file

@ -137,7 +137,7 @@ public class AltarInterface extends UserInterface {
public Set<EnchantmentWrapper> getAvailable() {
ItemStack tool = getItem(1,1);
Set<EnchantmentWrapper> result = EnchantmentWrappers.list();
Set<EnchantmentWrapper> result = EnchantmentWrappers.list(true);
result.removeIf((wrapper) -> wrapper.getRecipe(1).tier() > tier);

View file

@ -109,7 +109,7 @@ public class BreakBlockEventListener implements Listener {
fakeBreakBlock(player, event.getBlock(), false);
if (EnchantmentHelper.hasActiveCustomEnchantment(mainHand, CustomEnchantments.TREE_FELLER)) {
if (EnchantmentHelper.hasActiveEnchantmentWrapper(mainHand, CustomEnchantments.TREE_FELLER)) {
if (logs.contains(event.getBlock().getType())) {
if (player.getFoodLevel() <= 6) {
return;
@ -117,7 +117,7 @@ public class BreakBlockEventListener implements Listener {
ItemStack axe = player.getInventory().getItemInMainHand();
int treeFeller = EnchantmentHelper.getActiveCustomEnchantmentLevel(axe, CustomEnchantments.TREE_FELLER);
int treeFeller = EnchantmentHelper.getActiveEnchantmentWrapperLevel(axe, CustomEnchantments.TREE_FELLER);
if (treeFeller <= 0) {
return;
@ -159,7 +159,7 @@ public class BreakBlockEventListener implements Listener {
}
}
int pattern = EnchantmentHelper.getActiveCustomEnchantmentLevel(mainHand, CustomEnchantments.PATTERN);
int pattern = EnchantmentHelper.getActiveEnchantmentWrapperLevel(mainHand, CustomEnchantments.PATTERN);
if (pattern > 0 && face != null) {
Pair<Integer, Integer> dimensions = PatternEnchantment.dimensions.get(pattern - 1);
@ -203,7 +203,7 @@ public class BreakBlockEventListener implements Listener {
ItemStack axe = player.getInventory().getItemInMainHand();
int treeFeller = EnchantmentHelper.getActiveCustomEnchantmentLevel(axe, CustomEnchantments.TREE_FELLER);
int treeFeller = EnchantmentHelper.getActiveEnchantmentWrapperLevel(axe, CustomEnchantments.TREE_FELLER);
if (treeFeller <= 0) {
return;
@ -285,7 +285,7 @@ public class BreakBlockEventListener implements Listener {
}
}
if (EnchantmentHelper.hasActiveCustomEnchantment(mainHand, CustomEnchantments.FLAME_TOUCH)) {
if (EnchantmentHelper.hasActiveEnchantmentWrapper(mainHand, CustomEnchantments.FLAME_TOUCH)) {
Iterator<ItemStack> iter = drops.iterator();
List<ItemStack> smeltedDrops = new ArrayList<>();

View file

@ -61,7 +61,7 @@ public class EntityDamagedByEventListener implements Listener {
}
double damageAdded = 0;
for(Map.Entry<CustomEnchantment, Integer> enchantment : EnchantmentHelper.getActiveCustomEnchantments(weapon).entrySet()) {
for(Map.Entry<CustomEnchantment, Integer> enchantment : EnchantmentHelper.getActiveEnchantmentWrappers(weapon).entrySet()) {
damageAdded += enchantment.getKey().getDamageIncrease(victim, enchantment.getValue());
}
@ -74,7 +74,7 @@ public class EntityDamagedByEventListener implements Listener {
if(victim instanceof Player p && damager instanceof Damageable damageable) {
if(p.isBlocking() && event.getDamage(EntityDamageEvent.DamageModifier.BLOCKING) != 0) {
ItemStack shield = p.getActiveItem();
int reflectiveDefenses = EnchantmentHelper.getActiveCustomEnchantmentLevel(shield, CustomEnchantments.REFLECTIVE_DEFENSES);
int reflectiveDefenses = EnchantmentHelper.getActiveEnchantmentWrapperLevel(shield, CustomEnchantments.REFLECTIVE_DEFENSES);
if(reflectiveDefenses != 0 && new Random().nextInt(Math.max(7 - reflectiveDefenses, 2)) == 0) {
double dmg = Math.abs(event.getDamage(EntityDamageEvent.DamageModifier.BLOCKING)) * 0.15;

View file

@ -49,7 +49,7 @@ public class EntityDeathEventListener implements Listener {
ItemStack mainHand = killer.getInventory().getItemInMainHand();
int capturing = EnchantmentHelper.getActiveCustomEnchantmentLevel(mainHand, CustomEnchantments.CAPTURING);
int capturing = EnchantmentHelper.getActiveEnchantmentWrapperLevel(mainHand, CustomEnchantments.CAPTURING);
if (Math.random() < capturing * 0.03 && !victim.getEntitySpawnReason().equals(CreatureSpawnEvent.SpawnReason.SPAWNER)) {
Material spawnEgg = Material.getMaterial(victim.getType().getKey().getKey().toUpperCase() + "_SPAWN_EGG");
@ -60,7 +60,7 @@ public class EntityDeathEventListener implements Listener {
}
}
int scavenger = EnchantmentHelper.getActiveCustomEnchantmentLevel(mainHand, CustomEnchantments.SCAVENGER);
int scavenger = EnchantmentHelper.getActiveEnchantmentWrapperLevel(mainHand, CustomEnchantments.SCAVENGER);
if(Math.random() < scavenger*0.01) {
victim.getWorld().playSound(victim, Sound.BLOCK_CHISELED_BOOKSHELF_PICKUP_ENCHANTED, 1, 0.5f);

View file

@ -236,7 +236,7 @@ public class InteractEventListener implements Listener {
}
}
if (event.getAction() == Action.RIGHT_CLICK_BLOCK && block != null && hand != null && eventItem != null) {
if(EnchantmentHelper.hasActiveCustomEnchantment(eventItem, CustomEnchantments.NATURE_BLESSING)) {
if(EnchantmentHelper.hasActiveEnchantmentWrapper(eventItem, CustomEnchantments.NATURE_BLESSING)) {
if(!dirt.contains(block.getType()) || player.isSneaking()) {
if(block.applyBoneMeal(event.getBlockFace())) {
eventItem = eventItem.damage(1, player);

View file

@ -15,11 +15,9 @@
*/
package de.blazemcworld.blazinggames.events;
import de.blazemcworld.blazinggames.enchantments.sys.CustomEnchantment;
import de.blazemcworld.blazinggames.enchantments.sys.CustomEnchantments;
import de.blazemcworld.blazinggames.enchantments.sys.EnchantmentHelper;
import de.blazemcworld.blazinggames.items.CustomItems;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.event.EventHandler;
@ -139,16 +137,4 @@ public class LootGenerateEventListener implements Listener {
}
return false;
}
private ItemStack createRandomBook(CustomEnchantment enchantment, Random random) {
return enchantRandomTool(new ItemStack(Material.BOOK), enchantment, random);
}
private ItemStack createBook(CustomEnchantment enchantment, int level) {
return EnchantmentHelper.enchantTool(new ItemStack(Material.BOOK), enchantment, level);
}
private ItemStack enchantRandomTool(ItemStack stack, CustomEnchantment enchantment, Random random) {
return EnchantmentHelper.enchantTool(stack, enchantment, random.nextInt(enchantment.getMaxLevel()) + 1);
}
}

View file

@ -91,9 +91,6 @@ public class PrepareGrindstoneEventListener implements Listener {
}
public ItemStack grindstoneItem(ItemStack up, ItemStack down, ItemStack result) {
if(CustomItem.isCustomItem(up)) return ItemStack.empty();
if(CustomItem.isCustomItem(down)) return ItemStack.empty();
if(up == null || up.isEmpty()) {
ItemStack swap = down;
down = up;
@ -105,12 +102,12 @@ public class PrepareGrindstoneEventListener implements Listener {
else if(down != null && !down.isEmpty())
{
// double
if(down.getType() == Material.SPONGE || down.getType() == Material.WET_SPONGE) {
if(!CustomItem.isCustomItem(down) && (down.getType() == Material.SPONGE || down.getType() == Material.WET_SPONGE)) {
if(EnchantmentHelper.canEnchantItem(up)) {
return scrub(up, down);
}
}
if(up.getType() == Material.SPONGE || up.getType() == Material.WET_SPONGE) {
if(!CustomItem.isCustomItem(down) && (up.getType() == Material.SPONGE || up.getType() == Material.WET_SPONGE)) {
if(EnchantmentHelper.canEnchantItem(down)) {
return scrub(down, up);
}
@ -129,7 +126,7 @@ public class PrepareGrindstoneEventListener implements Listener {
return null;
}
result = EnchantmentHelper.removeCustomEnchantments(result);
result = EnchantmentHelper.removeEnchantments(result);
if(result.equals(up)) {
return null;

View file

@ -73,7 +73,7 @@ public class TickEventListener {
}
}
int updraft = EnchantmentHelper.getActiveCustomEnchantmentLevel(chestplate,
int updraft = EnchantmentHelper.getActiveEnchantmentWrapperLevel(chestplate,
CustomEnchantments.UPDRAFT);
if(updraft > 0) {
if(l.isGliding()) {

View file

@ -16,10 +16,11 @@
package de.blazemcworld.blazinggames.items.predicates;
import de.blazemcworld.blazinggames.enchantments.sys.BlazingEnchantmentTarget;
import de.blazemcworld.blazinggames.enchantments.sys.PaperEnchantmentTarget;
public class ItemPredicates {
public static final ItemPredicate enchantability = new AlternativeItemPredicate("Any Enchantable Item",
BreakableItemPredicate.instance, PaperEnchantmentTarget.ALL
BreakableItemPredicate.instance, PaperEnchantmentTarget.ALL, BlazingEnchantmentTarget.BOW_ROCKET
);
}

View file

@ -72,7 +72,7 @@ public class InventoryUtils {
}
public static void collectableDrop(Player player, Location location, Drops drops) {
if (EnchantmentHelper.hasActiveCustomEnchantment(player.getInventory().getItemInMainHand(), CustomEnchantments.COLLECTABLE)) {
if (EnchantmentHelper.hasActiveEnchantmentWrapper(player.getInventory().getItemInMainHand(), CustomEnchantments.COLLECTABLE)) {
player.giveExp(drops.getExperienceDropped(), true);
for (ItemStack drop : drops) {