Fix compatibility for 1.20.6

This commit is contained in:
tastybento 2024-04-29 19:46:06 -07:00
parent 6949432cb6
commit 63cc0a01d9
6 changed files with 48 additions and 24 deletions

View File

@ -3,7 +3,6 @@ package world.bentobox.bentobox.api.commands.admin.range;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.bukkit.Bukkit;
import org.bukkit.Color;
@ -11,11 +10,10 @@ import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Particle;
import com.google.common.base.Enums;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
import world.bentobox.bentobox.util.Util;
/**
* @author Poslovitch
@ -26,10 +24,9 @@ public class AdminRangeDisplayCommand extends CompositeCommand {
private static final String DISPLAY = "display";
private static final String SHOW = "show";
private static final String HIDE = "hide";
public static final Particle PARTICLE = Enums.getIfPresent(Particle.class, "RESTONE").toJavaUtil()
.orElse(Enums.getIfPresent(Particle.class, "DUST").orNull());
private static final Particle PARTICLE2 = Enums.getIfPresent(Particle.class, "VILLAGER_HAPPY").toJavaUtil()
.orElse(Enums.getIfPresent(Particle.class, "HAPPY_VILLAGER").orNull());
public static final Particle PARTICLE = Util.findFirstMatchingEnum(Particle.class, "REDSTONE", "DUST");
private static final Particle PARTICLE2 = Util.findFirstMatchingEnum(Particle.class, "VILLAGER_HAPPY",
"HAPPY_VILLAGER");
// Map of users to which ranges must be displayed
private final Map<User, Integer> displayRanges = new HashMap<>();

View File

@ -20,6 +20,7 @@ import com.google.common.base.Enums;
import world.bentobox.bentobox.api.flags.FlagListener;
import world.bentobox.bentobox.lists.Flags;
import world.bentobox.bentobox.util.Util;
/**
* Handles breeding protection
@ -40,12 +41,8 @@ public class BreedingListener extends FlagListener {
bi.put(EntityType.HORSE, Arrays.asList(Material.GOLDEN_APPLE, Material.GOLDEN_CARROT));
bi.put(EntityType.DONKEY, Arrays.asList(Material.GOLDEN_APPLE, Material.GOLDEN_CARROT));
bi.put(EntityType.COW, Collections.singletonList(Material.WHEAT));
if (Enums.getIfPresent(EntityType.class, "MUSHROOM_COW").isPresent()) {
bi.put(Enums.getIfPresent(EntityType.class, "MUSHROOM_COW").get(),
Collections.singletonList(Material.WHEAT));
} else {
bi.put(EntityType.MOOSHROOM, Collections.singletonList(Material.WHEAT));
}
bi.put(Util.findFirstMatchingEnum(EntityType.class, "MUSHROOM_COW", "MOOSHROOM"),
Collections.singletonList(Material.WHEAT));
bi.put(EntityType.SHEEP, Collections.singletonList(Material.WHEAT));
bi.put(EntityType.PIG, Arrays.asList(Material.CARROT, Material.POTATO, Material.BEETROOT));
bi.put(EntityType.CHICKEN, Arrays.asList(Material.WHEAT_SEEDS, Material.PUMPKIN_SEEDS, Material.MELON_SEEDS, Material.BEETROOT_SEEDS));

View File

@ -7,10 +7,9 @@ import org.bukkit.event.entity.PlayerLeashEntityEvent;
import org.bukkit.event.hanging.HangingPlaceEvent;
import org.bukkit.event.player.PlayerUnleashEntityEvent;
import com.google.common.base.Enums;
import world.bentobox.bentobox.api.flags.FlagListener;
import world.bentobox.bentobox.lists.Flags;
import world.bentobox.bentobox.util.Util;
/**
* @author tastybento
@ -44,9 +43,8 @@ public class LeashListener extends FlagListener {
*/
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerLeashHitch(final HangingPlaceEvent e) {
EntityType LEASH_HITCH = Enums.getIfPresent(EntityType.class, "LEASH_HITCH")
.or(Enums.getIfPresent(EntityType.class, "LEASH_KNOT").orNull());
if (LEASH_HITCH != null && e.getEntity().getType().equals(LEASH_HITCH)) {
EntityType LEASH_HITCH = Util.findFirstMatchingEnum(EntityType.class, "LEASH_HITCH", "LEASH_KNOT");
if (e.getEntity().getType().equals(LEASH_HITCH)) {
checkIsland(e, e.getPlayer(), e.getEntity().getLocation(), Flags.LEASH);
}
}

View File

@ -17,10 +17,9 @@ import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import com.google.common.base.Enums;
import world.bentobox.bentobox.api.flags.FlagListener;
import world.bentobox.bentobox.lists.Flags;
import world.bentobox.bentobox.util.Util;
/**
* Protects islands from visitors blowing things up
@ -28,9 +27,9 @@ import world.bentobox.bentobox.lists.Flags;
*/
public class TNTListener extends FlagListener {
private static final EntityType PRIMED_TNT = Enums.getIfPresent(EntityType.class, "PRIMED_TNT").or(EntityType.TNT);
private static final EntityType MINECART_TNT = Enums.getIfPresent(EntityType.class, "PMINECART_TNT)")
.or(EntityType.TNT_MINECART);
private static final EntityType PRIMED_TNT = Util.findFirstMatchingEnum(EntityType.class, "PRIMED_TNT", "TNT");
private static final EntityType MINECART_TNT = Util.findFirstMatchingEnum(EntityType.class, "MINECART_TNT",
"TNT_MINECART");
/**
* Contains {@link EntityType}s that generates an explosion.

View File

@ -42,6 +42,9 @@ import org.bukkit.util.Vector;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import com.google.common.base.Enums;
import com.google.common.base.Optional;
import io.papermc.lib.PaperLib;
import io.papermc.lib.features.blockstatesnapshot.BlockStateSnapshotResult;
import world.bentobox.bentobox.BentoBox;
@ -801,4 +804,26 @@ public class Util {
Util.translateColorCodes(input.replaceAll("[\\\\/:*?\"<>|\s]", "_"))).
toLowerCase();
}
/**
* Attempts to find the first matching enum constant from an array of possible string representations.
* This method sequentially checks each string against the enum constants of the specified enum class
* by normalizing the string values to uppercase before comparison, enhancing the likelihood of a match
* if the enum constants are defined in uppercase.
*
* @param enumClass the Class object of the enum type to be checked against
* @param values an array of string values which are potential matches for the enum constants
* @param <T> the type parameter of the enum
* @return the first matching enum constant if a match is found; otherwise, returns null
* @throws NullPointerException if either {@code enumClass} or {@code values} are null
*/
public static <T extends Enum<T>> T findFirstMatchingEnum(Class<T> enumClass, String... values) {
for (String value : values) {
Optional<T> enumConstant = Enums.getIfPresent(enumClass, value.toUpperCase());
if (enumConstant.isPresent()) {
return enumConstant.get();
}
}
return null; // Return null or throw an exception if no match is found
}
}

View File

@ -231,7 +231,15 @@ public class ServerCompatibility {
/**
* @since 2.0.0
*/
V1_20_4(Compatibility.COMPATIBLE);
V1_20_4(Compatibility.COMPATIBLE),
/**
* @since 2.4.0
*/
V1_20_5(Compatibility.COMPATIBLE),
/**
* @since 2.4.0
*/
V1_20_6(Compatibility.COMPATIBLE);
private final Compatibility compatibility;