mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-23 00:49:20 +00:00
阻止低版本将自定义物品放到马上
This commit is contained in:
@@ -6,6 +6,9 @@ import net.momirealms.craftengine.bukkit.item.behavior.BoneMealItemBehavior;
|
||||
import net.momirealms.craftengine.bukkit.item.behavior.BucketItemBehavior;
|
||||
import net.momirealms.craftengine.bukkit.item.behavior.WaterBucketItemBehavior;
|
||||
import net.momirealms.craftengine.bukkit.item.factory.BukkitItemFactory;
|
||||
import net.momirealms.craftengine.bukkit.item.listener.ArmorEventListener;
|
||||
import net.momirealms.craftengine.bukkit.item.listener.DebugStickListener;
|
||||
import net.momirealms.craftengine.bukkit.item.listener.ItemEventListener;
|
||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||
import net.momirealms.craftengine.bukkit.util.ItemUtils;
|
||||
@@ -63,6 +66,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
||||
private final BukkitCraftEngine plugin;
|
||||
private final ItemEventListener itemEventListener;
|
||||
private final DebugStickListener debugStickListener;
|
||||
private final ArmorEventListener armorEventListener;
|
||||
private final ItemParser itemParser;
|
||||
|
||||
public BukkitItemManager(BukkitCraftEngine plugin) {
|
||||
@@ -72,6 +76,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
||||
this.factory = BukkitItemFactory.create(plugin);
|
||||
this.itemEventListener = new ItemEventListener(plugin);
|
||||
this.debugStickListener = new DebugStickListener(plugin);
|
||||
this.armorEventListener = new ArmorEventListener();
|
||||
this.itemParser = new ItemParser();
|
||||
this.registerAllVanillaItems();
|
||||
if (plugin.hasMod()) {
|
||||
@@ -130,6 +135,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
||||
public void delayedInit() {
|
||||
Bukkit.getPluginManager().registerEvents(this.itemEventListener, this.plugin.bootstrap());
|
||||
Bukkit.getPluginManager().registerEvents(this.debugStickListener, this.plugin.bootstrap());
|
||||
Bukkit.getPluginManager().registerEvents(this.armorEventListener, this.plugin.bootstrap());
|
||||
}
|
||||
|
||||
public static BukkitItemManager instance() {
|
||||
@@ -162,6 +168,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
||||
this.unload();
|
||||
HandlerList.unregisterAll(this.itemEventListener);
|
||||
HandlerList.unregisterAll(this.debugStickListener);
|
||||
HandlerList.unregisterAll(this.armorEventListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
package net.momirealms.craftengine.bukkit.item.listener;
|
||||
|
||||
import net.momirealms.craftengine.bukkit.api.CraftEngineItems;
|
||||
import net.momirealms.craftengine.bukkit.util.ItemUtils;
|
||||
import net.momirealms.craftengine.core.util.VersionHelper;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Horse;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryAction;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.inventory.HorseInventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class ArmorEventListener implements Listener {
|
||||
|
||||
// 只有在没有equippable组件的版本才生效,阻止自定义物品放到马上
|
||||
// 低版本没有自定义盔甲,所以完全不需要考虑能放置上去的情况
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onInteractHorse(PlayerInteractEntityEvent event) {
|
||||
if (VersionHelper.isOrAbove1_21_2()) return;
|
||||
if (event.getRightClicked() instanceof Horse horse) {
|
||||
ItemStack itemInHand = event.getPlayer().getInventory().getItem(event.getHand());
|
||||
if (horse.getInventory().getArmor() == null) {
|
||||
switch (itemInHand.getType()) {
|
||||
case LEATHER_HORSE_ARMOR, IRON_HORSE_ARMOR, GOLDEN_HORSE_ARMOR, DIAMOND_HORSE_ARMOR -> {
|
||||
if (CraftEngineItems.isCustomItem(itemInHand)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (horse.getInventory().getSaddle() == null) {
|
||||
if (itemInHand.getType() == Material.SADDLE) {
|
||||
if (CraftEngineItems.isCustomItem(itemInHand)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 处理低版本的马物品栏
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onMoveItemInHorseInventory(InventoryClickEvent event) {
|
||||
if (VersionHelper.isOrAbove1_21_2()) return;
|
||||
if (!(event.getInventory() instanceof HorseInventory horseInventory)) {
|
||||
return;
|
||||
}
|
||||
if (event.getClickedInventory() == event.getWhoClicked().getInventory()) {
|
||||
ItemStack currentItem = event.getCurrentItem();
|
||||
if (event.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY) {
|
||||
if (currentItem != null && CraftEngineItems.isCustomItem(currentItem)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
} else if (event.getClickedInventory() == horseInventory) {
|
||||
ItemStack itemInCursor = event.getCursor();
|
||||
if (event.getAction() == InventoryAction.SWAP_WITH_CURSOR || event.getAction() == InventoryAction.PLACE_ALL || event.getAction() == InventoryAction.PLACE_ONE) {
|
||||
if (!ItemUtils.isEmpty(itemInCursor) && CraftEngineItems.isCustomItem(itemInCursor)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (event.getAction() == InventoryAction.HOTBAR_SWAP) {
|
||||
int slot = event.getHotbarButton();
|
||||
if (slot != -1) {
|
||||
ItemStack itemInHotBar = event.getWhoClicked().getInventory().getItem(slot);
|
||||
if (!ItemUtils.isEmpty(itemInHotBar) && CraftEngineItems.isCustomItem(itemInHotBar)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
ItemStack offHand = event.getWhoClicked().getInventory().getItemInOffHand();
|
||||
if (!ItemUtils.isEmpty(offHand) && CraftEngineItems.isCustomItem(offHand)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onMoveItemInHorseInventory(InventoryDragEvent event) {
|
||||
if (VersionHelper.isOrAbove1_21_2()) return;
|
||||
if (!(event.getInventory() instanceof HorseInventory horseInventory)) {
|
||||
return;
|
||||
}
|
||||
for (Map.Entry<Integer, ItemStack> item : event.getNewItems().entrySet()) {
|
||||
if (item.getKey() == 0 || item.getKey() == 1) {
|
||||
if (!ItemUtils.isEmpty(item.getValue()) && CraftEngineItems.isCustomItem(item.getValue())) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
package net.momirealms.craftengine.bukkit.item;
|
||||
package net.momirealms.craftengine.bukkit.item.listener;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks;
|
||||
import net.momirealms.craftengine.bukkit.block.BukkitBlockManager;
|
||||
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
||||
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.bukkit.item;
|
||||
package net.momirealms.craftengine.bukkit.item.listener;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
@@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G
|
||||
|
||||
# Project settings
|
||||
# Rule: [major update].[feature update].[bug fix]
|
||||
project_version=0.0.53.5
|
||||
project_version=0.0.53.6
|
||||
config_version=32
|
||||
lang_version=12
|
||||
project_group=net.momirealms
|
||||
|
||||
Reference in New Issue
Block a user