стул функционирует!!!!!!!!!!
This commit is contained in:
parent
7bcc1e37e2
commit
11a5bdf442
@ -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
|
||||
}
|
||||
}
|
@ -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))
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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"
|
||||
|
@ -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(
|
||||
|
Loading…
Reference in New Issue
Block a user