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>
<artifactId>RPF</artifactId>
<version>1.0-SNAPSHOT</version>
<version>1.0</version>
<packaging>jar</packaging>
<name>RPF</name>

View File

@@ -6,9 +6,11 @@ import org.bukkit.plugin.java.JavaPlugin
class RPF : JavaPlugin(), Listener {
override fun onEnable() {
server.pluginManager.registerEvents(ZombifiedPiglinLootRestore(this, logger),
setupConfig()
server.pluginManager.registerEvents(ZombifiedPiglinLootRestore(config),
this)
server.pluginManager.registerEvents(ZombifiedPiglinSpearDisable(),
server.pluginManager.registerEvents(ZombifiedPiglinSpearDisable(config),
this)
logger.info("${server.name} has been enabled!")
}
@@ -16,4 +18,11 @@ class RPF : JavaPlugin(), Listener {
override fun onDisable() {
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
import org.bukkit.Material
import org.bukkit.NamespacedKey
import org.bukkit.configuration.file.FileConfiguration
import org.bukkit.enchantments.Enchantment
import org.bukkit.entity.PigZombie
import org.bukkit.event.EventHandler
@@ -12,25 +12,34 @@ import org.bukkit.inventory.EntityEquipment
import org.bukkit.inventory.EquipmentSlot
import org.bukkit.inventory.ItemStack
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.logging.Logger
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)
fun onEntityDeath(event: EntityDeathEvent) {
val piglin = event.entity as? PigZombie ?: 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
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
repeat(keptEquipment) { exp += 1 + rng.nextInt(3) }
event.droppedExp = exp
@@ -81,20 +92,4 @@ class ZombifiedPiglinLootRestore(plugin: JavaPlugin, val logger: Logger) : Liste
item.itemMeta = meta
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
import org.bukkit.Material
import org.bukkit.configuration.file.FileConfiguration
import org.bukkit.entity.PigZombie
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.entity.EntitySpawnEvent
import org.bukkit.inventory.ItemStack
class ZombifiedPiglinSpearDisable() : Listener {
class ZombifiedPiglinSpearDisable(config: FileConfiguration) : Listener {
private val disableSpears = config.getBoolean("disableSpears")
@EventHandler
private fun onEntitySpawn(event: EntitySpawnEvent){
if(!disableSpears) return
val piglin = event.entity as? PigZombie ?: return
if (piglin.equipment?.itemInMainHand?.type != Material.GOLDEN_SPEAR) return