From 09f4db3fa9d657515d9f04abb4a8e264cdabed83 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Tue, 2 Jan 2024 00:24:18 +0700 Subject: [PATCH] More backporting --- .../mc/otm/datagen/blocks/Banks.kt | 2 +- .../android/AndroidResearchDataProvider.kt | 21 +-- .../android/feature/EnderTeleporterFeature.kt | 3 +- .../entity/tech/AndroidChargerBlockEntity.kt | 1 + .../otm/capability/MatteryPlayerCapability.kt | 8 +- .../otm/client/render/DynamicBufferSource.kt | 1 - .../mc/otm/client/render/FontRenderer.kt | 2 +- .../mc/otm/client/render/GlitchRenderer.kt | 2 +- .../mc/otm/client/render/RenderExtensions.kt | 14 +- .../mc/otm/client/render/RenderHelper.kt | 3 +- .../client/render/blockentity/BankRenderer.kt | 1 + .../render/blockentity/BlackHoleRenderer.kt | 3 +- .../render/blockentity/FluidTankRenderer.kt | 6 +- .../GravitationStabilizerRenderer.kt | 2 +- .../MatterReconstructorRenderer.kt | 6 +- .../blockentity/MatterReplicatorRenderer.kt | 2 +- .../blockentity/MatterScannerRenderer.kt | 6 +- .../render/entity/PlasmaProjectileRenderer.kt | 4 +- .../screen/panels/input/TextInputPanel.kt | 4 +- .../mc/otm/core/UnOverengineering.kt | 3 - .../mc/otm/core/math/EuclidMath.kt | 107 +++++------ .../dbotthepony/mc/otm/core/math/MatrixExt.kt | 167 ++++++++++++++---- .../mc/otm/item/tool/ExplosiveHammerItem.kt | 2 +- .../mc/otm/matter/MatterDataProvider.kt | 19 +- .../resources/META-INF/accesstransformer.cfg | 29 ++- 25 files changed, 256 insertions(+), 162 deletions(-) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/Banks.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/Banks.kt index 7302eeb0c..d969fae6b 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/Banks.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/Banks.kt @@ -18,7 +18,7 @@ private fun nothingOrNumber(input: Int): String { return (input - 1).toString() } -open class BatteryBankProvider(event: GatherDataEvent) : BlockStateProvider(event.generator.packOutput, DataGen.MOD_ID, event.existingFileHelper) { +open class BatteryBankProvider(event: GatherDataEvent) : BlockStateProvider(event.generator, DataGen.MOD_ID, event.existingFileHelper) { protected var block = "battery_bank" protected var batteryPath = "block/battery/battery" protected var registry: Block = MBlocks.BATTERY_BANK diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchDataProvider.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchDataProvider.kt index 98d175bfc..661a07d00 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchDataProvider.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchDataProvider.kt @@ -3,31 +3,29 @@ package ru.dbotthepony.mc.otm.android import com.google.gson.JsonObject import it.unimi.dsi.fastutil.objects.ObjectArraySet import net.minecraft.data.CachedOutput +import net.minecraft.data.DataGenerator import net.minecraft.data.DataProvider -import net.minecraft.data.PackOutput import net.minecraft.resources.ResourceLocation import net.minecraftforge.data.event.GatherDataEvent -import ru.dbotthepony.mc.otm.core.toJson import ru.dbotthepony.mc.otm.core.toJsonStrict import ru.dbotthepony.mc.otm.core.util.WriteOnce import java.util.Collections import java.util.LinkedList -import java.util.concurrent.CompletableFuture import java.util.function.Consumer @Suppress("unused") open class AndroidResearchDataProvider() : DataProvider { - var pathProvider: PackOutput.PathProvider by WriteOnce("You need to call bindPackOutput before registering this data provider") + var pathProvider: DataGenerator.PathProvider by WriteOnce("You need to call bindPackOutput before registering this data provider") private set - constructor(output: PackOutput) : this() { + constructor(output: DataGenerator) : this() { bindPackOutput(output) } - constructor(event: GatherDataEvent) : this(event.generator.packOutput) + constructor(event: GatherDataEvent) : this(event.generator) - fun bindPackOutput(output: PackOutput) { - pathProvider = output.createPathProvider(PackOutput.Target.DATA_PACK, AndroidResearchManager.DIRECTORY) + fun bindPackOutput(output: DataGenerator) { + pathProvider = output.createPathProvider(DataGenerator.Target.DATA_PACK, AndroidResearchManager.DIRECTORY) } protected val callbacks = LinkedList<(Consumer) -> Unit>() @@ -52,14 +50,13 @@ open class AndroidResearchDataProvider() : DataProvider { return this } - final override fun run(output: CachedOutput): CompletableFuture<*> { + final override fun run(output: CachedOutput) { val set = ObjectArraySet() val added = LinkedList() - val futures = ArrayList>() addEverything { if (set.add(it.id)) { - futures.add(DataProvider.saveStable(output, AndroidResearchType.CODEC.toJsonStrict(it).also { (it as JsonObject).remove("id") }, pathProvider.json(it.id))) + DataProvider.saveStable(output, AndroidResearchType.CODEC.toJsonStrict(it).also { (it as JsonObject).remove("id") }, pathProvider.json(it.id)) AndroidResearchManager.put(it) added.add(it) } else { @@ -71,8 +68,6 @@ open class AndroidResearchDataProvider() : DataProvider { value.validate() generated.add(value) } - - return CompletableFuture.allOf(*futures.toTypedArray()) } override fun getName(): String { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/android/feature/EnderTeleporterFeature.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/android/feature/EnderTeleporterFeature.kt index 6fb7cd0b6..06792724a 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/android/feature/EnderTeleporterFeature.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/android/feature/EnderTeleporterFeature.kt @@ -36,7 +36,6 @@ import ru.dbotthepony.mc.otm.client.render.linesIgnoreZRenderType import ru.dbotthepony.mc.otm.client.render.sprites.sprite import ru.dbotthepony.mc.otm.config.AndroidConfig import ru.dbotthepony.mc.otm.core.genericPositions -import ru.dbotthepony.mc.otm.core.holder import ru.dbotthepony.mc.otm.core.math.RGBAColor import ru.dbotthepony.mc.otm.core.math.Vector import ru.dbotthepony.mc.otm.core.math.asVector @@ -301,7 +300,7 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv val event = ForgeEventFactory.onEnderTeleport(ply, blockPos.x + 0.5, blockPos.y.toDouble(), blockPos.z + 0.5) if (event.isCanceled) { - (ply as ServerPlayer).connection.send(ClientboundSoundEntityPacket(SoundEvents.ITEM_BREAK.holder, SoundSource.PLAYERS, ply, 0.3f, 0.5f, ply.level.random.nextLong())) + (ply as ServerPlayer).connection.send(ClientboundSoundEntityPacket(SoundEvents.ITEM_BREAK, SoundSource.PLAYERS, ply, 0.3f, 0.5f, ply.level.random.nextLong())) return false } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AndroidChargerBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AndroidChargerBlockEntity.kt index 83946a3ab..c896ac768 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AndroidChargerBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AndroidChargerBlockEntity.kt @@ -17,6 +17,7 @@ import ru.dbotthepony.mc.otm.capability.energy.WorkerEnergyStorage import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.config.MachinesConfig import ru.dbotthepony.mc.otm.core.getEntitiesInEllipsoid +import ru.dbotthepony.mc.otm.core.math.center import ru.dbotthepony.mc.otm.menu.tech.AndroidChargerMenu import ru.dbotthepony.mc.otm.registry.MBlockEntities diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt index ba7ca02f3..a49215bc3 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.capability import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.math.Vector4f import it.unimi.dsi.fastutil.ints.IntAVLTreeSet import it.unimi.dsi.fastutil.ints.IntSet import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap @@ -61,7 +62,6 @@ import net.minecraftforge.network.PacketDistributor import net.minecraftforge.registries.ForgeRegistries import net.minecraftforge.server.command.EnumArgument import org.apache.logging.log4j.LogManager -import org.joml.Vector4f import ru.dbotthepony.mc.otm.* import ru.dbotthepony.mc.otm.android.AndroidFeature import ru.dbotthepony.mc.otm.android.AndroidFeatureType @@ -1415,9 +1415,9 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial val pos = Vector4f(model.body.x / 16f, model.body.y / 16f, model.body.z / 16f, 1f) val cam = minecraft.gameRenderer.mainCamera.position - pos.mul(RenderSystem.getProjectionMatrix()) - pos.mul(poseStack.last().pose()) - makeSmoke(cam.x + pos.x, cam.y + pos.y, cam.z + pos.z, ply.level.random, ply.level) + pos.transform(RenderSystem.getProjectionMatrix()) + pos.transform(poseStack.last().pose()) + makeSmoke(cam.x + pos.x(), cam.y + pos.y(), cam.z + pos.z(), ply.level.random, ply.level) } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/DynamicBufferSource.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/DynamicBufferSource.kt index 53c1f89e7..ebf15afae 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/DynamicBufferSource.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/DynamicBufferSource.kt @@ -9,7 +9,6 @@ import it.unimi.dsi.fastutil.objects.ReferenceArraySet import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.RenderType import net.minecraft.client.renderer.Sheets -import org.joml.Vector3f private fun equals(existing: ImmutableList?, types: Array): Boolean { if (types.isEmpty()) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/FontRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/FontRenderer.kt index edcd8de6f..20eca65bd 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/FontRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/FontRenderer.kt @@ -1,11 +1,11 @@ package ru.dbotthepony.mc.otm.client.render import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.math.Matrix4f import net.minecraft.client.gui.Font import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.network.chat.Component import net.minecraft.util.FormattedCharSequence -import org.joml.Matrix4f import ru.dbotthepony.mc.otm.core.FloatSupplier import ru.dbotthepony.mc.otm.core.math.RGBAColor import ru.dbotthepony.mc.otm.core.math.component1 diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/GlitchRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/GlitchRenderer.kt index 34c5747a1..c3c7ac320 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/GlitchRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/GlitchRenderer.kt @@ -5,12 +5,12 @@ import com.mojang.blaze3d.platform.GlConst import com.mojang.blaze3d.platform.GlStateManager import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.* +import com.mojang.math.Matrix4f import net.minecraft.client.Minecraft import net.minecraft.client.renderer.FogRenderer import net.minecraft.client.renderer.GameRenderer import net.minecraft.world.level.levelgen.XoroshiroRandomSource import net.minecraft.world.level.material.FogType -import org.joml.Matrix4f import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.client.minecraft diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/RenderExtensions.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/RenderExtensions.kt index 07827dad3..85896d849 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/RenderExtensions.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/RenderExtensions.kt @@ -6,9 +6,6 @@ import com.mojang.blaze3d.vertex.VertexConsumer import com.mojang.math.Matrix4f import com.mojang.math.Vector3f import net.minecraft.core.Vec3i -import org.joml.Matrix4f -import org.joml.Quaternionf -import org.joml.Vector3f import ru.dbotthepony.mc.otm.core.math.IAngle import ru.dbotthepony.mc.otm.core.math.RGBAColor import ru.dbotthepony.mc.otm.core.math.Vector @@ -36,7 +33,7 @@ fun PoseStack.translate(vector: Vector3f) = translate(vector.x(), vector.y(), ve fun PoseStack.rotateAroundPoint(point: Vector, axis: Vector, rotation: Float, isDegrees: Boolean = false) { val last = last() last.pose().rotateAroundPoint(point, axis, rotation, isDegrees) - last.normal().rotate(axis.rotateAroundThis(rotation, isDegrees)) + last.normal().mul(axis.rotateAroundThis(rotation, isDegrees)) } fun PoseStack.rotateAroundPoint(point: Vector, rotation: IAngle) { @@ -48,7 +45,7 @@ fun PoseStack.rotateAroundPoint(point: Vector, rotation: IAngle) { fun PoseStack.rotateAroundPoint(point: Vector3f, axis: Vector, rotation: Float, isDegrees: Boolean = false) { val last = last() last.pose().rotateAroundPoint(point, axis, rotation, isDegrees) - last.normal().rotate(axis.rotateAroundThis(rotation, isDegrees)) + last.normal().mul(axis.rotateAroundThis(rotation, isDegrees)) } fun PoseStack.rotateAroundPoint(point: Vector3f, rotation: IAngle) { @@ -57,10 +54,11 @@ fun PoseStack.rotateAroundPoint(point: Vector3f, rotation: IAngle) { // last.normal().mul(rotation.forward().rotateAroundThis(rotation)) } -fun PoseStack.rotateAround(rotationMatrix: Quaternionf, x: Float, y: Float, z: Float) { +fun PoseStack.rotateAround(axis: Vector3f, radians: Float) { + val q = axis.rotation(radians) val pose = last - pose.pose.rotateAround(rotationMatrix, x, y, z) - pose.normal().rotate(rotationMatrix) + pose.pose.multiply(q) + pose.normal().mul(q) } fun PoseStack.translation(): Vector3f { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/RenderHelper.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/RenderHelper.kt index 74e51efc4..7d013e821 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/RenderHelper.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/RenderHelper.kt @@ -3,6 +3,7 @@ package ru.dbotthepony.mc.otm.client.render import com.mojang.blaze3d.platform.GlStateManager import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.* +import com.mojang.math.Matrix4f import net.minecraft.client.renderer.GameRenderer import net.minecraft.client.renderer.RenderStateShard import net.minecraft.client.renderer.RenderStateShard.LineStateShard @@ -11,7 +12,6 @@ import net.minecraft.client.renderer.ShaderInstance import net.minecraft.resources.ResourceLocation import net.minecraft.server.packs.resources.ResourceProvider import org.apache.logging.log4j.LogManager -import org.joml.Matrix4f import org.lwjgl.opengl.GL11.GL_ALWAYS import org.lwjgl.opengl.GL11.GL_LESS import ru.dbotthepony.mc.otm.OverdriveThatMatters @@ -92,6 +92,7 @@ fun renderRect( tess.end() } +@OptIn(ExperimentalStdlibApi::class) @Suppress("NAME_SHADOWING") fun renderCheckerboard( matrix: Matrix4f, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/BankRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/BankRenderer.kt index 07969b2b0..6ff7770fa 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/BankRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/BankRenderer.kt @@ -17,6 +17,7 @@ import ru.dbotthepony.mc.otm.block.entity.tech.BatteryBankBlockEntity import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.render.sprites.AbstractMatterySprite import ru.dbotthepony.mc.otm.client.render.DynamicBufferSource +import ru.dbotthepony.mc.otm.client.render.translate import ru.dbotthepony.mc.otm.client.screen.widget.MatterGaugePanel import ru.dbotthepony.mc.otm.client.screen.widget.PowerGaugePanel import ru.dbotthepony.mc.otm.core.immutableList diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/BlackHoleRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/BlackHoleRenderer.kt index f47dd49e4..0337a0105 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/BlackHoleRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/BlackHoleRenderer.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.client.render.blockentity import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.* +import com.mojang.math.Matrix4f import net.minecraft.client.Minecraft import net.minecraft.client.renderer.GameRenderer import net.minecraft.client.renderer.MultiBufferSource @@ -9,7 +10,6 @@ import net.minecraft.client.renderer.blockentity.BeaconRenderer import net.minecraft.client.renderer.blockentity.BlockEntityRenderer import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider import net.minecraft.world.phys.Vec3 -import org.joml.Matrix4f import org.lwjgl.opengl.GL30 import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.block.entity.tech.GravitationStabilizerBlockEntity @@ -25,6 +25,7 @@ import ru.dbotthepony.mc.otm.core.math.VECTOR_UP import ru.dbotthepony.mc.otm.core.math.Vector import ru.dbotthepony.mc.otm.core.math.asMutableAngle import ru.dbotthepony.mc.otm.core.math.asVector +import ru.dbotthepony.mc.otm.core.math.length import ru.dbotthepony.mc.otm.core.math.minus import ru.dbotthepony.mc.otm.core.math.rotateAroundAxis import ru.dbotthepony.mc.otm.core.math.times diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/FluidTankRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/FluidTankRenderer.kt index c36fb08dd..03596d20b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/FluidTankRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/FluidTankRenderer.kt @@ -1,7 +1,7 @@ package ru.dbotthepony.mc.otm.client.render.blockentity import com.mojang.blaze3d.vertex.* -import com.mojang.math.Axis +import com.mojang.math.Vector3f import net.minecraft.client.renderer.* import net.minecraft.client.renderer.block.model.ItemTransforms import net.minecraft.client.renderer.blockentity.BlockEntityRenderer @@ -19,7 +19,9 @@ import net.minecraftforge.fluids.capability.IFluidHandler import ru.dbotthepony.mc.otm.block.entity.decorative.FluidTankBlockEntity import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.render.rotateAround +import ru.dbotthepony.mc.otm.client.render.translate import ru.dbotthepony.mc.otm.core.ifPresentK +import ru.dbotthepony.mc.otm.core.math.PIf import ru.dbotthepony.mc.otm.core.math.RGBAColor import ru.dbotthepony.mc.otm.core.math.linearInterpolation import ru.dbotthepony.mc.otm.registry.MBlocks @@ -107,7 +109,7 @@ class FluidTankRenderer(private val context: BlockEntityRendererProvider.Context poseStack.pushPose() poseStack.translate(0.5, 0.0, 0.5) - poseStack.rotateAround(Axis.YP.rotationDegrees(i * 90.0f), 0.0f, 1.0f, 0.0f) + poseStack.rotateAround(Vector3f.YP, PIf / 2f * i) poseStack.translate(-0.5f, 0f, fluidWidth * .5f) val matrix = poseStack.last().pose() diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/GravitationStabilizerRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/GravitationStabilizerRenderer.kt index 60e1b97f4..8ec57645a 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/GravitationStabilizerRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/GravitationStabilizerRenderer.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.client.render.blockentity import com.mojang.blaze3d.vertex.* +import com.mojang.math.Matrix4f import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.RenderType import net.minecraft.client.renderer.blockentity.BeaconRenderer @@ -9,7 +10,6 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRenderer import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider import net.minecraft.client.renderer.texture.OverlayTexture import net.minecraft.core.Direction -import org.joml.Matrix4f import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.block.BlackHoleBlock import ru.dbotthepony.mc.otm.block.entity.tech.GravitationStabilizerBlockEntity diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterReconstructorRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterReconstructorRenderer.kt index df2c300b3..d309179e7 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterReconstructorRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterReconstructorRenderer.kt @@ -1,7 +1,7 @@ package ru.dbotthepony.mc.otm.client.render.blockentity import com.mojang.blaze3d.vertex.PoseStack -import com.mojang.math.Axis +import com.mojang.math.Vector3f import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.block.model.ItemTransforms import net.minecraft.client.renderer.blockentity.BlockEntityRenderer @@ -29,8 +29,8 @@ class MatterReconstructorRenderer(private val context: BlockEntityRendererProvid pose.translate(0.5, 0.6, 0.5) pose.scale(0.5f, 0.5f, 0.5f) - pose.mulPose(Axis.XP.rotationDegrees(90f)) - pose.mulPose(Axis.ZP.rotationDegrees(tile.blockRotation.back.toYRot())) + pose.mulPose(Vector3f.XP.rotationDegrees(90f)) + pose.mulPose(Vector3f.ZP.rotationDegrees(tile.blockRotation.back.toYRot())) context.itemRenderer.renderStatic(item, ItemTransforms.TransformType.FIXED, packedLight, packedOverlay, pose, DynamicBufferSource.WORLD, tile.blockPos.asLong().toInt()) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterReplicatorRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterReplicatorRenderer.kt index 73bc49d0d..7716f1820 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterReplicatorRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterReplicatorRenderer.kt @@ -4,13 +4,13 @@ import com.mojang.blaze3d.platform.GlStateManager.DestFactor import com.mojang.blaze3d.platform.GlStateManager.SourceFactor import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.math.Vector3f 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.core.particles.DustParticleOptions import net.minecraft.world.level.levelgen.XoroshiroRandomSource -import org.joml.Vector3f import org.lwjgl.opengl.GL14.glBlendColor import ru.dbotthepony.mc.otm.block.entity.WorkerState import ru.dbotthepony.mc.otm.block.entity.matter.MatterReplicatorBlockEntity diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterScannerRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterScannerRenderer.kt index f61b83232..d939223cd 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterScannerRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterScannerRenderer.kt @@ -3,7 +3,7 @@ package ru.dbotthepony.mc.otm.client.render.blockentity import com.mojang.blaze3d.platform.GlStateManager import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.PoseStack -import com.mojang.math.Axis +import com.mojang.math.Vector3f import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.block.model.ItemTransforms import net.minecraft.client.renderer.blockentity.BlockEntityRenderer @@ -36,8 +36,8 @@ class MatterScannerRenderer(private val context: BlockEntityRendererProvider.Con pose.translate(0.5, 0.5, 0.5) pose.scale(0.5f, 0.5f, 0.5f) - pose.mulPose(Axis.XP.rotationDegrees(90f)) - pose.mulPose(Axis.ZP.rotationDegrees(tile.blockRotation.back.toYRot())) + pose.mulPose(Vector3f.XP.rotationDegrees(90f)) + pose.mulPose(Vector3f.ZP.rotationDegrees(tile.blockRotation.back.toYRot())) context.itemRenderer.renderStatic( item, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/entity/PlasmaProjectileRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/entity/PlasmaProjectileRenderer.kt index 926a04f65..9101ece5b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/entity/PlasmaProjectileRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/entity/PlasmaProjectileRenderer.kt @@ -1,7 +1,7 @@ package ru.dbotthepony.mc.otm.client.render.entity import com.mojang.blaze3d.vertex.PoseStack -import com.mojang.math.Axis +import com.mojang.math.Vector3f import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.RenderType import net.minecraft.client.renderer.entity.EntityRenderer @@ -27,7 +27,7 @@ class PlasmaProjectileRenderer(context: EntityRendererProvider.Context) : Entity poseStack.pushPose() poseStack.mulPose(entityRenderDispatcher.cameraOrientation()) - poseStack.mulPose(Axis.YP.rotationDegrees(180f)) + poseStack.mulPose(Vector3f.YP.rotationDegrees(180f)) poseStack.scale(.3f, .3f, .3f) val matrix = poseStack.last().pose() diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/TextInputPanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/TextInputPanel.kt index a18bfcdf9..7109a89e7 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/TextInputPanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/TextInputPanel.kt @@ -12,7 +12,6 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap import net.minecraft.client.gui.screens.Screen import net.minecraft.client.renderer.GameRenderer import net.minecraft.network.chat.Component -import org.joml.Vector2i import ru.dbotthepony.mc.otm.client.render.MGUIGraphics import ru.dbotthepony.mc.otm.client.isCtrlDown import ru.dbotthepony.mc.otm.client.isShiftDown @@ -21,6 +20,7 @@ import ru.dbotthepony.mc.otm.client.playGuiClickSound import ru.dbotthepony.mc.otm.client.render.DynamicBufferSource import ru.dbotthepony.mc.otm.client.render.RenderGravity import ru.dbotthepony.mc.otm.client.render.tesselator +import ru.dbotthepony.mc.otm.client.render.translate import ru.dbotthepony.mc.otm.client.screen.panels.DockProperty import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel import ru.dbotthepony.mc.otm.core.TextComponent @@ -32,6 +32,8 @@ import ru.dbotthepony.mc.otm.milliTime import java.util.function.Predicate import kotlin.math.roundToInt +data class Vector2i(val x: Int, val y: Int) + open class TextInputPanel( screen: S, parent: EditablePanel<*>?, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/UnOverengineering.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/UnOverengineering.kt index 83122b2c1..3abe42d8f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/UnOverengineering.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/UnOverengineering.kt @@ -80,6 +80,3 @@ val Fluid.registryName get() = ForgeRegistries.FLUIDS.getKeyNullable(this) val Block.registryName get() = ForgeRegistries.BLOCKS.getKeyNullable(this) fun FriendlyByteBuf.writeRegistryId(value: Item) = writeRegistryId(ForgeRegistries.ITEMS, value) - -// 1.19.3 lol -inline val SoundEvent.holder get() = ForgeRegistries.SOUND_EVENTS.getHolder(this).orElse(null) ?: throw NoSuchElementException("$this is missing from ${ForgeRegistries.SOUND_EVENTS}") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/math/EuclidMath.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/math/EuclidMath.kt index 2f3602cd2..cac3f59d9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/math/EuclidMath.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/math/EuclidMath.kt @@ -1,24 +1,20 @@ package ru.dbotthepony.mc.otm.core.math import com.mojang.blaze3d.vertex.PoseStack -import it.unimi.dsi.fastutil.ints.IntSpliterators -import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap +import com.mojang.math.Matrix3f +import com.mojang.math.Matrix4f +import com.mojang.math.Quaternion +import com.mojang.math.Vector3f import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.core.Vec3i import net.minecraft.world.phys.Vec3 -import org.joml.AxisAngle4f -import org.joml.Matrix3f -import org.joml.Matrix4f -import org.joml.Quaternionf -import org.joml.Vector3f +import ru.dbotthepony.mc.otm.client.render.translate import ru.dbotthepony.mc.otm.core.collect.filter import ru.dbotthepony.mc.otm.core.collect.flatMap import ru.dbotthepony.mc.otm.core.collect.map -import java.lang.ref.SoftReference -import java.util.stream.Stream -import java.util.stream.StreamSupport import kotlin.math.* +import ru.dbotthepony.mc.otm.core.math.set typealias Vector = Vec3 @@ -45,6 +41,8 @@ fun Vector.asMutableAngle(): MutableAngle { return MutableAngle(asin(norm.y), atan2(norm.x, norm.z)) } +fun Vector3f.length() = sqrt(x() * x() + y() * y() + z() * z()) + fun Vector3f.asAngle(): Angle { val len = length().toDouble() val norm = Vector(x() / len, y() / len, z() / len) @@ -57,20 +55,10 @@ fun Vector3f.asMutableAngle(): MutableAngle { return MutableAngle(asin(norm.y), atan2(norm.x, norm.z)) } -fun Vector3f.rotation(radians: Float): Quaternionf { - return Quaternionf(AxisAngle4f(radians, x, y, z)) -} - -fun Vector3f.rotationDegrees(degrees: Float): Quaternionf { - return rotation(toRadians(degrees)) -} - operator fun Vector3f.unaryMinus(): Vector3f { - return Vector3f(-x, -y, -z) + return Vector3f(-x(), -y(), -z()) } -operator fun Vector3f.times(v: Float): Vector3f = Vector3f(v).mul(v) - operator fun Vector3f.component1() = x() operator fun Vector3f.component2() = y() operator fun Vector3f.component3() = z() @@ -79,6 +67,8 @@ operator fun Vec3i.component1() = x operator fun Vec3i.component2() = y operator fun Vec3i.component3() = z +inline val Vec3i.center get() = Vector(x + 0.5, y + 0.5, z + 0.5) + fun Vec3i.toDoubleVector() = Vector(x.toDouble(), y.toDouble(), z.toDouble()) fun shortestDistanceBetween(a: Collection, b: Collection): Double { @@ -144,14 +134,8 @@ fun Vector.asVector3f(): Vector3f { return Vector3f(x.toFloat(), y.toFloat(), z.toFloat()) } -fun Quaternion(vec: Vector, rotation: Float, isDegrees: Boolean = false): Quaternionf { - // TODO: 1.19.3 - return Quaternionf(AxisAngle4f(if (isDegrees) toRadians(rotation) else rotation, vec.x.toFloat(), vec.y.toFloat(), vec.z.toFloat())) -} - -fun AxisAngle4f(vec: Vector, rotation: Float, isDegrees: Boolean = false): AxisAngle4f { - // TODO: 1.19.3 - return AxisAngle4f(if (isDegrees) toRadians(rotation) else rotation, vec.x.toFloat(), vec.y.toFloat(), vec.z.toFloat()) +fun Quaternion(vec: Vector, rotation: Float, isDegrees: Boolean = false): Quaternion { + return Quaternion(vec.asVector3f(), rotation, isDegrees) } fun Vector(x: Double): Vector { @@ -162,24 +146,17 @@ fun Vector(x: Double, y: Double): Vector { return Vector(x, y, 0.0) } -fun Vector.rotate(q: Quaternionf): Vector { - // TODO: 1.19.3 - val quaternion = Quaternionf(q) - quaternion.mul(rotateAroundThis()) - val quaternion1 = Quaternionf(q) - quaternion1.conjugate() +fun Vector.rotate(q: Quaternion): Vector { + val quaternion = Quaternion(q) + quaternion.mul(Quaternion(x.toFloat(), y.toFloat(), z.toFloat(), 0.0f)) + val quaternion1 = Quaternion(q) + quaternion1.conj() quaternion.mul(quaternion1) - return Vector(quaternion.x.toDouble(), quaternion.y.toDouble(), quaternion.z.toDouble()) + return Vector(quaternion.i().toDouble(), quaternion.j().toDouble(), quaternion.k().toDouble()) } -fun Vector.rotateAroundThis(rotation: Float, isDegrees: Boolean = false): Quaternionf { - // TODO: 1.19.3 - return Quaternionf(AxisAngle4f(if (isDegrees) toRadians(rotation) else rotation, x.toFloat(), y.toFloat(), z.toFloat())) -} - -fun Vector.rotateAroundThis(): Quaternionf { - // TODO: 1.19.3 - return Quaternionf(AxisAngle4f(0f, x.toFloat(), y.toFloat(), z.toFloat())) +fun Vector.rotateAroundThis(rotation: Float, isDegrees: Boolean = false): Quaternion { + return Quaternion(this, rotation, isDegrees) } fun Vector.asMatrix(): Matrix3f { @@ -221,13 +198,13 @@ interface IAngle { val s = sin(roll).toFloat() val c = cos(roll).toFloat() - it[0, 0] = 1f + it.mset(0, 0, 1f) - it[1, 1] = c - it[2, 1] = -s + it.mset(1, 1, c) + it.mset(2, 1, -s) - it[1, 2] = s - it[2, 2] = c + it.mset(1, 2, s) + it.mset(2, 2, c) } } @@ -240,13 +217,13 @@ interface IAngle { val s = sin(pitch).toFloat() val c = cos(pitch).toFloat() - it[0, 0] = c - it[1, 0] = -s + it.mset(0, 0, c) + it.mset(1, 0, -s) - it[0, 1] = s - it[1, 1] = c + it.mset(0, 1, s) + it.mset(1, 1, c) - it[2, 2] = 1f + it.mset(2, 2, 1f) } } @@ -259,13 +236,13 @@ interface IAngle { val s = sin(yaw).toFloat() val c = cos(yaw).toFloat() - it[0, 0,] = c - it[2, 0,] = s + it.mset(0, 0, c) + it.mset(2, 0, s) - it[0, 2,] = -s - it[2, 2,] = c + it.mset(0, 2, -s) + it.mset(2, 2, c) - it[1, 1,] = 1f + it.mset(1, 1, 1f) } } @@ -513,17 +490,17 @@ fun angleDifferenceDeg(angle1: Float, angle2: Float): Float { // 1.19.3 stuff fun PoseStack.rotateY(rotation: Float): PoseStack { - mulPose(Quaternionf(AxisAngle4f(rotation, 0f, 1f, 0f))) + mulPose(Vector3f.YP.rotation(rotation)) return this } fun PoseStack.rotateX(rotation: Float): PoseStack { - mulPose(Quaternionf(AxisAngle4f(rotation, 1f, 0f, 0f))) + mulPose(Vector3f.XP.rotation(rotation)) return this } fun PoseStack.rotateZ(rotation: Float): PoseStack { - mulPose(Quaternionf(AxisAngle4f(rotation, 0f, 0f, 1f))) + mulPose(Vector3f.ZP.rotation(rotation)) return this } @@ -627,17 +604,17 @@ fun PoseStack.rotateWithBlockFacing(rotation: BlockRotation): PoseStack { } fun PoseStack.rotateYDegrees(rotation: Float): PoseStack { - mulPose(Quaternionf(AxisAngle4f(toRadians(rotation), 0f, 1f, 0f))) + mulPose(Vector3f.YP.rotationDegrees(rotation)) return this } fun PoseStack.rotateXDegrees(rotation: Float): PoseStack { - mulPose(Quaternionf(AxisAngle4f(toRadians(rotation), 1f, 0f, 0f))) + mulPose(Vector3f.XP.rotationDegrees(rotation)) return this } fun PoseStack.rotateZDegrees(rotation: Float): PoseStack { - mulPose(Quaternionf(AxisAngle4f(toRadians(rotation), 0f, 0f, 1f))) + mulPose(Vector3f.ZP.rotationDegrees(rotation)) return this } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/math/MatrixExt.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/math/MatrixExt.kt index 11acd5701..e27e741db 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/math/MatrixExt.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/math/MatrixExt.kt @@ -3,20 +3,13 @@ package ru.dbotthepony.mc.otm.core.math -import org.joml.Matrix3f -import org.joml.Matrix4f -import org.joml.Vector3f -import org.joml.Vector4f -import ru.dbotthepony.mc.otm.core.math.IAngle -import ru.dbotthepony.mc.otm.core.math.Vector -import ru.dbotthepony.mc.otm.core.math.asVector3f -import ru.dbotthepony.mc.otm.core.math.rotateAroundThis -import ru.dbotthepony.mc.otm.core.math.rotation -import ru.dbotthepony.mc.otm.core.math.rotationDegrees -import ru.dbotthepony.mc.otm.core.math.unaryMinus +import com.mojang.math.Matrix3f +import com.mojang.math.Matrix4f +import com.mojang.math.Vector3f +import com.mojang.math.Vector4f fun Matrix4f.rotate(angle: IAngle): Matrix4f { - mul(angle.rotationXYZW()) + multiply(angle.rotationXYZW()) return this } @@ -27,56 +20,160 @@ fun Matrix4f.translate(vector: Vector) { fun Matrix4f.rotateAroundPoint(point: Vector, axis: Vector, rotation: Float, isDegrees: Boolean = false) { val p = point.asVector3f() translate(-p) - rotation(axis.rotateAroundThis(rotation, isDegrees)) // TODO: 1.19.3 - translate(p) + multiply(axis.rotateAroundThis(rotation, isDegrees)) + translate(-p) } fun Matrix4f.rotateAroundPoint(point: Vector, axis: Vector3f, rotation: Float, isDegrees: Boolean = false) { val p = point.asVector3f() translate(-p) - rotation(if (isDegrees) axis.rotationDegrees(rotation) else axis.rotation(rotation)) // TODO: 1.19.3 - translate(p) + multiply(if (isDegrees) axis.rotationDegrees(rotation) else axis.rotation(rotation)) + translate(-p) } fun Matrix4f.rotateAroundPoint(point: Vector, rotation: IAngle) { val p = point.asVector3f() translate(-p) - mul(rotation.rotationXYZW()) - translate(p) + multiply(rotation.rotationXYZW()) + translate(-p) } fun Matrix4f.rotateAroundPoint(point: Vector3f, axis: Vector, rotation: Float, isDegrees: Boolean = false) { translate(-point) - rotation(axis.rotateAroundThis(rotation, isDegrees)) // TODO: 1.19.3 - translate(point) + multiply(axis.rotateAroundThis(rotation, isDegrees)) + translate(-point) } fun Matrix4f.rotateAroundPoint(point: Vector3f, rotation: IAngle) { translate(-point) - mul(rotation.rotationXYZW()) - translate(point) + multiply(rotation.rotationXYZW()) + translate(-point) } fun Matrix4f.rotateAroundPoint(point: Vector3f, axis: Vector3f, rotation: Float, isDegrees: Boolean = false) { translate(-point) - rotation(if (isDegrees) axis.rotationDegrees(rotation) else axis.rotation(rotation)) // TODO: 1.19.3 - translate(point) + multiply(if (isDegrees) axis.rotationDegrees(rotation) else axis.rotation(rotation)) + translate(-point) +} + +// 1.19.3 <-> 1.19.2 behavior +// mojang decided it is a good idea to make their matrices row-major +// when basically everyone else (well, aside from thing nobody uses, what is it called, uuuuuuuugh directx i think) +// uses column-major matrices +operator fun Matrix4f.get(column: Int, row: Int): Float { + require(row in 0 .. 3) { "Invalid row: $row" } + require(column in 0 .. 3) { "Invalid column: $column" } + + return when (val index = row or (column shl 2)) { + 0 or (0 shl 2) -> m00 + 1 or (0 shl 2) -> m10 + 2 or (0 shl 2) -> m20 + 3 or (0 shl 2) -> m30 + 0 or (1 shl 2) -> m01 + 1 or (1 shl 2) -> m11 + 2 or (1 shl 2) -> m21 + 3 or (1 shl 2) -> m31 + 0 or (2 shl 2) -> m02 + 1 or (2 shl 2) -> m12 + 2 or (2 shl 2) -> m22 + 3 or (2 shl 2) -> m32 + 0 or (3 shl 2) -> m03 + 1 or (3 shl 2) -> m13 + 2 or (3 shl 2) -> m23 + 3 or (3 shl 2) -> m33 + else -> throw IllegalStateException("$index") + } +} + +operator fun Matrix4f.set(column: Int, row: Int, value: Float) { + require(row in 0 .. 3) { "Invalid row: $row" } + require(column in 0 .. 3) { "Invalid column: $column" } + + when (val index = row or (column shl 2)) { + 0 or (0 shl 2) -> m00 = value + 1 or (0 shl 2) -> m10 = value + 2 or (0 shl 2) -> m20 = value + 3 or (0 shl 2) -> m30 = value + 0 or (1 shl 2) -> m01 = value + 1 or (1 shl 2) -> m11 = value + 2 or (1 shl 2) -> m21 = value + 3 or (1 shl 2) -> m31 = value + 0 or (2 shl 2) -> m02 = value + 1 or (2 shl 2) -> m12 = value + 2 or (2 shl 2) -> m22 = value + 3 or (2 shl 2) -> m32 = value + 0 or (3 shl 2) -> m03 = value + 1 or (3 shl 2) -> m13 = value + 2 or (3 shl 2) -> m23 = value + 3 or (3 shl 2) -> m33 = value + else -> throw IllegalStateException("$index") + } +} + +operator fun Matrix3f.get(column: Int, row: Int): Float { + require(row in 0 .. 2) { "Invalid row: $row" } + require(column in 0 .. 2) { "Invalid column: $column" } + + return when (val index = row or (column shl 2)) { + 0 or (0 shl 2) -> m00 + 1 or (0 shl 2) -> m10 + 2 or (0 shl 2) -> m20 + 0 or (1 shl 2) -> m01 + 1 or (1 shl 2) -> m11 + 2 or (1 shl 2) -> m21 + 0 or (2 shl 2) -> m02 + 1 or (2 shl 2) -> m12 + 2 or (2 shl 2) -> m22 + else -> throw IllegalStateException("$index") + } +} + +fun Matrix3f.mset(column: Int, row: Int, value: Float) { + require(row in 0 .. 2) { "Invalid row: $row" } + require(column in 0 .. 2) { "Invalid column: $column" } + + when (val index = row or (column shl 2)) { + 0 or (0 shl 2) -> m00 = value + 1 or (0 shl 2) -> m10 = value + 2 or (0 shl 2) -> m20 = value + 0 or (1 shl 2) -> m01 = value + 1 or (1 shl 2) -> m11 = value + 2 or (1 shl 2) -> m21 = value + 0 or (2 shl 2) -> m02 = value + 1 or (2 shl 2) -> m12 = value + 2 or (2 shl 2) -> m22 = value + else -> throw IllegalStateException("$index") + } +} + +fun Matrix4f.identity() = setIdentity() +fun Matrix3f.identity() = setIdentity() + +fun Matrix4f.identityFast() { + m00 = 1.0F + m11 = 1.0F + m22 = 1.0F + m33 = 1.0F +} + +fun Matrix3f.identityFast() { + m00 = 1.0F + m11 = 1.0F + m22 = 1.0F } fun Matrix3f.toMatrix4f(): Matrix4f { val result = Matrix4f() - result.zero() - - result.m00(this.m00) - result.m10(this.m10) - result.m20(this.m20) - result.m01(this.m01) - result.m11(this.m11) - result.m21(this.m21) - result.m02(this.m02) - result.m12(this.m12) - result.m22(this.m22) + result.m00 = this.m00 + result.m10 = this.m10 + result.m20 = this.m20 + result.m01 = this.m01 + result.m11 = this.m11 + result.m21 = this.m21 + result.m02 = this.m02 + result.m12 = this.m12 + result.m22 = this.m22 return result } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/tool/ExplosiveHammerItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/tool/ExplosiveHammerItem.kt index ad892eec5..16859271b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/tool/ExplosiveHammerItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/tool/ExplosiveHammerItem.kt @@ -91,7 +91,7 @@ class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1) val (ex, ey, ez) = Vector.atCenterOf(player.blockPosition()) - val exp = Explosion(player.level, player, ex, ey, ez, 1f, false, if (ToolsConfig.ExplosiveHammer.EXPLOSION_DAMAGE_BLOCKS) Explosion.BlockInteraction.DESTROY_WITH_DECAY else Explosion.BlockInteraction.KEEP) + val exp = Explosion(player.level, player, ex, ey, ez, 1f, false, if (ToolsConfig.ExplosiveHammer.EXPLOSION_DAMAGE_BLOCKS) Explosion.BlockInteraction.BREAK else Explosion.BlockInteraction.NONE) exp.explode() exp.finalizeExplosion(true) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterDataProvider.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterDataProvider.kt index a49348573..a653cd1ec 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterDataProvider.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterDataProvider.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.matter import com.mojang.datafixers.util.Either import net.minecraft.data.CachedOutput +import net.minecraft.data.DataGenerator import net.minecraft.data.DataProvider import net.minecraft.resources.ResourceLocation import net.minecraft.tags.TagKey @@ -21,17 +22,17 @@ import kotlin.collections.LinkedHashMap @Suppress("FunctionName", "unused") open class MatterDataProvider(val modid: String? = null) : DataProvider { - var pathProvider: PackOutput.PathProvider by WriteOnce("You need to call bindPackOutput before registering this data provider") + var pathProvider: DataGenerator.PathProvider by WriteOnce("You need to call bindPackOutput before registering this data provider") private set - constructor(output: PackOutput, modid: String? = null) : this(modid) { + constructor(output: DataGenerator, modid: String? = null) : this(modid) { bindPackOutput(output) } - constructor(event: GatherDataEvent) : this(event.generator.packOutput, event.modContainer.namespace) + constructor(event: GatherDataEvent) : this(event.generator, event.modContainer.namespace) - fun bindPackOutput(output: PackOutput) { - pathProvider = output.createPathProvider(PackOutput.Target.DATA_PACK, MatterManager.MATTER_DIRECTORY) + fun bindPackOutput(output: DataGenerator) { + pathProvider = output.createPathProvider(DataGenerator.Target.DATA_PACK, MatterManager.MATTER_DIRECTORY) } protected val actions = LinkedHashMap() @@ -1255,17 +1256,13 @@ open class MatterDataProvider(val modid: String? = null) : DataProvider { protected val added = ArrayList() val addedView: List = Collections.unmodifiableList(added) - final override fun run(output: CachedOutput): CompletableFuture<*> { + final override fun run(output: CachedOutput) { addActions() - val promises = ArrayList>() - for ((key, value) in actions) { - promises.add(DataProvider.saveStable(output, AbstractRegistryAction.CODEC.toJsonStrict(value), pathProvider.json(key))) + DataProvider.saveStable(output, AbstractRegistryAction.CODEC.toJsonStrict(value), pathProvider.json(key)) added.add(value) } - - return CompletableFuture.allOf(*promises.toTypedArray()) } override fun getName(): String { diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index cdac62ced..724353f64 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -39,7 +39,7 @@ public net.minecraft.client.gui.GuiComponent m_93179_(Lcom/mojang/blaze3d/vertex public net.minecraft.world.item.BlockItem f_150696_ # BLOCK_ENTITY_TAG -public net.minecraft.client.gui.screens.InBedChatScreen f_263129_ # leaveBedButton +public net.minecraft.client.gui.screens.InBedChatScreen f_242488_ # leaveBedButton public net.minecraft.world.inventory.AbstractContainerMenu f_182405_ # stateId @@ -57,6 +57,33 @@ protected net.minecraft.client.resources.TextureAtlasHolder f_118884_ # textureA public net.minecraft.client.renderer.RenderStateShard f_110133_ # name +public com.mojang.math.Matrix4f f_27603_ # m00 +public com.mojang.math.Matrix4f f_27604_ # m01 +public com.mojang.math.Matrix4f f_27605_ # m02 +public com.mojang.math.Matrix4f f_27606_ # m03 +public com.mojang.math.Matrix4f f_27607_ # m10 +public com.mojang.math.Matrix4f f_27608_ # m11 +public com.mojang.math.Matrix4f f_27609_ # m12 +public com.mojang.math.Matrix4f f_27610_ # m13 +public com.mojang.math.Matrix4f f_27611_ # m20 +public com.mojang.math.Matrix4f f_27612_ # m21 +public com.mojang.math.Matrix4f f_27613_ # m22 +public com.mojang.math.Matrix4f f_27614_ # m23 +public com.mojang.math.Matrix4f f_27615_ # m30 +public com.mojang.math.Matrix4f f_27616_ # m31 +public com.mojang.math.Matrix4f f_27617_ # m32 +public com.mojang.math.Matrix4f f_27618_ # m33 + +public com.mojang.math.Matrix3f f_8134_ # m00 +public com.mojang.math.Matrix3f f_8135_ # m01 +public com.mojang.math.Matrix3f f_8136_ # m02 +public com.mojang.math.Matrix3f f_8137_ # m10 +public com.mojang.math.Matrix3f f_8138_ # m11 +public com.mojang.math.Matrix3f f_8139_ # m12 +public com.mojang.math.Matrix3f f_8140_ # m20 +public com.mojang.math.Matrix3f f_8141_ # m21 +public com.mojang.math.Matrix3f f_8142_ # m22 + public-f net.minecraft.world.inventory.Slot f_40220_ # x public-f net.minecraft.world.inventory.Slot f_40221_ # y