mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-08-28 00:15:56 +02:00
anvil sound & degrade basic feature
# Conflicts: # src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt
This commit is contained in:
parent
52a58acd28
commit
015ca99475
1 changed files with 57 additions and 1 deletions
|
|
@ -4,7 +4,9 @@ import io.delilaheve.CustomAnvil
|
|||
import io.delilaheve.util.ConfigOptions
|
||||
import io.delilaheve.util.ItemUtil.canMergeWith
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.Location
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.Sound
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.Event
|
||||
import org.bukkit.event.EventHandler
|
||||
|
|
@ -354,7 +356,9 @@ class AnvilResultListener : Listener {
|
|||
player.inventory.setItem(slotDestination.slot, result.item)
|
||||
}
|
||||
|
||||
// TODO probably anvil damage & sound here ??
|
||||
if (event.click != ClickType.MIDDLE)
|
||||
handleAnvilMechanic(view, player.gameMode != GameMode.CREATIVE)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
|
|
@ -382,6 +386,58 @@ class AnvilResultListener : Listener {
|
|||
}
|
||||
}
|
||||
|
||||
// Process both sound & degradation
|
||||
private fun handleAnvilMechanic(view: AnvilView, canDegrade: Boolean) {
|
||||
// ok so we do not provide a getLocation on view ?
|
||||
val inv = view.topInventory as? AnvilInventory
|
||||
val location = inv?.location
|
||||
|
||||
val wasDestroyed = canDegrade && tryDegradeAnvil(view, location)
|
||||
tryPlaySound(location, wasDestroyed)
|
||||
}
|
||||
|
||||
private fun tryDegradeAnvil(view: AnvilView, location: Location?): Boolean {
|
||||
val world = location?.world ?: return false
|
||||
if (Math.random() > 0.12) return false //TODO config value instead of hardcoded
|
||||
|
||||
val block = world.getBlockAt(location)
|
||||
|
||||
val next = when (block.type) {
|
||||
Material.ANVIL -> Material.CHIPPED_ANVIL
|
||||
Material.CHIPPED_ANVIL -> Material.DAMAGED_ANVIL
|
||||
Material.DAMAGED_ANVIL -> Material.AIR
|
||||
else -> return false
|
||||
}
|
||||
|
||||
block.type = next
|
||||
|
||||
if (next == Material.AIR) {
|
||||
view.close()
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
private fun tryPlaySound(
|
||||
location: Location?,
|
||||
wasDestroyed: Boolean,
|
||||
) {
|
||||
val world = location?.world ?: return
|
||||
|
||||
if (false) return //TODO enabled config sound
|
||||
|
||||
// TODO config values
|
||||
world.playSound(
|
||||
location,
|
||||
if (wasDestroyed)
|
||||
Sound.BLOCK_ANVIL_DESTROY
|
||||
else
|
||||
Sound.BLOCK_ANVIL_USE,
|
||||
1f, 1f
|
||||
)
|
||||
}
|
||||
|
||||
private fun onUnitRepairExtract(
|
||||
rightItem: ItemStack,
|
||||
event: InventoryClickEvent,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue