refactor: replace usages of switch over keyed enums (#3673)

This commit is contained in:
Hannes Greule 2022-06-19 01:59:43 +02:00 committed by GitHub
parent 7279862def
commit 6a54328f7d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 177 additions and 190 deletions

View File

@ -65,6 +65,7 @@ import net.kyori.adventure.text.minimessage.Template;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
@ -106,11 +107,20 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class BlockEventListener implements Listener { public class BlockEventListener implements Listener {
private static final Set<Material> PISTONS = Set.of(
Material.PISTON,
Material.STICKY_PISTON
);
private static final Set<Material> PHYSICS_BLOCKS = Set.of(
Material.TURTLE_EGG,
Material.TURTLE_SPAWN_EGG
);
private final PlotAreaManager plotAreaManager; private final PlotAreaManager plotAreaManager;
private final WorldEdit worldEdit; private final WorldEdit worldEdit;
@ -216,48 +226,31 @@ public class BlockEventListener implements Listener {
plot.debug("Prevented block physics and resent block change because disable-physics = true"); plot.debug("Prevented block physics and resent block change because disable-physics = true");
return; return;
} }
switch (event.getChangedType()) { if (event.getChangedType() == Material.COMPARATOR) {
case COMPARATOR: { if (!plot.getFlag(RedstoneFlag.class)) {
if (!plot.getFlag(RedstoneFlag.class)) { event.setCancelled(true);
event.setCancelled(true); plot.debug("Prevented comparator update because redstone = false");
plot.debug("Prevented comparator update because redstone = false");
}
return;
} }
case ANVIL: return;
case DRAGON_EGG: }
case GRAVEL: if (PHYSICS_BLOCKS.contains(event.getChangedType())) {
case SAND: if (plot.getFlag(DisablePhysicsFlag.class)) {
case TURTLE_EGG: event.setCancelled(true);
case TURTLE_HELMET: plot.debug("Prevented block physics because disable-physics = true");
case TURTLE_SPAWN_EGG: {
if (plot.getFlag(DisablePhysicsFlag.class)) {
event.setCancelled(true);
plot.debug("Prevented block physics because disable-physics = true");
}
return;
} }
default: return;
if (Settings.Redstone.DETECT_INVALID_EDGE_PISTONS) { }
switch (block.getType()) { if (Settings.Redstone.DETECT_INVALID_EDGE_PISTONS) {
case PISTON, STICKY_PISTON -> { if (PISTONS.contains(block.getType())) {
org.bukkit.block.data.Directional piston = (org.bukkit.block.data.Directional) block.getBlockData(); org.bukkit.block.data.Directional piston = (org.bukkit.block.data.Directional) block.getBlockData();
switch (piston.getFacing()) { final BlockFace facing = piston.getFacing();
case EAST -> location = location.add(1, 0, 0); location = location.add(facing.getModX(), facing.getModY(), facing.getModZ());
case SOUTH -> location = location.add(-1, 0, 0); Plot newPlot = area.getOwnedPlotAbs(location);
case WEST -> location = location.add(0, 0, 1); if (!plot.equals(newPlot)) {
case NORTH -> location = location.add(0, 0, -1); event.setCancelled(true);
} plot.debug("Prevented piston update because of invalid edge piston detection");
Plot newPlot = area.getOwnedPlotAbs(location);
if (!plot.equals(newPlot)) {
event.setCancelled(true);
plot.debug("Prevented piston update because of invalid edge piston detection");
return;
}
}
}
} }
break; }
} }
} }
@ -548,21 +541,18 @@ public class BlockEventListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
switch (event.getNewState().getType()) { if (Tag.SNOW.isTagged(event.getNewState().getType())) {
case SNOW: if (!plot.getFlag(SnowFormFlag.class)) {
case SNOW_BLOCK: plot.debug("Snow could not form because snow-form = false");
if (!plot.getFlag(SnowFormFlag.class)) { event.setCancelled(true);
plot.debug("Snow could not form because snow-form = false"); }
event.setCancelled(true); return;
} }
return; if (Tag.ICE.isTagged(event.getNewState().getType())) {
case ICE: if (!plot.getFlag(IceFormFlag.class)) {
case FROSTED_ICE: plot.debug("Ice could not form because ice-form = false");
case PACKED_ICE: event.setCancelled(true);
if (!plot.getFlag(IceFormFlag.class)) { }
plot.debug("Ice could not form because ice-form = false");
event.setCancelled(true);
}
} }
} }
@ -583,18 +573,12 @@ public class BlockEventListener implements Listener {
return; return;
} }
Class<? extends BooleanFlag<?>> flag; Class<? extends BooleanFlag<?>> flag;
switch (event.getNewState().getType()) { if (Tag.SNOW.isTagged(event.getNewState().getType())) {
case SNOW: flag = SnowFormFlag.class;
case SNOW_BLOCK: } else if (Tag.ICE.isTagged(event.getNewState().getType())) {
flag = SnowFormFlag.class; flag = IceFormFlag.class;
break; } else {
case ICE: return;
case FROSTED_ICE:
case PACKED_ICE:
flag = IceFormFlag.class;
break;
default:
return; // other blocks are ignored by this event
} }
boolean allowed = plot.getFlag(flag); boolean allowed = plot.getFlag(flag);
Entity entity = event.getEntity(); Entity entity = event.getEntity();
@ -698,50 +682,33 @@ public class BlockEventListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
switch (block.getType()) { Material blockType = block.getType();
case ICE: if (Tag.ICE.isTagged(blockType)) {
if (!plot.getFlag(IceMeltFlag.class)) { if (!plot.getFlag(IceMeltFlag.class)) {
plot.debug("Ice could not melt because ice-melt = false"); plot.debug("Ice could not melt because ice-melt = false");
event.setCancelled(true); event.setCancelled(true);
} }
break; return;
case SNOW: }
if (!plot.getFlag(SnowMeltFlag.class)) { if (Tag.SNOW.isTagged(blockType)) {
plot.debug("Snow could not melt because snow-melt = false"); if (!plot.getFlag(SnowMeltFlag.class)) {
event.setCancelled(true); plot.debug("Snow could not melt because snow-melt = false");
} event.setCancelled(true);
break; }
case FARMLAND: return;
if (!plot.getFlag(SoilDryFlag.class)) { }
plot.debug("Soil could not dry because soil-dry = false"); if (blockType == Material.FARMLAND) {
event.setCancelled(true); if (!plot.getFlag(SoilDryFlag.class)) {
} plot.debug("Soil could not dry because soil-dry = false");
break; event.setCancelled(true);
case TUBE_CORAL_BLOCK: }
case BRAIN_CORAL_BLOCK: return;
case BUBBLE_CORAL_BLOCK: }
case FIRE_CORAL_BLOCK: if (Tag.CORAL_BLOCKS.isTagged(blockType) || Tag.CORALS.isTagged(blockType)) {
case HORN_CORAL_BLOCK: if (!plot.getFlag(CoralDryFlag.class)) {
case TUBE_CORAL: plot.debug("Coral could not dry because coral-dry = false");
case BRAIN_CORAL: event.setCancelled(true);
case BUBBLE_CORAL: }
case FIRE_CORAL:
case HORN_CORAL:
case TUBE_CORAL_FAN:
case BRAIN_CORAL_FAN:
case BUBBLE_CORAL_FAN:
case FIRE_CORAL_FAN:
case HORN_CORAL_FAN:
case BRAIN_CORAL_WALL_FAN:
case BUBBLE_CORAL_WALL_FAN:
case FIRE_CORAL_WALL_FAN:
case HORN_CORAL_WALL_FAN:
case TUBE_CORAL_WALL_FAN:
if (!plot.getFlag(CoralDryFlag.class)) {
plot.debug("Coral could not dry because coral-dry = false");
event.setCancelled(true);
}
break;
} }
} }

