add an option for telepathy config to only make items pick-upable by the player who broke the block

This commit is contained in:
2025-06-13 18:28:28 +02:00
parent 58c8d9675f
commit 20a6d90f56
4 changed files with 23 additions and 8 deletions
@@ -94,6 +94,12 @@ Maximum level of the enchantment. If set to 1, the enchantment will be a single
in the configuration section for specific enchantment, it means it's locked to a single level enchantment, because logic
of the enchantment does not support multiple levels.
## Telepathy
- **Type**: `boolean`
If set to true, items teleported by the enchant will only be able to be picked up by the player that broke the block.
## Executioner
### maxDamageHpThreshold
+1 -1
View File
@@ -15,7 +15,7 @@
<properties>
<java.version>21</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<revision>1.12.0</revision>
<revision>1.13.0</revision>
</properties>
<url>https://youhavetrouble.me</url>
@@ -27,6 +27,7 @@ public class TelepathyEnchant implements EnchantioEnchant {
private final Set<TagEntry<ItemType>> supportedItemTags = new HashSet<>();
private final Set<TagKey<Enchantment>> enchantTagKeys = new HashSet<>();
private final Set<EquipmentSlotGroup> activeSlots = new HashSet<>();
private final boolean onlyUserCanPickupItems;
public TelepathyEnchant(
int anvilCost,
@@ -35,7 +36,8 @@ public class TelepathyEnchant implements EnchantioEnchant {
EnchantmentRegistryEntry.EnchantmentCost maximumCost,
Collection<TagKey<Enchantment>> enchantTagKeys,
Collection<TagEntry<ItemType>> supportedItemTags,
Collection<EquipmentSlotGroup> activeSlots
Collection<EquipmentSlotGroup> activeSlots,
boolean onlyUserCanPickupItems
) {
this.anvilCost = anvilCost;
this.weight = weight;
@@ -44,6 +46,7 @@ public class TelepathyEnchant implements EnchantioEnchant {
this.supportedItemTags.addAll(supportedItemTags);
this.activeSlots.addAll(activeSlots);
this.enchantTagKeys.addAll(enchantTagKeys);
this.onlyUserCanPickupItems = onlyUserCanPickupItems;
}
@Override
@@ -96,6 +99,10 @@ public class TelepathyEnchant implements EnchantioEnchant {
return Collections.unmodifiableSet(enchantTagKeys);
}
public boolean isOnlyUserCanPickupItems() {
return onlyUserCanPickupItems;
}
public static TelepathyEnchant create(ConfigurationSection configurationSection) {
TelepathyEnchant telepathyEnchant = new TelepathyEnchant(
EnchantioConfig.getInt(configurationSection, "anvilCost", 1),
@@ -126,7 +133,8 @@ public class TelepathyEnchant implements EnchantioEnchant {
List.of(
"MAINHAND"
)
))
)),
EnchantioConfig.getBoolean(configurationSection, "onlyUserCanPickupItems", false)
);
if (EnchantioConfig.getBoolean(configurationSection, "enabled", true)) {
@@ -3,6 +3,7 @@ package me.youhavetrouble.enchantio.listeners;
import io.papermc.paper.registry.RegistryAccess;
import io.papermc.paper.registry.RegistryKey;
import me.youhavetrouble.enchantio.EnchantioConfig;
import me.youhavetrouble.enchantio.enchants.TelepathyEnchant;
import org.bukkit.Registry;
import org.bukkit.enchantments.Enchantment;
@@ -13,25 +14,25 @@ import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockDropItemEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
public class TelepathyListener implements Listener {
private final Registry<Enchantment> registry = RegistryAccess.registryAccess().getRegistry(RegistryKey.ENCHANTMENT);
private final Registry<@NotNull Enchantment> registry = RegistryAccess.registryAccess().getRegistry(RegistryKey.ENCHANTMENT);
private final Enchantment telepathy = registry.get(TelepathyEnchant.KEY);
@EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL)
public void onTelepathyTool(BlockDropItemEvent event) {
if (telepathy == null) return;
if (!(EnchantioConfig.ENCHANTS.get(TelepathyEnchant.KEY) instanceof TelepathyEnchant telepathyEnchant)) return;
ItemStack tool = event.getPlayer().getInventory().getItemInMainHand();
if (!tool.containsEnchantment(telepathy)) return;
for (Item item : event.getItems()) {
item.teleport(event.getPlayer(), PlayerTeleportEvent.TeleportCause.PLUGIN);
item.setPickupDelay(0);
if (!telepathyEnchant.isOnlyUserCanPickupItems()) continue;
item.setOwner(event.getPlayer().getUniqueId());
}
}
}