From 7a3047d21f4e87d2bd2d841a7d6cc07dca1d7cfa Mon Sep 17 00:00:00 2001 From: Fabien Date: Sun, 1 Sep 2024 21:41:38 +0200 Subject: [PATCH] fix : add error message when spawner has not spawnedType field --- .../pickspawner/PickSpawner.kt | 2 +- .../pickspawner/config/TranslationConfig.kt | 23 ++++++++++++++++--- .../PlayerInteractEventListener.kt | 14 +++++++---- .../placespawner/BlockPlaceEventListener.kt | 15 ++++++++++-- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/PickSpawner.kt b/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/PickSpawner.kt index 814e0dd..800004b 100644 --- a/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/PickSpawner.kt +++ b/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/PickSpawner.kt @@ -105,7 +105,7 @@ class PickSpawner : JavaPlugin() { pluginManager.registerEvents(PickaxeMigrationPlayerInteractEventListener(this, itemInitService), this) pluginManager.registerEvents(PlayerItemDamageListener(this, itemInitService), this) pluginManager.registerEvents(PlayerCommandPreprocessListener(this), this) - pluginManager.registerEvents(BlockPlaceEventListener(), this) + pluginManager.registerEvents(BlockPlaceEventListener(this), this) } private fun registerCommands(itemInitService: ItemInitService) { diff --git a/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/config/TranslationConfig.kt b/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/config/TranslationConfig.kt index 1cc21ab..49ae758 100644 --- a/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/config/TranslationConfig.kt +++ b/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/config/TranslationConfig.kt @@ -1,8 +1,10 @@ package fr.fabienhebuterne.pickspawner.config +import fr.fabienhebuterne.pickspawner.config.TranslationConfig.Companion.toColorHex import org.bukkit.ChatColor import org.bukkit.Location import org.bukkit.entity.EntityType +import java.util.UUID import java.util.regex.Matcher import java.util.regex.Pattern @@ -16,8 +18,9 @@ data class TranslationConfig( val reloadEnded: String, val pickaxeHasBeenMigrated: String, val buyCustomPickaxe: String, - val buyCustomPickaxeDurability: String + val buyCustomPickaxeDurability: String, ) : ConfigType { + fun getEntityOrDefault(entityType: EntityType): String { return entity.getOrDefault(entityType, entityType.name) } @@ -83,5 +86,19 @@ data class ErrorConfig( val missingMoneyToBuy: String, val missingItemToBuy: String, val cancelBuyDurabilityMissingCustomPickaxeInMainHand: String, - val cancelBuyDurabilityExceedMaxDurability: String -) \ No newline at end of file + val cancelBuyDurabilityExceedMaxDurability: String, + val missingSpawnedTypeOnPlayer: String = "&8[&e&lPickSpawner&8] &cCan't place this spawner because missing spawnerType, contact an staff member", + val missingSpawnedTypeOnLogs: String = "&8[&e&lPickSpawner&8] &cPlayer with name {{playerPseudo}} and uuid {{playerUUID}} can't place spawner because missing spawnerType", +) { + + fun getMissingSpawnedTypeOnLogs( + playerPseudo: String, + playerUUID: UUID, + ): String { + return missingSpawnedTypeOnLogs + .replace("{{playerPseudo}}", playerPseudo) + .replace("{{playerUUID}}", playerUUID.toString()) + .toColorHex() + } + +} \ No newline at end of file diff --git a/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/module/interactspawner/PlayerInteractEventListener.kt b/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/module/interactspawner/PlayerInteractEventListener.kt index d9831a0..1ab7d6f 100644 --- a/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/module/interactspawner/PlayerInteractEventListener.kt +++ b/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/module/interactspawner/PlayerInteractEventListener.kt @@ -3,17 +3,14 @@ package fr.fabienhebuterne.pickspawner.module.interactspawner import fr.fabienhebuterne.pickspawner.PickSpawner import fr.fabienhebuterne.pickspawner.config.TranslationConfig.Companion.toColorHex import fr.fabienhebuterne.pickspawner.module.CommonListener -import fr.fabienhebuterne.pickspawner.module.ItemInitService import fr.fabienhebuterne.pickspawner.module.interactspawner.PlayerInteraction.entityTypeByPlayer import org.bukkit.Material import org.bukkit.block.CreatureSpawner -import org.bukkit.entity.EntityType import org.bukkit.event.EventHandler import org.bukkit.event.Listener import org.bukkit.event.block.Action import org.bukkit.event.player.PlayerInteractEvent import org.bukkit.inventory.meta.BlockStateMeta -import java.util.* class PlayerInteractEventListener( private val instance: PickSpawner @@ -36,8 +33,15 @@ class PlayerInteractEventListener( return } - val entityType = ((itemStack.itemMeta as BlockStateMeta).blockState as CreatureSpawner).spawnedType - entityTypeByPlayer[event.player.uniqueId] = entityType + try { + val entityType = ((itemStack.itemMeta as BlockStateMeta).blockState as CreatureSpawner).spawnedType + // ignore warn by idea intellij because entity can not have entityType sometimes + // despite the @NotNull annotation on spawnedType + @Suppress("SENSELESS_COMPARISON") + if (entityType != null) { + entityTypeByPlayer[event.player.uniqueId] = entityType + } + } catch (_: NullPointerException) { } } private fun cancelUpdateSpawnerWithEggs(event: PlayerInteractEvent) { diff --git a/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/module/placespawner/BlockPlaceEventListener.kt b/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/module/placespawner/BlockPlaceEventListener.kt index 9d48920..e0a249a 100644 --- a/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/module/placespawner/BlockPlaceEventListener.kt +++ b/common/src/main/kotlin/fr/fabienhebuterne/pickspawner/module/placespawner/BlockPlaceEventListener.kt @@ -1,14 +1,19 @@ package fr.fabienhebuterne.pickspawner.module.placespawner +import fr.fabienhebuterne.pickspawner.PickSpawner +import fr.fabienhebuterne.pickspawner.config.TranslationConfig.Companion.toColorHex import fr.fabienhebuterne.pickspawner.module.CommonListener import fr.fabienhebuterne.pickspawner.module.interactspawner.PlayerInteraction.entityTypeByPlayer +import org.bukkit.Bukkit import org.bukkit.Material import org.bukkit.block.CreatureSpawner import org.bukkit.event.EventHandler import org.bukkit.event.Listener import org.bukkit.event.block.BlockPlaceEvent -class BlockPlaceEventListener : Listener { +class BlockPlaceEventListener( + private val instance: PickSpawner +) : Listener { @EventHandler fun execute(event: BlockPlaceEvent) { @@ -16,7 +21,7 @@ class BlockPlaceEventListener : Listener { } private fun blockPlaceEvent(event: BlockPlaceEvent) { - if (event.blockPlaced.type != Material.SPAWNER || !entityTypeByPlayer.containsKey(event.player.uniqueId)) { + if (event.blockPlaced.type != Material.SPAWNER) { return } @@ -26,6 +31,12 @@ class BlockPlaceEventListener : Listener { if (entityType != null) { spawner.spawnedType = entityType blockState.update() + entityTypeByPlayer.remove(event.player.uniqueId) + } else { + val player = event.player + Bukkit.getLogger().warning(instance.translationConfig.errors.getMissingSpawnedTypeOnLogs(player.name, player.uniqueId)) + player.sendMessage(instance.translationConfig.errors.missingSpawnedTypeOnPlayer.toColorHex()) + event.isCancelled = true } }