parent
ebcc393c3e
commit
b09ba07735
@ -3,6 +3,7 @@
|
||||
|
||||
package ru.dbotthepony.mc.otm
|
||||
|
||||
import net.minecraft.client.server.IntegratedServer
|
||||
import net.minecraft.server.MinecraftServer
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraftforge.event.TickEvent
|
||||
@ -12,6 +13,7 @@ import net.minecraftforge.event.server.ServerAboutToStartEvent
|
||||
import net.minecraftforge.event.server.ServerStoppedEvent
|
||||
import net.minecraftforge.event.server.ServerStoppingEvent
|
||||
import org.apache.logging.log4j.LogManager
|
||||
import ru.dbotthepony.mc.otm.client.minecraft
|
||||
import ru.dbotthepony.mc.otm.core.IConditionalTickable
|
||||
import ru.dbotthepony.mc.otm.core.ITickable
|
||||
import ru.dbotthepony.mc.otm.core.TickList
|
||||
@ -50,6 +52,24 @@ private var _clientThread: Thread? = null
|
||||
|
||||
val isClient: Boolean get() = _clientThread !== null
|
||||
|
||||
private val isPausedImpl: Boolean get() {
|
||||
val server = _server
|
||||
|
||||
if (server is IntegratedServer) {
|
||||
return !server.isPublished && minecraft.isPaused
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
val isPaused: Boolean get() {
|
||||
if (_clientThread === null) {
|
||||
return false
|
||||
}
|
||||
|
||||
return isPausedImpl
|
||||
}
|
||||
|
||||
fun recordClientThread() {
|
||||
if (_clientThread != null) {
|
||||
throw IllegalStateException("Already have client channel")
|
||||
|
@ -186,6 +186,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
|
||||
|
||||
var renderRotation = 0f
|
||||
var lastRender = 0L
|
||||
var particleRenderScore = 0L
|
||||
|
||||
override fun computeNextJob(): Pair<ReplicatorJob?, IdleReason?> {
|
||||
if (energy.batteryLevel < BASE_CONSUMPTION) {
|
||||
|
@ -10,20 +10,35 @@ import net.minecraft.client.renderer.MultiBufferSource
|
||||
import net.minecraft.client.renderer.block.model.ItemTransforms
|
||||
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer
|
||||
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider
|
||||
import net.minecraft.client.server.IntegratedServer
|
||||
import net.minecraft.core.particles.DustParticleOptions
|
||||
import net.minecraft.world.level.levelgen.XoroshiroRandomSource
|
||||
import org.lwjgl.opengl.GL14
|
||||
import org.lwjgl.opengl.GL14.GL_ADD
|
||||
import org.lwjgl.opengl.GL14.GL_FUNC_ADD
|
||||
import org.lwjgl.opengl.GL14.GL_MIN
|
||||
import org.lwjgl.opengl.GL14.glBlendColor
|
||||
import ru.dbotthepony.mc.otm.NULLABLE_MINECRAFT_SERVER
|
||||
import ru.dbotthepony.mc.otm.block.entity.WorkerState
|
||||
import ru.dbotthepony.mc.otm.block.entity.matter.MatterReplicatorBlockEntity
|
||||
import ru.dbotthepony.mc.otm.client.minecraft
|
||||
import ru.dbotthepony.mc.otm.client.render.lockBlendFunc
|
||||
import ru.dbotthepony.mc.otm.client.render.popScissorRect
|
||||
import ru.dbotthepony.mc.otm.client.render.pushScissorRect
|
||||
import ru.dbotthepony.mc.otm.client.screen.widget.PowerGaugePanel
|
||||
import ru.dbotthepony.mc.otm.core.component1
|
||||
import ru.dbotthepony.mc.otm.core.component2
|
||||
import ru.dbotthepony.mc.otm.core.component3
|
||||
import ru.dbotthepony.mc.otm.core.get
|
||||
import ru.dbotthepony.mc.otm.core.normalizeAngleDeg
|
||||
import ru.dbotthepony.mc.otm.isPaused
|
||||
|
||||
class MatterReplicatorRenderer(private val context: BlockEntityRendererProvider.Context) : BlockEntityRenderer<MatterReplicatorBlockEntity> {
|
||||
companion object {
|
||||
private val smoke = DustParticleOptions(Vector3f(1f, 1f, 1f), 1f)
|
||||
private val rand = XoroshiroRandomSource(System.nanoTime(), System.currentTimeMillis())
|
||||
}
|
||||
|
||||
override fun render(
|
||||
tile: MatterReplicatorBlockEntity,
|
||||
partialTick: Float,
|
||||
@ -46,7 +61,21 @@ class MatterReplicatorRenderer(private val context: BlockEntityRendererProvider.
|
||||
val diff = System.nanoTime() - tile.lastRender
|
||||
tile.lastRender = System.nanoTime()
|
||||
|
||||
tile.renderRotation = normalizeAngleDeg(tile.renderRotation + diff / 10_000_000f)
|
||||
if (!isPaused)
|
||||
tile.particleRenderScore += diff
|
||||
|
||||
if (tile.particleRenderScore > 30_000_000L) {
|
||||
tile.particleRenderScore = tile.particleRenderScore % 30_000_000L
|
||||
|
||||
if (rand.nextDouble() > 0.75 && !isPaused && tile.blockState[WorkerState.WORKER_STATE] == WorkerState.WORKING) {
|
||||
val (x, y, z) = tile.blockPos
|
||||
tile.level?.addParticle(smoke, 0.3 + x + rand.nextDouble() * 0.4, 0.1 + y + rand.nextDouble() * 0.2, 0.3 + z + rand.nextDouble() * 0.4, 0.0, 0.0, 0.0)
|
||||
}
|
||||
}
|
||||
|
||||
if (!isPaused)
|
||||
tile.renderRotation = normalizeAngleDeg(tile.renderRotation + diff / 10_000_000f)
|
||||
|
||||
pose.mulPose(Vector3f.YP.rotationDegrees(tile.renderRotation))
|
||||
|
||||
val model = context.itemRenderer.getModel(
|
||||
|
Loading…
Reference in New Issue
Block a user