diff --git a/pom.xml b/pom.xml index 8aa65b84f..985bfe14e 100644 --- a/pom.xml +++ b/pom.xml @@ -73,7 +73,7 @@ 42.2.18 5.0.1 - 1.20.4-R0.1-SNAPSHOT + 1.20.5-R0.1-SNAPSHOT 1.20.4-R0.1-SNAPSHOT @@ -88,7 +88,7 @@ -LOCAL - 2.3.0 + 2.4.0 bentobox-world https://sonarcloud.io ${project.basedir}/lib diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/DefaultAdminCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/DefaultAdminCommand.java index dbcd126de..320191518 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/DefaultAdminCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/DefaultAdminCommand.java @@ -12,7 +12,6 @@ import world.bentobox.bentobox.api.commands.admin.resets.AdminResetsCommand; import world.bentobox.bentobox.api.commands.admin.team.AdminTeamAddCommand; import world.bentobox.bentobox.api.commands.admin.team.AdminTeamCommand; import world.bentobox.bentobox.api.commands.admin.team.AdminTeamDisbandCommand; -import world.bentobox.bentobox.api.commands.admin.team.AdminTeamFixCommand; import world.bentobox.bentobox.api.commands.admin.team.AdminTeamKickCommand; import world.bentobox.bentobox.api.commands.admin.team.AdminTeamSetownerCommand; import world.bentobox.bentobox.api.localization.TextVariables; @@ -63,7 +62,6 @@ public abstract class DefaultAdminCommand extends CompositeCommand { new AdminTeamKickCommand(this); new AdminTeamDisbandCommand(this); new AdminTeamSetownerCommand(this); - new AdminTeamFixCommand(this); // Blueprints new AdminBlueprintCommand(this); // Register/unregister islands diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintCommand.java index 8246d157d..9308301c5 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintCommand.java @@ -12,6 +12,7 @@ import org.bukkit.Particle; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.commands.ConfirmableCommand; +import world.bentobox.bentobox.api.commands.admin.range.AdminRangeDisplayCommand; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.blueprints.BlueprintClipboard; import world.bentobox.bentobox.managers.BlueprintsManager; @@ -23,7 +24,6 @@ public class AdminBlueprintCommand extends ConfirmableCommand { // Map containing selection cuboid display tasks private Map displayClipboards; - private static final Particle PARTICLE = Particle.REDSTONE; private static final Particle.DustOptions PARTICLE_DUST_OPTIONS = new Particle.DustOptions(Color.RED, 1.0F); public AdminBlueprintCommand(CompositeCommand parent) { @@ -99,26 +99,38 @@ public class AdminBlueprintCommand extends ConfirmableCommand { // Drawing x-axes for (int x = minX; x <= maxX; x++) { - user.spawnParticle(PARTICLE, PARTICLE_DUST_OPTIONS, x + 0.5, minY + 0.5, minZ + 0.5); - user.spawnParticle(PARTICLE, PARTICLE_DUST_OPTIONS, x + 0.5, maxY + 0.5, minZ + 0.5); - user.spawnParticle(PARTICLE, PARTICLE_DUST_OPTIONS, x + 0.5, minY + 0.5, maxZ + 0.5); - user.spawnParticle(PARTICLE, PARTICLE_DUST_OPTIONS, x + 0.5, maxY + 0.5, maxZ + 0.5); + user.spawnParticle(AdminRangeDisplayCommand.PARTICLE, PARTICLE_DUST_OPTIONS, x + 0.5, minY + 0.5, + minZ + 0.5); + user.spawnParticle(AdminRangeDisplayCommand.PARTICLE, PARTICLE_DUST_OPTIONS, x + 0.5, maxY + 0.5, + minZ + 0.5); + user.spawnParticle(AdminRangeDisplayCommand.PARTICLE, PARTICLE_DUST_OPTIONS, x + 0.5, minY + 0.5, + maxZ + 0.5); + user.spawnParticle(AdminRangeDisplayCommand.PARTICLE, PARTICLE_DUST_OPTIONS, x + 0.5, maxY + 0.5, + maxZ + 0.5); } // Drawing y-axes for (int y = minY; y <= maxY; y++) { - user.spawnParticle(PARTICLE, PARTICLE_DUST_OPTIONS, minX + 0.5, y + 0.5, minZ + 0.5); - user.spawnParticle(PARTICLE, PARTICLE_DUST_OPTIONS, maxX + 0.5, y + 0.5, minZ + 0.5); - user.spawnParticle(PARTICLE, PARTICLE_DUST_OPTIONS, minX + 0.5, y + 0.5, maxZ + 0.5); - user.spawnParticle(PARTICLE, PARTICLE_DUST_OPTIONS, maxX + 0.5, y + 0.5, maxZ + 0.5); + user.spawnParticle(AdminRangeDisplayCommand.PARTICLE, PARTICLE_DUST_OPTIONS, minX + 0.5, y + 0.5, + minZ + 0.5); + user.spawnParticle(AdminRangeDisplayCommand.PARTICLE, PARTICLE_DUST_OPTIONS, maxX + 0.5, y + 0.5, + minZ + 0.5); + user.spawnParticle(AdminRangeDisplayCommand.PARTICLE, PARTICLE_DUST_OPTIONS, minX + 0.5, y + 0.5, + maxZ + 0.5); + user.spawnParticle(AdminRangeDisplayCommand.PARTICLE, PARTICLE_DUST_OPTIONS, maxX + 0.5, y + 0.5, + maxZ + 0.5); } // Drawing z-axes for (int z = minZ; z <= maxZ; z++) { - user.spawnParticle(PARTICLE, PARTICLE_DUST_OPTIONS, minX + 0.5, minY + 0.5, z + 0.5); - user.spawnParticle(PARTICLE, PARTICLE_DUST_OPTIONS, maxX + 0.5, minY + 0.5, z + 0.5); - user.spawnParticle(PARTICLE, PARTICLE_DUST_OPTIONS, minX + 0.5, maxY + 0.5, z + 0.5); - user.spawnParticle(PARTICLE, PARTICLE_DUST_OPTIONS, maxX + 0.5, maxY + 0.5, z + 0.5); + user.spawnParticle(AdminRangeDisplayCommand.PARTICLE, PARTICLE_DUST_OPTIONS, minX + 0.5, minY + 0.5, + z + 0.5); + user.spawnParticle(AdminRangeDisplayCommand.PARTICLE, PARTICLE_DUST_OPTIONS, maxX + 0.5, minY + 0.5, + z + 0.5); + user.spawnParticle(AdminRangeDisplayCommand.PARTICLE, PARTICLE_DUST_OPTIONS, minX + 0.5, maxY + 0.5, + z + 0.5); + user.spawnParticle(AdminRangeDisplayCommand.PARTICLE, PARTICLE_DUST_OPTIONS, maxX + 0.5, maxY + 0.5, + z + 0.5); } } diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeDisplayCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeDisplayCommand.java index f79049829..d99445e47 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeDisplayCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/range/AdminRangeDisplayCommand.java @@ -3,6 +3,7 @@ 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; @@ -10,6 +11,8 @@ 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; @@ -23,6 +26,10 @@ 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()); // Map of users to which ranges must be displayed private final Map displayRanges = new HashMap<>(); @@ -76,11 +83,11 @@ public class AdminRangeDisplayCommand extends CompositeCommand { // Draw the default protected area if island protected zone is different if (island.getProtectionRange() != getPlugin().getIWM().getIslandProtectionRange(getWorld())) { - drawZone(user, Particle.VILLAGER_HAPPY, null, island, getPlugin().getIWM().getIslandProtectionRange(getWorld())); + drawZone(user, PARTICLE2, null, island, getPlugin().getIWM().getIslandProtectionRange(getWorld())); } // Draw the island area - drawZone(user, Particle.REDSTONE, new Particle.DustOptions(Color.GRAY, 1.0F), island, island.getRange()); + drawZone(user, PARTICLE, new Particle.DustOptions(Color.GRAY, 1.0F), island, island.getRange()); }); }, 20, 30)); } diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamFixCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamFixCommand.java deleted file mode 100644 index b739b2a24..000000000 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamFixCommand.java +++ /dev/null @@ -1,35 +0,0 @@ -package world.bentobox.bentobox.api.commands.admin.team; - -import java.util.List; - -import world.bentobox.bentobox.api.commands.CompositeCommand; -import world.bentobox.bentobox.api.user.User; - -public class AdminTeamFixCommand extends CompositeCommand { - - - public AdminTeamFixCommand(CompositeCommand parent) { - super(parent, "fix"); - } - - @Override - public void setup() { - setPermission("mod.team.fix"); - setDescription("commands.admin.team.fix.description"); - } - - @Override - public boolean canExecute(User user, String label, List args) { - // If args are not right, show help - if (!args.isEmpty()) { - showHelp(this, user); - return false; - } - return true; - } - @Override - public boolean execute(User user, String label, List args) { - getIslands().checkTeams(user, getWorld()); - return true; - } -} diff --git a/src/main/java/world/bentobox/bentobox/api/panels/PanelItem.java b/src/main/java/world/bentobox/bentobox/api/panels/PanelItem.java index 219beb636..41d5bab66 100644 --- a/src/main/java/world/bentobox/bentobox/api/panels/PanelItem.java +++ b/src/main/java/world/bentobox/bentobox/api/panels/PanelItem.java @@ -48,7 +48,6 @@ public class PanelItem { meta.addItemFlags(ItemFlag.HIDE_DESTROYS); meta.addItemFlags(ItemFlag.HIDE_PLACED_ON); meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); icon.setItemMeta(meta); } @@ -89,7 +88,6 @@ public class PanelItem { this.name = name; if (meta != null) { meta.setDisplayName(name); - meta.setLocalizedName(name); //Localized name cannot be overridden by the player using an anvils icon.setItemMeta(meta); } } @@ -135,9 +133,9 @@ public class PanelItem { } if (meta != null) { if (glow) { - meta.addEnchant(Enchantment.ARROW_DAMAGE, 0, glow); + meta.addEnchant(Enchantment.POWER, 0, glow); } else { - meta.removeEnchant(Enchantment.ARROW_DAMAGE); + meta.removeEnchant(Enchantment.POWER); } icon.setItemMeta(meta); diff --git a/src/main/java/world/bentobox/bentobox/api/user/User.java b/src/main/java/world/bentobox/bentobox/api/user/User.java index 4e20a172c..d91d402fe 100644 --- a/src/main/java/world/bentobox/bentobox/api/user/User.java +++ b/src/main/java/world/bentobox/bentobox/api/user/User.java @@ -14,6 +14,7 @@ import java.util.UUID; import org.apache.commons.lang.math.NumberUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Color; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.OfflinePlayer; @@ -33,6 +34,8 @@ import org.bukkit.util.Vector; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import com.google.common.base.Enums; + import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.addons.Addon; import world.bentobox.bentobox.api.events.OfflineMessageEvent; @@ -62,19 +65,18 @@ public class User implements MetaDataAble { private static final Map> VALIDATION_CHECK; static { Map> v = new EnumMap<>(Particle.class); - v.put(Particle.REDSTONE, Particle.DustOptions.class); - v.put(Particle.ITEM_CRACK, ItemStack.class); - v.put(Particle.BLOCK_CRACK, BlockData.class); - v.put(Particle.BLOCK_DUST, BlockData.class); + v.put(Particle.DUST, Particle.DustOptions.class); + v.put(Particle.ITEM, ItemStack.class); + v.put(Particle.ITEM_COBWEB, ItemStack.class); v.put(Particle.FALLING_DUST, BlockData.class); + v.put(Particle.BLOCK, BlockData.class); v.put(Particle.BLOCK_MARKER, BlockData.class); v.put(Particle.DUST_COLOR_TRANSITION, DustTransition.class); + v.put(Particle.DUST_PILLAR, BlockData.class); v.put(Particle.VIBRATION, Vibration.class); v.put(Particle.SCULK_CHARGE, Float.class); v.put(Particle.SHRIEK, Integer.class); - v.put(Particle.LEGACY_BLOCK_CRACK, BlockData.class); - v.put(Particle.LEGACY_BLOCK_DUST, BlockData.class); - v.put(Particle.LEGACY_FALLING_DUST, BlockData.class); + v.put(Particle.ENTITY_EFFECT, Color.class); VALIDATION_CHECK = Collections.unmodifiableMap(v); } @@ -730,7 +732,7 @@ public class User implements MetaDataAble { // Check if this particle is beyond the viewing distance of the server if (this.player != null && this.player.getLocation().toVector().distanceSquared(new Vector(x, y, z)) < (Bukkit.getServer().getViewDistance() * 256 * Bukkit.getServer().getViewDistance())) { - if (particle.equals(Particle.REDSTONE)) { + if (particle.equals(Particle.DUST)) { player.spawnParticle(particle, x, y, z, 1, 0, 0, 0, 1, dustOptions); } else if (dustOptions != null) { player.spawnParticle(particle, x, y, z, 1, dustOptions); diff --git a/src/main/java/world/bentobox/bentobox/hooks/LangUtilsHook.java b/src/main/java/world/bentobox/bentobox/hooks/LangUtilsHook.java index 77809ce18..d1161d574 100644 --- a/src/main/java/world/bentobox/bentobox/hooks/LangUtilsHook.java +++ b/src/main/java/world/bentobox/bentobox/hooks/LangUtilsHook.java @@ -1,8 +1,10 @@ package world.bentobox.bentobox.hooks; +import java.util.List; import java.util.Locale; import java.util.Map.Entry; import java.util.logging.Logger; +import java.util.stream.Collectors; import org.bukkit.DyeColor; import org.bukkit.Material; @@ -264,29 +266,57 @@ public class LangUtilsHook extends Hook { if (hooked) { return LanguageHelper.getPotionName(potionType, getUserLocale(user)); } + return generalPotionName(potionType); + } + + private static String generalPotionName(PotionType potionType) { return switch (potionType) { - case UNCRAFTABLE -> "Uncraftable Potion"; case WATER -> "Water Bottle"; case MUNDANE -> "Mundane Potion"; case THICK -> "Thick Potion"; case AWKWARD -> "Awkward Potion"; case NIGHT_VISION -> "Potion of Night Vision"; case INVISIBILITY -> "Potion of Invisibility"; - case JUMP -> "Potion of Leaping"; case FIRE_RESISTANCE -> "Potion of Fire Resistance"; - case SPEED -> "Potion of Swiftness"; case SLOWNESS -> "Potion of Slowness"; case WATER_BREATHING -> "Potion of Water Breathing"; - case INSTANT_HEAL -> "Potion of Healing"; - case INSTANT_DAMAGE -> "Potion of Harming"; case POISON -> "Potion of Poison"; - case REGEN -> "Potion of Regeneration"; case STRENGTH -> "Potion of Strength"; case WEAKNESS -> "Potion of Weakness"; case LUCK -> "Potion of Luck"; case TURTLE_MASTER -> "Potion of the Turtle Master"; case SLOW_FALLING -> "Potion of Slow Falling"; - default -> "Unknown Potion"; + case HARMING -> "Potion of Harming"; + case HEALING -> "Potion of Healing"; + case INFESTED -> "Infested Potion"; + case LEAPING -> "Potion of Leaping"; + case LONG_FIRE_RESISTANCE -> "Potion of Long Fire Resistance"; + case LONG_INVISIBILITY -> "Potion of Long Invisibility"; + case LONG_NIGHT_VISION -> "Potion of Long Night Vision"; + case LONG_POISON -> "Potion of Long Poison"; + case LONG_REGENERATION -> "Potion of Long Regeneration"; + case LONG_SLOWNESS -> "Potion of Long Slowness"; + case LONG_SLOW_FALLING -> "Potion of Long Slow Falling"; + case LONG_STRENGTH -> "Potion of Long Strength"; + case LONG_SWIFTNESS -> "Potion of Long Swiftness"; + case LONG_TURTLE_MASTER -> "Potion of Long Turtle Master"; + case LONG_WATER_BREATHING -> "Potion of Long Water Breathing"; + case LONG_WEAKNESS -> "Potion of Long Weakness"; + case OOZING -> "Potion of Oozing"; + case REGENERATION -> "Potion of Regeneration"; + case STRONG_HARMING -> "Potion of Strong Harming"; + case STRONG_HEALING -> "Potion of Strong Healing"; + case STRONG_LEAPING -> "Potion of Strong Leaping"; + case STRONG_POISON -> "Potion of Strong Poison"; + case STRONG_REGENERATION -> "Potion of Strong Regeneration"; + case STRONG_SLOWNESS -> "Potion of Strong Slowness"; + case STRONG_STRENGTH -> "Potion of Strong Strength"; + case STRONG_SWIFTNESS -> "Potion of Swiftness"; + case STRONG_TURTLE_MASTER -> "Potion of Strong Turtle Master"; + case SWIFTNESS -> "Potion of Swiftness"; + case WEAVING -> "Potion of Weaving"; + case WIND_CHARGED -> "Potion of Wind Charged"; + default -> "Potion (Unknown)"; }; } @@ -302,30 +332,7 @@ public class LangUtilsHook extends Hook { if (hooked) { return LanguageHelper.getSplashPotionName(potionType, getUserLocale(user)); } - return switch (potionType) { - case UNCRAFTABLE -> "Splash Uncraftable Potion"; - case WATER -> "Splash Water Bottle"; - case MUNDANE -> "Mundane Splash Potion"; - case THICK -> "Thick Splash Potion"; - case AWKWARD -> "Awkward Splash Potion"; - case NIGHT_VISION -> "Splash Potion of Night Vision"; - case INVISIBILITY -> "Splash Potion of Invisibility"; - case JUMP -> "Splash Potion of Leaping"; - case FIRE_RESISTANCE -> "Splash Potion of Fire Resistance"; - case SPEED -> "Splash Potion of Swiftness"; - case SLOWNESS -> "Splash Potion of Slowness"; - case WATER_BREATHING -> "Splash Potion of Water Breathing"; - case INSTANT_HEAL -> "Splash Potion of Healing"; - case INSTANT_DAMAGE -> "Splash Potion of Harming"; - case POISON -> "Splash Potion of Poison"; - case REGEN -> "Splash Potion of Regeneration"; - case STRENGTH -> "Splash Potion of Strength"; - case WEAKNESS -> "Splash Potion of Weakness"; - case LUCK -> "Splash Potion of Luck"; - case TURTLE_MASTER -> "Splash Potion of the Turtle Master"; - case SLOW_FALLING -> "Splash Potion of Slow Falling"; - default -> "Unknown Splash Potion"; - }; + return "Splash" + generalPotionName(potionType); } /** @@ -339,30 +346,7 @@ public class LangUtilsHook extends Hook { if (hooked) { return LanguageHelper.getLingeringPotionName(potionType, getUserLocale(user)); } - return switch (potionType) { - case UNCRAFTABLE -> "Lingering Uncraftable Potion"; - case WATER -> "Lingering Water Bottle"; - case MUNDANE -> "Mundane Lingering Potion"; - case THICK -> "Thick Lingering Potion"; - case AWKWARD -> "Awkward Lingering Potion"; - case NIGHT_VISION -> "Lingering Potion of Night Vision"; - case INVISIBILITY -> "Lingering Potion of Invisibility"; - case JUMP -> "Lingering Potion of Leaping"; - case FIRE_RESISTANCE -> "Lingering Potion of Fire Resistance"; - case SPEED -> "Lingering Potion of Swiftness"; - case SLOWNESS -> "Lingering Potion of Slowness"; - case WATER_BREATHING -> "Lingering Potion of Water Breathing"; - case INSTANT_HEAL -> "Lingering Potion of Healing"; - case INSTANT_DAMAGE -> "Lingering Potion of Harming"; - case POISON -> "Lingering Potion of Poison"; - case REGEN -> "Lingering Potion of Regeneration"; - case STRENGTH -> "Lingering Potion of Strength"; - case WEAKNESS -> "Lingering Potion of Weakness"; - case LUCK -> "Lingering Potion of Luck"; - case TURTLE_MASTER -> "Lingering Potion of the Turtle Master"; - case SLOW_FALLING -> "Lingering Potion of Slow Falling"; - default -> "Unknown Lingering Potion"; - }; + return "Lingering" + generalPotionName(potionType); } /** @@ -376,28 +360,7 @@ public class LangUtilsHook extends Hook { if (hooked) { return LanguageHelper.getTippedArrowName(potionType, getUserLocale(user)); } - return switch (potionType) { - case UNCRAFTABLE -> "Uncraftable Tipped Arrow"; - case WATER -> "Arrow of Splashing"; - case MUNDANE, THICK, AWKWARD -> "Tipped Arrow"; - case NIGHT_VISION -> "Arrow of Night Vision"; - case INVISIBILITY -> "Arrow of Invisibility"; - case JUMP -> "Arrow of Leaping"; - case FIRE_RESISTANCE -> "Arrow of Fire Resistance"; - case SPEED -> "Arrow of Swiftness"; - case SLOWNESS -> "Arrow of Slowness"; - case WATER_BREATHING -> "Arrow of Water Breathing"; - case INSTANT_HEAL -> "Arrow of Healing"; - case INSTANT_DAMAGE -> "Arrow of Harming"; - case POISON -> "Arrow of Poison"; - case REGEN -> "Arrow of Regeneration"; - case STRENGTH -> "Arrow of Strength"; - case WEAKNESS -> "Arrow of Weakness"; - case LUCK -> "Arrow of Luck"; - case TURTLE_MASTER -> "Arrow of the Turtle Master"; - case SLOW_FALLING -> "Arrow of Slow Falling"; - default -> "Unknown Arrow"; - }; + return generalPotionName(potionType).replaceAll("Potion", "Arrow"); } /** @@ -413,11 +376,12 @@ public class LangUtilsHook extends Hook { if (hooked) { return LanguageHelper.getPotionBaseEffectName(potionType, getUserLocale(user)); } - PotionEffectType effectType = potionType.getEffectType(); - if (effectType == null) { + List effects = potionType.getPotionEffects(); + if (effects.isEmpty()) { return "No Effects"; } - return Util.prettifyText(effectType.getName()); + return effects.stream().map(effect -> Util.prettifyText(effect.getType().getKey().getKey())) + .collect(Collectors.joining(", ")); } /** @@ -430,7 +394,7 @@ public class LangUtilsHook extends Hook { public static String getPotionEffectName(PotionEffectType effectType, User user) { return hooked ? LanguageHelper.getPotionEffectName(effectType, getUserLocale(user)) - : Util.prettifyText(effectType.getName()); + : Util.prettifyText(effectType.getKey().getKey()); } /** diff --git a/src/main/java/world/bentobox/bentobox/listeners/flags/protection/BreedingListener.java b/src/main/java/world/bentobox/bentobox/listeners/flags/protection/BreedingListener.java index 6d61d761a..6f07f7a07 100644 --- a/src/main/java/world/bentobox/bentobox/listeners/flags/protection/BreedingListener.java +++ b/src/main/java/world/bentobox/bentobox/listeners/flags/protection/BreedingListener.java @@ -28,7 +28,6 @@ import world.bentobox.bentobox.lists.Flags; * */ public class BreedingListener extends FlagListener { - /** * A list of items that cause breeding if a player has them in their hand and they click an animal * This list may need to be extended with future versions of Minecraft. @@ -41,7 +40,12 @@ 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)); - bi.put(EntityType.MUSHROOM_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(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)); diff --git a/src/main/java/world/bentobox/bentobox/listeners/flags/protection/LeashListener.java b/src/main/java/world/bentobox/bentobox/listeners/flags/protection/LeashListener.java index c07366d56..eee18a786 100644 --- a/src/main/java/world/bentobox/bentobox/listeners/flags/protection/LeashListener.java +++ b/src/main/java/world/bentobox/bentobox/listeners/flags/protection/LeashListener.java @@ -7,6 +7,8 @@ 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; @@ -42,7 +44,9 @@ public class LeashListener extends FlagListener { */ @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerLeashHitch(final HangingPlaceEvent e) { - if (e.getEntity().getType().equals(EntityType.LEASH_HITCH)) { + 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)) { checkIsland(e, e.getPlayer(), e.getEntity().getLocation(), Flags.LEASH); } } diff --git a/src/main/java/world/bentobox/bentobox/listeners/flags/protection/TNTListener.java b/src/main/java/world/bentobox/bentobox/listeners/flags/protection/TNTListener.java index 1543de382..298d0ab79 100644 --- a/src/main/java/world/bentobox/bentobox/listeners/flags/protection/TNTListener.java +++ b/src/main/java/world/bentobox/bentobox/listeners/flags/protection/TNTListener.java @@ -17,6 +17,8 @@ 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; @@ -26,11 +28,15 @@ 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); + /** * Contains {@link EntityType}s that generates an explosion. * @since 1.5.0 */ - private static final List TNT_TYPES = List.of(EntityType.PRIMED_TNT, EntityType.MINECART_TNT); + private static final List TNT_TYPES = List.of(PRIMED_TNT, MINECART_TNT); /** * Contains {@link Material}s that can be used to prime a TNT. diff --git a/src/main/java/world/bentobox/bentobox/util/ItemParser.java b/src/main/java/world/bentobox/bentobox/util/ItemParser.java index c315aa897..89115c47e 100644 --- a/src/main/java/world/bentobox/bentobox/util/ItemParser.java +++ b/src/main/java/world/bentobox/bentobox/util/ItemParser.java @@ -145,6 +145,7 @@ public class ItemParser { ItemParser.setCustomModelData(returnValue, customModelData); } } catch (Exception exception) { + exception.printStackTrace(); BentoBox.getInstance().logError("Could not parse item " + text + " " + exception.getLocalizedMessage()); returnValue = defaultItemStack; } @@ -261,7 +262,8 @@ public class ItemParser { boolean isUpgraded = !part[2].isEmpty() && !part[2].equalsIgnoreCase("1"); boolean isExtended = part[3].equalsIgnoreCase("EXTENDED"); PotionData data = new PotionData(type, isExtended, isUpgraded); - potionMeta.setBasePotionData(data); + // TODO: Set extended and u[graded settings. + potionMeta.setBasePotionType(type); result.setItemMeta(potionMeta); result.setAmount(Integer.parseInt(part[5])); return result; @@ -285,7 +287,7 @@ public class ItemParser { private static ItemStack parsePotion(String[] part) { if (part.length == 6) { BentoBox.getInstance().logWarning("The old potion parsing detected for " + part[0] + - ". Please update your configs, as SPIGOT changed potion types."); + ". Please update your configs, as SPIGOT changed potion types."); return parsePotionOld(part); } @@ -314,7 +316,7 @@ public class ItemParser { if (result.getItemMeta() instanceof PotionMeta meta) { PotionType potionType = Enums.getIfPresent(PotionType.class, part[1].toUpperCase(Locale.ENGLISH)). - or(PotionType.WATER); + or(PotionType.WATER); meta.setBasePotionType(potionType); result.setItemMeta(meta); } @@ -340,7 +342,17 @@ public class ItemParser { BannerMeta meta = (BannerMeta) result.getItemMeta(); if (meta != null) { for (int i = 2; i < part.length; i += 2) { - meta.addPattern(new Pattern(DyeColor.valueOf(part[i + 1]), PatternType.valueOf(part[i]))); + PatternType pt = Enums.getIfPresent(PatternType.class, part[i]).orNull(); + if (pt == null) { + // Try to convert old to new + if (part[i].trim().equals("STRIPE_SMALL")) { + pt = PatternType.SMALL_STRIPES; + } + } + DyeColor dc = Enums.getIfPresent(DyeColor.class, part[i + 1]).orNull(); + if (pt != null && dc != null) { + meta.addPattern(new Pattern(dc, pt)); + } } result.setItemMeta(meta); } diff --git a/src/test/java/world/bentobox/bentobox/api/localization/BentoBoxLocaleTest.java b/src/test/java/world/bentobox/bentobox/api/localization/BentoBoxLocaleTest.java index a195ebecd..2404d66b9 100644 --- a/src/test/java/world/bentobox/bentobox/api/localization/BentoBoxLocaleTest.java +++ b/src/test/java/world/bentobox/bentobox/api/localization/BentoBoxLocaleTest.java @@ -55,7 +55,7 @@ public class BentoBoxLocaleTest { Locale locale = Locale.US; YamlConfiguration config = new YamlConfiguration(); - config.set("meta.banner", "WHITE_BANNER:1:STRIPE_SMALL:RED:SQUARE_TOP_RIGHT:CYAN:SQUARE_TOP_RIGHT:BLUE"); + config.set("meta.banner", "WHITE_BANNER:1:SMALL_STRIPES:RED:SQUARE_TOP_RIGHT:CYAN:SQUARE_TOP_RIGHT:BLUE"); List authors = new ArrayList<>(); authors.add("tastybento"); authors.add("tastybento2"); diff --git a/src/test/java/world/bentobox/bentobox/api/user/UserTest.java b/src/test/java/world/bentobox/bentobox/api/user/UserTest.java index 4a487410d..ba8eb6cf7 100644 --- a/src/test/java/world/bentobox/bentobox/api/user/UserTest.java +++ b/src/test/java/world/bentobox/bentobox/api/user/UserTest.java @@ -842,9 +842,10 @@ public class UserTest { User.clearUsers(); User p = User.getInstance(player); try { - p.spawnParticle(Particle.REDSTONE, 4, 0.0d, 0.0d, 0.0d); + p.spawnParticle(Particle.DUST, 4, 0.0d, 0.0d, 0.0d); } catch (Exception e) { - assertEquals("A non-null DustOptions must be provided when using Particle.REDSTONE as particle.", e.getMessage()); + assertEquals("A non-null DustOptions must be provided when using Particle.DUST as particle.", + e.getMessage()); } } @@ -878,8 +879,8 @@ public class UserTest { User p = User.getInstance(player); DustOptions dust = mock(DustOptions.class); - p.spawnParticle(Particle.REDSTONE, dust, 0.0d, 0.0d, 0.0d); - verify(player).spawnParticle(Particle.REDSTONE, 0.0d, 0.0d, 0.0d, 1, 0, 0, 0, 1, dust); + p.spawnParticle(Particle.DUST, dust, 0.0d, 0.0d, 0.0d); + verify(player).spawnParticle(Particle.DUST, 0.0d, 0.0d, 0.0d, 1, 0, 0, 0, 1, dust); } @@ -896,8 +897,8 @@ public class UserTest { User p = User.getInstance(player); DustOptions dust = mock(DustOptions.class); - p.spawnParticle(Particle.REDSTONE, dust, 0.0d, 0.0d, 0.0d); - verify(player).spawnParticle(Particle.REDSTONE, 0.0d, 0.0d, 0.0d, 1, 0, 0, 0, 1, dust); + p.spawnParticle(Particle.DUST, dust, 0.0d, 0.0d, 0.0d); + verify(player).spawnParticle(Particle.DUST, 0.0d, 0.0d, 0.0d, 1, 0, 0, 0, 1, dust); } @@ -914,8 +915,8 @@ public class UserTest { User p = User.getInstance(player); DustOptions dust = mock(DustOptions.class); - p.spawnParticle(Particle.REDSTONE, dust, 0, 0, 0); - verify(player).spawnParticle(Particle.REDSTONE, 0.0d, 0.0d, 0.0d, 1, 0, 0, 0, 1, dust); + p.spawnParticle(Particle.DUST, dust, 0, 0, 0); + verify(player).spawnParticle(Particle.DUST, 0.0d, 0.0d, 0.0d, 1, 0, 0, 0, 1, dust); } diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/GeoMobLimitTabTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/GeoMobLimitTabTest.java index 4ecccedc1..2864222cc 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/GeoMobLimitTabTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/clicklisteners/GeoMobLimitTabTest.java @@ -76,7 +76,9 @@ public class GeoMobLimitTabTest { // IWM when(plugin.getIWM()).thenReturn(iwm); when(iwm.getAddon(any())).thenReturn(Optional.of(gma)); + // Make list of the first 4 creatures on the list - it's alphabetical and follows the list of Living Entities list = new ArrayList<>(); + list.add("ARMADILLO"); list.add("AXOLOTL"); list.add("BAT"); list.add("COW"); @@ -102,24 +104,27 @@ public class GeoMobLimitTabTest { @Test public void testOnClick() { GeoMobLimitTab tab = new GeoMobLimitTab(user, EntityLimitTabType.GEO_LIMIT, world); - // AXOLOTL, BAT, and COW in list + // ARMADILLO, AXOLOTL, BAT, and COW in list + assertEquals(4, list.size()); + assertEquals("COW", list.get(3)); + assertEquals("BAT", list.get(2)); + assertEquals("AXOLOTL", list.get(1)); + assertEquals("ARMADILLO", list.get(0)); + + // Click on ARMADILLO + tab.onClick(panel, user, ClickType.LEFT, 10); + list.forEach(System.out::println); assertEquals(3, list.size()); assertEquals("COW", list.get(2)); assertEquals("BAT", list.get(1)); assertEquals("AXOLOTL", list.get(0)); - - // Click on AXOLOTL + // Click on ARMADILLO again to have it added to the end of the list tab.onClick(panel, user, ClickType.LEFT, 10); - list.forEach(System.out::println); - assertEquals(2, list.size()); - assertEquals("COW", list.get(1)); - assertEquals("BAT", list.get(0)); - // Click on AXOLOTL again to have it added - tab.onClick(panel, user, ClickType.LEFT, 10); - assertEquals(3, list.size()); - assertEquals("BAT", list.get(0)); - assertEquals("COW", list.get(1)); - assertEquals("AXOLOTL", list.get(2)); + assertEquals(4, list.size()); + assertEquals("COW", list.get(2)); + assertEquals("BAT", list.get(1)); + assertEquals("AXOLOTL", list.get(0)); + assertEquals("ARMADILLO", list.get(3)); verify(gma, times(2)).saveWorldSettings(); } @@ -165,7 +170,8 @@ public class GeoMobLimitTabTest { List<@Nullable PanelItem> items = tab.getPanelItems(); assertFalse(items.isEmpty()); items.forEach(i -> { - if (i.getName().equals("Axolotl") || i.getName().equals("Cow") || i.getName().equals("Bat")) { + if (i.getName().equals("Armadillo") || i.getName().equals("Axolotl") || i.getName().equals("Cow") + || i.getName().equals("Bat")) { assertEquals("Name : " + i.getName(), Material.RED_SHULKER_BOX, i.getItem().getType()); } else { assertEquals("Name : " + i.getName(), Material.GREEN_SHULKER_BOX, i.getItem().getType()); @@ -182,7 +188,8 @@ public class GeoMobLimitTabTest { List<@Nullable PanelItem> items = tab.getPanelItems(); assertFalse(items.isEmpty()); items.forEach(i -> { - if (i.getName().equals("Axolotl") || i.getName().equals("Cow") || i.getName().equals("Bat")) { + if (i.getName().equals("Armadillo") || i.getName().equals("Axolotl") || i.getName().equals("Cow") + || i.getName().equals("Bat")) { assertEquals("Name : " + i.getName(), Material.GREEN_SHULKER_BOX, i.getItem().getType()); } else { assertEquals("Name : " + i.getName(), Material.RED_SHULKER_BOX, i.getItem().getType()); diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/TNTListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/TNTListenerTest.java index 5256e6bbc..b2f6b8932 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/protection/TNTListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/protection/TNTListenerTest.java @@ -77,7 +77,7 @@ public class TNTListenerTest extends AbstractCommonSetup { when(block.getWorld()).thenReturn(world); // Entity - when(entity.getType()).thenReturn(EntityType.PRIMED_TNT); + when(entity.getType()).thenReturn(EntityType.TNT); when(entity.getWorld()).thenReturn(world); when(entity.getLocation()).thenReturn(location); diff --git a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListenerTest.java index e4d10b570..b9d96f5a0 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListenerTest.java @@ -185,7 +185,7 @@ public class ChestDamageListenerTest extends AbstractCommonSetup public void testOnExplosionChestDamageNotAllowed() { Flags.CHEST_DAMAGE.setSetting(world, false); Entity entity = mock(Entity.class); - when(entity.getType()).thenReturn(EntityType.PRIMED_TNT); + when(entity.getType()).thenReturn(EntityType.TNT); List list = new ArrayList<>(); Block chest = mock(Block.class); when(chest.getType()).thenReturn(Material.CHEST); @@ -217,7 +217,7 @@ public class ChestDamageListenerTest extends AbstractCommonSetup public void testOnExplosionChestDamageAllowed() { Flags.CHEST_DAMAGE.setSetting(world, true); Entity entity = mock(Entity.class); - when(entity.getType()).thenReturn(EntityType.PRIMED_TNT); + when(entity.getType()).thenReturn(EntityType.TNT); List list = new ArrayList<>(); Block chest = mock(Block.class); when(chest.getType()).thenReturn(Material.CHEST); diff --git a/src/test/java/world/bentobox/bentobox/panels/customizable/IslandCreationPanelTest.java b/src/test/java/world/bentobox/bentobox/panels/customizable/IslandCreationPanelTest.java index 12b982e36..3c2a48a17 100644 --- a/src/test/java/world/bentobox/bentobox/panels/customizable/IslandCreationPanelTest.java +++ b/src/test/java/world/bentobox/bentobox/panels/customizable/IslandCreationPanelTest.java @@ -209,7 +209,6 @@ public class IslandCreationPanelTest { verify(inv).setItem(eq(0), any()); verify(inv).setItem(eq(1), any()); verify(meta).setDisplayName(eq("test")); - verify(meta).setLocalizedName(eq("test")); verify(meta).setLore(eq(List.of("A description", "", "panels.tips.click-to-choose"))); } @@ -224,15 +223,12 @@ public class IslandCreationPanelTest { verify(inv).setItem(eq(0), any()); verify(inv).setItem(eq(1), any()); verify(meta).setDisplayName(eq("test")); - verify(meta).setLocalizedName(eq("test")); verify(meta).setLore(eq(List.of("A description", "", "panels.tips.click-to-choose"))); verify(inv).setItem(eq(0), any()); verify(meta).setDisplayName(eq("test2")); - verify(meta).setLocalizedName(eq("test2")); verify(meta).setLore(eq(List.of("A description 2", "", "panels.tips.click-to-choose"))); verify(inv).setItem(eq(1), any()); verify(meta).setDisplayName(eq("test3")); - verify(meta).setLocalizedName(eq("test3")); verify(meta).setLore(eq(List.of("A description 3", "", "panels.tips.click-to-choose"))); }