Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PC-1051 #4

Merged
merged 3 commits into from
Feb 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import br.com.gamemods.minecity.fabric.math.pos.FabricEntityLocation
import br.com.gamemods.minecity.fabric.server.MineCityFabricServer
import br.com.gamemods.minecity.fabric.service.FabricNamedPlayerService
import br.com.gamemods.minecity.fabric.service.FabricWorldService
import br.com.gamemods.minecity.fabric.service.permission.FabricButtonClaimPermission
import br.com.gamemods.minecity.fabric.service.permission.FabricDoorClaimPermission
import br.com.gamemods.minecity.fabric.wrapper.FabricBlockPosWrapper
import br.com.gamemods.minecity.fabric.wrapper.FabricChunkPosWrapper
Expand Down Expand Up @@ -80,6 +81,7 @@ object MineCityFabric : ModInitializer, MineCityPlatform {

private fun registerPermissions() {
core.permission += FabricDoorClaimPermission()
core.permission += FabricButtonClaimPermission()
}

@ServerSideOnly
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package br.com.gamemods.minecity.fabric.service.permission

import br.com.gamemods.minecity.api.MineCity
import br.com.gamemods.minecity.api.annotation.internal.InternalMineCityApi
import br.com.gamemods.minecity.api.id.ClaimPermissionId
import br.com.gamemods.minecity.api.service.permission.ClaimPermission
import br.com.gamemods.minecity.core.helpers.isInstanceOfNone
import br.com.gamemods.minecity.fabric.helpers.blockStateBy
import br.com.gamemods.minecity.fabric.helpers.hasPermissionIn
import br.com.gamemods.minecity.fabric.service.claim.FabricClaimService.Companion.get
import net.fabricmc.fabric.api.event.player.UseBlockCallback
import net.kyori.adventure.text.Component
import net.minecraft.block.ButtonBlock
import net.minecraft.block.DaylightDetectorBlock
import net.minecraft.block.LeverBlock
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.util.ActionResult
import net.minecraft.util.Hand
import net.minecraft.util.hit.BlockHitResult
import net.minecraft.util.hit.HitResult
import net.minecraft.world.World

@InternalMineCityApi
class FabricButtonClaimPermission: ClaimPermission(
id = ClaimPermissionId.BUTTONS,
name = Component.text("Buttons"),
description = Component.text("Allows the player to trigger buttons, daylight sensors, switches and more.")
) {
override fun onRegister() {
UseBlockCallback.EVENT.register(OnUseBlock())
}

private inner class OnUseBlock() : UseBlockCallback {
override fun interact( player: PlayerEntity, world: World, hand: Hand, hitResult: BlockHitResult): ActionResult {
if (world.isClient) {
return ActionResult.PASS
}

if (hitResult.type != HitResult.Type.BLOCK) {
return ActionResult.PASS
}

val hitPos = hitResult.blockPos
val block = hitResult.blockStateBy(world).block

if (block.isInstanceOfNone(ButtonBlock::class, LeverBlock::class, DaylightDetectorBlock::class)) {
return ActionResult.PASS
}

val claim = MineCity.claims[world, hitPos] ?: return ActionResult.PASS

return player.uuid.hasPermissionIn(claim, permissionId = ClaimPermissionId.BUTTONS)
}
}
}



Loading