added fortune and infinity for hoe
All checks were successful
Gitea Actions Demo / Build-Gradle (push) Successful in 3m14s

This commit is contained in:
Your Name
2025-07-28 11:50:00 +02:00
parent a2cb88b5fe
commit e5edef0716
13 changed files with 276 additions and 207 deletions

View File

@@ -1,2 +1,2 @@
Command: /opt/homebrew/Cellar/openjdk/23.0.2/libexec/openjdk.jdk/Contents/Home/bin/java -Xmx1G -classpath /Users/janik/.gradle/caches/modules-2/files-2.1/net.fabricmc/tiny-remapper/0.11.1/6c1f29838864ba8f495855edfc8ef17706fedb5d/tiny-remapper-0.11.1-fat.jar net.fabricmc.tinyremapper.Main /Users/janik/Desktop/MCPlugins/environmentex-1.0-SNAPSHOT.jar /Users/janik/Desktop/MCPlugins/environmentex/build/libs/environmentex-1.0-SNAPSHOT-reobf.jar /Users/janik/Desktop/MCPlugins/environmentex/.gradle/caches/paperweight/taskCache/reobfMappings.tiny mojang spigot /Users/janik/Desktop/MCPlugins/environmentex/.gradle/caches/paperweight/taskCache/mappedServerJar.jar --threads=1 Command: /opt/homebrew/Cellar/openjdk/23.0.2/libexec/openjdk.jdk/Contents/Home/bin/java -Xmx1G -classpath /Users/janik/.gradle/caches/modules-2/files-2.1/net.fabricmc/tiny-remapper/0.11.1/6c1f29838864ba8f495855edfc8ef17706fedb5d/tiny-remapper-0.11.1-fat.jar net.fabricmc.tinyremapper.Main /Users/janik/Desktop/MCPlugins/environmentex-1.0-SNAPSHOT.jar /Users/janik/Desktop/MCPlugins/environmentex/build/libs/environmentex-1.0-SNAPSHOT-reobf.jar /Users/janik/Desktop/MCPlugins/environmentex/.gradle/caches/paperweight/taskCache/reobfMappings.tiny mojang spigot /Users/janik/Desktop/MCPlugins/environmentex/.gradle/caches/paperweight/taskCache/mappedServerJar.jar --threads=1
[INFO] Finished after 998,05 ms. [INFO] Finished after 880,98 ms.

View File

