Compare commits
No commits in common. "a0e9e6c3c0dbd15a98850e26fd66483e72e70a4f" and "39fb6b9db007998ea60fe0522784039d2c92c2b4" have entirely different histories.
a0e9e6c3c0
...
39fb6b9db0
2 changed files with 27 additions and 34 deletions
|
|
@ -7,7 +7,10 @@ import ch.offbeatwit.bestbuds.util.error
|
|||
import io.papermc.paper.entity.Leashable
|
||||
import io.papermc.paper.event.player.PlayerNameEntityEvent
|
||||
import org.bukkit.block.data.type.Fence
|
||||
import org.bukkit.entity.*
|
||||
import org.bukkit.entity.AbstractHorse
|
||||
import org.bukkit.entity.LeashHitch
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.entity.Tameable
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.EventPriority
|
||||
import org.bukkit.event.Listener
|
||||
|
|
@ -15,8 +18,6 @@ import org.bukkit.event.block.BlockBreakEvent
|
|||
import org.bukkit.event.entity.EntityDamageByEntityEvent
|
||||
import org.bukkit.event.entity.PlayerLeashEntityEvent
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent
|
||||
import org.bukkit.event.player.PlayerUnleashEntityEvent
|
||||
import org.bukkit.util.BoundingBox
|
||||
|
||||
class AntiGriefModule(ctx: Context) : BestBudsModule(ctx), Listener {
|
||||
fun isAllowed(source: Player, target: Tameable): Boolean {
|
||||
|
|
@ -59,26 +60,18 @@ class AntiGriefModule(ctx: Context) : BestBudsModule(ctx), Listener {
|
|||
|
||||
@EventHandler
|
||||
fun onLeashed(ev: PlayerLeashEntityEvent) {
|
||||
if (checkLeash(ev.player, ev.entity)) {
|
||||
ev.isCancelled = true
|
||||
ev.player.sendActionBar(error("Can't leash another player's pet!"))
|
||||
}
|
||||
}
|
||||
val source = ev.player
|
||||
val target = ev.entity
|
||||
|
||||
@EventHandler
|
||||
fun onRemoveLeash(ev: PlayerUnleashEntityEvent) {
|
||||
if (checkLeash(ev.player, ev.entity)) {
|
||||
ev.isCancelled = true
|
||||
ev.player.sendActionBar(error("Can't unleash another player's pet!"))
|
||||
}
|
||||
}
|
||||
|
||||
fun checkLeash(source: Player, target: Entity): Boolean {
|
||||
return (target is Tameable
|
||||
if (target is Tameable
|
||||
&& target.isTamed
|
||||
&& !source.isOwnerOf(target)
|
||||
&& !source.hasPermission(Permissions.LEASH_OTHERS)
|
||||
&& !isAllowed(source, target))
|
||||
&& !isAllowed(source, target)
|
||||
) {
|
||||
ev.isCancelled = true
|
||||
source.sendActionBar(error("Can't leash another player's pet!"))
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
|
@ -88,14 +81,19 @@ class AntiGriefModule(ctx: Context) : BestBudsModule(ctx), Listener {
|
|||
val leashHitch = ev.block.location.getNearbyEntitiesByType(LeashHitch::class.java, 1.0)
|
||||
.firstOrNull() ?: return
|
||||
|
||||
val aabb = BoundingBox.of(leashHitch.boundingBox.center, 32.0, 32.0, 32.0)
|
||||
val target = leashHitch.world.getNearbyEntities(aabb) {
|
||||
it is Leashable && it.isLeashed && it.leashHolder == leashHitch
|
||||
}.firstOrNull()
|
||||
val source = ev.player
|
||||
val target = leashHitch.world.getNearbyEntitiesByType(Leashable::class.java, leashHitch.location, 32.0, 32.0) {
|
||||
it.leashHolder == leashHitch
|
||||
}
|
||||
|
||||
if (target != null && checkLeash(ev.player, target)) {
|
||||
if (target is Tameable
|
||||
&& target.isTamed
|
||||
&& !source.isOwnerOf(target)
|
||||
&& !source.hasPermission(Permissions.LEASH_OTHERS)
|
||||
&& !isAllowed(source, target)
|
||||
) {
|
||||
ev.isCancelled = true
|
||||
ev.player.sendActionBar(error("Can't unleash another player's pet!"))
|
||||
source.sendActionBar(error("Can't unleash another player's pet!"))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,20 +24,15 @@ import org.joml.Vector3f
|
|||
import kotlin.time.Duration.Companion.seconds
|
||||
|
||||
class InteractionModule(ctx: Context) : BestBudsModule(ctx), Listener {
|
||||
val infoItem = Material.SPYGLASS
|
||||
val manageItem = Material.STICK
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
fun onClickPet(ev: PlayerInteractEntityEvent) {
|
||||
if (ev.isCancelled) return
|
||||
if (!ev.player.isSneaking) return
|
||||
|
||||
val target = ev.rightClicked
|
||||
val handItem = ev.player.inventory.getItem(ev.hand).type
|
||||
val holdingManage = handItem == manageItem
|
||||
val holdingEither = handItem == infoItem || holdingManage
|
||||
val holdingSpyglass = ev.player.inventory.getItem(ev.hand).type == Material.SPYGLASS
|
||||
|
||||
if (target is ChestedHorse && !holdingEither) {
|
||||
if (target is ChestedHorse && !holdingSpyglass) {
|
||||
// Sneak-clicking usually accesses these mobs' GUI
|
||||
return
|
||||
}
|
||||
|
|
@ -45,7 +40,7 @@ class InteractionModule(ctx: Context) : BestBudsModule(ctx), Listener {
|
|||
if (target is Tameable && target.isTamed) {
|
||||
ev.isCancelled = true
|
||||
|
||||
if (ev.player.isOwnerOf(target) && holdingManage) {
|
||||
if (ev.player.isOwnerOf(target) && !holdingSpyglass) {
|
||||
ev.player.showDialog(InfoDialog(target).get())
|
||||
} else {
|
||||
ev.player.showPetInfo(target)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue