Fix blocks without menu still behaving like being interacted with clientside

This commit is contained in:
DBotThePony 2025-03-26 23:00:18 +07:00
parent 140bdab59c
commit af24f391df
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -16,7 +16,6 @@ import net.minecraft.network.chat.Component
import net.minecraft.network.chat.ComponentSerialization import net.minecraft.network.chat.ComponentSerialization
import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerLevel
import net.minecraft.util.RandomSource import net.minecraft.util.RandomSource
import net.minecraft.world.Containers
import net.minecraft.world.InteractionResult import net.minecraft.world.InteractionResult
import net.minecraft.world.MenuProvider import net.minecraft.world.MenuProvider
import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.LivingEntity
@ -36,8 +35,6 @@ import net.minecraft.world.phys.shapes.VoxelShape
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import ru.dbotthepony.mc.otm.block.entity.IRedstoneControlled import ru.dbotthepony.mc.otm.block.entity.IRedstoneControlled
import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity
import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity
import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity.Companion
import ru.dbotthepony.mc.otm.block.entity.WorkerState import ru.dbotthepony.mc.otm.block.entity.WorkerState
import ru.dbotthepony.mc.otm.core.TooltipList import ru.dbotthepony.mc.otm.core.TooltipList
import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.TranslatableComponent
@ -149,6 +146,9 @@ open class MatteryBlock(properties: Properties = DEFAULT_PROPERTIES) : Block(pro
return getShapeForEachState(ArrayList(stateDefinition.properties), mapper) return getShapeForEachState(ArrayList(stateDefinition.properties), mapper)
} }
protected open val neverOpensAMenu: Boolean
get() = false
override fun useWithoutItem( override fun useWithoutItem(
blockState: BlockState, blockState: BlockState,
level: Level, level: Level,
@ -156,18 +156,17 @@ open class MatteryBlock(properties: Properties = DEFAULT_PROPERTIES) : Block(pro
ply: Player, ply: Player,
blockHitResult: BlockHitResult blockHitResult: BlockHitResult
): InteractionResult { ): InteractionResult {
if (this is EntityBlock && !level.isClientSide) { if (!neverOpensAMenu && this is EntityBlock) {
val tile = level.getBlockEntity(blockPos) val tile = level.getBlockEntity(blockPos)
if (tile is MenuProvider) { if (tile is MenuProvider) {
ply.openMenu(tile) if (!level.isClientSide)
return InteractionResult.CONSUME ply.openMenu(tile)
return InteractionResult.sidedSuccess(level.isClientSide)
} }
} }
if (this is EntityBlock && level.isClientSide)
return InteractionResult.SUCCESS
return super.useWithoutItem(blockState, level, blockPos, ply, blockHitResult) return super.useWithoutItem(blockState, level, blockPos, ply, blockHitResult)
} }