@@ -6,8 +6,6 @@ import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
@@ -15,9 +13,7 @@ import org.bukkit.World;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.Recipe; import org.bukkit.inventory.Recipe;
@@ -463,6 +459,7 @@ public class App extends JavaPlugin {
pM.registerEvents(new PinFeature(), this); pM.registerEvents(new PinFeature(), this);
pM.registerEvents(new SquidPrevention(), this); pM.registerEvents(new SquidPrevention(), this);
pM.registerEvents(new EntityMuter(), this); pM.registerEvents(new EntityMuter(), this);
pM.registerEvents(new BetterHoes(), this);
getCommand("test").setExecutor(new EnvironmentExCommands()); getCommand("test").setExecutor(new EnvironmentExCommands());
getCommand("y").setExecutor(new EnvironmentExCommands()); getCommand("y").setExecutor(new EnvironmentExCommands());
getCommand("n").setExecutor(new EnvironmentExCommands()); getCommand("n").setExecutor(new EnvironmentExCommands());

View File

@@ -0,0 +1,253 @@
package de.hessj.environmentex;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.block.data.Ageable;
import org.bukkit.block.data.BlockData;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityInteractEvent;
import org.bukkit.event.inventory.PrepareAnvilEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.AnvilInventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.view.AnvilView;
import org.bukkit.scheduler.BukkitRunnable;
import io.netty.util.internal.ThreadLocalRandom;
import java.util.EnumSet;
import java.util.Random;
import java.util.Set;
public class BetterHoes implements Listener {
@EventHandler
public void onAnvilPrepare(PrepareAnvilEvent event) {
AnvilInventory inv = event.getInventory();
AnvilView av = event.getView();
ItemStack left = inv.getItem(0);
ItemStack right = inv.getItem(1);
if (left == null || right == null) return;
if (!left.getType().name().endsWith("_HOE")) return;
if (right.getType() != Material.ENCHANTED_BOOK) return;
if (!(right.getItemMeta() instanceof EnchantmentStorageMeta bookMeta)) return;
if (!bookMeta.hasStoredEnchant(Enchantment.INFINITY)) return;
// Create the new hoe with Infinity
ItemStack result = left.clone();
result.addUnsafeEnchantment(Enchantment.INFINITY, 1);
event.setResult(result);
// Set repair cost using the view (modern API)
new BukkitRunnable() {
@Override
public void run() {
av.setRepairCost(6);
}
}.runTaskLater(App.main, 1L);
}
public boolean hasInfinity(ItemStack item) {
if (item == null || !item.hasItemMeta())
return false;
ItemMeta meta = item.getItemMeta();
return meta.hasEnchant(Enchantment.INFINITY);
}
private static final Set<Material> HARVESTABLE_CROPS = EnumSet.of(
Material.WHEAT,
Material.CARROTS,
Material.POTATOES,
Material.BEETROOTS);
@EventHandler
public void onPlayerStepFarmland(PlayerInteractEvent event) {
if (event.getAction() == Action.PHYSICAL && event.getClickedBlock() != null &&
event.getClickedBlock().getType() == Material.FARMLAND) {
event.setCancelled(true);
}
}
@EventHandler
public void onEntityStepFarmland(EntityInteractEvent event) {
if (event.getEntityType() != EntityType.PLAYER &&
event.getBlock() != null && event.getBlock().getType() == Material.FARMLAND) {
event.setCancelled(true);
}
}
@EventHandler
public void onHoeHarvest(PlayerInteractEvent event) {
if (event.getAction() != Action.LEFT_CLICK_BLOCK || event.getClickedBlock() == null)
return;
Block clicked = event.getClickedBlock();
Material type = clicked.getType();
if (!HARVESTABLE_CROPS.contains(type))
return;
ItemStack tool = event.getPlayer().getInventory().getItemInMainHand();
if (tool == null || !tool.getType().name().endsWith("_HOE"))
return;
int radius = switch (tool.getType()) {
case IRON_HOE -> 1;
case GOLDEN_HOE -> 2;
case DIAMOND_HOE -> 3;
case NETHERITE_HOE -> 4;
default -> 0;
};
harvest(event, clicked, radius);
}
private void harvest(PlayerInteractEvent event, Block center, int radius) {
event.setCancelled(true);
PlayerInventoryHelper helper = new PlayerInventoryHelper(event.getPlayer());
if (radius > 0) {
event.getPlayer().spawnParticle(Particle.SWEEP_ATTACK,
event.getPlayer().getEyeLocation()
.add(event.getPlayer().getLocation().getDirection().multiply(1.5)),
1);
}
for (int dx = -radius; dx <= radius; dx++) {
for (int dy = -radius; dy <= radius; dy++) {
for (int dz = -radius; dz <= radius; dz++) {
Block target = center.getRelative(dx, dy, dz);
tryHarvestCrop(event, target, helper);
}
}
}
// Also process the center block last to guarantee it runs even with radius 0
tryHarvestCrop(event, center, helper);
}
private void tryHarvestCrop(PlayerInteractEvent event, Block block, PlayerInventoryHelper helper) {
BlockData data = block.getBlockData();
if (!(data instanceof Ageable ageable))
return;
if (ageable.getAge() < ageable.getMaximumAge())
return;
Material cropType = block.getType();
if (!HARVESTABLE_CROPS.contains(cropType))
return;
if (!helper.hasDurability()) {
helper.breakTool();
return;
}
block.setType(Material.AIR);
helper.damageTool(toolDamageChance(helper.getTool().getType()));
// block.getWorld().dropItemNaturally(block.getLocation(), getCropDrop(cropType));
dropCrop(cropType, block.getLocation(), helper.getTool());
if (hasInfinity(helper.getTool())) {
block.setType(cropType); // reset crop
}
}
private void dropCrop(Material cropType, Location location, ItemStack tool) {
World world = location.getWorld();
ThreadLocalRandom random = ThreadLocalRandom.current();
int fortuneLevel = 0;
if (tool != null && tool.containsEnchantment(Enchantment.FORTUNE)) {
fortuneLevel = tool.getEnchantmentLevel(Enchantment.FORTUNE);
}
switch (cropType) {
case WHEAT -> {
world.dropItemNaturally(location, new ItemStack(Material.WHEAT));
int seedCount = 1 + random.nextInt(3); // vanilla: 03 seeds (simplified)
world.dropItemNaturally(location, new ItemStack(Material.WHEAT_SEEDS, seedCount));
}
case CARROTS -> {
int base = 1;
int extra = random.nextInt(fortuneLevel + 2); // fortune increases upper bound
int total = base + extra;
world.dropItemNaturally(location, new ItemStack(Material.CARROT, total));
}
case POTATOES -> {
int base = 1;
int extra = random.nextInt(fortuneLevel + 2);
int total = base + extra;
world.dropItemNaturally(location, new ItemStack(Material.POTATO, total));
// Slightly increase chance of poisonous potato with Fortune
double poisonChance = 0.02 + (0.005 * fortuneLevel);
if (random.nextDouble() < poisonChance) {
world.dropItemNaturally(location, new ItemStack(Material.POISONOUS_POTATO));
}
}
case BEETROOTS -> {
world.dropItemNaturally(location, new ItemStack(Material.BEETROOT));
int seedCount = 1 + random.nextInt(3);
world.dropItemNaturally(location, new ItemStack(Material.BEETROOT_SEEDS, seedCount));
}
default -> {
// No valid crop — optional: log or ignore
}
}
}
private int toolDamageChance(Material toolType) {
double chance = switch (toolType) {
case WOODEN_HOE -> 0.70;
case STONE_HOE -> 0.75;
case IRON_HOE -> 0.80;
case GOLDEN_HOE -> 0.85;
case DIAMOND_HOE -> 0.90;
case NETHERITE_HOE -> 0.95;
default -> 0.70;
};
return new Random().nextDouble() < chance ? 0 : 1;
}
// Helper class for handling tool durability and inventory safely
static class PlayerInventoryHelper {
private final org.bukkit.entity.Player player;
private final ItemStack tool;
private final Damageable meta;
public PlayerInventoryHelper(org.bukkit.entity.Player player) {
this.player = player;
this.tool = player.getInventory().getItemInMainHand();
this.meta = (Damageable) tool.getItemMeta();
}
public ItemStack getTool() {
return tool;
}
public boolean hasDurability() {
return meta.getDamage() < tool.getType().getMaxDurability();
}
public void damageTool(int amount) {
meta.setDamage(meta.getDamage() + amount);
tool.setItemMeta(meta);
}
public void breakTool() {
player.getInventory().clear(player.getInventory().getHeldItemSlot());
player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1);
}
}
}

