fix, refactor: removed unneccesary logic of saving Angry state to persistent storage
Signed-off-by: lisoveliy <lisoveliy@proton.me>
This commit is contained in:
16
README.md
Normal file
16
README.md
Normal 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**!
|
||||||
2
pom.xml
2
pom.xml
@@ -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>
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user