View File

@ -26,6 +26,7 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag; import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag;
import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag; import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag;
import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Item; import org.bukkit.entity.Item;
@ -39,11 +40,31 @@ import org.bukkit.event.block.BlockReceiveGameEvent;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class BlockEventListener117 implements Listener { public class BlockEventListener117 implements Listener {
private static final Set<Material> COPPER_OXIDIZING = Set.of(
Material.COPPER_BLOCK,
Material.EXPOSED_COPPER,
Material.WEATHERED_COPPER,
Material.OXIDIZED_COPPER,
Material.CUT_COPPER,
Material.EXPOSED_CUT_COPPER,
Material.WEATHERED_CUT_COPPER,
Material.OXIDIZED_CUT_COPPER,
Material.CUT_COPPER_STAIRS,
Material.EXPOSED_CUT_COPPER_STAIRS,
Material.WEATHERED_CUT_COPPER_STAIRS,
Material.OXIDIZED_CUT_COPPER_STAIRS,
Material.CUT_COPPER_SLAB,
Material.EXPOSED_CUT_COPPER_SLAB,
Material.WEATHERED_CUT_COPPER_SLAB,
Material.OXIDIZED_CUT_COPPER_SLAB
);
@Inject @Inject
public BlockEventListener117() { public BlockEventListener117() {
} }
@ -148,27 +169,11 @@ public class BlockEventListener117 implements Listener {
if (plot == null) { if (plot == null) {
return; return;
} }
switch (event.getNewState().getType()) { if (COPPER_OXIDIZING.contains(event.getNewState().getType())) {
case COPPER_BLOCK: if (!plot.getFlag(CopperOxideFlag.class)) {
case EXPOSED_COPPER: plot.debug("Copper could not oxide because copper-oxide = false");
case WEATHERED_COPPER: event.setCancelled(true);
case OXIDIZED_COPPER: }
case CUT_COPPER:
case EXPOSED_CUT_COPPER:
case WEATHERED_CUT_COPPER:
case OXIDIZED_CUT_COPPER:
case CUT_COPPER_STAIRS:
case EXPOSED_CUT_COPPER_STAIRS:
case WEATHERED_CUT_COPPER_STAIRS:
case OXIDIZED_CUT_COPPER_STAIRS:
case CUT_COPPER_SLAB:
case EXPOSED_CUT_COPPER_SLAB:
case WEATHERED_CUT_COPPER_SLAB:
case OXIDIZED_CUT_COPPER_SLAB:
if (!plot.getFlag(CopperOxideFlag.class)) {
plot.debug("Copper could not oxide because copper-oxide = false");
event.setCancelled(true);
}
} }
} }

View File

@ -124,17 +124,17 @@ public class EntitySpawnListener implements Listener {
return; return;
} }
Plot plot = location.getOwnedPlotAbs(); Plot plot = location.getOwnedPlotAbs();
EntityType type = entity.getType();
if (plot == null) { if (plot == null) {
EntityType type = entity.getType();
if (!area.isMobSpawning()) { if (!area.isMobSpawning()) {
switch (type) { if (type == EntityType.PLAYER) {
case DROPPED_ITEM: return;
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { }
event.setCancelled(true); if (type == EntityType.DROPPED_ITEM) {
return; if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
} event.setCancelled(true);
case PLAYER: }
return; return;
} }
if (type.isAlive()) { if (type.isAlive()) {
event.setCancelled(true); event.setCancelled(true);
@ -148,15 +148,16 @@ public class EntitySpawnListener implements Listener {
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) { if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
event.setCancelled(true); event.setCancelled(true);
} }
switch (entity.getType()) { if (type == EntityType.ENDER_CRYSTAL) {
case ENDER_CRYSTAL: if (BukkitEntityUtil.checkEntity(entity, plot)) {
if (BukkitEntityUtil.checkEntity(entity, plot)) { event.setCancelled(true);
event.setCancelled(true); }
} return;
case SHULKER: }
if (!entity.hasMetadata("shulkerPlot")) { if (type == EntityType.SHULKER) {
entity.setMetadata("shulkerPlot", new FixedMetadataValue((Plugin) PlotSquared.platform(), plot.getId())); if (!entity.hasMetadata("shulkerPlot")) {
} entity.setMetadata("shulkerPlot", new FixedMetadataValue((Plugin) PlotSquared.platform(), plot.getId()));
}
} }
} }

View File

@ -230,15 +230,15 @@ public class PaperListener implements Listener {
if (plot == null) { if (plot == null) {
EntityType type = event.getType(); EntityType type = event.getType();
if (!area.isMobSpawning()) { if (!area.isMobSpawning()) {
switch (type) { if (type == EntityType.PLAYER) {
case DROPPED_ITEM: return;
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { }
event.setShouldAbortSpawn(true); if (type == EntityType.DROPPED_ITEM) {
event.setCancelled(true); if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
return; event.setShouldAbortSpawn(true);
} event.setCancelled(true);
case PLAYER: }
return; return;
} }
if (type.isAlive()) { if (type.isAlive()) {
event.setShouldAbortSpawn(true); event.setShouldAbortSpawn(true);

View File

@ -82,6 +82,7 @@ import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.FluidCollisionMode; import org.bukkit.FluidCollisionMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
@ -159,6 +160,20 @@ import java.util.regex.Pattern;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class PlayerEventListener extends PlotListener implements Listener { public class PlayerEventListener extends PlotListener implements Listener {
private static final Set<Material> MINECARTS = Set.of(
Material.MINECART,
Material.TNT_MINECART,
Material.CHEST_MINECART,
Material.COMMAND_BLOCK_MINECART,
Material.FURNACE_MINECART,
Material.HOPPER_MINECART
);
private static final Set<Material> BOOKS = Set.of(
Material.BOOK,
Material.KNOWLEDGE_BOOK,
Material.WRITABLE_BOOK,
Material.WRITTEN_BOOK
);
private final EventDispatcher eventDispatcher; private final EventDispatcher eventDispatcher;
private final WorldEdit worldEdit; private final WorldEdit worldEdit;
private final PlotAreaManager plotAreaManager; private final PlotAreaManager plotAreaManager;
@ -830,10 +845,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if ((slot > 8) || !event.getEventName().equals("InventoryCreativeEvent")) { if ((slot > 8) || !event.getEventName().equals("InventoryCreativeEvent")) {
return; return;
} }
ItemStack current = inv.getItemInHand(); ItemStack oldItem = inv.getItemInHand();
ItemMeta oldMeta = oldItem.getItemMeta();
ItemStack newItem = event.getCursor(); ItemStack newItem = event.getCursor();
ItemMeta newMeta = newItem.getItemMeta(); ItemMeta newMeta = newItem.getItemMeta();
ItemMeta oldMeta = newItem.getItemMeta();
if (event.getClick() == ClickType.CREATIVE) { if (event.getClick() == ClickType.CREATIVE) {
final Plot plot = pp.getCurrentPlot(); final Plot plot = pp.getCurrentPlot();
@ -873,34 +888,26 @@ public class PlayerEventListener extends PlotListener implements Listener {
oldLore = lore.toString(); oldLore = lore.toString();
} }
} }
if (!"[(+NBT)]".equals(newLore) || (current.equals(newItem) && newLore.equals(oldLore))) { Material itemType = newItem.getType();
switch (newItem.getType()) { if (!"[(+NBT)]".equals(newLore) || (oldItem.equals(newItem) && newLore.equals(oldLore))) {
case LEGACY_BANNER: if (newMeta == null || (itemType != Material.LEGACY_BANNER && itemType != Material.PLAYER_HEAD)) {
case PLAYER_HEAD: return;
if (newMeta != null) {
break;
}
default:
return;
} }
} }
Block block = player.getTargetBlock(null, 7); Block block = player.getTargetBlock(null, 7);
org.bukkit.block.BlockState state = block.getState(); org.bukkit.block.BlockState state = block.getState();
Material stateType = state.getType(); Material stateType = state.getType();
Material itemType = newItem.getType();
if (stateType != itemType) { if (stateType != itemType) {
switch (stateType) { if (stateType == Material.LEGACY_WALL_BANNER || stateType == Material.LEGACY_STANDING_BANNER) {
case LEGACY_STANDING_BANNER: if (itemType != Material.LEGACY_BANNER) {
case LEGACY_WALL_BANNER:
if (itemType == Material.LEGACY_BANNER) {
break;
}
case LEGACY_SKULL:
if (itemType == Material.LEGACY_SKULL_ITEM) {
break;
}
default:
return; return;
}
} else if (stateType == Material.LEGACY_SKULL) {
if (itemType != Material.LEGACY_SKULL_ITEM) {
return;
}
} else {
return;
} }
} }
Location location = BukkitUtil.adapt(state.getLocation()); Location location = BukkitUtil.adapt(state.getLocation());
@ -939,7 +946,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
} }
} }
if (cancelled) { if (cancelled) {
if ((current.getType() == newItem.getType()) && (current.getDurability() == newItem if ((oldItem.getType() == newItem.getType()) && (oldItem.getDurability() == newItem
.getDurability())) { .getDurability())) {
event.setCursor( event.setCursor(
new ItemStack(newItem.getType(), newItem.getAmount(), newItem.getDurability())); new ItemStack(newItem.getType(), newItem.getAmount(), newItem.getDurability()));
@ -1126,14 +1133,21 @@ public class PlayerEventListener extends PlotListener implements Listener {
//Allow all players to eat while also allowing the block place event ot be fired //Allow all players to eat while also allowing the block place event ot be fired
return; return;
} }
switch (type) { if (type == Material.ARMOR_STAND) {
case ACACIA_BOAT, BIRCH_BOAT, CHEST_MINECART, COMMAND_BLOCK_MINECART, DARK_OAK_BOAT, FURNACE_MINECART, HOPPER_MINECART, JUNGLE_BOAT, MINECART, OAK_BOAT, SPRUCE_BOAT, TNT_MINECART -> eventType = PlayerBlockEventType.PLACE_VEHICLE; location = BukkitUtil.adapt(block.getRelative(event.getBlockFace()).getLocation());
case FIREWORK_ROCKET, FIREWORK_STAR -> eventType = PlayerBlockEventType.SPAWN_MOB; eventType = PlayerBlockEventType.PLACE_MISC;
case BOOK, KNOWLEDGE_BOOK, WRITABLE_BOOK, WRITTEN_BOOK -> eventType = PlayerBlockEventType.READ; }
case ARMOR_STAND -> { if (Tag.ITEMS_BOATS.isTagged(type) || MINECARTS.contains(type)) {
location = BukkitUtil.adapt(block.getRelative(event.getBlockFace()).getLocation()); eventType = PlayerBlockEventType.PLACE_VEHICLE;
eventType = PlayerBlockEventType.PLACE_MISC; break;
} }
if (type == Material.FIREWORK_ROCKET || type == Material.FIREWORK_STAR) {
eventType = PlayerBlockEventType.SPAWN_MOB;
break;
}
if (BOOKS.contains(type)) {
eventType = PlayerBlockEventType.READ;
break;
} }
break; break;
} }