parent
ebcc393c3e
commit
b09ba07735
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
package ru.dbotthepony.mc.otm
|
package ru.dbotthepony.mc.otm
|
||||||
|
|
||||||
|
import net.minecraft.client.server.IntegratedServer
|
||||||
import net.minecraft.server.MinecraftServer
|
import net.minecraft.server.MinecraftServer
|
||||||
import net.minecraft.world.level.Level
|
import net.minecraft.world.level.Level
|
||||||
import net.minecraftforge.event.TickEvent
|
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.ServerStoppedEvent
|
||||||
import net.minecraftforge.event.server.ServerStoppingEvent
|
import net.minecraftforge.event.server.ServerStoppingEvent
|
||||||
import org.apache.logging.log4j.LogManager
|
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.IConditionalTickable
|
||||||
import ru.dbotthepony.mc.otm.core.ITickable
|
import ru.dbotthepony.mc.otm.core.ITickable
|
||||||
import ru.dbotthepony.mc.otm.core.TickList
|
import ru.dbotthepony.mc.otm.core.TickList
|
||||||
@ -50,6 +52,24 @@ private var _clientThread: Thread? = null
|
|||||||
|
|
||||||
val isClient: Boolean get() = _clientThread !== 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() {
|
fun recordClientThread() {
|
||||||
if (_clientThread != null) {
|
if (_clientThread != null) {
|
||||||
throw IllegalStateException("Already have client channel")
|
throw IllegalStateException("Already have client channel")
|
||||||
|
@ -186,6 +186,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
|
|||||||
|
|
||||||
var renderRotation = 0f
|
var renderRotation = 0f
|
||||||
var lastRender = 0L
|
var lastRender = 0L
|
||||||
|
var particleRenderScore = 0L
|
||||||
|
|
||||||
override fun computeNextJob(): Pair<ReplicatorJob?, IdleReason?> {
|
override fun computeNextJob(): Pair<ReplicatorJob?, IdleReason?> {
|
||||||
if (energy.batteryLevel < BASE_CONSUMPTION) {
|
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.block.model.ItemTransforms
|
||||||
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer
|
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer
|
||||||
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider
|
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
|
||||||
import org.lwjgl.opengl.GL14.GL_ADD
|
import org.lwjgl.opengl.GL14.GL_ADD
|
||||||
import org.lwjgl.opengl.GL14.GL_FUNC_ADD
|
import org.lwjgl.opengl.GL14.GL_FUNC_ADD
|
||||||
import org.lwjgl.opengl.GL14.GL_MIN
|
import org.lwjgl.opengl.GL14.GL_MIN
|
||||||
import org.lwjgl.opengl.GL14.glBlendColor
|
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.block.entity.matter.MatterReplicatorBlockEntity
|
||||||
import ru.dbotthepony.mc.otm.client.minecraft
|
import ru.dbotthepony.mc.otm.client.minecraft
|
||||||
import ru.dbotthepony.mc.otm.client.render.lockBlendFunc
|
import ru.dbotthepony.mc.otm.client.render.lockBlendFunc
|
||||||
import ru.dbotthepony.mc.otm.client.render.popScissorRect
|
import ru.dbotthepony.mc.otm.client.render.popScissorRect
|
||||||
import ru.dbotthepony.mc.otm.client.render.pushScissorRect
|
import ru.dbotthepony.mc.otm.client.render.pushScissorRect
|
||||||
import ru.dbotthepony.mc.otm.client.screen.widget.PowerGaugePanel
|
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.core.normalizeAngleDeg
|
||||||
|
import ru.dbotthepony.mc.otm.isPaused
|
||||||
|
|
||||||
class MatterReplicatorRenderer(private val context: BlockEntityRendererProvider.Context) : BlockEntityRenderer<MatterReplicatorBlockEntity> {
|
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(
|
override fun render(
|
||||||
tile: MatterReplicatorBlockEntity,
|
tile: MatterReplicatorBlockEntity,
|
||||||
partialTick: Float,
|
partialTick: Float,
|
||||||
@ -46,7 +61,21 @@ class MatterReplicatorRenderer(private val context: BlockEntityRendererProvider.
|
|||||||
val diff = System.nanoTime() - tile.lastRender
|
val diff = System.nanoTime() - tile.lastRender
|
||||||
tile.lastRender = System.nanoTime()
|
tile.lastRender = System.nanoTime()
|
||||||
|
|
||||||
|
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)
|
tile.renderRotation = normalizeAngleDeg(tile.renderRotation + diff / 10_000_000f)
|
||||||
|
|
||||||
pose.mulPose(Vector3f.YP.rotationDegrees(tile.renderRotation))
|
pose.mulPose(Vector3f.YP.rotationDegrees(tile.renderRotation))
|
||||||
|
|
||||||
val model = context.itemRenderer.getModel(
|
val model = context.itemRenderer.getModel(
|
||||||
|
Loading…
Reference in New Issue
Block a user