|
24 | 24 | import net.william278.husksync.data.BukkitData;
|
25 | 25 | import net.william278.husksync.user.BukkitUser;
|
26 | 26 | import net.william278.husksync.user.OnlineUser;
|
27 |
| -import org.bukkit.Bukkit; |
28 | 27 | import org.bukkit.entity.Player;
|
29 |
| -import org.bukkit.entity.Projectile; |
30 |
| -import org.bukkit.event.Cancellable; |
31 | 28 | import org.bukkit.event.EventHandler;
|
32 | 29 | import org.bukkit.event.EventPriority;
|
33 | 30 | import org.bukkit.event.Listener;
|
34 |
| -import org.bukkit.event.block.BlockBreakEvent; |
35 |
| -import org.bukkit.event.block.BlockPlaceEvent; |
36 |
| -import org.bukkit.event.entity.EntityDamageEvent; |
37 |
| -import org.bukkit.event.entity.EntityPickupItemEvent; |
38 | 31 | import org.bukkit.event.entity.PlayerDeathEvent;
|
39 |
| -import org.bukkit.event.entity.ProjectileLaunchEvent; |
40 |
| -import org.bukkit.event.inventory.InventoryClickEvent; |
41 |
| -import org.bukkit.event.inventory.InventoryOpenEvent; |
42 |
| -import org.bukkit.event.inventory.PrepareItemCraftEvent; |
43 |
| -import org.bukkit.event.player.*; |
| 32 | +import org.bukkit.event.player.PlayerCommandPreprocessEvent; |
44 | 33 | import org.bukkit.event.server.MapInitializeEvent;
|
45 | 34 | import org.bukkit.event.world.WorldSaveEvent;
|
46 | 35 | import org.bukkit.inventory.ItemStack;
|
47 | 36 | import org.jetbrains.annotations.NotNull;
|
48 | 37 |
|
49 |
| -import java.util.List; |
50 |
| -import java.util.Locale; |
51 |
| -import java.util.UUID; |
52 | 38 | import java.util.stream.Collectors;
|
53 | 39 |
|
54 | 40 | public class BukkitEventListener extends EventListener implements BukkitJoinEventListener, BukkitQuitEventListener,
|
55 | 41 | BukkitDeathEventListener, Listener {
|
56 |
| - protected final List<String> blacklistedCommands; |
57 | 42 |
|
58 |
| - public BukkitEventListener(@NotNull BukkitHuskSync huskSync) { |
59 |
| - super(huskSync); |
60 |
| - this.blacklistedCommands = huskSync.getSettings().getSynchronization().getBlacklistedCommandsWhileLocked(); |
61 |
| - Bukkit.getServer().getPluginManager().registerEvents(this, huskSync); |
| 43 | + protected final LockedHandler lockedHandler; |
| 44 | + |
| 45 | + public BukkitEventListener(@NotNull BukkitHuskSync plugin) { |
| 46 | + super(plugin); |
| 47 | + plugin.getServer().getPluginManager().registerEvents(this, plugin); |
| 48 | + this.lockedHandler = createLockedHandler(plugin); |
| 49 | + } |
| 50 | + |
| 51 | + @NotNull |
| 52 | + private LockedHandler createLockedHandler(@NotNull BukkitHuskSync plugin) { |
| 53 | + if (getPlugin().isDependencyLoaded("ProtocolLib") && getPlugin().getSettings().isCancelPackets()) { |
| 54 | + return new BukkitLockedPacketListener(plugin); |
| 55 | + } else { |
| 56 | + return new BukkitLockedEventListener(plugin); |
| 57 | + } |
62 | 58 | }
|
63 | 59 |
|
64 | 60 | @Override
|
@@ -88,7 +84,7 @@ public void handlePlayerDeath(@NotNull PlayerDeathEvent event) {
|
88 | 84 | final OnlineUser user = BukkitUser.adapt(event.getEntity(), plugin);
|
89 | 85 |
|
90 | 86 | // If the player is locked or the plugin disabling, clear their drops
|
91 |
| - if (cancelPlayerEvent(user.getUuid())) { |
| 87 | + if (lockedHandler.cancelPlayerEvent(user.getUuid())) { |
92 | 88 | event.getDrops().clear();
|
93 | 89 | return;
|
94 | 90 | }
|
@@ -125,91 +121,13 @@ public void onMapInitialize(@NotNull MapInitializeEvent event) {
|
125 | 121 | }
|
126 | 122 | }
|
127 | 123 |
|
128 |
| - |
129 |
| - /* |
130 |
| - * Events to cancel if the player has not been set yet |
131 |
| - */ |
132 |
| - |
133 |
| - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |
134 |
| - public void onProjectileLaunch(@NotNull ProjectileLaunchEvent event) { |
135 |
| - final Projectile projectile = event.getEntity(); |
136 |
| - if (projectile.getShooter() instanceof Player player) { |
137 |
| - cancelPlayerEvent(player.getUniqueId(), event); |
138 |
| - } |
139 |
| - } |
140 |
| - |
141 |
| - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |
142 |
| - public void onDropItem(@NotNull PlayerDropItemEvent event) { |
143 |
| - cancelPlayerEvent(event.getPlayer().getUniqueId(), event); |
144 |
| - } |
145 |
| - |
146 |
| - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |
147 |
| - public void onPickupItem(@NotNull EntityPickupItemEvent event) { |
148 |
| - if (event.getEntity() instanceof Player player) { |
149 |
| - cancelPlayerEvent(player.getUniqueId(), event); |
150 |
| - } |
151 |
| - } |
152 |
| - |
153 |
| - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |
154 |
| - public void onPlayerInteract(@NotNull PlayerInteractEvent event) { |
155 |
| - cancelPlayerEvent(event.getPlayer().getUniqueId(), event); |
156 |
| - } |
157 |
| - |
158 |
| - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |
159 |
| - public void onPlayerInteractEntity(@NotNull PlayerInteractEntityEvent event) { |
160 |
| - cancelPlayerEvent(event.getPlayer().getUniqueId(), event); |
161 |
| - } |
162 |
| - |
163 |
| - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |
164 |
| - public void onPlayerInteractArmorStand(@NotNull PlayerArmorStandManipulateEvent event) { |
165 |
| - cancelPlayerEvent(event.getPlayer().getUniqueId(), event); |
166 |
| - } |
167 |
| - |
168 |
| - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |
169 |
| - public void onBlockPlace(@NotNull BlockPlaceEvent event) { |
170 |
| - cancelPlayerEvent(event.getPlayer().getUniqueId(), event); |
171 |
| - } |
172 |
| - |
173 |
| - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |
174 |
| - public void onBlockBreak(@NotNull BlockBreakEvent event) { |
175 |
| - cancelPlayerEvent(event.getPlayer().getUniqueId(), event); |
176 |
| - } |
177 |
| - |
178 |
| - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |
179 |
| - public void onInventoryOpen(@NotNull InventoryOpenEvent event) { |
180 |
| - if (event.getPlayer() instanceof Player player) { |
181 |
| - cancelPlayerEvent(player.getUniqueId(), event); |
182 |
| - } |
183 |
| - } |
184 |
| - |
185 |
| - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |
186 |
| - public void onInventoryClick(@NotNull InventoryClickEvent event) { |
187 |
| - cancelPlayerEvent(event.getWhoClicked().getUniqueId(), event); |
188 |
| - } |
189 |
| - |
190 |
| - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |
191 |
| - public void onCraftItem(@NotNull PrepareItemCraftEvent event) { |
192 |
| - } |
193 |
| - |
194 |
| - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |
195 |
| - public void onPlayerTakeDamage(@NotNull EntityDamageEvent event) { |
196 |
| - if (event.getEntity() instanceof Player player) { |
197 |
| - cancelPlayerEvent(player.getUniqueId(), event); |
198 |
| - } |
199 |
| - } |
200 |
| - |
| 124 | + // We handle commands here to allow specific command handling on ProtocolLib servers |
201 | 125 | @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
202 |
| - public void onPermissionCommand(@NotNull PlayerCommandPreprocessEvent event) { |
203 |
| - final String[] commandArgs = event.getMessage().substring(1).split(" "); |
204 |
| - final String commandLabel = commandArgs[0].toLowerCase(Locale.ENGLISH); |
205 |
| - |
206 |
| - if (blacklistedCommands.contains("*") || blacklistedCommands.contains(commandLabel)) { |
207 |
| - cancelPlayerEvent(event.getPlayer().getUniqueId(), event); |
| 126 | + public void onCommandProcessed(@NotNull PlayerCommandPreprocessEvent event) { |
| 127 | + if (!lockedHandler.isCommandDisabled(event.getMessage().substring(1).split(" ")[0])) { |
| 128 | + return; |
208 | 129 | }
|
209 |
| - } |
210 |
| - |
211 |
| - private void cancelPlayerEvent(@NotNull UUID uuid, @NotNull Cancellable event) { |
212 |
| - if (cancelPlayerEvent(uuid)) { |
| 130 | + if (lockedHandler.cancelPlayerEvent(event.getPlayer().getUniqueId())) { |
213 | 131 | event.setCancelled(true);
|
214 | 132 | }
|
215 | 133 | }
|
|
0 commit comments