From 640ef370b3cb15e943a47ece31efef82bed47109 Mon Sep 17 00:00:00 2001 From: tanyaofei Date: Mon, 12 Aug 2024 11:46:03 +0800 Subject: [PATCH] Nothing important --- .../fakeplayer/core/FakeplayerModule.java | 18 ++++- .../github/hello09x/fakeplayer/core/Main.java | 8 +- .../core/command/CommandRegistry.java | 2 +- .../core/command/CommandSupports.java | 20 +++-- .../core/command/impl/InvseeCommand.java | 10 ++- .../core/command/impl/MoveCommand.java | 3 +- .../core/listener/FakeplayerListener.java | 10 +++ .../core/listener/PlayerListener.java | 30 ------- .../core/manager/FakeplayerManager.java | 29 +------ .../core/manager/invsee/AbstractInvsee.java | 42 ---------- .../manager/invsee/AbstractInvseeManager.java | 81 +++++++++++++++++++ .../manager/invsee/DefaultInvseeImpl.java | 23 ------ .../invsee/DefaultInvseeManagerImpl.java | 32 ++++++++ .../core/manager/invsee/Invsee.java | 11 --- .../core/manager/invsee/InvseeManager.java | 15 ++++ .../main/resources/message/message.properties | 4 + .../resources/message/message_zh.properties | 4 + .../message/message_zh_HK.properties | 4 + .../message/message_zh_TW.properties | 4 + 19 files changed, 195 insertions(+), 155 deletions(-) delete mode 100644 fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/AbstractInvsee.java create mode 100644 fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/AbstractInvseeManager.java delete mode 100644 fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/DefaultInvseeImpl.java create mode 100644 fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/DefaultInvseeManagerImpl.java delete mode 100644 fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/Invsee.java create mode 100644 fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/InvseeManager.java diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/FakeplayerModule.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/FakeplayerModule.java index f27a5ff..fb4c2f2 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/FakeplayerModule.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/FakeplayerModule.java @@ -1,9 +1,13 @@ package io.github.hello09x.fakeplayer.core; import com.google.inject.AbstractModule; +import com.google.inject.Provides; +import com.google.inject.Singleton; import io.github.hello09x.fakeplayer.api.spi.NMSBridge; -import io.github.hello09x.fakeplayer.core.manager.invsee.DefaultInvseeImpl; -import io.github.hello09x.fakeplayer.core.manager.invsee.Invsee; +import io.github.hello09x.fakeplayer.core.manager.FakeplayerList; +import io.github.hello09x.fakeplayer.core.manager.FakeplayerManager; +import io.github.hello09x.fakeplayer.core.manager.invsee.DefaultInvseeManagerImpl; +import io.github.hello09x.fakeplayer.core.manager.invsee.InvseeManager; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; @@ -14,10 +18,16 @@ public class FakeplayerModule extends AbstractModule { @Override protected void configure() { super.bind(Plugin.class).toInstance(Main.getInstance()); - super.bind(NMSBridge.class).toInstance(this.nmsBridge()); - super.bind(Invsee.class).to(DefaultInvseeImpl.class); } + @Provides + @Singleton + public InvseeManager invseeManager(FakeplayerManager fakeplayerManager, FakeplayerList fakeplayerList) { + return new DefaultInvseeManagerImpl(fakeplayerManager, fakeplayerList); + } + + @Provides + @Singleton private NMSBridge nmsBridge() { var bridge = ServiceLoader .load(NMSBridge.class, NMSBridge.class.getClassLoader()) diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/Main.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/Main.java index b037ada..a610454 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/Main.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/Main.java @@ -14,10 +14,9 @@ import io.github.hello09x.fakeplayer.core.listener.FakeplayerLifecycleListener; import io.github.hello09x.fakeplayer.core.listener.FakeplayerListener; import io.github.hello09x.fakeplayer.core.listener.PlayerListener; import io.github.hello09x.fakeplayer.core.manager.FakeplayerAutofishManager; -import io.github.hello09x.fakeplayer.core.manager.FakeplayerManager; import io.github.hello09x.fakeplayer.core.manager.FakeplayerReplenishManager; import io.github.hello09x.fakeplayer.core.manager.WildFakeplayerManager; -import io.github.hello09x.fakeplayer.core.repository.UsedIdRepository; +import io.github.hello09x.fakeplayer.core.manager.invsee.InvseeManager; import io.github.hello09x.fakeplayer.core.util.update.UpdateChecker; import lombok.Getter; import org.bukkit.plugin.java.JavaPlugin; @@ -66,6 +65,7 @@ public final class Main extends JavaPlugin { manager.registerEvents(injector.getInstance(FakeplayerListener.class), this); manager.registerEvents(injector.getInstance(FakeplayerAutofishManager.class), this); manager.registerEvents(injector.getInstance(FakeplayerReplenishManager.class), this); + manager.registerEvents(injector.getInstance(InvseeManager.class), this); } if (injector.getInstance(FakeplayerConfig.class).isCheckForUpdates()) { @@ -106,10 +106,6 @@ public final class Main extends JavaPlugin { @Override public void onDisable() { - { - Exceptions.suppress(this, () -> injector.getInstance(FakeplayerManager.class).onDisable()); - Exceptions.suppress(this, () -> injector.getInstance(UsedIdRepository.class).onDisable()); - } { Exceptions.suppress(this, () -> { var messenger = getServer().getMessenger(); diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/CommandRegistry.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/CommandRegistry.java index 2aa02d0..f874ab1 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/CommandRegistry.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/CommandRegistry.java @@ -119,7 +119,7 @@ public class CommandRegistry { .withPermission(Permission.kill) .withShortDescription("fakeplayer.command.kill.description") .withRequirement(CommandSupports::hasFakeplayer) - .withOptionalArguments(targets("names")) + .withOptionalArguments(fakeplayers("names")) .executes(killCommand::kill), command("list") .withPermission(Permission.list) diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/CommandSupports.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/CommandSupports.java index 663f417..6c25f12 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/CommandSupports.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/CommandSupports.java @@ -37,22 +37,26 @@ public abstract class CommandSupports { public static @NotNull CommandAPICommand[] newActionCommands(@NotNull ActionType action) { return new CommandAPICommand[]{ command("once") + .withShortDescription("fakeplayer.command.action.once") .withOptionalArguments(fakeplayer("name")) .executes(actionCommand.action(action, ActionSetting.once())), command("continuous") + .withShortDescription("fakeplayer.command.action.continuous") .withOptionalArguments(fakeplayer("name")) .executes(actionCommand.action(action, ActionSetting.continuous())), - command("stop") - .withOptionalArguments(fakeplayer("name")) - .executes(actionCommand.action(action, ActionSetting.stop())), command("interval") + .withShortDescription("fakeplayer.command.action.interval") .withOptionalArguments( - int32("interval", 1), + int32("ticks", 1), fakeplayer("name")) .executes((sender, args) -> { - int interval = (int) args.getOptional("interval").orElse(1); + int interval = (int) args.getOptional("ticks").orElse(1); actionCommand.action(sender, args, action, ActionSetting.interval(interval)); - }) + }), + command("stop") + .withShortDescription("fakeplayer.command.action.stop") + .withOptionalArguments(fakeplayer("name")) + .executes(actionCommand.action(action, ActionSetting.stop())) }; } @@ -88,7 +92,7 @@ public abstract class CommandSupports { return fakeplayer(nodeName, null); } - public static @NotNull Argument> targets(@NotNull String nodeName) { + public static @NotNull Argument> fakeplayers(@NotNull String nodeName) { return new CustomArgument, String>(new StringArgument(nodeName), info -> { var sender = info.sender(); var arg = info.currentInput(); @@ -174,7 +178,7 @@ public abstract class CommandSupports { } public static boolean isCmdAvailable(@NotNull CommandSender sender) { - return hasFakeplayer(sender) && (sender.hasPermission(Permission.cmd) || !config.getAllowCommands().isEmpty()); + return (sender.hasPermission(Permission.cmd) || !config.getAllowCommands().isEmpty()) && hasFakeplayer(sender); } } diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/impl/InvseeCommand.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/impl/InvseeCommand.java index 88f73f7..96d2f8d 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/impl/InvseeCommand.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/impl/InvseeCommand.java @@ -1,11 +1,13 @@ package io.github.hello09x.fakeplayer.core.command.impl; +import com.google.inject.Inject; import com.google.inject.Singleton; import dev.jorel.commandapi.CommandAPI; import dev.jorel.commandapi.exceptions.WrapperCommandSyntaxException; import dev.jorel.commandapi.executors.CommandArguments; import io.github.hello09x.devtools.core.translation.TranslatorUtils; import io.github.hello09x.devtools.core.utils.ComponentUtils; +import io.github.hello09x.fakeplayer.core.manager.invsee.InvseeManager; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -16,6 +18,12 @@ import static net.kyori.adventure.text.Component.translatable; @Singleton public class InvseeCommand extends AbstractCommand { + private final InvseeManager invseeManager; + + @Inject + public InvseeCommand(InvseeManager invseeManager) { + this.invseeManager = invseeManager; + } /** * 查看背包 @@ -28,7 +36,7 @@ public class InvseeCommand extends AbstractCommand { TranslatorUtils.getLocale(sender) )); } - manager.openInventory(sender, fake); + invseeManager.invsee(sender, fake); } } diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/impl/MoveCommand.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/impl/MoveCommand.java index 1b1f205..06740ef 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/impl/MoveCommand.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/command/impl/MoveCommand.java @@ -5,6 +5,7 @@ import dev.jorel.commandapi.executors.CommandExecutor; import io.github.hello09x.fakeplayer.core.Main; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; +import org.jetbrains.annotations.Range; import java.util.HashMap; import java.util.Map; @@ -18,7 +19,7 @@ public class MoveCommand extends AbstractCommand { /** * 假人移动 */ - public CommandExecutor move(float forward, float strafing) { + public CommandExecutor move(@Range(from = 0, to = 1) float forward, @Range(from = 0, to = 1) float strafing) { return (sender, args) -> { var fake = getFakeplayer(sender, args); var handle = bridge.fromPlayer(fake); diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/listener/FakeplayerListener.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/listener/FakeplayerListener.java index 64d7ea1..496666c 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/listener/FakeplayerListener.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/listener/FakeplayerListener.java @@ -3,6 +3,7 @@ package io.github.hello09x.fakeplayer.core.listener; import com.google.inject.Inject; import com.google.inject.Singleton; import io.github.hello09x.devtools.core.utils.ComponentUtils; +import io.github.hello09x.devtools.core.utils.Exceptions; import io.github.hello09x.devtools.core.utils.MetadataUtils; import io.github.hello09x.fakeplayer.core.Main; import io.github.hello09x.fakeplayer.core.config.FakeplayerConfig; @@ -21,6 +22,7 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.metadata.MetadataValue; import org.jetbrains.annotations.NotNull; @@ -159,4 +161,12 @@ public class FakeplayerListener implements Listener { } } + @EventHandler + public void onPluginDisable(@NotNull PluginDisableEvent event) { + if (event.getPlugin() == Main.getInstance()) { + Exceptions.suppress(Main.getInstance(), manager::onDisable); + Exceptions.suppress(Main.getInstance(), usedIdRepository::onDisable); + } + } + } diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/listener/PlayerListener.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/listener/PlayerListener.java index 3f5d659..aba0ee0 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/listener/PlayerListener.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/listener/PlayerListener.java @@ -7,9 +7,6 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryDragEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.event.player.PlayerToggleSneakEvent; import org.jetbrains.annotations.NotNull; @@ -44,31 +41,4 @@ public class PlayerListener implements Listener { } } - /** - * 右键假人打开其背包 - */ - @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) - public void invsee(@NotNull PlayerInteractAtEntityEvent event) { - if (!(event.getRightClicked() instanceof Player target) || manager.isNotFake(target)) { - return; - } - - manager.openInventory(event.getPlayer(), target); - } - - - - /** - * 客户端操作假人背包时(将假人的背包物品移动到玩家背包时)的时候,如果是拖拽的, 会被处理成放置到假人的盔甲栏上 - */ - @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) - public void onDragInventory(@NotNull InventoryDragEvent event) { - var top = event.getView().getTopInventory(); - if (top.getType() == InventoryType.PLAYER && top.getHolder() instanceof Player player && manager.isFake(player)) { - if (event.getNewItems().keySet().stream().anyMatch(slot -> slot > 35)) { // > 35 表示从假人背包移动到玩家背包 - event.setCancelled(true); - } - } - } - } diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/FakeplayerManager.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/FakeplayerManager.java index c23290d..bb79b47 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/FakeplayerManager.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/FakeplayerManager.java @@ -13,7 +13,6 @@ import io.github.hello09x.fakeplayer.core.config.FakeplayerConfig; import io.github.hello09x.fakeplayer.core.constant.MetadataKeys; import io.github.hello09x.fakeplayer.core.entity.Fakeplayer; import io.github.hello09x.fakeplayer.core.entity.SpawnOption; -import io.github.hello09x.fakeplayer.core.manager.invsee.Invsee; import io.github.hello09x.fakeplayer.core.manager.naming.NameManager; import io.github.hello09x.fakeplayer.core.repository.model.Config; import io.github.hello09x.fakeplayer.core.util.AddressUtils; @@ -21,8 +20,6 @@ import io.github.hello09x.fakeplayer.core.util.Commands; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.Sound; -import org.bukkit.SoundCategory; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.metadata.FixedMetadataValue; @@ -51,7 +48,6 @@ public class FakeplayerManager { public final static String REMOVAL_REASON_PREFIX = "[fakeplayer] "; private final static Logger log = Main.getInstance().getLogger(); - private final Invsee invsee; private final NameManager nameManager; private final FakeplayerList playerList; @@ -61,8 +57,7 @@ public class FakeplayerManager { private final ScheduledExecutorService lagMonitor; @Inject - public FakeplayerManager(Invsee invsee, NameManager nameManager, FakeplayerList playerList, UserConfigManager configManager, NMSBridge nms, FakeplayerConfig config) { - this.invsee = invsee; + public FakeplayerManager(NameManager nameManager, FakeplayerList playerList, UserConfigManager configManager, NMSBridge nms, FakeplayerConfig config) { this.nameManager = nameManager; this.playerList = playerList; this.configManager = configManager; @@ -461,28 +456,6 @@ public class FakeplayerManager { } } - /** - * 让玩家打开假人背包 - * - * @param viewer 玩家 - * @param target 假人 - * @return 是否打开成功 - */ - public boolean openInventory(@NotNull Player viewer, @NotNull Player target) { - var fp = this.playerList.getByName(target.getName()); - if (fp == null) { - return false; - } - if (!viewer.isOp() && !fp.isCreatedBy(viewer)) { - return false; - } - - this.invsee.openInventory(viewer, target); - var pos = target.getLocation(); - pos.getWorld().playSound(pos, Sound.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, 0.3f, 1.0f); - return true; - } - /** * 检测限制, 不满足条件则抛出异常 * diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/AbstractInvsee.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/AbstractInvsee.java deleted file mode 100644 index 1227e49..0000000 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/AbstractInvsee.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.github.hello09x.fakeplayer.core.manager.invsee; - -import io.github.hello09x.devtools.core.translation.PluginTranslator; -import io.github.hello09x.devtools.core.translation.TranslatorUtils; -import io.github.hello09x.devtools.core.utils.ComponentUtils; -import io.github.hello09x.devtools.core.utils.SingletonSupplier; -import io.github.hello09x.fakeplayer.core.Main; -import io.github.hello09x.fakeplayer.core.manager.FakeplayerManager; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryView; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -import static net.kyori.adventure.text.Component.text; -import static net.kyori.adventure.text.Component.translatable; - -public abstract class AbstractInvsee implements Invsee { - - protected final PluginTranslator translator; - - protected final static SingletonSupplier manager = new SingletonSupplier<>(() -> Main.getInjector().getInstance(FakeplayerManager.class)); - - protected AbstractInvsee(PluginTranslator translator) { - this.translator = translator; - } - - protected void setTitle(@Nullable InventoryView view, @NotNull Player owner) { - if (view == null) { - return; - } - - var locale = Optional.ofNullable(manager.get().getCreator(owner)).map(TranslatorUtils::getLocale).orElseGet(() -> TranslatorUtils.getDefaultLocale(Main.getInstance())); - view.setTitle(ComponentUtils.toString(translatable( - "fakeplayer.manager.inventory.title", - text(owner.getName()) - ), locale)); - } - - -} diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/AbstractInvseeManager.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/AbstractInvseeManager.java new file mode 100644 index 0000000..d9aea2c --- /dev/null +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/AbstractInvseeManager.java @@ -0,0 +1,81 @@ +package io.github.hello09x.fakeplayer.core.manager.invsee; + +import io.github.hello09x.devtools.core.utils.ComponentUtils; +import io.github.hello09x.fakeplayer.core.manager.FakeplayerList; +import io.github.hello09x.fakeplayer.core.manager.FakeplayerManager; +import org.bukkit.Sound; +import org.bukkit.SoundCategory; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.inventory.InventoryView; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import static net.kyori.adventure.text.Component.text; +import static net.kyori.adventure.text.Component.translatable; + +/** + * @author tanyaofei + * @since 2024/8/12 + **/ +public abstract class AbstractInvseeManager implements InvseeManager { + + protected final FakeplayerManager manager; + protected final FakeplayerList fakeplayerList; + + protected AbstractInvseeManager(FakeplayerManager manager, FakeplayerList fakeplayerList) { + this.manager = manager; + this.fakeplayerList = fakeplayerList; + } + + @Override + public boolean invsee(@NotNull Player viewer, @NotNull Player whom) { + var fp = fakeplayerList.getByUUID(whom.getUniqueId()); + if (fp == null) { + return false; + } + if (!viewer.isOp() && !fp.isCreatedBy(viewer)) { + return false; + } + var view = this.openInventory(viewer, whom); + if (view == null) { + return false; + } + whom.getLocation().getWorld().playSound( + whom.getLocation(), + Sound.BLOCK_CHEST_OPEN, + SoundCategory.BLOCKS, + 0.3F, 1.0F + ); + view.setTitle(ComponentUtils.toString(translatable( + "fakeplayer.manager.inventory.title", + text(whom.getName()) + ), viewer.locale())); + return true; + } + + protected abstract @Nullable InventoryView openInventory(@NotNull Player viewer, @NotNull Player whom); + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void rightClickToInvsee(@NotNull PlayerInteractAtEntityEvent event) { + if (!((event.getRightClicked()) instanceof Player whom)) { + return; + } + + this.invsee(event.getPlayer(), whom); // fakeplayer check here + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) + public void fixDragInventory(@NotNull InventoryDragEvent event) { + var top = event.getView().getTopInventory(); + if (top.getType() == InventoryType.PLAYER && top.getHolder() instanceof Player whom && manager.isFake(whom)) { + if (event.getNewItems().keySet().stream().anyMatch(slot -> slot > 35)) { // > 35 表示从假人背包拖动到玩家背包, 这种操作会出现问题 + event.setCancelled(true); + } + } + } +} diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/DefaultInvseeImpl.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/DefaultInvseeImpl.java deleted file mode 100644 index feefcd5..0000000 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/DefaultInvseeImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.github.hello09x.fakeplayer.core.manager.invsee; - -import com.google.inject.Inject; -import com.google.inject.Singleton; -import io.github.hello09x.devtools.core.translation.PluginTranslator; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -@Singleton -public class DefaultInvseeImpl extends AbstractInvsee { - - @Inject - public DefaultInvseeImpl(PluginTranslator translator) { - super(translator); - } - - @Override - public void openInventory(@NotNull Player visitor, @NotNull Player visited) { - var view = visitor.openInventory(visited.getInventory()); - super.setTitle(view, visited); - } - -} diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/DefaultInvseeManagerImpl.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/DefaultInvseeManagerImpl.java new file mode 100644 index 0000000..e50825e --- /dev/null +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/DefaultInvseeManagerImpl.java @@ -0,0 +1,32 @@ +package io.github.hello09x.fakeplayer.core.manager.invsee; + +import com.google.inject.Inject; +import com.google.inject.Singleton; +import io.github.hello09x.fakeplayer.core.manager.FakeplayerList; +import io.github.hello09x.fakeplayer.core.manager.FakeplayerManager; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryView; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * 默认实现, 无法看到装备栏 + * + * @author tanyaofei + * @since 2024/8/12 + **/ +@Singleton +public class DefaultInvseeManagerImpl extends AbstractInvseeManager { + + @Inject + public DefaultInvseeManagerImpl(FakeplayerManager manager, FakeplayerList fakeplayerList) { + super(manager, fakeplayerList); + } + + @Override + protected @Nullable InventoryView openInventory(@NotNull Player viewer, @NotNull Player whom) { + return viewer.openInventory(whom.getInventory()); + } + + +} diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/Invsee.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/Invsee.java deleted file mode 100644 index 29004eb..0000000 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/Invsee.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.hello09x.fakeplayer.core.manager.invsee; - -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - - -public interface Invsee { - - void openInventory(@NotNull Player visitor, @NotNull Player visited); - -} diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/InvseeManager.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/InvseeManager.java new file mode 100644 index 0000000..004c8db --- /dev/null +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/InvseeManager.java @@ -0,0 +1,15 @@ +package io.github.hello09x.fakeplayer.core.manager.invsee; + +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +/** + * @author tanyaofei + * @since 2024/8/12 + **/ +public interface InvseeManager extends Listener { + + boolean invsee(@NotNull Player viewer, @NotNull Player whom); + +} diff --git a/fakeplayer-core/src/main/resources/message/message.properties b/fakeplayer-core/src/main/resources/message/message.properties index 6823d0b..c55516f 100644 --- a/fakeplayer-core/src/main/resources/message/message.properties +++ b/fakeplayer-core/src/main/resources/message/message.properties @@ -6,6 +6,10 @@ fakeplayer.action.jump=jumping fakeplayer.action.look-at-entity=looking at nearby entities fakeplayer.action.mine=digging fakeplayer.action.use=using item or interacting +fakeplayer.command.action.continuous=Do it every tick +fakeplayer.command.action.interval=Do it every specified ticks +fakeplayer.command.action.once=Do it once +fakeplayer.command.action.stop=Stop fakeplayer.command.attack.description=Attack entity fakeplayer.command.cmd.description=Execute command fakeplayer.command.cmd.error.execute-failed=Failed to execute the command. Please check whether the command is correct or whether the fake player has permission diff --git a/fakeplayer-core/src/main/resources/message/message_zh.properties b/fakeplayer-core/src/main/resources/message/message_zh.properties index 9e5462b..dca8482 100644 --- a/fakeplayer-core/src/main/resources/message/message_zh.properties +++ b/fakeplayer-core/src/main/resources/message/message_zh.properties @@ -6,6 +6,10 @@ fakeplayer.action.jump=\u8DF3\u8DC3 fakeplayer.action.look-at-entity=\u770B\u5411\u9644\u8FD1\u5B9E\u4F53 fakeplayer.action.mine=\u6316\u6398 fakeplayer.action.use=\u4F7F\u7528\u7269\u54C1\u6216\u4EA4\u4E92 +fakeplayer.command.action.continuous=\u6BCF 1 tick \u6267\u884C\u4E00\u6B21 +fakeplayer.command.action.interval=\u6307\u5B9A\u95F4\u9694\u6267\u884C +fakeplayer.command.action.once=\u6267\u884C\u4E00\u6B21 +fakeplayer.command.action.stop=\u505C\u6B62 fakeplayer.command.attack.description=\u653B\u51FB fakeplayer.command.cmd.description=\u6267\u884C\u547D\u4EE4 fakeplayer.command.cmd.error.execute-failed=\u6267\u884C\u547D\u4EE4\u5931\u8D25, \u8BF7\u68C0\u67E5\u547D\u4EE4\u662F\u5426\u6B63\u786E\u6216\u5047\u4EBA\u662F\u5426\u6709\u6743\u9650 diff --git a/fakeplayer-core/src/main/resources/message/message_zh_HK.properties b/fakeplayer-core/src/main/resources/message/message_zh_HK.properties index 8602fb6..838ab39 100644 --- a/fakeplayer-core/src/main/resources/message/message_zh_HK.properties +++ b/fakeplayer-core/src/main/resources/message/message_zh_HK.properties @@ -6,6 +6,10 @@ fakeplayer.action.jump=\u8DF3\u8E8D fakeplayer.action.look-at-entity=\u7747\u5411\u9644\u8FD1\u5BE6\u9AD4 fakeplayer.action.mine=\u6316\u6398 fakeplayer.action.use=\u4F7F\u7528\u7269\u54C1\u6216\u4EA4\u4E92 +fakeplayer.command.action.continuous=\u6BCF 1 tick \u57F7\u884C\u4E00\u6B21 +fakeplayer.command.action.interval=\u6307\u5B9A\u9593\u9694\u57F7\u884C +fakeplayer.command.action.once=\u57F7\u884C\u4E00\u6B21 +fakeplayer.command.action.stop=\u505C\u6B62 fakeplayer.command.attack.description=\u653B\u64CA fakeplayer.command.cmd.description=\u57F7\u884C\u6307\u4EE4 fakeplayer.command.cmd.error.execute-failed=\u57F7\u884C\u6307\u4EE4\u5931\u6557, \u8ACB\u6AA2\u67E5\u6307\u4EE4\u662F\u5426\u6B63\u78BA\u6216\u8005\u5047\u4EBA\u6709\u5187\u6B0A\u9650 diff --git a/fakeplayer-core/src/main/resources/message/message_zh_TW.properties b/fakeplayer-core/src/main/resources/message/message_zh_TW.properties index 9aa9385..1e056e3 100644 --- a/fakeplayer-core/src/main/resources/message/message_zh_TW.properties +++ b/fakeplayer-core/src/main/resources/message/message_zh_TW.properties @@ -6,6 +6,10 @@ fakeplayer.action.jump=\u8DF3\u8E8D fakeplayer.action.look-at-entity=\u770B\u5411\u9644\u8FD1\u5BE6\u9AD4 fakeplayer.action.mine=\u6316\u6398 fakeplayer.action.use=\u4F7F\u7528\u7269\u54C1\u6216\u4EA4\u4E92 +fakeplayer.command.action.continuous=\u6BCF 1 tick \u57F7\u884C\u4E00\u6B21 +fakeplayer.command.action.interval=\u6307\u5B9A\u9593\u9694\u57F7\u884C +fakeplayer.command.action.once=\u57F7\u884C\u4E00\u6B21 +fakeplayer.command.action.stop=\u505C\u6B62 fakeplayer.command.attack.description=\u653B\u64CA fakeplayer.command.cmd.description=\u57F7\u884C\u547D\u4EE4 fakeplayer.command.cmd.error.execute-failed=\u57F7\u884C\u547D\u4EE4\u5931\u6557, \u8ACB\u6AA2\u67E5\u547D\u4EE4\u662F\u5426\u6B63\u78BA\u6216\u5047\u4EBA\u662F\u5426\u6709\u6B0A\u9650