From 525982ce64022fcc0164e5d6a931ab3c3350dde6 Mon Sep 17 00:00:00 2001 From: Jikoo Date: Thu, 12 May 2022 08:48:51 -0400 Subject: [PATCH] Harden event/internal access slightly --- .../openinv/{util => }/InternalAccessor.java | 94 +++++++------------ .../{listeners => }/InventoryListener.java | 17 +--- .../{listeners => }/PlayerListener.java | 20 ++-- 3 files changed, 43 insertions(+), 88 deletions(-) rename plugin/src/main/java/com/lishid/openinv/{util => }/InternalAccessor.java (70%) rename plugin/src/main/java/com/lishid/openinv/{listeners => }/InventoryListener.java (94%) rename plugin/src/main/java/com/lishid/openinv/{listeners => }/PlayerListener.java (86%) diff --git a/plugin/src/main/java/com/lishid/openinv/util/InternalAccessor.java b/plugin/src/main/java/com/lishid/openinv/InternalAccessor.java similarity index 70% rename from plugin/src/main/java/com/lishid/openinv/util/InternalAccessor.java rename to plugin/src/main/java/com/lishid/openinv/InternalAccessor.java index 399154a..dbe7e98 100644 --- a/plugin/src/main/java/com/lishid/openinv/util/InternalAccessor.java +++ b/plugin/src/main/java/com/lishid/openinv/InternalAccessor.java @@ -14,28 +14,28 @@ * along with this program. If not, see . */ -package com.lishid.openinv.util; +package com.lishid.openinv; import com.lishid.openinv.internal.IAnySilentContainer; import com.lishid.openinv.internal.IPlayerDataManager; import com.lishid.openinv.internal.ISpecialEnderChest; import com.lishid.openinv.internal.ISpecialInventory; import com.lishid.openinv.internal.ISpecialPlayerInventory; +import com.lishid.openinv.util.InventoryAccess; import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; -public class InternalAccessor { +class InternalAccessor { - private final Plugin plugin; + private final @NotNull Plugin plugin; private final String version; private boolean supported = false; private IPlayerDataManager playerDataManager; private IAnySilentContainer anySilentContainer; - public InternalAccessor(final Plugin plugin) { + InternalAccessor(@NotNull Plugin plugin) { this.plugin = plugin; String packageName = plugin.getServer().getClass().getPackage().getName(); @@ -51,58 +51,29 @@ public class InternalAccessor { } public String getReleasesLink() { - switch (version) { - case "1_4_5": - case "1_4_6": - case "v1_4_R1": - case "v1_5_R2": - case "v1_5_R3": - case "v1_6_R1": - case "v1_6_R2": - case "v1_6_R3": - case "v1_7_R1": - case "v1_7_R2": - case "v1_7_R3": - case "v1_7_R4": - case "v1_8_R1": - case "v1_8_R2": - case "v1_9_R1": - case "v1_9_R2": - case "v1_10_R1": - case "v1_11_R1": - case "v1_12_R1": - return "https://github.com/lishid/OpenInv/releases/tag/4.0.0 (OpenInv-legacy)"; - case "v1_13_R1": - return "https://github.com/lishid/OpenInv/releases/tag/4.0.0"; - case "v1_13_R2": - return "https://github.com/lishid/OpenInv/releases/tag/4.0.7"; - case "v1_14_R1": - return "https://github.com/lishid/OpenInv/releases/tag/4.1.1"; - case "v1_16_R1": - return "https://github.com/lishid/OpenInv/releases/tag/4.1.4"; - case "v1_8_R3": - case "v1_15_R1": - case "v1_16_R2": - return "https://github.com/lishid/OpenInv/releases/tag/4.1.5"; - case "v1_16_R3": - return "https://github.com/Jikoo/OpenInv/releases/tag/4.1.8"; - case "v1_17_R1": - default: - return "https://github.com/Jikoo/OpenInv/releases"; - } + + return switch (version) { + case "1_4_5", "1_4_6", "v1_4_R1", "v1_5_R2", "v1_5_R3", "v1_6_R1", "v1_6_R2", "v1_6_R3", + "v1_7_R1", "v1_7_R2", "v1_7_R3", "v1_7_R4", "v1_8_R1", "v1_8_R2", + "v1_9_R1", "v1_9_R2", "v1_10_R1", "v1_11_R1", "v1_12_R1" + -> "https://github.com/lishid/OpenInv/releases/tag/4.0.0 (OpenInv-legacy)"; + case "v1_13_R1" -> "https://github.com/lishid/OpenInv/releases/tag/4.0.0"; + case "v1_13_R2" -> "https://github.com/lishid/OpenInv/releases/tag/4.0.7"; + case "v1_14_R1" -> "https://github.com/lishid/OpenInv/releases/tag/4.1.1"; + case "v1_16_R1" -> "https://github.com/lishid/OpenInv/releases/tag/4.1.4"; + case "v1_8_R3", "v1_15_R1", "v1_16_R2" -> "https://github.com/lishid/OpenInv/releases/tag/4.1.5"; + case "v1_16_R3" -> "https://github.com/Jikoo/OpenInv/releases/tag/4.1.8"; + default -> "https://github.com/Jikoo/OpenInv/releases"; + }; } - private T createObject(final Class assignableClass, final String className, - final Object... params) throws ClassCastException, ClassNotFoundException, - InstantiationException, IllegalAccessException, IllegalArgumentException, - InvocationTargetException, NoSuchMethodException, SecurityException { + private @NotNull T createObject( + @NotNull Class assignableClass, + @NotNull String className, + @NotNull Object @NotNull ... params) + throws ClassCastException, ReflectiveOperationException { // Fetch internal class if it exists. Class internalClass = Class.forName("com.lishid.openinv.internal." + this.version + "." + className); - if (!assignableClass.isAssignableFrom(internalClass)) { - String message = String.format("Found class %s but cannot cast to %s!", internalClass.getName(), assignableClass.getName()); - this.plugin.getLogger().warning(message); - throw new IllegalStateException(message); - } // Quick return: no parameters, no need to fiddle about finding the correct constructor. if (params.length == 0) { @@ -133,10 +104,10 @@ public class InternalAccessor { String message = builder.append(']').toString(); this.plugin.getLogger().warning(message); - throw new IllegalArgumentException(message); + throw new NoSuchMethodException(message); } - private T createSpecialInventory( + private @NotNull T createSpecialInventory( @NotNull Class assignableClass, @NotNull String className, @NotNull Player player, @@ -159,7 +130,7 @@ public class InternalAccessor { * @return the IAnySilentContainer * @throws IllegalStateException if server version is unsupported */ - public IAnySilentContainer getAnySilentContainer() { + public @NotNull IAnySilentContainer getAnySilentContainer() { if (!this.supported) { throw new IllegalStateException(String.format("Unsupported server version %s!", this.version)); } @@ -172,7 +143,7 @@ public class InternalAccessor { * @return the IPlayerDataManager * @throws IllegalStateException if server version is unsupported */ - public IPlayerDataManager getPlayerDataManager() { + public @NotNull IPlayerDataManager getPlayerDataManager() { if (!this.supported) { throw new IllegalStateException(String.format("Unsupported server version %s!", this.version)); } @@ -180,13 +151,12 @@ public class InternalAccessor { } /** - * Gets the server implementation version. If not initialized, returns the string "null" - * instead. + * Gets the server implementation version. * - * @return the version, or "null" + * @return the version */ - public String getVersion() { - return this.version != null ? this.version : "null"; + public @NotNull String getVersion() { + return this.version; } /** diff --git a/plugin/src/main/java/com/lishid/openinv/listeners/InventoryListener.java b/plugin/src/main/java/com/lishid/openinv/InventoryListener.java similarity index 94% rename from plugin/src/main/java/com/lishid/openinv/listeners/InventoryListener.java rename to plugin/src/main/java/com/lishid/openinv/InventoryListener.java index ea8dad3..8e1c27e 100644 --- a/plugin/src/main/java/com/lishid/openinv/listeners/InventoryListener.java +++ b/plugin/src/main/java/com/lishid/openinv/InventoryListener.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2021 lishid. All rights reserved. + * Copyright (C) 2011-2022 lishid. All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -14,9 +14,8 @@ * along with this program. If not, see . */ -package com.lishid.openinv.listeners; +package com.lishid.openinv; -import com.lishid.openinv.OpenInv; import com.lishid.openinv.internal.ISpecialPlayerInventory; import com.lishid.openinv.util.InventoryAccess; import com.lishid.openinv.util.Permissions; @@ -45,22 +44,14 @@ import org.jetbrains.annotations.Nullable; * * @author Jikoo */ -public class InventoryListener implements Listener { - - private final OpenInv plugin; - - public InventoryListener(final OpenInv plugin) { - this.plugin = plugin; - } +record InventoryListener(OpenInv plugin) implements Listener { @EventHandler public void onInventoryClose(@NotNull final InventoryCloseEvent event) { - if (!(event.getPlayer() instanceof Player)) { + if (!(event.getPlayer() instanceof Player player)) { return; } - Player player = (Player) event.getPlayer(); - if (this.plugin.getPlayerSilentChestStatus(player)) { this.plugin.getAnySilentContainer().deactivateContainer(player); } diff --git a/plugin/src/main/java/com/lishid/openinv/listeners/PlayerListener.java b/plugin/src/main/java/com/lishid/openinv/PlayerListener.java similarity index 86% rename from plugin/src/main/java/com/lishid/openinv/listeners/PlayerListener.java rename to plugin/src/main/java/com/lishid/openinv/PlayerListener.java index ca5a23e..4ec2950 100644 --- a/plugin/src/main/java/com/lishid/openinv/listeners/PlayerListener.java +++ b/plugin/src/main/java/com/lishid/openinv/PlayerListener.java @@ -14,9 +14,8 @@ * along with this program. If not, see . */ -package com.lishid.openinv.listeners; +package com.lishid.openinv; -import com.lishid.openinv.OpenInv; import com.lishid.openinv.util.Permissions; import org.bukkit.entity.Player; import org.bukkit.event.Event.Result; @@ -28,32 +27,27 @@ import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.jetbrains.annotations.NotNull; -public class PlayerListener implements Listener { - - private final OpenInv plugin; - - public PlayerListener(OpenInv plugin) { - this.plugin = plugin; - } +record PlayerListener(OpenInv plugin) implements Listener { @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerJoin(final PlayerJoinEvent event) { + public void onPlayerJoin(@NotNull PlayerJoinEvent event) { plugin.setPlayerOnline(event.getPlayer()); } @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerQuit(PlayerQuitEvent event) { + public void onPlayerQuit(@NotNull PlayerQuitEvent event) { plugin.setPlayerOffline(event.getPlayer()); } @EventHandler - public void onWorldChange(PlayerChangedWorldEvent event) { + public void onWorldChange(@NotNull PlayerChangedWorldEvent event) { plugin.changeWorld(event.getPlayer()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerInteract(PlayerInteractEvent event) { + public void onPlayerInteract(@NotNull PlayerInteractEvent event) { // Do not cancel 3rd party plugins' custom events if (!PlayerInteractEvent.class.equals(event.getClass())) {