fix, refactor: removed unneccesary logic of saving Angry state to persistent storage

Signed-off-by: lisoveliy <lisoveliy@proton.me>
This commit is contained in:
2026-07-31 04:32:11 +03:00
parent bc1e1d28b9
commit dd56f2f7a1
5 changed files with 54 additions and 30 deletions

16
README.md Normal file
View File

@@ -0,0 +1,16 @@
# Return Piglin Farms
It's plugin for Spigot-compatible servers that makes some tweaks for mimic 1.21.4 behavior of Zombified Piglins
(especialy when used in farms).
## Tweaks:
- Zombified Piglins drop XP while not attacked by player (config value - `dropXP`, `true` by default)
- Zombified Piglins drop gold ingots while not attacked by player
- Zombified Piglins don't equip spears (config value - `disableSpears`, `true` by default)
All loot and XP table used from [minecraft wiki](https://minecraft.wiki/w/Zombified_Piglin#Drops) for 1.21.11. It means,
plugin will give to player exact loot from table from 1.21.11 (Default column)
## Works only on 1.21.11
I don't plan to build this plugin for other versions, but you can **build it yourself**!

View File

@@ -6,7 +6,7 @@
<groupId>su.lisdev</groupId> <groupId>su.lisdev</groupId>
<artifactId>RPF</artifactId> <artifactId>RPF</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>RPF</name> <name>RPF</name>

View File

@@ -6,9 +6,11 @@ import org.bukkit.plugin.java.JavaPlugin
class RPF : JavaPlugin(), Listener { class RPF : JavaPlugin(), Listener {
override fun onEnable() { override fun onEnable() {
server.pluginManager.registerEvents(ZombifiedPiglinLootRestore(this, logger), setupConfig()
server.pluginManager.registerEvents(ZombifiedPiglinLootRestore(config),
this) this)
server.pluginManager.registerEvents(ZombifiedPiglinSpearDisable(), server.pluginManager.registerEvents(ZombifiedPiglinSpearDisable(config),
this) this)
logger.info("${server.name} has been enabled!") logger.info("${server.name} has been enabled!")
} }
@@ -16,4 +18,11 @@ class RPF : JavaPlugin(), Listener {
override fun onDisable() { override fun onDisable() {
logger.info("${server.name} has been disabled!") logger.info("${server.name} has been disabled!")
} }
fun setupConfig(){
config.addDefault("dropXP", true)
config.addDefault("disableSpears", true)
config.options().copyDefaults(true)
saveDefaultConfig()
}
} }

View File

@@ -1,7 +1,7 @@
package su.lisdev.rpf package su.lisdev.rpf
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.NamespacedKey import org.bukkit.configuration.file.FileConfiguration
import org.bukkit.enchantments.Enchantment import org.bukkit.enchantments.Enchantment
import org.bukkit.entity.PigZombie import org.bukkit.entity.PigZombie
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
@@ -12,25 +12,34 @@ import org.bukkit.inventory.EntityEquipment
import org.bukkit.inventory.EquipmentSlot import org.bukkit.inventory.EquipmentSlot
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.meta.Damageable import org.bukkit.inventory.meta.Damageable
import org.bukkit.persistence.PersistentDataType
import org.bukkit.plugin.java.JavaPlugin
import java.util.concurrent.ThreadLocalRandom import java.util.concurrent.ThreadLocalRandom
import java.util.logging.Logger
import kotlin.math.max import kotlin.math.max
class ZombifiedPiglinLootRestore(plugin: JavaPlugin, val logger: Logger) : Listener { class ZombifiedPiglinLootRestore(config: FileConfiguration) : Listener {
private val aggroKey = NamespacedKey(plugin, "aggroed_at_player") private companion object {
const val ADULT_XP = 5
const val BABY_XP = 12
const val GOLD_INGOT_CHANCE = 0.025f
val XP_SLOTS: List<Pair<EquipmentSlot, (EntityEquipment) -> Float>> = listOf(
EquipmentSlot.HAND to EntityEquipment::getItemInMainHandDropChance,
EquipmentSlot.OFF_HAND to EntityEquipment::getItemInOffHandDropChance,
EquipmentSlot.HEAD to EntityEquipment::getHelmetDropChance,
EquipmentSlot.CHEST to EntityEquipment::getChestplateDropChance,
EquipmentSlot.LEGS to EntityEquipment::getLeggingsDropChance,
EquipmentSlot.FEET to EntityEquipment::getBootsDropChance,
)
}
private val dropXP = config.getBoolean("dropXP")
@EventHandler(priority = EventPriority.NORMAL) @EventHandler(priority = EventPriority.NORMAL)
fun onEntityDeath(event: EntityDeathEvent) { fun onEntityDeath(event: EntityDeathEvent) {
val piglin = event.entity as? PigZombie ?: return val piglin = event.entity as? PigZombie ?: return
if (piglin.killer != null || event.droppedExp > 0) return if (piglin.killer != null || event.droppedExp > 0) return
logger.info("Piglin vanilla anger: ${piglin.isAngry}, Piglin NBT data anger: " +
"${piglin.persistentDataContainer.has(aggroKey, PersistentDataType.BYTE)}")
if (!piglin.isAngry) return if (!piglin.isAngry) return
val rng = ThreadLocalRandom.current() val rng = ThreadLocalRandom.current()
@@ -62,6 +71,8 @@ class ZombifiedPiglinLootRestore(plugin: JavaPlugin, val logger: Logger) : Liste
} }
} }
if(!dropXP) return
var exp = if (piglin.isAdult) ADULT_XP else BABY_XP var exp = if (piglin.isAdult) ADULT_XP else BABY_XP
repeat(keptEquipment) { exp += 1 + rng.nextInt(3) } repeat(keptEquipment) { exp += 1 + rng.nextInt(3) }
event.droppedExp = exp event.droppedExp = exp
@@ -81,20 +92,4 @@ class ZombifiedPiglinLootRestore(plugin: JavaPlugin, val logger: Logger) : Liste
item.itemMeta = meta item.itemMeta = meta
return item return item
} }
private companion object {
const val ADULT_XP = 5
const val BABY_XP = 12
const val GOLD_INGOT_CHANCE = 0.025f
val XP_SLOTS: List<Pair<EquipmentSlot, (EntityEquipment) -> Float>> = listOf(
EquipmentSlot.HAND to EntityEquipment::getItemInMainHandDropChance,
EquipmentSlot.OFF_HAND to EntityEquipment::getItemInOffHandDropChance,
EquipmentSlot.HEAD to EntityEquipment::getHelmetDropChance,
EquipmentSlot.CHEST to EntityEquipment::getChestplateDropChance,
EquipmentSlot.LEGS to EntityEquipment::getLeggingsDropChance,
EquipmentSlot.FEET to EntityEquipment::getBootsDropChance,
)
}
} }

View File

@@ -1,16 +1,20 @@
package su.lisdev.rpf package su.lisdev.rpf
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.configuration.file.FileConfiguration
import org.bukkit.entity.PigZombie import org.bukkit.entity.PigZombie
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
import org.bukkit.event.Listener import org.bukkit.event.Listener
import org.bukkit.event.entity.EntitySpawnEvent import org.bukkit.event.entity.EntitySpawnEvent
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
class ZombifiedPiglinSpearDisable() : Listener { class ZombifiedPiglinSpearDisable(config: FileConfiguration) : Listener {
private val disableSpears = config.getBoolean("disableSpears")
@EventHandler @EventHandler
private fun onEntitySpawn(event: EntitySpawnEvent){ private fun onEntitySpawn(event: EntitySpawnEvent){
if(!disableSpears) return
val piglin = event.entity as? PigZombie ?: return val piglin = event.entity as? PigZombie ?: return
if (piglin.equipment?.itemInMainHand?.type != Material.GOLDEN_SPEAR) return if (piglin.equipment?.itemInMainHand?.type != Material.GOLDEN_SPEAR) return