View File

@@ -0,0 +1,20 @@
package de.hessj.environmentex;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityTargetEvent;
public class EntityMuter implements Listener {
@EventHandler
public void onEntitySound(EntityTargetEvent event) {
if (event.getEntity().getType() != EntityType.ZOMBIE && event.getTarget() != null && event.getTarget().getType() != EntityType.VILLAGER) {
return;
}
if (event.getEntity().customName() != null) {
if (event.getEntity().customName().toString().contains("muted")) {
event.getEntity().setSilent(true);
}
}
}
}

View File

@@ -1,6 +1,5 @@
package de.hessj.environmentex; package de.hessj.environmentex;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -13,20 +12,15 @@ import java.util.UUID;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.SoundCategory; import org.bukkit.SoundCategory;
import org.bukkit.Statistic; import org.bukkit.Statistic;
import org.bukkit.Tag; import org.bukkit.Tag;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.block.data.Ageable;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.Fence; import org.bukkit.block.data.type.Fence;
import org.bukkit.block.data.type.Leaves; import org.bukkit.block.data.type.Leaves;
import org.bukkit.block.data.type.Stairs; import org.bukkit.block.data.type.Stairs;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Axolotl; import org.bukkit.entity.Axolotl;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Fish; import org.bukkit.entity.Fish;
@@ -42,7 +36,6 @@ import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.LeavesDecayEvent; import org.bukkit.event.block.LeavesDecayEvent;
import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityInteractEvent;
import org.bukkit.event.entity.EntityTargetLivingEntityEvent; import org.bukkit.event.entity.EntityTargetLivingEntityEvent;
import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
@@ -57,12 +50,9 @@ import org.bukkit.event.inventory.PrepareItemCraftEvent;
import org.bukkit.event.player.PlayerAttemptPickupItemEvent; import org.bukkit.event.player.PlayerAttemptPickupItemEvent;
import org.bukkit.event.player.PlayerBedEnterEvent; import org.bukkit.event.player.PlayerBedEnterEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.Vector;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.MerchantRecipe; import org.bukkit.inventory.MerchantRecipe;
import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType; import org.bukkit.persistence.PersistentDataType;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import de.hessj.helper.Helper; import de.hessj.helper.Helper;
@@ -267,197 +257,6 @@ if(LoginListener.customConfig.getBoolean("players." + p.getUniqueId() + ".ignore
} }
@EventHandler
public void soilChangePlayer(PlayerInteractEvent event) {
if (event.getAction() == Action.PHYSICAL && event.getClickedBlock().getType() == Material.FARMLAND) {
event.setCancelled(true);
}
}
@EventHandler
public void soilChangeEntity(EntityInteractEvent event) {
if (event.getEntityType() != EntityType.PLAYER && event.getBlock().getType() == Material.FARMLAND) {
event.setCancelled(true);
}
}
@EventHandler
public void onClick(PlayerInteractEvent e) {
if (e.getAction() == Action.LEFT_CLICK_BLOCK
&& (e.getClickedBlock().getType() == Material.WHEAT || e.getClickedBlock().getType() == Material.CARROTS
|| e.getClickedBlock().getType() == Material.ATTACHED_MELON_STEM
|| e.getClickedBlock().getType() == Material.MELON_STEM
|| e.getClickedBlock().getType() == Material.ATTACHED_PUMPKIN_STEM
|| e.getClickedBlock().getType() == Material.PUMPKIN_STEM
|| e.getClickedBlock().getType() == Material.POTATOES
|| e.getClickedBlock().getType() == Material.BEETROOTS)) {
if (e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.WOODEN_HOE)) {
harvest(0, e);
} else if (e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.STONE_HOE)) {
harvest(0, e);
} else if (e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.IRON_HOE)) {
harvest(1, e);
} else if (e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.GOLDEN_HOE)) {
harvest(2, e);
} else if (e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.DIAMOND_HOE)) {
harvest(3, e);
} else if (e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.NETHERITE_HOE)) {
harvest(4, e);
}
}
}
public static int harvestDMG(Material weapon) {
double perc = 0.70;
if (weapon == Material.WOODEN_HOE) {
perc = 0.70;
} else if (weapon == Material.STONE_HOE) {
perc = 0.75;
} else if (weapon == Material.IRON_HOE) {
perc = 0.80;
} else if (weapon == Material.GOLDEN_HOE) {
perc = 0.85;
} else if (weapon == Material.DIAMOND_HOE) {
perc = 0.90;
} else if (weapon == Material.NETHERITE_HOE) {
perc = 0.95;
}
Random rand = new Random();
return (rand.nextDouble() < perc) ? 0 : 1;
}
void harvest(int radius, PlayerInteractEvent e) {
e.setCancelled(true);
Block middle = e.getClickedBlock();
Material cropM = middle.getType();
ItemStack isCropM;
switch (cropM) {
case POTATOES:
isCropM = new ItemStack(Material.POTATO, 1);
break;
case BEETROOTS:
isCropM = new ItemStack(Material.BEETROOT, 1);
break;
case WHEAT:
isCropM = new ItemStack(Material.WHEAT, 1);
break;
case CARROTS:
isCropM = new ItemStack(Material.CARROT, 1);
break;
default:
isCropM = new ItemStack(Material.AIR, 0);
break;
}
if (middle.getBlockData() instanceof Ageable) {
Ageable ab = (Ageable) middle.getBlockData();
if (ab.getAge() == ab.getMaximumAge()) {
if (e.getPlayer().getInventory().getItemInMainHand() != null
&& ((Damageable) e.getPlayer().getInventory().getItemInMainHand().getItemMeta())
.getDamage() <= e
.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability()) {
if (cropM != Material.PUMPKIN_STEM && cropM != Material.MELON_STEM) {
middle.setType(Material.AIR);
Bukkit.getWorlds().get(0).dropItem(middle.getLocation(), isCropM);
ItemStack is = e.getPlayer().getInventory().getItemInMainHand();
ItemMeta meta = is.getItemMeta();
Damageable d = (Damageable) meta;
d.setDamage(d.getDamage() + harvestDMG(is.getType()));
is.setItemMeta(meta);
middle.setType(cropM);
}
}
if (e.getPlayer().getInventory().getItemInMainHand() != null
&& ((Damageable) e.getPlayer().getInventory().getItemInMainHand().getItemMeta())
.getDamage() >= e
.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability()) {
e.getPlayer().getInventory().clear(e.getPlayer().getInventory().getHeldItemSlot());
e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1);
}
}
}
if (radius != 0) {
Vector direction = e.getPlayer().getLocation().getDirection();
Location location = e.getPlayer().getEyeLocation();
location.add(direction.multiply(1.5D));
e.getPlayer().getWorld().spawnParticle(Particle.SWEEP_ATTACK, location, 1);
for (int x = radius; x >= -radius; x--) {
for (int y = radius; y >= -radius; y--) {
for (int z = radius; z >= -radius; z--) {
BlockData bd = (BlockData) middle.getRelative(x, y, z).getBlockData();
if (bd instanceof Ageable) {
Ageable abR = (Ageable) bd;
if (abR.getAge() == abR.getMaximumAge()) {
try {
if (e.getPlayer().getInventory().getItemInMainHand() != null
&& ((Damageable) e.getPlayer().getInventory().getItemInMainHand()
.getItemMeta()).getDamage() <= e.getPlayer().getInventory()
.getItemInMainHand().getType().getMaxDurability()) {
Material crop = middle.getRelative(x, y, z).getType();
Location loc = middle.getRelative(x, y, z).getLocation();
ItemStack isCrop;
switch (crop) {
case POTATOES:
isCrop = new ItemStack(Material.POTATO, 1);
break;
case BEETROOTS:
isCrop = new ItemStack(Material.BEETROOT, 1);
break;
case WHEAT:
isCrop = new ItemStack(Material.WHEAT, 1);
break;
case CARROTS:
isCrop = new ItemStack(Material.CARROT, 1);
break;
default:
isCrop = new ItemStack(Material.AIR, 0);
break;
}
// middle.getRelative(x, y, z).breakNaturally(new ItemStack(Material.AIR));
if (crop != Material.PUMPKIN_STEM && crop != Material.MELON_STEM) {
middle.getRelative(x, y, z).setType(Material.AIR);
Bukkit.getWorlds().get(0).dropItem(loc, isCrop);
middle.getRelative(x, y, z).setType(crop);
ItemStack is = e.getPlayer().getInventory().getItemInMainHand();
ItemMeta meta = is.getItemMeta();
Damageable d = (Damageable) meta;
d.setDamage(d.getDamage() + harvestDMG(is.getType()));
is.setItemMeta(meta);
}
}
if (e.getPlayer().getInventory().getItemInMainHand() != null
&& ((Damageable) e.getPlayer().getInventory().getItemInMainHand()
.getItemMeta()).getDamage() >= e.getPlayer().getInventory()
.getItemInMainHand().getType().getMaxDurability()) {
e.getPlayer().getInventory()
.clear(e.getPlayer().getInventory().getHeldItemSlot());
e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1,
1);
}
} catch (NullPointerException ex) {
}
}
}
}
}
}
}
}
private long breakDelay = 5; private long breakDelay = 5;
private long decayDelay = 2; private long decayDelay = 2;
private boolean spawnParticles = true; private boolean spawnParticles = true;
@@ -725,7 +524,7 @@ if(LoginListener.customConfig.getBoolean("players." + p.getUniqueId() + ".ignore
return; return;
} }
} }
ItemStack is = e.getPlayer().getInventory().getItemInOffHand(); // ItemStack is = e.getPlayer().getInventory().getItemInOffHand();
if (e.getPlayer().getInventory().getItemInMainHand() != null if (e.getPlayer().getInventory().getItemInMainHand() != null
&& e.getPlayer().getInventory().getItemInMainHand().getItemMeta() != null) { && e.getPlayer().getInventory().getItemInMainHand().getItemMeta() != null) {
if (e.getPlayer().getInventory().getItemInMainHand().getItemMeta().getPersistentDataContainer() if (e.getPlayer().getInventory().getItemInMainHand().getItemMeta().getPersistentDataContainer()