стул функционирует!!!!!!!!!!

This commit is contained in:
YuRaNnNzZZ 2024-09-03 03:51:25 +03:00
parent 7bcc1e37e2
commit 11a5bdf442
Signed by: YuRaNnNzZZ
GPG Key ID: 5F71738C85A6006D
5 changed files with 104 additions and 7 deletions

View File

@ -0,0 +1,47 @@
package ru.dbotthepony.mc.otm.block.decorative
import net.minecraft.core.BlockPos
import net.minecraft.world.InteractionResult
import net.minecraft.world.entity.player.Player
import net.minecraft.world.item.DyeColor
import net.minecraft.world.level.BlockGetter
import net.minecraft.world.level.Level
import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.level.material.MapColor
import net.minecraft.world.phys.BlockHitResult
import net.minecraft.world.phys.shapes.CollisionContext
import net.minecraft.world.phys.shapes.VoxelShape
import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock
import ru.dbotthepony.mc.otm.block.getShapeForEachState
import ru.dbotthepony.mc.otm.core.AABB
import ru.dbotthepony.mc.otm.core.get
import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom
import ru.dbotthepony.mc.otm.core.math.plus
import ru.dbotthepony.mc.otm.entity.RideableDummy
import ru.dbotthepony.mc.otm.shapes.BlockShapes
class StarChairBlock(val color: DyeColor?) : RotatableMatteryBlock(DEFAULT_PROPERTIES.mapColor(color?.mapColor ?: MapColor.COLOR_LIGHT_BLUE)) {
override fun rotationFreedom(): BlockRotationFreedom = BlockRotationFreedom.HORIZONTAL
private val shapes = getShapeForEachState(rotationProperty) { BlockShapes.STAR_CHAIR.rotateFromNorth(it[rotationProperty]).computeShape() }
override fun getShape(state: BlockState, blockGetter: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape = shapes[state]!!
override fun useWithoutItem(blockState: BlockState, level: Level, blockPos: BlockPos, ply: Player, blockHitResult: BlockHitResult): InteractionResult {
if (ply.isCrouching) return super.useWithoutItem(blockState, level, blockPos, ply, blockHitResult)
val entities = level.getEntitiesOfClass(RideableDummy::class.java, AABB(blockPos, blockPos + BlockPos(1, 1, 1)))
if (entities.isNotEmpty()) return InteractionResult.FAIL
val entity = RideableDummy(level)
entity.blockPos = blockPos
entity.blockState = blockState
entity.yRot = blockState[rotationFreedom()].front.toYRot()
entity.setPos(blockPos.x + 0.5, blockPos.y.toDouble(), blockPos.z + 0.5)
level.addFreshEntity(entity)
ply.startRiding(entity)
return InteractionResult.SUCCESS
}
}

View File

@ -0,0 +1,46 @@
package ru.dbotthepony.mc.otm.entity
import net.minecraft.core.BlockPos
import net.minecraft.core.registries.Registries
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.NbtUtils
import net.minecraft.network.syncher.SynchedEntityData
import net.minecraft.world.entity.Entity
import net.minecraft.world.level.Level
import net.minecraft.world.level.block.Blocks
import net.minecraft.world.level.block.state.BlockState
import ru.dbotthepony.mc.otm.registry.MEntityTypes
class RideableDummy(level: Level) : Entity(MEntityTypes.RIDEABLE_DUMMY, level) {
var blockPos: BlockPos = BlockPos.ZERO
var blockState: BlockState = Blocks.AIR.defaultBlockState()
init {
isNoGravity = true
noPhysics = true
}
override fun tick() {
super.tick()
if (level().getBlockState(blockPos) != blockState || passengers.isEmpty()) {
discard()
return
}
}
override fun defineSynchedData(tag: SynchedEntityData.Builder) {
// none
}
override fun readAdditionalSaveData(tag: CompoundTag) {
blockPos = NbtUtils.readBlockPos(tag, "block_pos").orElse(BlockPos.ZERO)
blockState = NbtUtils.readBlockState(this.level().holderLookup(Registries.BLOCK), tag.getCompound("block_state"))
}
override fun addAdditionalSaveData(tag: CompoundTag) {
tag.put("block_pos", NbtUtils.writeBlockPos(blockPos))
tag.put("block_state", NbtUtils.writeBlockState(blockState))
}
}

View File

@ -4,6 +4,7 @@ import net.minecraft.client.model.geom.ModelLayers
import net.minecraft.client.renderer.entity.EntityRenderer
import net.minecraft.client.renderer.entity.EntityRenderers
import net.minecraft.client.renderer.entity.MinecartRenderer
import net.minecraft.client.renderer.entity.NoopRenderer
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.EntityType
@ -14,6 +15,7 @@ import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent
import ru.dbotthepony.mc.otm.client.render.entity.PlasmaProjectileRenderer
import ru.dbotthepony.mc.otm.entity.MinecartCargoCrate
import ru.dbotthepony.mc.otm.entity.PlasmaProjectile
import ru.dbotthepony.mc.otm.entity.RideableDummy
object MEntityTypes {
private val registry = MDeferredRegister(BuiltInRegistries.ENTITY_TYPE)
@ -26,6 +28,10 @@ object MEntityTypes {
EntityType.Builder.of({ it, level -> MinecartCargoCrate(it, color, level)}, MobCategory.MISC).sized(0.98F, 0.7F).clientTrackingRange(8).build("dfu doesn't works ✅")
}
val RIDEABLE_DUMMY: EntityType<RideableDummy> by registry.register(MNames.RIDEABLE_DUMMY) {
EntityType.Builder.of({ _, level -> RideableDummy(level)}, MobCategory.MISC).sized(0.5f, 0.5f).build(MNames.RIDEABLE_DUMMY)
}
fun register(bus: IEventBus) {
registry.register(bus)
bus.addListener(this::registerClient)
@ -39,6 +45,8 @@ object MEntityTypes {
for (type in CARGO_CRATE_MINECARTS.values) {
EntityRenderers.register(type) { MinecartRenderer<MinecartCargoCrate>(it, ModelLayers.CHEST_MINECART) as EntityRenderer<Entity> }
}
EntityRenderers.register(RIDEABLE_DUMMY, ::NoopRenderer)
}
}
}

View File

@ -284,6 +284,7 @@ object MNames {
// entities
const val PLASMA = "plasma_projectile"
const val RIDEABLE_DUMMY = "rideable_dummy"
const val PHANTOM_ATTRACTOR = "phantom_attractor"
const val JUMP_BOOST = "jump_boost"

View File

@ -32,6 +32,7 @@ import ru.dbotthepony.mc.otm.android.AndroidFeatureType
import ru.dbotthepony.mc.otm.android.feature.EnderTeleporterFeature
import ru.dbotthepony.mc.otm.android.feature.NanobotsArmorFeature
import ru.dbotthepony.mc.otm.block.decorative.CargoCrateBlock
import ru.dbotthepony.mc.otm.block.decorative.StarChairBlock
import ru.dbotthepony.mc.otm.block.decorative.TritaniumPressurePlate
import ru.dbotthepony.mc.otm.capability.matteryEnergy
import ru.dbotthepony.mc.otm.client.MatteryGUI
@ -110,13 +111,7 @@ object MRegistry : IBlockItemRegistryAcceptor {
.destroyTime(1.5f)
}.also { decorativeBlocks.add(it) }
val STAR_CHAIR = DecorativeBlock.rotatable("star_chair", BlockShapes.STAR_CHAIR, BlockRotationFreedom.HORIZONTAL) {
BlockBehaviour.Properties.of()
.mapColor(it?.mapColor ?: MapColor.COLOR_LIGHT_BLUE)
.sound(SoundType.METAL)
.explosionResistance(15f)
.destroyTime(1.5f)
}.also { decorativeBlocks.add(it) }
val STAR_CHAIR = DecorativeBlock("star_chair", ::StarChairBlock).also { decorativeBlocks.add(it) }
val TRITANIUM_STAIRS = DecorativeBlock(MNames.TRITANIUM_STAIRS) {
StairBlock(