mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-23 17:09:19 +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.BucketItemBehavior;
|
||||||
import net.momirealms.craftengine.bukkit.item.behavior.WaterBucketItemBehavior;
|
import net.momirealms.craftengine.bukkit.item.behavior.WaterBucketItemBehavior;
|
||||||
import net.momirealms.craftengine.bukkit.item.factory.BukkitItemFactory;
|
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.nms.FastNMS;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||||
import net.momirealms.craftengine.bukkit.util.ItemUtils;
|
import net.momirealms.craftengine.bukkit.util.ItemUtils;
|
||||||
@@ -63,6 +66,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
|||||||
private final BukkitCraftEngine plugin;
|
private final BukkitCraftEngine plugin;
|
||||||
private final ItemEventListener itemEventListener;
|
private final ItemEventListener itemEventListener;
|
||||||
private final DebugStickListener debugStickListener;
|
private final DebugStickListener debugStickListener;
|
||||||
|
private final ArmorEventListener armorEventListener;
|
||||||
private final ItemParser itemParser;
|
private final ItemParser itemParser;
|
||||||
|
|
||||||
public BukkitItemManager(BukkitCraftEngine plugin) {
|
public BukkitItemManager(BukkitCraftEngine plugin) {
|
||||||
@@ -72,6 +76,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
|||||||
this.factory = BukkitItemFactory.create(plugin);
|
this.factory = BukkitItemFactory.create(plugin);
|
||||||
this.itemEventListener = new ItemEventListener(plugin);
|
this.itemEventListener = new ItemEventListener(plugin);
|
||||||
this.debugStickListener = new DebugStickListener(plugin);
|
this.debugStickListener = new DebugStickListener(plugin);
|
||||||
|
this.armorEventListener = new ArmorEventListener();
|
||||||
this.itemParser = new ItemParser();
|
this.itemParser = new ItemParser();
|
||||||
this.registerAllVanillaItems();
|
this.registerAllVanillaItems();
|
||||||
if (plugin.hasMod()) {
|
if (plugin.hasMod()) {
|
||||||
@@ -130,6 +135,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
|||||||
public void delayedInit() {
|
public void delayedInit() {
|
||||||
Bukkit.getPluginManager().registerEvents(this.itemEventListener, this.plugin.bootstrap());
|
Bukkit.getPluginManager().registerEvents(this.itemEventListener, this.plugin.bootstrap());
|
||||||
Bukkit.getPluginManager().registerEvents(this.debugStickListener, this.plugin.bootstrap());
|
Bukkit.getPluginManager().registerEvents(this.debugStickListener, this.plugin.bootstrap());
|
||||||
|
Bukkit.getPluginManager().registerEvents(this.armorEventListener, this.plugin.bootstrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BukkitItemManager instance() {
|
public static BukkitItemManager instance() {
|
||||||
@@ -162,6 +168,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
|||||||
this.unload();
|
this.unload();
|
||||||
HandlerList.unregisterAll(this.itemEventListener);
|
HandlerList.unregisterAll(this.itemEventListener);
|
||||||
HandlerList.unregisterAll(this.debugStickListener);
|
HandlerList.unregisterAll(this.debugStickListener);
|
||||||
|
HandlerList.unregisterAll(this.armorEventListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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.kyori.adventure.text.Component;
|
||||||
import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks;
|
import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks;
|
||||||
import net.momirealms.craftengine.bukkit.block.BukkitBlockManager;
|
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.BukkitCraftEngine;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
||||||
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
|
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.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
@@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G
|
|||||||
|
|
||||||
# Project settings
|
# Project settings
|
||||||
# Rule: [major update].[feature update].[bug fix]
|
# Rule: [major update].[feature update].[bug fix]
|
||||||
project_version=0.0.53.5
|
project_version=0.0.53.6
|
||||||
config_version=32
|
config_version=32
|
||||||
lang_version=12
|
lang_version=12
|
||||||
project_group=net.momirealms
|
project_group=net.momirealms
|
||||||
|
|||||||
Reference in New Issue
Block a user