From 4b581016757f32763b6dcdac4407e524b4debdd5 Mon Sep 17 00:00:00 2001 From: AlphaMode Date: Sun, 6 Nov 2022 22:49:37 -0600 Subject: [PATCH 01/30] 1.19 --- common/build.gradle | 5 +++ .../mod/mixin/client/MixinMinecraft.java | 6 +-- .../MixinClientPacketListener.java | 15 ++++--- .../mixin/client/world/MixinClientLevel.java | 13 +++--- .../mod/mixin/entity/MixinEntity.java | 4 +- .../feature/entity_collision/MixinEntity.java | 4 +- .../LavaFluidMixin.java | 4 +- .../client/MixinSimpleSoundInstance.java | 3 +- .../MixinLevelRendererVanilla.java | 9 +---- .../mod/mixin/server/MixinPlayerList.java | 12 +++--- .../mixin/server/command/MixinCommands.java | 5 ++- .../MixinServerGamePacketListenerImpl.java | 5 +-- .../network/MixinServerPlayerGameMode.java | 24 +++++------ .../world/MixinChunkMap$TrackedEntity.java | 9 ++--- .../mod/mixin/server/world/MixinChunkMap.java | 40 ++++++++++--------- .../client/audio/SimpleSoundInstanceOnShip.kt | 16 +++++--- .../mod/common/item/ShipAssemblerItem.kt | 7 ++-- .../mod/common/item/ShipCreatorItem.kt | 7 ++-- .../mod/compat/clothconfig/VSClothConfig.kt | 15 +++---- fabric/build.gradle | 4 +- .../mixin/world/level/block/FireMixin.java | 13 +++--- fabric/src/main/resources/fabric.mod.json | 4 +- .../mixin/world/level/block/FireMixin.java | 15 +++---- gradle.properties | 14 ++++--- quilt/build.gradle | 4 +- .../mixin/world/level/block/FireMixin.java | 13 +++--- quilt/src/main/resources/quilt.mod.json | 4 +- 27 files changed, 144 insertions(+), 130 deletions(-) diff --git a/common/build.gradle b/common/build.gradle index ddd935ae2..c43a73967 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -28,6 +28,11 @@ loom { accessWidenerPath = file("src/main/resources/valkyrienskies-common.accesswidener") } +tasks.withType(JavaCompile).configureEach { + // Minecraft 1.18 (1.18-pre2) upwards uses Java 17. + it.options.release = 17 +} + jar { // Exclude dummy Optifine classes exclude "net/optifine/**" diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/client/MixinMinecraft.java b/common/src/main/java/org/valkyrienskies/mod/mixin/client/MixinMinecraft.java index f6e09577e..bab7389e2 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/client/MixinMinecraft.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/client/MixinMinecraft.java @@ -62,15 +62,15 @@ public abstract class MixinMinecraft @Redirect( at = @At( value = "INVOKE", - target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;useItemOn(Lnet/minecraft/client/player/LocalPlayer;Lnet/minecraft/client/multiplayer/ClientLevel;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/phys/BlockHitResult;)Lnet/minecraft/world/InteractionResult;" + target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;useItemOn(Lnet/minecraft/client/player/LocalPlayer;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/phys/BlockHitResult;)Lnet/minecraft/world/InteractionResult;" ), method = "startUseItem" ) private InteractionResult useOriginalCrosshairForBlockPlacement(final MultiPlayerGameMode instance, - final LocalPlayer localPlayer, final ClientLevel clientLevel, final InteractionHand interactionHand, + final LocalPlayer localPlayer, final InteractionHand interactionHand, final BlockHitResult blockHitResult) { - return instance.useItemOn(localPlayer, clientLevel, interactionHand, + return instance.useItemOn(localPlayer, interactionHand, (BlockHitResult) this.originalCrosshairTarget); } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/client/multiplayer/MixinClientPacketListener.java b/common/src/main/java/org/valkyrienskies/mod/mixin/client/multiplayer/MixinClientPacketListener.java index 21b3249ca..920e336f9 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/client/multiplayer/MixinClientPacketListener.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/client/multiplayer/MixinClientPacketListener.java @@ -4,7 +4,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; import net.minecraft.network.protocol.game.ClientboundLoginPacket; import net.minecraft.world.entity.Entity; @@ -25,10 +25,9 @@ public class MixinClientPacketListener { @Inject(method = "handleLogin", at = @At("TAIL")) public void afterLogin(final ClientboundLoginPacket packet, final CallbackInfo ci) { - Minecraft.getInstance().player.sendMessage( - new TextComponent("You are using an ALPHA version of Valkyrien Skies 2, use at your own risk!").withStyle( - ChatFormatting.RED, ChatFormatting.BOLD), - null); + Minecraft.getInstance().player.sendSystemMessage( + Component.literal("You are using an ALPHA version of Valkyrien Skies 2, use at your own risk!").withStyle( + ChatFormatting.RED, ChatFormatting.BOLD)); } @Inject( @@ -58,10 +57,10 @@ private void handleShipMountingEntity(final ClientboundAddEntityPacket packet, f final double f = packet.getZ(); final Entity entity = ValkyrienSkiesMod.SHIP_MOUNTING_ENTITY_TYPE.create(level); final int i = packet.getId(); - entity.setPacketCoordinates(d, e, f); + entity.syncPacketPositionCodec(d, e, f); entity.moveTo(d, e, f); - entity.setXRot((float) (packet.getxRot() * 360) / 256.0f); - entity.setYRot((float) (packet.getyRot() * 360) / 256.0f); + entity.setXRot((packet.getXRot() * 360) / 256.0f); + entity.setYRot((packet.getYRot() * 360) / 256.0f); entity.setId(i); entity.setUUID(packet.getUUID()); this.level.putNonPlayerEntity(i, entity); diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/client/world/MixinClientLevel.java b/common/src/main/java/org/valkyrienskies/mod/mixin/client/world/MixinClientLevel.java index 8b50bad39..7893adf08 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/client/world/MixinClientLevel.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/client/world/MixinClientLevel.java @@ -1,6 +1,5 @@ package org.valkyrienskies.mod.mixin.client.world; -import java.util.Random; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.resources.sounds.SimpleSoundInstance; @@ -11,6 +10,7 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.GameType; import net.minecraft.world.level.block.Blocks; @@ -41,7 +41,7 @@ @Mixin(ClientLevel.class) public abstract class MixinClientLevel implements IShipObjectWorldClientProvider { @Unique - private final Random vsRandom = new Random(); + private final RandomSource vsRandom = RandomSource.create(); @Shadow @Final @@ -187,17 +187,18 @@ private void animateTickVS( value = "NEW", target = "net/minecraft/client/resources/sounds/SimpleSoundInstance" ), - method = "playLocalSound(DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V" + method = "playSound(DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZJ)V" ) private SimpleSoundInstance redirectNewSoundInstance(final SoundEvent soundEvent, final SoundSource soundSource, - final float volume, final float pitch, final double x, final double y, final double z) { + final float volume, final float pitch, final RandomSource randomSource, final double x, final double y, + final double z) { final Ship ship = VSGameUtilsKt.getShipManagingPos(ClientLevel.class.cast(this), x, y, z); if (ship != null) { - return new SimpleSoundInstanceOnShip(soundEvent, soundSource, volume, pitch, x, y, z, + return new SimpleSoundInstanceOnShip(soundEvent, soundSource, volume, pitch, randomSource, x, y, z, ship); } - return new SimpleSoundInstance(soundEvent, soundSource, volume, pitch, x, y, z); + return new SimpleSoundInstance(soundEvent, soundSource, volume, pitch, randomSource, x, y, z); } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/entity/MixinEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/entity/MixinEntity.java index a5e1d892a..7c8e4a11a 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/entity/MixinEntity.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/entity/MixinEntity.java @@ -2,12 +2,12 @@ import static org.valkyrienskies.mod.common.util.VectorConversionsMCKt.toJOML; -import java.util.Random; import net.minecraft.CrashReport; import net.minecraft.CrashReportCategory; import net.minecraft.ReportedException; import net.minecraft.core.BlockPos; import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.level.ClipContext; @@ -212,7 +212,7 @@ public void positionRider(final Entity instance, final Entity passengerI, final @Shadow @Final - protected Random random; + protected RandomSource random; @Shadow public abstract float getEyeHeight(); diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_collision/MixinEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_collision/MixinEntity.java index 6eae3c0e0..cef4699ee 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_collision/MixinEntity.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_collision/MixinEntity.java @@ -1,9 +1,9 @@ package org.valkyrienskies.mod.mixin.feature.entity_collision; -import java.util.Random; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.BlockParticleOption; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.util.RandomSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.entity.MoverType; @@ -245,7 +245,7 @@ private void preSpawnSprintParticle(final CallbackInfo ci) { @Shadow @Final - protected Random random; + protected RandomSource random; @Shadow private EntityDimensions dimensions; diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/fire_between_ship_and_world/LavaFluidMixin.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/fire_between_ship_and_world/LavaFluidMixin.java index b77ae5300..212503680 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/fire_between_ship_and_world/LavaFluidMixin.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/fire_between_ship_and_world/LavaFluidMixin.java @@ -1,7 +1,7 @@ package org.valkyrienskies.mod.mixin.feature.fire_between_ship_and_world; -import java.util.Random; import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.Level; import net.minecraft.world.level.material.FlowingFluid; import net.minecraft.world.level.material.FluidState; @@ -19,7 +19,7 @@ public abstract class LavaFluidMixin extends FlowingFluid { private boolean isModifyingFireTick = false; @Inject(method = "randomTick", at = @At("TAIL")) - public void fireTickMixin(final Level level, final BlockPos pos, final FluidState state, final Random random, + public void fireTickMixin(final Level level, final BlockPos pos, final FluidState state, final RandomSource random, final CallbackInfo ci) { if (isModifyingFireTick) { return; diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/sound/client/MixinSimpleSoundInstance.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/sound/client/MixinSimpleSoundInstance.java index 39a276409..b109b72bc 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/sound/client/MixinSimpleSoundInstance.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/sound/client/MixinSimpleSoundInstance.java @@ -27,7 +27,8 @@ private static void forRecord(final SoundEvent sound, final double x, final doub final Ship ship = VSGameUtilsKt.getShipManagingPos(Minecraft.getInstance().level, x, y, z); if (ship != null) { cir.setReturnValue(new SimpleSoundInstanceOnShip( - sound, SoundSource.RECORDS, 4.0F, 1.0F, false, 0, SoundInstance.Attenuation.LINEAR, x, y, z, ship)); + sound, SoundSource.RECORDS, 4.0F, 1.0F, SoundInstance.createUnseededRandom(), false, 0, + SoundInstance.Attenuation.LINEAR, x, y, z, ship)); } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/vanilla_renderer/MixinLevelRendererVanilla.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/vanilla_renderer/MixinLevelRendererVanilla.java index 30c9775b2..7b0401e8c 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/vanilla_renderer/MixinLevelRendererVanilla.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/vanilla_renderer/MixinLevelRendererVanilla.java @@ -244,7 +244,6 @@ private void renderChunkLayerVanilla( RenderSystem.setupShaderLights(shaderInstance); shaderInstance.apply(); final Uniform uniform = shaderInstance.CHUNK_OFFSET; - boolean bl2 = false; while (bl ? objectListIterator.hasNext() : objectListIterator.hasPrevious()) { final RenderChunkInfo renderChunkInfo2 = bl ? (RenderChunkInfo) objectListIterator.next() : (RenderChunkInfo) objectListIterator.previous(); @@ -262,18 +261,14 @@ private void renderChunkLayerVanilla( (float) ((double) blockPos.getZ() - center.z())); uniform.upload(); } - vertexBuffer.drawChunkLayer(); - bl2 = true; + vertexBuffer.bind(); + vertexBuffer.draw(); } if (uniform != null) { uniform.set(Vector3f.ZERO); } shaderInstance.clear(); - if (bl2) { - vertexFormat.clearBufferState(); - } VertexBuffer.unbind(); - VertexBuffer.unbindVertexArray(); this.minecraft.getProfiler().pop(); renderType.clearRenderState(); } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinPlayerList.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinPlayerList.java index af59c186a..fe62e56ee 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinPlayerList.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinPlayerList.java @@ -3,7 +3,7 @@ import java.util.List; import net.minecraft.ChatFormatting; import net.minecraft.network.Connection; -import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.resources.ResourceKey; import net.minecraft.server.MinecraftServer; @@ -47,11 +47,11 @@ public abstract void broadcast(@Nullable Player player, double x, double y, doub private void afterPlayerJoin(final Connection netManager, final ServerPlayer player, final CallbackInfo ci) { VSCoreHooksKt.getCoreHooks().afterClientJoinServer(VSGameUtilsKt.getPlayerWrapper(player)); if (!KrunchSupport.INSTANCE.isKrunchSupported()) { - player.sendMessage( - new TextComponent( - "VS 2 physics are disabled on this server, because Krunch is not supported on this server! Currently only x86-64 Windows and Linux platforms are supported.").withStyle( - ChatFormatting.RED, ChatFormatting.BOLD), - null); + player.sendSystemMessage( + Component.literal( + "VS 2 physics are disabled on this server, because Krunch is not supported on this server! Currently only x86-64 Windows and Linux platforms are supported.") + .withStyle( + ChatFormatting.RED, ChatFormatting.BOLD)); } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/command/MixinCommands.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/command/MixinCommands.java index 167d70f97..720e37cb4 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/command/MixinCommands.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/command/MixinCommands.java @@ -1,8 +1,10 @@ package org.valkyrienskies.mod.mixin.server.command; import com.mojang.brigadier.CommandDispatcher; +import net.minecraft.commands.CommandBuildContext; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; +import net.minecraft.commands.Commands.CommandSelection; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -21,7 +23,8 @@ public class MixinCommands { at = @At("TAIL"), method = "" ) - public void onInit(final Commands.CommandSelection registrationEnvironment, final CallbackInfo ci) { + public void onInit( + final CommandSelection commandSelection, final CommandBuildContext commandBuildContext, final CallbackInfo ci) { } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java index bcab5ad17..d4a772cd9 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java @@ -11,7 +11,6 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayerGameMode; import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraft.world.level.ChunkPos; import net.minecraft.world.phys.Vec3; import org.joml.Vector3d; import org.spongepowered.asm.mixin.Final; @@ -65,11 +64,11 @@ private Vec3 skipDistanceCheck2(final Vec3 instance, final Vec3 vec3) { @Redirect( at = @At( value = "INVOKE", - target = "Lnet/minecraft/world/level/ChunkPos;getChessboardDistance(Lnet/minecraft/world/level/ChunkPos;)I" + target = "Lnet/minecraft/world/phys/Vec3;distanceToSqr(Lnet/minecraft/world/phys/Vec3;)D" ), method = "handleUseItemOn" ) - private int skipDistanceCheck1(final ChunkPos instance, final ChunkPos chunkPos) { + private double skipDistanceCheck1(final Vec3 instance, final Vec3 vec3) { return 0; } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerPlayerGameMode.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerPlayerGameMode.java index 1b8d1017b..6f350f158 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerPlayerGameMode.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerPlayerGameMode.java @@ -1,16 +1,16 @@ package org.valkyrienskies.mod.mixin.server.network; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.protocol.game.ServerboundPlayerActionPacket; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayerGameMode; +import net.minecraft.world.phys.Vec3; import org.joml.Vector3d; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.Redirect; import org.valkyrienskies.mod.common.VSGameUtilsKt; import org.valkyrienskies.mod.common.config.VSGameConfig; import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; @@ -18,29 +18,29 @@ @Mixin(ServerPlayerGameMode.class) public class MixinServerPlayerGameMode { + @Final @Shadow - public ServerPlayer player; + protected ServerPlayer player; @Shadow - public ServerLevel level; + protected ServerLevel level; /** * Includes ships in server-side distance check when player breaks a block. */ - @ModifyVariable( + @Redirect( method = "handleBlockBreakAction", - at = @At("STORE"), - index = 11 + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/phys/Vec3;distanceToSqr(Lnet/minecraft/world/phys/Vec3;)D") ) - public double handleBlockBreakAction(final double g, final BlockPos pos, - final ServerboundPlayerActionPacket.Action action, - final Direction direction, final int worldHeight) { + public double handleBlockBreakAction(final Vec3 instance, final Vec3 vec3) { + final BlockPos pos = new BlockPos(vec3.subtract(0.5, 0.5, 0.5)); if (VSGameConfig.SERVER.getEnableInteractDistanceChecks()) { final Vector3d blockCenter = VectorConversionsMCKt.toJOMLD(pos).add(0.5, 0.5, 0.5); return VSGameUtilsKt.getWorldCoordinates(level, pos, blockCenter) .distanceSquared(player.getX(), player.getY() + 1.5, player.getZ()); } else { - return 0; + return instance.distanceToSqr(vec3); } } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap$TrackedEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap$TrackedEntity.java index 947ddeb42..dc0694f16 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap$TrackedEntity.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap$TrackedEntity.java @@ -1,7 +1,6 @@ package org.valkyrienskies.mod.mixin.server.world; import net.minecraft.server.level.ChunkMap; -import net.minecraft.server.level.ServerEntity; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.Vec3; @@ -28,15 +27,15 @@ public class MixinChunkMap$TrackedEntity { // Changes entity position for tracking into world space if needed @Redirect(method = "updatePlayer", at = @At(value = "INVOKE", - target = "Lnet/minecraft/server/level/ServerEntity;sentPos()Lnet/minecraft/world/phys/Vec3;")) - Vec3 includeShips(final ServerEntity instance) { - final Vector3d pos = VectorConversionsMCKt.toJOML(instance.sentPos()); + target = "Lnet/minecraft/world/entity/Entity;position()Lnet/minecraft/world/phys/Vec3;")) + Vec3 includeShips(final Entity instance) { + final Vector3d pos = VectorConversionsMCKt.toJOML(instance.position()); final Ship ship = inCallShip = VSGameUtilsKt.getShipObjectManagingPos(this.entity.level, pos); if (ship != null) { return VectorConversionsMCKt.toMinecraft(ship.getShipTransform() .getShipToWorldMatrix().transformPosition(pos)); } else { - return instance.sentPos(); + return instance.position(); } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap.java index edc70fdaa..04b861587 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap.java @@ -7,7 +7,9 @@ import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.concurrent.CompletableFuture; import java.util.function.Supplier; +import net.minecraft.Util; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ChunkMap; @@ -41,6 +43,9 @@ public abstract class MixinChunkMap { @Final private Supplier overworldDataStorage; + @Shadow + protected abstract CompoundTag upgradeChunkTag(CompoundTag compoundTag); + /** * Force the game to generate empty chunks in the shipyard. * @@ -50,26 +55,25 @@ public abstract class MixinChunkMap { * @author Tri0de */ @Inject(method = "readChunk", at = @At("HEAD"), cancellable = true) - private void preReadChunk(final ChunkPos chunkPos, final CallbackInfoReturnable cir) + private void preReadChunk(final ChunkPos chunkPos, + final CallbackInfoReturnable>> cir) throws IOException { final ChunkMap self = ChunkMap.class.cast(this); - final CompoundTag compoundTag = self.read(chunkPos); - final CompoundTag originalToReturn = compoundTag == null ? null : - self.upgradeChunkTag(this.level.dimension(), this.overworldDataStorage, compoundTag, Optional.empty()); - - if (originalToReturn == null) { - if (ChunkAllocator.isChunkInShipyard(chunkPos.x, chunkPos.z)) { - // The chunk doesn't yet exist and is in the shipyard. Make a new empty chunk - // Generate the chunk to be nothing - final LevelChunk generatedChunk = new LevelChunk(level, - new ProtoChunk(chunkPos, UpgradeData.EMPTY, level, - level.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY), null), null); - // Its wasteful to serialize just for this to be deserialized, but it will work for now. - cir.setReturnValue(ChunkSerializer.write(level, generatedChunk)); + cir.setReturnValue(self.read(chunkPos).thenApplyAsync(compoundTag -> { + if (compoundTag.isEmpty()) { + if (ChunkAllocator.isChunkInShipyard(chunkPos.x, chunkPos.z)) { + // The chunk doesn't yet exist and is in the shipyard. Make a new empty chunk + // Generate the chunk to be nothing + final LevelChunk generatedChunk = new LevelChunk(level, + new ProtoChunk(chunkPos, UpgradeData.EMPTY, level, + level.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY), null), null); + // Its wasteful to serialize just for this to be deserialized, but it will work for now. + return Optional.of(ChunkSerializer.write(level, generatedChunk)); + } } - } else { - cir.setReturnValue(originalToReturn); - } + return compoundTag.map(this::upgradeChunkTag); + }, Util.backgroundExecutor())); + } /** @@ -103,7 +107,7 @@ private void postGetPlayersWatchingChunk(final ChunkPos chunkPos, final boolean } } ); - + cir.setReturnValue(new ArrayList<>(watchingPlayers)); } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/client/audio/SimpleSoundInstanceOnShip.kt b/common/src/main/kotlin/org/valkyrienskies/mod/client/audio/SimpleSoundInstanceOnShip.kt index 0c1c2ac5a..10c69f46e 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/client/audio/SimpleSoundInstanceOnShip.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/client/audio/SimpleSoundInstanceOnShip.kt @@ -6,6 +6,7 @@ import net.minecraft.client.resources.sounds.SoundInstance.Attenuation.LINEAR import net.minecraft.resources.ResourceLocation import net.minecraft.sounds.SoundEvent import net.minecraft.sounds.SoundSource +import net.minecraft.util.RandomSource import org.joml.Vector3d import org.joml.Vector3dc import org.valkyrienskies.core.api.Ship @@ -19,6 +20,7 @@ class SimpleSoundInstanceOnShip : SimpleSoundInstance, VelocityTickableSoundInst soundSource: SoundSource, volume: Float, pitch: Float, + random: RandomSource, looping: Boolean, delay: Int, attenuation: Attenuation, @@ -27,19 +29,21 @@ class SimpleSoundInstanceOnShip : SimpleSoundInstance, VelocityTickableSoundInst z: Double, relative: Boolean, ship: Ship - ) : super(resourceLocation, soundSource, volume, pitch, looping, delay, attenuation, x, y, z, relative) { + ) : super(resourceLocation, soundSource, volume, pitch, random, looping, delay, attenuation, x, y, z, relative) { this.ship = ship } constructor( - soundEvent: SoundEvent, soundSource: SoundSource, f: Float, g: Float, bl: Boolean, i: Int, - attenuation: Attenuation, d: Double, e: Double, h: Double, ship: Ship - ) : this(soundEvent.location, soundSource, f, g, bl, i, attenuation, d, e, h, false, ship) + soundEvent: SoundEvent, soundSource: SoundSource, volume: Float, pitch: Float, random: RandomSource, + looping: Boolean, delay: Int, + attenuation: Attenuation, x: Double, y: Double, z: Double, ship: Ship + ) : this(soundEvent.location, soundSource, volume, pitch, random, looping, delay, attenuation, x, y, z, false, ship) constructor( - soundEvent: SoundEvent, soundSource: SoundSource, f: Float, g: Float, d: Double, e: Double, h: Double, + soundEvent: SoundEvent, soundSource: SoundSource, volume: Float, pitch: Float, random: RandomSource, x: Double, + y: Double, z: Double, ship: Ship - ) : this(soundEvent, soundSource, f, g, false, 0, LINEAR, d, e, h, ship) + ) : this(soundEvent, soundSource, volume, pitch, random, false, 0, LINEAR, x, y, z, ship) private val originalPos = Vector3d(x, y, z) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipAssemblerItem.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipAssemblerItem.kt index c1f3ceb18..90cc2968b 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipAssemblerItem.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipAssemblerItem.kt @@ -1,7 +1,6 @@ package org.valkyrienskies.mod.common.item -import net.minecraft.Util -import net.minecraft.network.chat.TextComponent +import net.minecraft.network.chat.Component import net.minecraft.server.level.ServerLevel import net.minecraft.world.InteractionResult import net.minecraft.world.item.Item @@ -21,7 +20,7 @@ class ShipAssemblerItem(properties: Properties) : Item(properties) { if (!level.isClientSide) { if (ChunkAllocator.isChunkInShipyard(pos.x shr 4, pos.z shr 4)) { - ctx.player?.sendMessage(TextComponent("That chunk is already part of a ship!"), Util.NIL_UUID) + ctx.player?.sendSystemMessage(Component.literal("That chunk is already part of a ship!")) } else if (!blockState.isAir) { // Make a ship val dimensionId = level.dimensionId @@ -34,7 +33,7 @@ class ShipAssemblerItem(properties: Properties) : Item(properties) { val shipData = createNewShipWithBlocks(pos, set, level) - ctx.player?.sendMessage(TextComponent("SHIPIFIED!"), Util.NIL_UUID) + ctx.player?.sendSystemMessage(Component.literal("SHIPIFIED!")) } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipCreatorItem.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipCreatorItem.kt index 787f6f4e5..46d87528f 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipCreatorItem.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipCreatorItem.kt @@ -1,8 +1,7 @@ package org.valkyrienskies.mod.common.item -import net.minecraft.Util import net.minecraft.core.Direction.NORTH -import net.minecraft.network.chat.TextComponent +import net.minecraft.network.chat.Component import net.minecraft.server.level.ServerLevel import net.minecraft.world.InteractionResult import net.minecraft.world.item.Item @@ -29,7 +28,7 @@ class ShipCreatorItem(properties: Properties, private val scale: Double) : Item( if (!level.isClientSide) { if (ChunkAllocator.isChunkInShipyard(blockPos.x shr 4, blockPos.z shr 4)) { - ctx.player?.sendMessage(TextComponent("That chunk is already part of a ship!"), Util.NIL_UUID) + ctx.player?.sendSystemMessage(Component.literal("That chunk is already part of a ship!")) } else if (!blockState.isAir) { // Make a ship val dimensionId = level.dimensionId @@ -40,7 +39,7 @@ class ShipCreatorItem(properties: Properties, private val scale: Double) : Item( // Move the block from the world to a ship level.relocateBlock(blockPos, centerPos, shipData, NORTH) - ctx.player?.sendMessage(TextComponent("SHIPIFIED!"), Util.NIL_UUID) + ctx.player?.sendSystemMessage(Component.literal("SHIPIFIED!")) } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/compat/clothconfig/VSClothConfig.kt b/common/src/main/kotlin/org/valkyrienskies/mod/compat/clothconfig/VSClothConfig.kt index 3287c777a..0ac8353de 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/compat/clothconfig/VSClothConfig.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/compat/clothconfig/VSClothConfig.kt @@ -14,7 +14,6 @@ import net.minecraft.ChatFormatting.GRAY import net.minecraft.ChatFormatting.ITALIC import net.minecraft.client.gui.screens.Screen import net.minecraft.network.chat.Component -import net.minecraft.network.chat.TextComponent import org.valkyrienskies.core.config.SidedVSConfigClass import org.valkyrienskies.core.config.VSConfigClass import org.valkyrienskies.core.util.serialization.VSJacksonUtil @@ -31,7 +30,7 @@ object VSClothConfig { configClasses.forEach { configClass -> configClass.sides.forEach { side -> val name = if (configClasses.size == 1) side.sideName else "${configClass.name} - ${side.sideName}" - addEntriesForConfig(getOrCreateCategory(TextComponent(name)), ::entryBuilder, side) + addEntriesForConfig(getOrCreateCategory(Component.literal(name)), ::entryBuilder, side) } } savingRunnable = Runnable { @@ -83,12 +82,12 @@ object VSClothConfig { val description: String? = schema["description"]?.asText() val title: String = schema["title"]?.asText(null) ?: key.splitCamelCaseAndCapitalize() - val titleComponent = TextComponent(title) + val titleComponent = Component.literal(title) fun getValidationMessageComponent(value: JsonNode): Optional { val errors = validate(value) return if (errors.isNotEmpty()) { - Optional.of(TextComponent(errors.joinToString())) + Optional.of(Component.literal(errors.joinToString())) } else { Optional.empty() } @@ -105,7 +104,7 @@ object VSClothConfig { val enum: ArrayNode? = schema["enum"] as? ArrayNode val type = schema["type"].asText() - val tooltip: TextComponent? = null + val tooltip: Component? = null when { type == "integer" -> { @@ -237,7 +236,7 @@ object VSClothConfig { val newValue = try { mapper.readTree(str) } catch (ex: JsonProcessingException) { - return@setErrorSupplier Optional.of(TextComponent(ex.message)) + return@setErrorSupplier Optional.of(Component.literal(ex.message)) } getValidationMessageComponent(newValue) @@ -248,7 +247,9 @@ object VSClothConfig { } if (description != null) { - entries.add(entryBuilder().startTextDescription(TextComponent(description).withStyle(GRAY, ITALIC)).build()) + entries.add( + entryBuilder().startTextDescription(Component.literal(description).withStyle(GRAY, ITALIC)).build() + ) } return entries diff --git a/fabric/build.gradle b/fabric/build.gradle index c27929fb5..dd8a2c1c8 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -47,11 +47,11 @@ dependencies { // Depend on the fabric kotlin mod modImplementation("net.fabricmc:fabric-language-kotlin:1.8.5+kotlin.1.7.20") - modImplementation("com.terraformersmc:modmenu:3.2.3") + modImplementation("com.terraformersmc:modmenu:${rootProject.modmenu_version}") // Depend on the fabric API modImplementation("net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}") - modImplementation("me.shedaniel.cloth:cloth-config-fabric:6.3.81") + modImplementation("me.shedaniel.cloth:cloth-config-fabric:${rootProject.cloth_config_version}") implementation("org.valkyrienskies.core:vs-core:${rootProject.vs_core_version}") { diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/world/level/block/FireMixin.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/world/level/block/FireMixin.java index 65750f0f0..60d5ca5ee 100644 --- a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/world/level/block/FireMixin.java +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/world/level/block/FireMixin.java @@ -1,8 +1,8 @@ package org.valkyrienskies.mod.fabric.mixin.world.level.block; -import java.util.Random; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; @@ -32,7 +32,8 @@ public abstract class FireMixin { public static IntegerProperty AGE; @Inject(method = "tick", at = @At("TAIL")) - public void fireTickMixin(final BlockState state, final ServerLevel level, final BlockPos pos, final Random random, + public void fireTickMixin(final BlockState state, final ServerLevel level, final BlockPos pos, + final RandomSource random, final CallbackInfo ci) { if (isModifyingFireTick) { return; @@ -74,7 +75,7 @@ public void fireTickMixin(final BlockState state, final ServerLevel level, final } mutableBlockPos.setWithOffset(newPos, l, n, m); - final int p = this.getFireOdds(level, mutableBlockPos); + final int p = this.getIgniteOdds(level, mutableBlockPos); if (p > 0) { int q = (p + 40 + level.getDifficulty().getId() * 7) / (i + 30); if (bl2) { @@ -115,7 +116,7 @@ public void onPlaceMixin(final BlockState state, final Level level, final BlockP } @Shadow - private void checkBurnOut(final Level level, final BlockPos pos, final int chance, final Random random, + private void checkBurnOut(final Level level, final BlockPos pos, final int chance, final RandomSource random, final int age) { } @@ -125,8 +126,8 @@ protected boolean isNearRain(final Level level, final BlockPos pos) { } @Shadow - private int getFireOdds(final LevelReader level, final BlockPos pos) { - return getFireOdds(level, pos); + private int getIgniteOdds(final LevelReader level, final BlockPos pos) { + return getIgniteOdds(level, pos); } @Shadow diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 68d38d0fe..79cb3d4ed 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -29,8 +29,8 @@ ], "accessWidener": "valkyrienskies-common.accesswidener", "depends": { - "fabricloader": ">=0.7.4", - "minecraft": ">=1.16.5" + "fabricloader": ">=0.14.9", + "minecraft": ">=1.19.2" }, "breaks": { } diff --git a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/world/level/block/FireMixin.java b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/world/level/block/FireMixin.java index aa27daafd..9dab46c50 100644 --- a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/world/level/block/FireMixin.java +++ b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/world/level/block/FireMixin.java @@ -1,9 +1,9 @@ package org.valkyrienskies.mod.forge.mixin.world.level.block; -import java.util.Random; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelReader; @@ -29,7 +29,8 @@ public class FireMixin { public static IntegerProperty AGE; @Inject(method = "tick", at = @At("TAIL")) - public void fireTickMixin(final BlockState state, final ServerLevel level, final BlockPos pos, final Random random, + public void fireTickMixin(final BlockState state, final ServerLevel level, final BlockPos pos, + final RandomSource random, final CallbackInfo ci) { if (isModifyingFireTick) { return; @@ -71,7 +72,7 @@ public void fireTickMixin(final BlockState state, final ServerLevel level, final } mutableBlockPos.setWithOffset(newPos, l, n, m); - final int p = this.getFireOdds(level, mutableBlockPos); + final int p = this.getIgniteOdds(level, mutableBlockPos); if (p > 0) { int q = (p + 40 + level.getDifficulty().getId() * 7) / (i + 30); if (bl2) { @@ -110,9 +111,9 @@ public void onPlaceMixin(final BlockState state, final Level level, final BlockP } }); } - + @Shadow - private void tryCatchFire(final Level arg, final BlockPos arg2, final int k, final Random random, final int l, + private void tryCatchFire(final Level arg, final BlockPos arg2, final int k, final RandomSource random, final int l, final Direction face) { } @@ -122,8 +123,8 @@ protected boolean isNearRain(final Level level, final BlockPos pos) { } @Shadow - private int getFireOdds(final LevelReader level, final BlockPos pos) { - return getFireOdds(level, pos); + private int getIgniteOdds(final LevelReader level, final BlockPos pos) { + return getIgniteOdds(level, pos); } @Shadow diff --git a/gradle.properties b/gradle.properties index 41c32e8ca..dc0610465 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,15 +1,17 @@ org.gradle.jvmargs=-Xmx4096M -minecraft_version=1.18.2 +minecraft_version=1.19.2 enabled_platforms=quilt,fabric,forge archives_base_name=valkyrienskies-118 mod_version=2.0.0-alpha4 maven_group=org.valkyrienskies.mod -architectury_version=4.10.86 +architectury_version=6.3.49 fabric_loader_version=0.14.10 -fabric_api_version=0.59.0+1.18.2 -forge_version=1.18.2-40.1.84 -quilt_loader_version=0.17.2-beta.3 -quilt_fabric_api_version=1.0.0-beta.23+0.58.0-1.18.2 +fabric_api_version=0.64.0+1.19.2 +forge_version=1.19.2-43.1.47 +quilt_loader_version=0.17.6 +quilt_fabric_api_version=4.0.0-beta.19+0.64.0-1.19.2 +cloth_config_version=8.2.88 +modmenu_version=4.1.0 # Prevent kotlin from autoincluding stdlib as a dependency, which breaks # gradle's composite builds (includeBuild) for some reason. We'll add it manually kotlin.stdlib.default.dependency=false diff --git a/quilt/build.gradle b/quilt/build.gradle index 7bcf255bd..9a87cf810 100644 --- a/quilt/build.gradle +++ b/quilt/build.gradle @@ -48,13 +48,13 @@ dependencies { common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionQuilt")) { transitive false } - modImplementation("com.terraformersmc:modmenu:3.2.3") { + modImplementation("com.terraformersmc:modmenu:${rootProject.modmenu_version}") { exclude group: "net.fabricmc" exclude group: "net.fabricmc.fabric-api" } // Depend on the fabric API - modImplementation("me.shedaniel.cloth:cloth-config-fabric:6.3.81") { + modImplementation("me.shedaniel.cloth:cloth-config-fabric:${rootProject.cloth_config_version}") { exclude group: "net.fabricmc" exclude group: "net.fabricmc.fabric-api" } diff --git a/quilt/src/main/java/org/valkyrienskies/mod/quilt/mixin/world/level/block/FireMixin.java b/quilt/src/main/java/org/valkyrienskies/mod/quilt/mixin/world/level/block/FireMixin.java index 363ca690f..cde5f6ec5 100644 --- a/quilt/src/main/java/org/valkyrienskies/mod/quilt/mixin/world/level/block/FireMixin.java +++ b/quilt/src/main/java/org/valkyrienskies/mod/quilt/mixin/world/level/block/FireMixin.java @@ -1,8 +1,8 @@ package org.valkyrienskies.mod.quilt.mixin.world.level.block; -import java.util.Random; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; @@ -32,7 +32,8 @@ public abstract class FireMixin { public static IntegerProperty AGE; @Inject(method = "tick", at = @At("TAIL")) - public void fireTickMixin(final BlockState state, final ServerLevel level, final BlockPos pos, final Random random, + public void fireTickMixin(final BlockState state, final ServerLevel level, final BlockPos pos, + final RandomSource random, final CallbackInfo ci) { if (isModifyingFireTick) { return; @@ -74,7 +75,7 @@ public void fireTickMixin(final BlockState state, final ServerLevel level, final } mutableBlockPos.setWithOffset(newPos, l, n, m); - final int p = this.getFireOdds(level, mutableBlockPos); + final int p = this.getIgniteOdds(level, mutableBlockPos); if (p > 0) { int q = (p + 40 + level.getDifficulty().getId() * 7) / (i + 30); if (bl2) { @@ -115,7 +116,7 @@ public void onPlaceMixin(final BlockState state, final Level level, final BlockP } @Shadow - private void checkBurnOut(final Level level, final BlockPos pos, final int chance, final Random random, + private void checkBurnOut(final Level level, final BlockPos pos, final int chance, final RandomSource random, final int age) { } @@ -125,8 +126,8 @@ protected boolean isNearRain(final Level level, final BlockPos pos) { } @Shadow - private int getFireOdds(final LevelReader level, final BlockPos pos) { - return getFireOdds(level, pos); + private int getIgniteOdds(final LevelReader level, final BlockPos pos) { + return getIgniteOdds(level, pos); } @Shadow diff --git a/quilt/src/main/resources/quilt.mod.json b/quilt/src/main/resources/quilt.mod.json index 98024a90f..2f42da189 100644 --- a/quilt/src/main/resources/quilt.mod.json +++ b/quilt/src/main/resources/quilt.mod.json @@ -30,11 +30,11 @@ }, { "id": "quilted_fabric_api", - "versions": ">=1.0.0-" + "versions": ">=4.0.0-" }, { "id": "minecraft", - "versions": ">=1.18.2" + "versions": ">=1.19.2" } ] }, From a925af56c7ed38244a10dc01f67bc795386d194a Mon Sep 17 00:00:00 2001 From: AlphaMode Date: Wed, 30 Nov 2022 00:49:55 -0600 Subject: [PATCH 02/30] update the 1.19.2 --- .../mod/mixin/server/command/MixinCommands.java | 2 ++ .../server/network/MixinServerGamePacketListenerImpl.java | 2 +- fabric/build.gradle | 6 +++--- .../mod/fabric/mixin/world/level/block/FireMixin.java | 1 + 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/command/MixinCommands.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/command/MixinCommands.java index 42abc9254..75c1170ca 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/command/MixinCommands.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/command/MixinCommands.java @@ -1,6 +1,8 @@ package org.valkyrienskies.mod.mixin.server.command; +import net.minecraft.commands.CommandBuildContext; import net.minecraft.commands.Commands; +import net.minecraft.commands.Commands.CommandSelection; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java index 21a9e068f..97c235682 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java @@ -68,7 +68,7 @@ private Vec3 skipDistanceCheck2(final Vec3 instance, final Vec3 vec3) { ), method = "handleUseItemOn" ) - private int skipDistanceCheck(final ChunkPos instance, final ChunkPos chunkPos) { + private double skipDistanceCheck1(final Vec3 instance, final Vec3 vec3) { return 0; } diff --git a/fabric/build.gradle b/fabric/build.gradle index df8dadbaf..b2ed75049 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -43,13 +43,13 @@ dependencies { // Depend on the fabric kotlin mod modImplementation("net.fabricmc:fabric-language-kotlin:1.8.5+kotlin.1.7.20") - modImplementation("curse.maven:sodium-394468:3669187") + modImplementation("curse.maven:sodium-394468:3957319") - modImplementation("com.terraformersmc:modmenu:${rootProject.modmenu_version}") + modImplementation("com.terraformersmc:modmenu:4.1.0") // Depend on the fabric API modImplementation("net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}") - modImplementation("me.shedaniel.cloth:cloth-config-fabric:${rootProject.cloth_config_version}") + modImplementation("me.shedaniel.cloth:cloth-config-fabric:8.2.88") implementation("org.valkyrienskies.core:impl:${rootProject.vs_core_version}") { diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/world/level/block/FireMixin.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/world/level/block/FireMixin.java index 43bd69fb4..7a8f961ce 100644 --- a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/world/level/block/FireMixin.java +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/world/level/block/FireMixin.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelReader; From 5246271eeffe94a0d8c991a19ded47c047469e97 Mon Sep 17 00:00:00 2001 From: AlphaMode Date: Fri, 6 Jan 2023 15:09:17 -0600 Subject: [PATCH 03/30] Upstream from 1.18.2 --- .../client/renderer/MixinGameRenderer.java | 2 +- .../MixinSoundPhysics.java | 2 +- .../MixinServerGamePacketListenerImpl.java | 4 ++-- .../world/MixinChunkMap$TrackedEntity.java | 2 +- .../mixin/world/level/block/FireMixin.java | 2 +- .../mod/forge/common/ValkyrienSkiesModForge.kt | 17 ++++++++--------- vs-core | 2 +- 7 files changed, 15 insertions(+), 16 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinGameRenderer.java b/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinGameRenderer.java index 46f0bbaa6..04543da1a 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinGameRenderer.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinGameRenderer.java @@ -292,7 +292,7 @@ private void setupCameraWithMountedShip(final LevelRenderer instance, final Pose // Use [camera.getPosition()] instead of [vec3] because mounting the player to the ship has changed the camera // position. prepareCullFrustum.call(instance, matrixStack, camera.getPosition(), - this.getProjectionMatrix(Math.max(fov, this.minecraft.options.fov))); + this.getProjectionMatrix(Math.max(fov, this.minecraft.options.fov().get()))); } // endregion } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/sound_physics_remastered/MixinSoundPhysics.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/sound_physics_remastered/MixinSoundPhysics.java index de87e5605..cd1ef96fa 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/sound_physics_remastered/MixinSoundPhysics.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/sound_physics_remastered/MixinSoundPhysics.java @@ -13,7 +13,7 @@ import org.valkyrienskies.mod.common.VSGameUtilsKt; @Pseudo -@Mixin(targets = "com.sonicether.soundphysics.SoundPhysics") +@Mixin(targets = "com.sonicether.soundphysics.SoundPhysics", remap = false) public abstract class MixinSoundPhysics { @Shadow diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java index 839a9f26a..410322d3b 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java @@ -69,8 +69,8 @@ private Vec3 skipDistanceCheck2(final Vec3 instance, final Vec3 vec3, final Oper ), method = "handleUseItemOn" ) - private int skipDistanceCheck(final ChunkPos instance, final ChunkPos chunkPos, - final Operation getChessboardDistance) { + private double skipDistanceCheck(final Vec3 instance, final Vec3 chunkPos, + final Operation getChessboardDistance) { return 0; } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap$TrackedEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap$TrackedEntity.java index 7080884f5..e8b7bc131 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap$TrackedEntity.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap$TrackedEntity.java @@ -29,7 +29,7 @@ public class MixinChunkMap$TrackedEntity { // Changes entity position for tracking into world space if needed @ModifyExpressionValue(method = "updatePlayer", at = @At(value = "INVOKE", - target = "Lnet/minecraft/server/level/ServerEntity;sentPos()Lnet/minecraft/world/phys/Vec3;")) + target = "Lnet/minecraft/world/entity/Entity;position()Lnet/minecraft/world/phys/Vec3;")) Vec3 includeShips(final Vec3 original) { final Vector3d pos = VectorConversionsMCKt.toJOML(original); final Ship ship = inCallShip = VSGameUtilsKt.getShipObjectManagingPos(this.entity.level, pos); diff --git a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/world/level/block/FireMixin.java b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/world/level/block/FireMixin.java index 6f9702762..f0cea23ef 100644 --- a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/world/level/block/FireMixin.java +++ b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/world/level/block/FireMixin.java @@ -124,5 +124,5 @@ private void tryCatchFire(final Level arg, final BlockPos arg2, final int k, fin protected abstract boolean isNearRain(Level level, BlockPos blockPos); @Shadow - protected abstract int getFireOdds(LevelReader levelReader, BlockPos blockPos); + protected abstract int getIgniteOdds(LevelReader levelReader, BlockPos blockPos); } diff --git a/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt b/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt index 4d800dd3a..466361a45 100644 --- a/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt +++ b/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt @@ -8,14 +8,13 @@ import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.Item import net.minecraft.world.item.Item.Properties import net.minecraft.world.level.block.Block -import net.minecraftforge.client.ClientRegistry -import net.minecraftforge.client.ConfigGuiHandler.ConfigGuiFactory +import net.minecraftforge.client.ConfigScreenHandler import net.minecraftforge.client.event.EntityRenderersEvent +import net.minecraftforge.client.event.RegisterKeyMappingsEvent import net.minecraftforge.event.AddReloadListenerEvent import net.minecraftforge.fml.ModLoadingContext import net.minecraftforge.fml.common.Mod import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent import net.minecraftforge.fml.loading.FMLEnvironment import net.minecraftforge.registries.DeferredRegister @@ -40,7 +39,7 @@ import org.valkyrienskies.mod.compat.clothconfig.VSClothConfig class ValkyrienSkiesModForge { private val BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, ValkyrienSkiesMod.MOD_ID) private val ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ValkyrienSkiesMod.MOD_ID) - private val ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITIES, ValkyrienSkiesMod.MOD_ID) + private val ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, ValkyrienSkiesMod.MOD_ID) private val TEST_CHAIR_REGISTRY: RegistryObject private val SHIP_CREATOR_ITEM_REGISTRY: RegistryObject private val SHIP_CREATOR_SMALLER_ITEM_REGISTRY: RegistryObject @@ -65,14 +64,14 @@ class ValkyrienSkiesModForge { BLOCKS.register(modBus) ITEMS.register(modBus) ENTITIES.register(modBus) - modBus.addListener(::clientSetup) + modBus.addListener(::registerKeyBindings) modBus.addListener(::entityRenderers) modBus.addListener(::loadComplete) forgeBus.addListener(::registerResourceManagers) - ModLoadingContext.get().registerExtensionPoint(ConfigGuiFactory::class.java) { - ConfigGuiFactory { _, parent -> + ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory::class.java) { + ConfigScreenHandler.ConfigScreenFactory { _, parent -> VSClothConfig.createConfigScreenFor( parent, VSConfigClass.getRegisteredConfig(VSCoreConfig::class.java), @@ -102,9 +101,9 @@ class ValkyrienSkiesModForge { event.addListener(VSEntityHandlerDataLoader) } - private fun clientSetup(event: FMLClientSetupEvent) { + private fun registerKeyBindings(event: RegisterKeyMappingsEvent) { VSKeyBindings.clientSetup { - ClientRegistry.registerKeyBinding(it) + event.register(it) } } diff --git a/vs-core b/vs-core index 18b1357e9..854f17248 160000 --- a/vs-core +++ b/vs-core @@ -1 +1 @@ -Subproject commit 18b1357e93d7cb5f1ef43d4a6e8ef67cd01fb7ef +Subproject commit 854f1724847e57dd115d1036f9e6ec3793adfbda From 8145558cd740924409264378f7fcc00568b8bc28 Mon Sep 17 00:00:00 2001 From: AlphaMode Date: Sat, 18 Feb 2023 20:40:14 -0600 Subject: [PATCH 04/30] Upstream from 1.18.2 --- common/build.gradle | 2 +- .../feature/world_border/MixinLevel.java | 8 +++++-- .../MixinLevelRendererVanilla.java | 4 ++-- .../mixin/server/world/MixinServerLevel.java | 11 +++++----- fabric/build.gradle | 8 +++---- fabric/gradle.properties | 21 ++++++++----------- forge/gradle.properties | 6 +++--- gradle.properties | 4 ++-- 8 files changed, 32 insertions(+), 32 deletions(-) diff --git a/common/build.gradle b/common/build.gradle index 8e0bb7aa6..ac004efc6 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -23,7 +23,7 @@ dependencies { //Common create compat, //We just use a version from a platform and hope the classes exist on both versions and mixins apply correctly - modCompileOnly("com.jozufozu.flywheel:flywheel-fabric-${minecraft_version}:0.6.8-33") + modCompileOnly("com.jozufozu.flywheel:flywheel-fabric-${minecraft_version}:0.6.8.a-4") } architectury { diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/world_border/MixinLevel.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/world_border/MixinLevel.java index 498e703de..eba9fbc57 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/world_border/MixinLevel.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/world_border/MixinLevel.java @@ -3,8 +3,10 @@ import java.util.function.Supplier; import net.minecraft.core.Holder; import net.minecraft.resources.ResourceKey; +import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.Level; import net.minecraft.world.level.border.WorldBorder; +import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.storage.WritableLevelData; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -26,8 +28,10 @@ public class MixinLevel { method = "" ) private void setWorldBorderLevel( - final WritableLevelData writableLevelData, final ResourceKey resourceKey, final Holder holder, - final Supplier supplier, final boolean bl, final boolean bl2, final long l, final CallbackInfo ci) { + final WritableLevelData writableLevelData, final ResourceKey resourceKey, + final Holder holder, + final Supplier supplier, final boolean bl, final boolean bl2, final long l, final int i, + final CallbackInfo ci) { ((OfLevel) this.worldBorder).setLevel(Level.class.cast(this)); } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/vanilla_renderer/MixinLevelRendererVanilla.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/vanilla_renderer/MixinLevelRendererVanilla.java index 6c9cf355c..409928b32 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/vanilla_renderer/MixinLevelRendererVanilla.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/vanilla_renderer/MixinLevelRendererVanilla.java @@ -262,7 +262,8 @@ private void renderChunkLayer(final RenderType renderType, final PoseStack poseS (float) ((double) blockPos.getZ() - f)); uniform.upload(); } - vertexBuffer.drawChunkLayer(); + vertexBuffer.bind(); + vertexBuffer.draw(); bl2 = true; } if (uniform != null) { @@ -273,7 +274,6 @@ private void renderChunkLayer(final RenderType renderType, final PoseStack poseS vertexFormat.clearBufferState(); } VertexBuffer.unbind(); - VertexBuffer.unbindVertexArray(); this.minecraft.getProfiler().pop(); renderType.clearRenderState(); } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinServerLevel.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinServerLevel.java index 773f161fc..6d5d00ee1 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinServerLevel.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinServerLevel.java @@ -15,7 +15,6 @@ import java.util.function.BooleanSupplier; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; -import net.minecraft.core.Holder; import net.minecraft.core.Position; import net.minecraft.resources.ResourceKey; import net.minecraft.server.MinecraftServer; @@ -23,10 +22,12 @@ import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.progress.ChunkProgressListener; +import net.minecraft.world.level.CustomSpawner; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.storage.LevelStorageSource.LevelStorageAccess; import net.minecraft.world.level.storage.ServerLevelData; import org.jetbrains.annotations.NotNull; @@ -73,9 +74,9 @@ public ServerShipWorldCore getShipObjectWorld() { @Inject(method = "", at = @At("RETURN")) void onInit(final MinecraftServer minecraftServer, final Executor executor, final LevelStorageAccess levelStorageAccess, - final ServerLevelData serverLevelData, final ResourceKey levelId, final Holder holder, - final ChunkProgressListener chunkProgressListener, final ChunkGenerator chunkGenerator, final boolean bl, - final long l, final List list, + final ServerLevelData serverLevelData, final ResourceKey levelId, final LevelStem levelStem, + final ChunkProgressListener chunkProgressListener, final boolean bl, + final long l, final List customSpawners, final boolean bl2, final CallbackInfo ci) { // This only happens when overworld gets loaded on startup, we have a mixin in MixinMinecraftServer for this specific case diff --git a/fabric/build.gradle b/fabric/build.gradle index 656c9ef1c..31b878ab7 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -40,7 +40,7 @@ dependencies { include(modImplementation("net.fabricmc:fabric-language-kotlin:1.8.5+kotlin.1.7.20")) include(modImplementation("me.shedaniel.cloth:cloth-config-fabric:6.3.81")) - modImplementation("curse.maven:sodium-394468:3669187") + modImplementation("curse.maven:sodium-394468:3957319") modImplementation("com.terraformersmc:modmenu:4.1.0") // Depend on the fabric API @@ -60,17 +60,15 @@ dependencies { } // CC Restitched - modImplementation("curse.maven:cc-restitched-462672:3838648") + modImplementation("curse.maven:cc-restitched-462672:3908334") // Create compat modImplementation("com.simibubi.create:create-fabric-${minecraft_version}:${create_version}+${minecraft_version}") { transitive = false } modImplementation("com.jozufozu.flywheel:flywheel-fabric-${minecraft_version}:${flywheel_version}") modImplementation("com.tterrag.registrate_fabric:Registrate:${registrate_version}") - modImplementation("io.github.fabricators_of_create:Porting-Lib:${port_lib_version}+${minecraft_version}") - modImplementation("me.alphamode:ForgeTags:${forge_tags_version}") + modImplementation("io.github.fabricators_of_create.Porting-Lib:porting-lib:${port_lib_version}+${minecraft_version}") modImplementation("net.minecraftforge:forgeconfigapiport-fabric:${forge_config_api_port_version}") modImplementation("com.jamieswhiteshirt:reach-entity-attributes:${reach_entity_attributes_version}") - modImplementation("dev.cafeteria:fake-player-api:${fake_player_api_version}") modImplementation("io.github.tropheusj:milk-lib:${milk_lib_version}") } diff --git a/fabric/gradle.properties b/fabric/gradle.properties index 7973021b4..e90a472b3 100644 --- a/fabric/gradle.properties +++ b/fabric/gradle.properties @@ -1,19 +1,16 @@ loader_platform=Fabric -create_version=0.5.0g-821 +create_version=0.5.0.i-961 # https://github.com/Fabricators-of-Create/Create/blob/mc1.18/fabric/dev/gradle.properties -config_api_id=3671141 -forge_config_api_port_version=3.2.4 -fake_player_api_version=0.3.0 +config_api_id=4143545 +forge_config_api_port_version=4.2.10 # https://maven.tterrag.com/com/jozufozu/flywheel/Flywheel-Fabric -flywheel_version=0.6.8-33 -reach_entity_attributes_version=2.1.1 -registrate_version=MC1.18.2-1.1.6 -forge_tags_version=2.1 -milk_lib_version=0.3.2 -port_lib_version=1.2.677-beta -port_lib_hash=cca931b +flywheel_version=0.6.8.a-4 +reach_entity_attributes_version=2.3.0 +registrate_version=1.1.50-MC1.19.2 +milk_lib_version=1.0.51 +port_lib_version=2.1.722 night_config_core_version=3.6.3 night_config_toml_version=3.6.3 jsr305_version=3.0.2 # https://modrinth.com/mod/no-indium/ -no_indium_version=1.0.2+1.18.2 +no_indium_version=1.1.0+1.19 diff --git a/forge/gradle.properties b/forge/gradle.properties index d19154fc0..04e81539e 100644 --- a/forge/gradle.properties +++ b/forge/gradle.properties @@ -2,6 +2,6 @@ loader_platform=Forge loom.platform=forge kotlin.stdlib.default.dependency=false #Compat -create_version=0.5.0.g-233 -flywheel_version=0.6.8-98 -registrate_version=MC1.18.2-1.1.3 +create_version=0.5.0.i-23 +flywheel_version=0.6.8.a-14 +registrate_version=MC1.19-1.1.5 diff --git a/gradle.properties b/gradle.properties index 6aeee9d10..2405fca76 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,8 +5,8 @@ archives_base_name=valkyrienskies-118 mod_version=2.1.0-beta.10 maven_group=org.valkyrienskies.mod architectury_version=6.3.49 -fabric_loader_version=0.14.10 -fabric_api_version=0.67.0+1.19.2 +fabric_loader_version=0.14.11 +fabric_api_version=0.73.2+1.19.2 forge_version=1.19.2-43.1.47 # Prevent kotlin from autoincluding stdlib as a dependency, which breaks # gradle's composite builds (includeBuild) for some reason. We'll add it manually From 343e4baa83e80eec0642319b5786dedbfb68bb57 Mon Sep 17 00:00:00 2001 From: AlphaMode Date: Sat, 18 Feb 2023 20:49:53 -0600 Subject: [PATCH 05/30] Upstream from 1.18.2 --- .../mod/mixin/server/world/MixinChunkMap.java | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap.java index 3c6105a65..64cbbb6d8 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap.java @@ -1,6 +1,5 @@ package org.valkyrienskies.mod.mixin.server.world; -import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; @@ -9,7 +8,6 @@ import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.function.Supplier; -import net.minecraft.Util; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ChunkMap; @@ -57,28 +55,27 @@ public abstract class MixinChunkMap { */ @Inject(method = "readChunk", at = @At("HEAD"), cancellable = true) private void preReadChunk(final ChunkPos chunkPos, - final CallbackInfoReturnable>> cir) - throws IOException { + final CallbackInfoReturnable>> cir) { final ChunkMap self = ChunkMap.class.cast(this); - final CompoundTag compoundTag = self.read(chunkPos); - final CompoundTag originalToReturn = compoundTag == null ? null : - self.upgradeChunkTag(this.level.dimension(), this.overworldDataStorage, compoundTag, Optional.empty()); - cir.setReturnValue(originalToReturn); - if (originalToReturn == null) { - final ServerShip ship = VSGameUtilsKt.getShipManagingPos(level, chunkPos.x, chunkPos.z); - // If its in a ship and it shouldn't generate chunks OR if there is no ship but its happening in the shipyard - if ((ship == null && VSGameUtilsKt.isChunkInShipyard(level, chunkPos.x, chunkPos.z)) || - (ship != null && !ShipSettingsKt.getSettings(ship).getShouldGenerateChunks())) { - // The chunk doesn't yet exist and is in the shipyard. Make a new empty chunk - // Generate the chunk to be nothing - final LevelChunk generatedChunk = new LevelChunk(level, - new ProtoChunk(chunkPos, UpgradeData.EMPTY, level, - level.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY), null), null); - // Its wasteful to serialize just for this to be deserialized, but it will work for now. - cir.setReturnValue(ChunkSerializer.write(level, generatedChunk)); + cir.setReturnValue(self.read(chunkPos).thenApplyAsync(compoundTag -> { + if (compoundTag.isEmpty()) { + final ServerShip ship = VSGameUtilsKt.getShipManagingPos(level, chunkPos.x, chunkPos.z); + // If its in a ship and it shouldn't generate chunks OR if there is no ship but its happening in the shipyard + if ((ship == null && VSGameUtilsKt.isChunkInShipyard(level, chunkPos.x, chunkPos.z)) || + (ship != null && !ShipSettingsKt.getSettings(ship).getShouldGenerateChunks())) { + // The chunk doesn't yet exist and is in the shipyard. Make a new empty chunk + // Generate the chunk to be nothing + final LevelChunk generatedChunk = new LevelChunk(level, + new ProtoChunk(chunkPos, UpgradeData.EMPTY, level, + level.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY), null), null); + // Its wasteful to serialize just for this to be deserialized, but it will work for now. + return Optional.of(ChunkSerializer.write(level, generatedChunk)); + } } - } + return compoundTag.map(this::upgradeChunkTag); + })); + } /** From c25cc3b898d55be0ef328971f42d3fad7f9b3442 Mon Sep 17 00:00:00 2001 From: AlphaMode Date: Sat, 18 Feb 2023 21:00:32 -0600 Subject: [PATCH 06/30] Fix compile issues with forge --- .../valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt b/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt index fa547f07b..2c0424c63 100644 --- a/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt +++ b/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt @@ -48,7 +48,7 @@ class ValkyrienSkiesModForge { private val BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, ValkyrienSkiesMod.MOD_ID) private val ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ValkyrienSkiesMod.MOD_ID) private val ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, ValkyrienSkiesMod.MOD_ID) - private val BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITIES, ValkyrienSkiesMod.MOD_ID) + private val BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, ValkyrienSkiesMod.MOD_ID) private val TEST_CHAIR_REGISTRY: RegistryObject private val TEST_HINGE_REGISTRY: RegistryObject private val TEST_FLAP_REGISTRY: RegistryObject From ce123cc35ceadb68e3e13fe388c3dee27b778521 Mon Sep 17 00:00:00 2001 From: AlphaMode Date: Sat, 18 Feb 2023 21:13:09 -0600 Subject: [PATCH 07/30] Update base name to valkyrienskies-119 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2405fca76..481fa9863 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ org.gradle.jvmargs=-Xmx4096M minecraft_version=1.19.2 enabled_platforms=quilt,fabric,forge -archives_base_name=valkyrienskies-118 +archives_base_name=valkyrienskies-119 mod_version=2.1.0-beta.10 maven_group=org.valkyrienskies.mod architectury_version=6.3.49 From 6b810caba861b89fd14c868364aa226b6489bc65 Mon Sep 17 00:00:00 2001 From: Rubydesic Date: Wed, 1 Mar 2023 01:18:08 -0500 Subject: [PATCH 08/30] update version number, jvm args --- gradle.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 481fa9863..353e13751 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ -org.gradle.jvmargs=-Xmx4096M +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G minecraft_version=1.19.2 enabled_platforms=quilt,fabric,forge -archives_base_name=valkyrienskies-119 -mod_version=2.1.0-beta.10 +archives_base_name=valkyrienskies-1192 +mod_version=2.2.0-beta.1 maven_group=org.valkyrienskies.mod architectury_version=6.3.49 fabric_loader_version=0.14.11 From b7ee622e99fdae0f85b8da88034d0989c02f892e Mon Sep 17 00:00:00 2001 From: Rubydesic Date: Wed, 1 Mar 2023 02:15:48 -0500 Subject: [PATCH 09/30] ci: update playtest webhook --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7ede9e82c..c3cb2f2b2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -118,7 +118,7 @@ jobs: - discord/status: success_message: ${DISCORD_MSG} success_only: true - webhook: ${VS2_118_WEBHOOK} + webhook: ${VS2_1192_WEBHOOK} # Invoke jobs via workflows # See: https://circleci.com/docs/2.0/configuration-reference/#workflows From 08fd9389b0442a073d5907f7568a779b71ed19e4 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 4 Jun 2023 11:03:24 -0600 Subject: [PATCH 10/30] Got forge to launch (rendering is broken though) --- .../mixin/client/renderer/MixinLevelRenderer.java | 15 ++------------- .../MixinServerGamePacketListenerImpl.java | 2 ++ .../server/network/MixinServerPlayerGameMode.java | 10 ++-------- forge/build.gradle | 2 +- 4 files changed, 7 insertions(+), 22 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinLevelRenderer.java b/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinLevelRenderer.java index 8b10eb471..e8c4d0672 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinLevelRenderer.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinLevelRenderer.java @@ -2,24 +2,13 @@ import static org.valkyrienskies.mod.common.VSClientGameUtils.transformRenderWithShip; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.SheetedDecalTextureGenerator; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix3f; -import com.mojang.math.Matrix4f; -import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.LightTexture; -import net.minecraft.client.renderer.block.BlockRenderDispatcher; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import org.spongepowered.asm.mixin.Mixin; @@ -30,9 +19,7 @@ import org.spongepowered.asm.mixin.injection.ModifyConstant; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.valkyrienskies.core.api.ships.ClientShip; -import org.valkyrienskies.core.api.ships.properties.ShipTransform; import org.valkyrienskies.mod.common.VSGameUtilsKt; -import org.valkyrienskies.mod.mixin.accessors.client.render.OverlayVertexConsumerAccessor; @Mixin(LevelRenderer.class) public abstract class MixinLevelRenderer { @@ -91,6 +78,7 @@ private void preRenderHitOutline(final PoseStack matrixStack, final VertexConsum /** * This mixin makes block damage render on ships. */ + /* @WrapOperation(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/block/BlockRenderDispatcher;renderBreakingTexture(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/BlockAndTintGetter;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;)V")) private void renderBlockDamage(final BlockRenderDispatcher blockRenderManager, final BlockState state, @@ -130,5 +118,6 @@ private void renderBlockDamage(final BlockRenderDispatcher blockRenderManager, f renderBreakingTexture.call(blockRenderManager, state, blockPos, blockRenderWorld, matrix, vertexConsumer); } } + */ } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java index 58b1dd7e7..c1bb157fd 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java @@ -77,6 +77,7 @@ private Vec3 skipDistanceCheck2(final Vec3 instance, final Vec3 vec3, final Oper return VSGameUtilsKt.toWorldCoordinates(player.level, subtract.call(instance, vec3)); } + /* @WrapOperation( at = @At( value = "INVOKE", @@ -88,6 +89,7 @@ private double skipDistanceCheck(final Vec3 instance, final Vec3 chunkPos, final Operation getChessboardDistance) { return 0; } + */ @WrapOperation( method = "handleMovePlayer", diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerPlayerGameMode.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerPlayerGameMode.java index 6f350f158..5c7156eba 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerPlayerGameMode.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerPlayerGameMode.java @@ -1,19 +1,11 @@ package org.valkyrienskies.mod.mixin.server.network; -import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayerGameMode; -import net.minecraft.world.phys.Vec3; -import org.joml.Vector3d; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.valkyrienskies.mod.common.VSGameUtilsKt; -import org.valkyrienskies.mod.common.config.VSGameConfig; -import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; @Mixin(ServerPlayerGameMode.class) public class MixinServerPlayerGameMode { @@ -28,6 +20,7 @@ public class MixinServerPlayerGameMode { /** * Includes ships in server-side distance check when player breaks a block. */ + /* @Redirect( method = "handleBlockBreakAction", at = @At(value = "INVOKE", @@ -43,4 +36,5 @@ public double handleBlockBreakAction(final Vec3 instance, final Vec3 vec3) { return instance.distanceToSqr(vec3); } } + */ } diff --git a/forge/build.gradle b/forge/build.gradle index 7ae7976cb..d368a4672 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -82,7 +82,7 @@ dependencies { forgeRuntimeLibrary('curse.maven:kotlinforforge-351264:3925887') // Cloth for config - include(modImplementation("me.shedaniel.cloth:cloth-config-forge:6.3.81")) + include(modImplementation("me.shedaniel.cloth:cloth-config-forge:8.2.88")) // Shade vs-core implementation("org.valkyrienskies.core:impl:${rootProject.vs_core_version}") From b06745bd59fca3a601dc49cd037207f5d8730efd Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 4 Jun 2023 12:25:18 -0600 Subject: [PATCH 11/30] Fixed ship blocks not rendering --- .../MixinRenderChunk.java | 13 ++++ .../MixinLevelRendererVanilla.java | 71 +++++++++++-------- 2 files changed, 55 insertions(+), 29 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/fix_render_chunk_sorting/MixinRenderChunk.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/fix_render_chunk_sorting/MixinRenderChunk.java index 209c90e91..ba901c22d 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/fix_render_chunk_sorting/MixinRenderChunk.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/fix_render_chunk_sorting/MixinRenderChunk.java @@ -51,4 +51,17 @@ private void preGetSquaredCameraDistance(final CallbackInfoReturnable ci cir.setReturnValue(relDistanceSq); } } + + // This fixes ship blocks not rendering for some reason... + @Inject(method = "hasAllNeighbors", at = @At("HEAD"), cancellable = true) + private void preHasAllNeighbors(final CallbackInfoReturnable cir) { + final ClientLevel world = Minecraft.getInstance().level; + if (world == null) { + return; + } + + if (VSGameUtilsKt.isBlockInShipyard(world, origin)) { + cir.setReturnValue(true); + } + } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/vanilla_renderer/MixinLevelRendererVanilla.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/vanilla_renderer/MixinLevelRendererVanilla.java index 409928b32..711a71978 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/vanilla_renderer/MixinLevelRendererVanilla.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/vanilla_renderer/MixinLevelRendererVanilla.java @@ -5,10 +5,8 @@ import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.mojang.blaze3d.shaders.Uniform; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferUploader; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexBuffer; -import com.mojang.blaze3d.vertex.VertexFormat; import com.mojang.math.Matrix4f; import com.mojang.math.Vector3f; import it.unimi.dsi.fastutil.objects.ObjectArrayList; @@ -207,72 +205,87 @@ private void renderChunkLayer(final RenderType renderType, final PoseStack poseS RenderSystem.assertOnRenderThread(); renderType.setupRenderState(); this.minecraft.getProfiler().push("filterempty"); - this.minecraft.getProfiler().popPush(() -> "render_" + renderType); - final boolean bl = renderType != RenderType.translucent(); + this.minecraft.getProfiler().popPush(() -> { + return "render_" + renderType; + }); + boolean bl = renderType != RenderType.translucent(); final ListIterator objectListIterator = chunksToRender.listIterator(bl ? 0 : chunksToRender.size()); - final VertexFormat vertexFormat = renderType.format(); - final ShaderInstance shaderInstance = RenderSystem.getShader(); - BufferUploader.reset(); - for (int k = 0; k < 12; ++k) { - final int l = RenderSystem.getShaderTexture(k); + ShaderInstance shaderInstance = RenderSystem.getShader(); + + for(int k = 0; k < 12; ++k) { + int l = RenderSystem.getShaderTexture(k); shaderInstance.setSampler("Sampler" + k, l); } + if (shaderInstance.MODEL_VIEW_MATRIX != null) { shaderInstance.MODEL_VIEW_MATRIX.set(poseStack.last().pose()); } + if (shaderInstance.PROJECTION_MATRIX != null) { shaderInstance.PROJECTION_MATRIX.set(matrix4f); } + if (shaderInstance.COLOR_MODULATOR != null) { shaderInstance.COLOR_MODULATOR.set(RenderSystem.getShaderColor()); } + if (shaderInstance.FOG_START != null) { shaderInstance.FOG_START.set(RenderSystem.getShaderFogStart()); } + if (shaderInstance.FOG_END != null) { shaderInstance.FOG_END.set(RenderSystem.getShaderFogEnd()); } + if (shaderInstance.FOG_COLOR != null) { shaderInstance.FOG_COLOR.set(RenderSystem.getShaderFogColor()); } + if (shaderInstance.FOG_SHAPE != null) { shaderInstance.FOG_SHAPE.set(RenderSystem.getShaderFogShape().getIndex()); } + if (shaderInstance.TEXTURE_MATRIX != null) { shaderInstance.TEXTURE_MATRIX.set(RenderSystem.getTextureMatrix()); } + if (shaderInstance.GAME_TIME != null) { shaderInstance.GAME_TIME.set(RenderSystem.getShaderGameTime()); } + RenderSystem.setupShaderLights(shaderInstance); shaderInstance.apply(); - final Uniform uniform = shaderInstance.CHUNK_OFFSET; - boolean bl2 = false; - while (bl ? objectListIterator.hasNext() : objectListIterator.hasPrevious()) { - final RenderChunkInfo renderChunkInfo2 = - bl ? (RenderChunkInfo) objectListIterator.next() : (RenderChunkInfo) objectListIterator.previous(); - final ChunkRenderDispatcher.RenderChunk renderChunk = renderChunkInfo2.chunk; - if (renderChunk.getCompiledChunk().isEmpty(renderType)) { - continue; + Uniform uniform = shaderInstance.CHUNK_OFFSET; + + while(true) { + if (bl) { + if (!objectListIterator.hasNext()) { + break; + } + } else if (!objectListIterator.hasPrevious()) { + break; } - final VertexBuffer vertexBuffer = renderChunk.getBuffer(renderType); - final BlockPos blockPos = renderChunk.getOrigin(); - if (uniform != null) { - uniform.set((float) ((double) blockPos.getX() - d), (float) ((double) blockPos.getY() - e), - (float) ((double) blockPos.getZ() - f)); - uniform.upload(); + + RenderChunkInfo renderChunkInfo2 = bl ? (RenderChunkInfo)objectListIterator.next() : (RenderChunkInfo)objectListIterator.previous(); + ChunkRenderDispatcher.RenderChunk renderChunk = renderChunkInfo2.chunk; + if (!renderChunk.getCompiledChunk().isEmpty(renderType)) { + VertexBuffer vertexBuffer = renderChunk.getBuffer(renderType); + BlockPos blockPos = renderChunk.getOrigin(); + if (uniform != null) { + uniform.set((float)((double)blockPos.getX() - d), (float)((double)blockPos.getY() - e), (float)((double)blockPos.getZ() - f)); + uniform.upload(); + } + + vertexBuffer.bind(); + vertexBuffer.draw(); } - vertexBuffer.bind(); - vertexBuffer.draw(); - bl2 = true; } + if (uniform != null) { uniform.set(Vector3f.ZERO); } + shaderInstance.clear(); - if (bl2) { - vertexFormat.clearBufferState(); - } VertexBuffer.unbind(); this.minecraft.getProfiler().pop(); renderType.clearRenderState(); From a16a442faf6a559d00c6996e9237ff25e7769110 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 4 Jun 2023 13:14:17 -0600 Subject: [PATCH 12/30] Fixed ship block damage not rendering --- .../client/renderer/MixinLevelRenderer.java | 46 ----------- .../client/render/MixinLevelRenderer.java | 77 +++++++++++++++++++ .../valkyrienskies-fabric.mixins.json | 4 +- .../client/render/MixinLevelRenderer.java | 68 ++++++++++++++++ 4 files changed, 148 insertions(+), 47 deletions(-) create mode 100644 fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/client/render/MixinLevelRenderer.java diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinLevelRenderer.java b/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinLevelRenderer.java index e8c4d0672..77773980b 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinLevelRenderer.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinLevelRenderer.java @@ -74,50 +74,4 @@ private void preRenderHitOutline(final PoseStack matrixStack, final VertexConsum 0.0F, 0.0F, 0.0F, 0.4F); } } - - /** - * This mixin makes block damage render on ships. - */ - /* - @WrapOperation(method = "renderLevel", at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/block/BlockRenderDispatcher;renderBreakingTexture(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/BlockAndTintGetter;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;)V")) - private void renderBlockDamage(final BlockRenderDispatcher blockRenderManager, final BlockState state, - final BlockPos blockPos, final BlockAndTintGetter blockRenderWorld, final PoseStack matrix, - final VertexConsumer vertexConsumer, final Operation renderBreakingTexture, final PoseStack matrixStack, - final float methodTickDelta, final long methodLimitTime, final boolean methodRenderBlockOutline, - final Camera methodCamera, final GameRenderer methodGameRenderer, - final LightTexture methodLightmapTextureManager, final Matrix4f methodMatrix4f) { - - final ClientShip ship = VSGameUtilsKt.getShipObjectManagingPos(level, blockPos); - if (ship != null) { - // Remove the vanilla render transform - matrixStack.popPose(); - - // Add the VS render transform - matrixStack.pushPose(); - - final ShipTransform renderTransform = ship.getRenderTransform(); - final Vec3 cameraPos = methodCamera.getPosition(); - - transformRenderWithShip(renderTransform, matrixStack, blockPos, cameraPos.x, cameraPos.y, cameraPos.z); - - final Matrix3f newNormalMatrix = matrixStack.last().normal().copy(); - final Matrix4f newModelMatrix = matrixStack.last().pose().copy(); - - // Then update the matrices in vertexConsumer (I'm guessing vertexConsumer is responsible for mapping - // textures, so we need to update its matrices otherwise the block damage texture looks wrong) - final SheetedDecalTextureGenerator newVertexConsumer = - new SheetedDecalTextureGenerator(((OverlayVertexConsumerAccessor) vertexConsumer).getDelegate(), - newModelMatrix, newNormalMatrix); - - // Finally, invoke the render damage function. - renderBreakingTexture.call(blockRenderManager, state, blockPos, blockRenderWorld, matrix, - newVertexConsumer); - } else { - // Vanilla behavior - renderBreakingTexture.call(blockRenderManager, state, blockPos, blockRenderWorld, matrix, vertexConsumer); - } - } - */ - } diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/client/render/MixinLevelRenderer.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/client/render/MixinLevelRenderer.java new file mode 100644 index 000000000..8bb3bdc91 --- /dev/null +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/client/render/MixinLevelRenderer.java @@ -0,0 +1,77 @@ +package org.valkyrienskies.mod.fabric.mixin.client.render; + +import static org.valkyrienskies.mod.common.VSClientGameUtils.transformRenderWithShip; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.SheetedDecalTextureGenerator; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Matrix3f; +import com.mojang.math.Matrix4f; +import net.minecraft.client.Camera; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.core.api.ships.ClientShip; +import org.valkyrienskies.core.api.ships.properties.ShipTransform; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.mixin.accessors.client.render.OverlayVertexConsumerAccessor; + +@Mixin(LevelRenderer.class) +public abstract class MixinLevelRenderer { + @Shadow + private ClientLevel level; + + /** + * This mixin makes block damage render on ships. + */ + @WrapOperation(method = "renderLevel", at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/block/BlockRenderDispatcher;renderBreakingTexture(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/BlockAndTintGetter;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;)V")) + private void renderBlockDamage(final BlockRenderDispatcher blockRenderManager, final BlockState state, + final BlockPos blockPos, final BlockAndTintGetter blockRenderWorld, final PoseStack matrix, + final VertexConsumer vertexConsumer, final Operation renderBreakingTexture, final PoseStack matrixStack, + final float methodTickDelta, final long methodLimitTime, final boolean methodRenderBlockOutline, + final Camera methodCamera, final GameRenderer methodGameRenderer, + final LightTexture methodLightmapTextureManager, final Matrix4f methodMatrix4f) { + + final ClientShip ship = VSGameUtilsKt.getShipObjectManagingPos(level, blockPos); + if (ship != null) { + // Remove the vanilla render transform + matrixStack.popPose(); + + // Add the VS render transform + matrixStack.pushPose(); + + final ShipTransform renderTransform = ship.getRenderTransform(); + final Vec3 cameraPos = methodCamera.getPosition(); + + transformRenderWithShip(renderTransform, matrixStack, blockPos, cameraPos.x, cameraPos.y, cameraPos.z); + + final Matrix3f newNormalMatrix = matrixStack.last().normal().copy(); + final Matrix4f newModelMatrix = matrixStack.last().pose().copy(); + + // Then update the matrices in vertexConsumer (I'm guessing vertexConsumer is responsible for mapping + // textures, so we need to update its matrices otherwise the block damage texture looks wrong) + final SheetedDecalTextureGenerator newVertexConsumer = + new SheetedDecalTextureGenerator(((OverlayVertexConsumerAccessor) vertexConsumer).getDelegate(), + newModelMatrix, newNormalMatrix); + + // Finally, invoke the render damage function. + renderBreakingTexture.call(blockRenderManager, state, blockPos, blockRenderWorld, matrix, + newVertexConsumer); + } else { + // Vanilla behavior + renderBreakingTexture.call(blockRenderManager, state, blockPos, blockRenderWorld, matrix, vertexConsumer); + } + } +} diff --git a/fabric/src/main/resources/valkyrienskies-fabric.mixins.json b/fabric/src/main/resources/valkyrienskies-fabric.mixins.json index dc75436f1..82561818b 100644 --- a/fabric/src/main/resources/valkyrienskies-fabric.mixins.json +++ b/fabric/src/main/resources/valkyrienskies-fabric.mixins.json @@ -14,7 +14,9 @@ "feature.explosions.ClipContextMixin", "world.level.block.FireMixin" ], - "client": [], + "client": [ + "client.render.MixinLevelRenderer" + ], "injectors": { "defaultRequire": 1 }, diff --git a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/client/render/MixinLevelRenderer.java b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/client/render/MixinLevelRenderer.java index 304e0c108..d7f3579d3 100644 --- a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/client/render/MixinLevelRenderer.java +++ b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/client/render/MixinLevelRenderer.java @@ -1,14 +1,40 @@ package org.valkyrienskies.mod.forge.mixin.client.render; +import static org.valkyrienskies.mod.common.VSClientGameUtils.transformRenderWithShip; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.SheetedDecalTextureGenerator; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Matrix3f; +import com.mojang.math.Matrix4f; +import net.minecraft.client.Camera; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.client.model.data.ModelData; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +import org.valkyrienskies.core.api.ships.ClientShip; +import org.valkyrienskies.core.api.ships.properties.ShipTransform; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.mixin.accessors.client.render.OverlayVertexConsumerAccessor; @Mixin(LevelRenderer.class) public class MixinLevelRenderer { + @Shadow + private ClientLevel level; @Redirect(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/culling/Frustum;isVisible(Lnet/minecraft/world/phys/AABB;)Z")) @@ -16,4 +42,46 @@ public boolean dontClipTileEntities(final Frustum receiver, final AABB aabb) { return true; } + /** + * This mixin makes block damage render on ships. + */ + @WrapOperation(method = "renderLevel", at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/block/BlockRenderDispatcher;renderBreakingTexture(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/BlockAndTintGetter;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;Lnet/minecraftforge/client/model/data/ModelData;)V")) + private void renderBlockDamage(final BlockRenderDispatcher blockRenderManager, final BlockState state, + final BlockPos blockPos, final BlockAndTintGetter blockRenderWorld, final PoseStack matrix, + final VertexConsumer vertexConsumer, final ModelData modelData, final Operation renderBreakingTexture, final PoseStack matrixStack, + final float methodTickDelta, final long methodLimitTime, final boolean methodRenderBlockOutline, + final Camera methodCamera, final GameRenderer methodGameRenderer, + final LightTexture methodLightmapTextureManager, final Matrix4f methodMatrix4f) { + + final ClientShip ship = VSGameUtilsKt.getShipObjectManagingPos(level, blockPos); + if (ship != null) { + // Remove the vanilla render transform + matrixStack.popPose(); + + // Add the VS render transform + matrixStack.pushPose(); + + final ShipTransform renderTransform = ship.getRenderTransform(); + final Vec3 cameraPos = methodCamera.getPosition(); + + transformRenderWithShip(renderTransform, matrixStack, blockPos, cameraPos.x, cameraPos.y, cameraPos.z); + + final Matrix3f newNormalMatrix = matrixStack.last().normal().copy(); + final Matrix4f newModelMatrix = matrixStack.last().pose().copy(); + + // Then update the matrices in vertexConsumer (I'm guessing vertexConsumer is responsible for mapping + // textures, so we need to update its matrices otherwise the block damage texture looks wrong) + final SheetedDecalTextureGenerator newVertexConsumer = + new SheetedDecalTextureGenerator(((OverlayVertexConsumerAccessor) vertexConsumer).getDelegate(), + newModelMatrix, newNormalMatrix); + + // Finally, invoke the render damage function. + renderBreakingTexture.call(blockRenderManager, state, blockPos, blockRenderWorld, matrix, + newVertexConsumer, modelData); + } else { + // Vanilla behavior + renderBreakingTexture.call(blockRenderManager, state, blockPos, blockRenderWorld, matrix, vertexConsumer, modelData); + } + } } From 1ec26606e49494f4da1a10d43ab6f3d25f6c0dc8 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 4 Jun 2023 14:07:04 -0600 Subject: [PATCH 13/30] Fixed block interactions in Fabric --- .../MixinServerGamePacketListenerImpl.java | 14 ------------ .../valkyrienskies-common.mixins.json | 1 - .../MixinServerGamePacketListenerImpl.java | 22 +++++++++++++++++++ .../network/MixinServerPlayerGameMode.java | 12 +++++++--- .../valkyrienskies-fabric.mixins.json | 2 ++ 5 files changed, 33 insertions(+), 18 deletions(-) create mode 100644 fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/server/network/MixinServerGamePacketListenerImpl.java rename {common/src/main/java/org/valkyrienskies/mod => fabric/src/main/java/org/valkyrienskies/mod/fabric}/mixin/server/network/MixinServerPlayerGameMode.java (75%) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java index c1bb157fd..580cc96aa 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java @@ -77,20 +77,6 @@ private Vec3 skipDistanceCheck2(final Vec3 instance, final Vec3 vec3, final Oper return VSGameUtilsKt.toWorldCoordinates(player.level, subtract.call(instance, vec3)); } - /* - @WrapOperation( - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/phys/Vec3;distanceToSqr(Lnet/minecraft/world/phys/Vec3;)D" - ), - method = "handleUseItemOn" - ) - private double skipDistanceCheck(final Vec3 instance, final Vec3 chunkPos, - final Operation getChessboardDistance) { - return 0; - } - */ - @WrapOperation( method = "handleMovePlayer", at = @At( diff --git a/common/src/main/resources/valkyrienskies-common.mixins.json b/common/src/main/resources/valkyrienskies-common.mixins.json index fcb76e645..53f2e220c 100644 --- a/common/src/main/resources/valkyrienskies-common.mixins.json +++ b/common/src/main/resources/valkyrienskies-common.mixins.json @@ -52,7 +52,6 @@ "server.command.MixinCommands", "server.command.level.MixinServerPlayer", "server.network.MixinServerGamePacketListenerImpl", - "server.network.MixinServerPlayerGameMode", "server.world.MixinChunkMap", "server.world.MixinChunkMap$TrackedEntity", "server.world.MixinServerLevel", diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/server/network/MixinServerGamePacketListenerImpl.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/server/network/MixinServerGamePacketListenerImpl.java new file mode 100644 index 000000000..5fac1ed43 --- /dev/null +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/server/network/MixinServerGamePacketListenerImpl.java @@ -0,0 +1,22 @@ +package org.valkyrienskies.mod.fabric.mixin.server.network; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ServerGamePacketListenerImpl.class) +public abstract class MixinServerGamePacketListenerImpl { + @WrapOperation( + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/phys/Vec3;distanceToSqr(Lnet/minecraft/world/phys/Vec3;)D" + ), + method = "handleUseItemOn" + ) + private double skipDistanceCheck(final Vec3 instance, final Vec3 chunkPos, final Operation getChessboardDistance) { + return 0; + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerPlayerGameMode.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/server/network/MixinServerPlayerGameMode.java similarity index 75% rename from common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerPlayerGameMode.java rename to fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/server/network/MixinServerPlayerGameMode.java index 5c7156eba..44087ce6f 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerPlayerGameMode.java +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/server/network/MixinServerPlayerGameMode.java @@ -1,11 +1,19 @@ -package org.valkyrienskies.mod.mixin.server.network; +package org.valkyrienskies.mod.fabric.mixin.server.network; +import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayerGameMode; +import net.minecraft.world.phys.Vec3; +import org.joml.Vector3d; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.config.VSGameConfig; +import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; @Mixin(ServerPlayerGameMode.class) public class MixinServerPlayerGameMode { @@ -20,7 +28,6 @@ public class MixinServerPlayerGameMode { /** * Includes ships in server-side distance check when player breaks a block. */ - /* @Redirect( method = "handleBlockBreakAction", at = @At(value = "INVOKE", @@ -36,5 +43,4 @@ public double handleBlockBreakAction(final Vec3 instance, final Vec3 vec3) { return instance.distanceToSqr(vec3); } } - */ } diff --git a/fabric/src/main/resources/valkyrienskies-fabric.mixins.json b/fabric/src/main/resources/valkyrienskies-fabric.mixins.json index 82561818b..492442ce9 100644 --- a/fabric/src/main/resources/valkyrienskies-fabric.mixins.json +++ b/fabric/src/main/resources/valkyrienskies-fabric.mixins.json @@ -12,6 +12,8 @@ "compat.create.MixinAbstractContraptionEntity", "compat.sodium.MixinRenderSectionManager", "feature.explosions.ClipContextMixin", + "server.network.MixinServerGamePacketListenerImpl", + "server.network.MixinServerPlayerGameMode", "world.level.block.FireMixin" ], "client": [ From 2a13a74435433ae8f166405a8880810a4f5e0d13 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 4 Jun 2023 16:26:41 -0600 Subject: [PATCH 14/30] Fixed commands --- .../commands/MixinArgumentTypeInfos.java | 32 ++++++++++++++ .../mod/common/command/ShipArgumentInfo.kt | 42 +++++++++++++++++++ .../valkyrienskies-common.mixins.json | 1 + 3 files changed, 75 insertions(+) create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/commands/MixinArgumentTypeInfos.java create mode 100644 common/src/main/kotlin/org/valkyrienskies/mod/common/command/ShipArgumentInfo.kt diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/commands/MixinArgumentTypeInfos.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/commands/MixinArgumentTypeInfos.java new file mode 100644 index 000000000..88768fd63 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/commands/MixinArgumentTypeInfos.java @@ -0,0 +1,32 @@ +package org.valkyrienskies.mod.mixin.feature.commands; + +import com.mojang.brigadier.arguments.ArgumentType; +import net.minecraft.commands.synchronization.ArgumentTypeInfo; +import net.minecraft.commands.synchronization.ArgumentTypeInfos; +import net.minecraft.commands.synchronization.SingletonArgumentInfo; +import net.minecraft.core.Registry; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.valkyrienskies.mod.common.command.RelativeVector3Argument; +import org.valkyrienskies.mod.common.command.ShipArgument; +import org.valkyrienskies.mod.common.command.ShipArgumentInfo; + +@Mixin(ArgumentTypeInfos.class) +public class MixinArgumentTypeInfos { + @Shadow + private static , T extends ArgumentTypeInfo.Template> ArgumentTypeInfo register( + Registry> arg, String string, Class class_, ArgumentTypeInfo arg2) { + throw new IllegalStateException(); + } + + @Inject(method = "bootstrap", at = @At("TAIL")) + private static void postBootstrap(final Registry> registry, + final CallbackInfoReturnable> ci) { + register(registry, "valkyrienskies:ship_argument", ShipArgument.class, new ShipArgumentInfo()); + register(registry, "valkyrienskies:relative_vector3_argument", RelativeVector3Argument.class, + SingletonArgumentInfo.contextFree(RelativeVector3Argument::new)); + } +} diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/command/ShipArgumentInfo.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/command/ShipArgumentInfo.kt new file mode 100644 index 000000000..eeedfb86e --- /dev/null +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/command/ShipArgumentInfo.kt @@ -0,0 +1,42 @@ +package org.valkyrienskies.mod.common.command + +import com.google.gson.JsonObject +import net.minecraft.commands.CommandBuildContext +import net.minecraft.commands.synchronization.ArgumentTypeInfo +import net.minecraft.network.FriendlyByteBuf +import org.valkyrienskies.mod.common.command.ShipArgument.Companion + +internal class ShipArgumentInfo : ArgumentTypeInfo { + override fun serializeToNetwork(template: ShipArgumentInfoTemplate, friendlyByteBuf: FriendlyByteBuf) { + friendlyByteBuf.writeBoolean(template.selectorOnly) + } + + override fun deserializeFromNetwork(friendlyByteBuf: FriendlyByteBuf): ShipArgumentInfoTemplate { + return ShipArgumentInfoTemplate( + this, friendlyByteBuf.readBoolean() + ) + } + + override fun unpack(argumentType: ShipArgument): ShipArgumentInfoTemplate { + return ShipArgumentInfoTemplate(this, argumentType.selectorOnly) + } + + override fun serializeToJson(template: ShipArgumentInfoTemplate, jsonObject: JsonObject) { + jsonObject.addProperty("selectorOnly", template.selectorOnly) + } +} + +internal class ShipArgumentInfoTemplate(private val info: ShipArgumentInfo, internal val selectorOnly: Boolean) : + ArgumentTypeInfo.Template { + override fun instantiate(commandBuildContext: CommandBuildContext): ShipArgument { + return if (selectorOnly) { + ShipArgument.selectorOnly() + } else { + Companion.ships() + } + } + + override fun type(): ArgumentTypeInfo { + return info + } +} diff --git a/common/src/main/resources/valkyrienskies-common.mixins.json b/common/src/main/resources/valkyrienskies-common.mixins.json index 015fa73dc..c7146a373 100644 --- a/common/src/main/resources/valkyrienskies-common.mixins.json +++ b/common/src/main/resources/valkyrienskies-common.mixins.json @@ -18,6 +18,7 @@ "feature.block_placement_orientation.MixinBlockItem", "feature.block_placement_orientation.MixinBlockPlaceContext", "feature.clip_replace.MixinLevel", + "feature.commands.MixinArgumentTypeInfos", "feature.commands.MixinCommandSourceStack", "feature.conduit_fix.ConduitMixin", "feature.container_distance_check.MixinRandomizableContainerBlockEntity", From 325bafd29bfa8c318777edf349f5de3735a51de0 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 4 Jun 2023 16:27:35 -0600 Subject: [PATCH 15/30] Updated vs-core --- vs-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vs-core b/vs-core index b61972a84..ead972f38 160000 --- a/vs-core +++ b/vs-core @@ -1 +1 @@ -Subproject commit b61972a84401fdd423b68be7483cfdfabfbda9bb +Subproject commit ead972f384499b1b7713e20dde3d0affe7fdc3f1 From beab12e15a43d1fc8193755a289d85152df09d6e Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 4 Jun 2023 16:30:25 -0600 Subject: [PATCH 16/30] Run test server job on 1.19.2 --- .github/workflows/{build-1.18.x.yml => build.yml} | 1 + 1 file changed, 1 insertion(+) rename .github/workflows/{build-1.18.x.yml => build.yml} (98%) diff --git a/.github/workflows/build-1.18.x.yml b/.github/workflows/build.yml similarity index 98% rename from .github/workflows/build-1.18.x.yml rename to .github/workflows/build.yml index 46464861e..d8520c9fe 100644 --- a/.github/workflows/build-1.18.x.yml +++ b/.github/workflows/build.yml @@ -3,6 +3,7 @@ on: push: branches: - '1.18.x/*' + - '1.19.2/*' pull_request: types: [ opened, synchronize, reopened ] jobs: From 82acff37d9debe4fc0ad39d2eb1a6ab3e356ce3d Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 4 Jun 2023 16:39:38 -0600 Subject: [PATCH 17/30] Fixed forge --- .../valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt b/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt index 282ac8c49..0ea3b854c 100644 --- a/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt +++ b/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt @@ -156,7 +156,7 @@ class ValkyrienSkiesModForge { private fun registerCommands(event: RegisterCommandsEvent) { VSCommands.registerServerCommands(event.dispatcher) - if (event.environment == ALL || event.environment == INTEGRATED) { + if (event.commandSelection == ALL || event.commandSelection == INTEGRATED) { VSCommands.registerClientCommands(event.dispatcher) } } From 09efe8f3351edaf34f5b0fa0ecafd6e5c87beb0a Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 4 Jun 2023 19:07:47 -0600 Subject: [PATCH 18/30] Don't shade Guava --- common/build.gradle | 1 + fabric/build.gradle | 2 ++ forge/build.gradle | 5 +++++ 3 files changed, 8 insertions(+) diff --git a/common/build.gradle b/common/build.gradle index c7f232f6a..575ed38f5 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -14,6 +14,7 @@ dependencies { implementation("org.valkyrienskies.core:impl:${rootProject.vs_core_version}") { exclude module: "netty-buffer" exclude module: "fastutil" + exclude group: "com.google.guava" } // FTB Stuffs diff --git a/fabric/build.gradle b/fabric/build.gradle index 31b878ab7..fca29a112 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -51,12 +51,14 @@ dependencies { exclude module: "netty-buffer" exclude module: "fastutil" exclude module: "kotlin-stdlib-jdk8" + exclude group: "com.google.guava" } // Shade vs-core shadowCommon("org.valkyrienskies.core:impl:${rootProject.vs_core_version}") { exclude module: "netty-buffer" exclude module: "fastutil" exclude module: "kotlin-stdlib-jdk8" // Don't shade kotlin-stdlib-jdk8, even though vs-core depends on it + exclude group: "com.google.guava" } // CC Restitched diff --git a/forge/build.gradle b/forge/build.gradle index d368a4672..aedf61aec 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -88,24 +88,29 @@ dependencies { implementation("org.valkyrienskies.core:impl:${rootProject.vs_core_version}") forgeRuntimeLibrary shadowCommon("org.valkyrienskies.core:impl:${rootProject.vs_core_version}") { transitive = false + exclude group: "com.google.guava" } // region Manually include every single dependency of vs-core (total meme) forgeRuntimeLibrary include("org.valkyrienskies.core:api:${rootProject.vs_core_version}") { transitive = false + exclude group: "com.google.guava" } forgeRuntimeLibrary shadowCommon("org.valkyrienskies.core:api-game:${rootProject.vs_core_version}") { transitive = false + exclude group: "com.google.guava" } forgeRuntimeLibrary shadowCommon("org.valkyrienskies:physics_api_krunch:1.0.0+eb3ae45554") { transitive = false + exclude group: "com.google.guava" } forgeRuntimeLibrary shadowCommon("org.valkyrienskies:physics_api:1.0.0+0b6f5db802") { transitive = false + exclude group: "com.google.guava" } forgeRuntimeLibrary include("javax.inject:javax.inject:1") { transitive = false } From 3558977b32d92481eca6c41039325a90ff56f718 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 4 Jun 2023 19:18:22 -0600 Subject: [PATCH 19/30] Empty commit to retry actions From d43a691e272c1f76f69c139e82cb6207b573f55e Mon Sep 17 00:00:00 2001 From: StewStrong Date: Mon, 5 Jun 2023 03:34:33 -0600 Subject: [PATCH 20/30] Fixed cruise control keybind not working on fabric --- .../mod/common/config/VSKeyBindings.kt | 4 + .../KeyMappingAccessor.java | 18 +++++ .../MixinKeyMapping.java | 80 +++++++++++++++++++ .../valkyrienskies-fabric.mixins.json | 4 +- 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/duplicate_keybindings/KeyMappingAccessor.java create mode 100644 fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/duplicate_keybindings/MixinKeyMapping.java diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSKeyBindings.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSKeyBindings.kt index d68efb214..609fcbbfa 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSKeyBindings.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSKeyBindings.kt @@ -33,4 +33,8 @@ object VSKeyBindings { fun clientSetup(registerar: Consumer) { toBeRegistered.forEach { it.accept(registerar) } } + + fun isKeyMappingFromVS2(keyMapping: KeyMapping): Boolean { + return keyMapping.name.startsWith("key.valkyrienskies") + } } diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/duplicate_keybindings/KeyMappingAccessor.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/duplicate_keybindings/KeyMappingAccessor.java new file mode 100644 index 000000000..41b94b6a6 --- /dev/null +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/duplicate_keybindings/KeyMappingAccessor.java @@ -0,0 +1,18 @@ +package org.valkyrienskies.mod.fabric.mixin.feature.duplicate_keybindings; + +import com.mojang.blaze3d.platform.InputConstants; +import net.minecraft.client.KeyMapping; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(KeyMapping.class) +public interface KeyMappingAccessor { + @Accessor + InputConstants.Key getKey(); + + @Accessor + int getClickCount(); + + @Accessor + void setClickCount(int clickCount); +} diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/duplicate_keybindings/MixinKeyMapping.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/duplicate_keybindings/MixinKeyMapping.java new file mode 100644 index 000000000..3a1401e85 --- /dev/null +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/duplicate_keybindings/MixinKeyMapping.java @@ -0,0 +1,80 @@ +package org.valkyrienskies.mod.fabric.mixin.feature.duplicate_keybindings; + +import com.google.common.collect.Maps; +import com.mojang.blaze3d.platform.InputConstants; +import com.mojang.blaze3d.platform.InputConstants.Key; +import java.util.Map; +import net.minecraft.client.KeyMapping; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.valkyrienskies.mod.common.config.VSKeyBindings; + +/** + * This Mixin makes it so VS2 keybindings are pressed even when there exists another keybinding bound to the set same + * key. + */ +@Mixin(KeyMapping.class) +public class MixinKeyMapping { + @Unique + private static final Map VS2_KEYMAP = Maps.newHashMap(); + + @Shadow + @Final + private static Map MAP; + + @Shadow + @Final + private static Map ALL; + + @Shadow + private InputConstants.Key key; + + @Inject(method = "click", at = @At("HEAD")) + private static void preClick(final InputConstants.Key key, final CallbackInfo callbackInfo) { + final KeyMapping originalKeyMapping = MAP.get(key); + final KeyMapping vs2KeyMapping = VS2_KEYMAP.get(key); + if (vs2KeyMapping != null && originalKeyMapping != vs2KeyMapping) { + final KeyMappingAccessor keyMappingAccessor = (KeyMappingAccessor) vs2KeyMapping; + keyMappingAccessor.setClickCount(keyMappingAccessor.getClickCount() + 1); + } + } + + @Inject(method = "set", at = @At("HEAD")) + private static void preSet(final InputConstants.Key key, final boolean bl, final CallbackInfo callbackInfo) { + final KeyMapping originalKeyMapping = MAP.get(key); + final KeyMapping vs2KeyMapping = VS2_KEYMAP.get(key); + if (vs2KeyMapping != null && originalKeyMapping != vs2KeyMapping) { + vs2KeyMapping.setDown(bl); + } + } + + @Inject(method = "resetMapping", at = @At("HEAD")) + private static void preResetMapping(final CallbackInfo callbackInfo) { + VS2_KEYMAP.clear(); + for (final KeyMapping keyMapping : ALL.values()) { + if (VSKeyBindings.INSTANCE.isKeyMappingFromVS2(keyMapping)) { + final KeyMappingAccessor keyMappingAccessor = (KeyMappingAccessor) keyMapping; + VS2_KEYMAP.put(keyMappingAccessor.getKey(), keyMapping); + } + } + } + + @Inject(method = "(Ljava/lang/String;Lcom/mojang/blaze3d/platform/InputConstants$Type;ILjava/lang/String;)V", at = @At("RETURN"), remap = false) + private void postInit( + final String string, + final InputConstants.Type type, + final int i, + final String string2, + final CallbackInfo callbackInfo + ) { + final KeyMapping thisAsKeyMapping = KeyMapping.class.cast(this); + if (VSKeyBindings.INSTANCE.isKeyMappingFromVS2(thisAsKeyMapping)) { + VS2_KEYMAP.put(this.key, thisAsKeyMapping); + } + } +} diff --git a/fabric/src/main/resources/valkyrienskies-fabric.mixins.json b/fabric/src/main/resources/valkyrienskies-fabric.mixins.json index 492442ce9..16591faa4 100644 --- a/fabric/src/main/resources/valkyrienskies-fabric.mixins.json +++ b/fabric/src/main/resources/valkyrienskies-fabric.mixins.json @@ -17,7 +17,9 @@ "world.level.block.FireMixin" ], "client": [ - "client.render.MixinLevelRenderer" + "client.render.MixinLevelRenderer", + "feature.duplicate_keybindings.KeyMappingAccessor", + "feature.duplicate_keybindings.MixinKeyMapping" ], "injectors": { "defaultRequire": 1 From e13b8ab8c35eae29e64cef29c6d8fcafde6921b1 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Mon, 5 Jun 2023 04:14:40 -0600 Subject: [PATCH 21/30] Fix forge server not launching --- .../mod/forge/common/ValkyrienSkiesModForge.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt b/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt index 0ea3b854c..b94f8c8f8 100644 --- a/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt +++ b/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt @@ -82,8 +82,13 @@ class ValkyrienSkiesModForge { ITEMS.register(modBus) ENTITIES.register(modBus) BLOCK_ENTITIES.register(modBus) - modBus.addListener(::registerKeyBindings) - modBus.addListener(::entityRenderers) + + // Only run these on client to prevent loading client classes on server + if (isClient) { + modBus.addListener(::registerKeyBindings) + modBus.addListener(::entityRenderers) + } + modBus.addListener(::loadComplete) forgeBus.addListener(::registerCommands) From ceaa7cb2ca321827ebb835e13b7a3a91c9d707fc Mon Sep 17 00:00:00 2001 From: StewStrong Date: Mon, 5 Jun 2023 05:30:04 -0600 Subject: [PATCH 22/30] Fixed lava not working on forge --- .../valkyrienskies-common.mixins.json | 1 - .../water_in_ships_entity/MixinEntity.java | 2 +- .../valkyrienskies-fabric.mixins.json | 1 + .../water_in_ships_entity/MixinEntity.java | 181 ++++++++++++++++++ .../valkyrienskies-forge.mixins.json | 1 + 5 files changed, 184 insertions(+), 2 deletions(-) rename {common/src/main/java/org/valkyrienskies/mod => fabric/src/main/java/org/valkyrienskies/mod/fabric}/mixin/feature/water_in_ships_entity/MixinEntity.java (98%) create mode 100644 forge/src/main/java/org/valkyrienskies/mod/forge/mixin/feature/water_in_ships_entity/MixinEntity.java diff --git a/common/src/main/resources/valkyrienskies-common.mixins.json b/common/src/main/resources/valkyrienskies-common.mixins.json index c7146a373..e3d3ea19b 100644 --- a/common/src/main/resources/valkyrienskies-common.mixins.json +++ b/common/src/main/resources/valkyrienskies-common.mixins.json @@ -41,7 +41,6 @@ "feature.shipyard_entities.MixinTransientEntitySectionManager", "feature.spawn_player_on_ship.MixinServerGamePacketListenerImpl", "feature.tick_ship_chunks.MixinChunkMap", - "feature.water_in_ships_entity.MixinEntity", "feature.world_border.MixinLevel", "feature.world_border.MixinWorldBorder", "mod_compat.create_big_cannons.MixinAbstractCannonProjectile", diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/water_in_ships_entity/MixinEntity.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/water_in_ships_entity/MixinEntity.java similarity index 98% rename from common/src/main/java/org/valkyrienskies/mod/mixin/feature/water_in_ships_entity/MixinEntity.java rename to fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/water_in_ships_entity/MixinEntity.java index ecc3f5b40..a54f535e1 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/water_in_ships_entity/MixinEntity.java +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/water_in_ships_entity/MixinEntity.java @@ -1,4 +1,4 @@ -package org.valkyrienskies.mod.mixin.feature.water_in_ships_entity; +package org.valkyrienskies.mod.fabric.mixin.feature.water_in_ships_entity; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; diff --git a/fabric/src/main/resources/valkyrienskies-fabric.mixins.json b/fabric/src/main/resources/valkyrienskies-fabric.mixins.json index 16591faa4..dab9070a3 100644 --- a/fabric/src/main/resources/valkyrienskies-fabric.mixins.json +++ b/fabric/src/main/resources/valkyrienskies-fabric.mixins.json @@ -12,6 +12,7 @@ "compat.create.MixinAbstractContraptionEntity", "compat.sodium.MixinRenderSectionManager", "feature.explosions.ClipContextMixin", + "feature.water_in_ships_entity.MixinEntity", "server.network.MixinServerGamePacketListenerImpl", "server.network.MixinServerPlayerGameMode", "world.level.block.FireMixin" diff --git a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/feature/water_in_ships_entity/MixinEntity.java b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/feature/water_in_ships_entity/MixinEntity.java new file mode 100644 index 000000000..70d1f439b --- /dev/null +++ b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/feature/water_in_ships_entity/MixinEntity.java @@ -0,0 +1,181 @@ +package org.valkyrienskies.mod.forge.mixin.feature.water_in_ships_entity; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.common.extensions.IForgeEntity; +import net.minecraftforge.fluids.FluidType; +import org.apache.commons.lang3.tuple.MutableTriple; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(Entity.class) +public abstract class MixinEntity { + @Shadow + public Level level; + @Shadow + private AABB bb; + + @Shadow + public abstract double getEyeY(); + + @Shadow + public abstract double getX(); + + @Shadow + public abstract double getZ(); + + @Shadow + public abstract boolean touchingUnloadedChunk(); + + @Shadow + public abstract AABB getBoundingBox(); + + @Shadow + public abstract boolean isPushedByFluid(); + + @Shadow + public abstract Vec3 getDeltaMovement(); + + @Shadow + public abstract void setDeltaMovement(Vec3 vec3); + + @Unique + private boolean isShipWater = false; + + @Shadow + protected abstract void setFluidTypeHeight(FluidType type, double height); + + @Inject( + at = @At("HEAD"), + method = "updateFluidHeightAndDoFluidPushing()V", + remap = false + ) + // Overwrite the forge method, since it's written in a way that's really hard to precisely mixin into. + private void afterFluidStateUpdate(final CallbackInfo callbackInfo) { + if (this.touchingUnloadedChunk()) { + return; + } + VSGameUtilsKt.transformFromWorldToNearbyShipsAndWorld(level, this.getBoundingBox().deflate(0.001), aabb -> { + int i = Mth.floor(aabb.minX); + int j = Mth.ceil(aabb.maxX); + int k = Mth.floor(aabb.minY); + int l = Mth.ceil(aabb.maxY); + int i1 = Mth.floor(aabb.minZ); + int j1 = Mth.ceil(aabb.maxZ); + double d0 = 0.0; + boolean flag = this.isPushedByFluid(); + boolean flag1 = false; + Vec3 vec3 = Vec3.ZERO; + boolean k1 = false; + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + Object2ObjectArrayMap + interimCalcs = new Object2ObjectArrayMap((Integer) FluidType.SIZE.get() - 1); + for (int l1 = i; l1 < j; ++l1) { + for (int i2 = k; i2 < l; ++i2) { + for (int j2 = i1; j2 < j1; ++j2) { + double d1; + blockpos$mutableblockpos.set(l1, i2, j2); + FluidState fluidstate = this.level.getFluidState(blockpos$mutableblockpos); + FluidType fluidType2 = fluidstate.getFluidType(); + if (fluidType2.isAir() || !((d1 = + (double) ((float) i2 + fluidstate.getHeight(this.level, blockpos$mutableblockpos))) >= + aabb.minY)) continue; + flag1 = true; + MutableTriple interim2 = + interimCalcs.computeIfAbsent(fluidType2, t -> MutableTriple.of(0.0, Vec3.ZERO, 0)); + interim2.setLeft(Math.max(d1 - aabb.minY, (Double) interim2.getLeft())); + if (!((IForgeEntity) this).isPushedByFluid(fluidType2)) continue; + Vec3 vec31 = fluidstate.getFlow(this.level, blockpos$mutableblockpos); + if ((Double) interim2.getLeft() < 0.4) { + vec31 = vec31.scale((Double) interim2.getLeft()); + } + interim2.setMiddle(((Vec3) interim2.getMiddle()).add(vec31)); + interim2.setRight((Integer) interim2.getRight() + 1); + } + } + } + interimCalcs.forEach((fluidType, interim) -> { + if (((Vec3) interim.getMiddle()).length() > 0.0) { + if ((Integer) interim.getRight() > 0) { + interim.setMiddle(((Vec3) interim.getMiddle()).scale( + 1.0 / (double) ((Integer) interim.getRight()).intValue())); + } + if (!Player.class.isInstance(this)) { + interim.setMiddle(((Vec3) interim.getMiddle()).normalize()); + } + Vec3 vec32 = this.getDeltaMovement(); + interim.setMiddle(((Vec3) interim.getMiddle()).scale( + ((IForgeEntity) this).getFluidMotionScale((FluidType) fluidType))); + double d2 = 0.003; + if (Math.abs(vec32.x) < 0.003 && Math.abs(vec32.z) < 0.003 && + ((Vec3) interim.getMiddle()).length() < 0.0045000000000000005) { + interim.setMiddle(((Vec3) interim.getMiddle()).normalize().scale(0.0045000000000000005)); + } + this.setDeltaMovement(this.getDeltaMovement().add((Vec3) interim.getMiddle())); + } + this.setFluidTypeHeight((FluidType) fluidType, (Double) interim.getLeft()); + }); + }); + } + + @WrapOperation( + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/level/Level;getFluidState(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/material/FluidState;"), + method = "updateFluidOnEyes" + ) + private FluidState getFluidStateRedirect(final Level level, final BlockPos blockPos, + final Operation getFluidState) { + final FluidState[] fluidState = {getFluidState.call(level, blockPos)}; + isShipWater = false; + if (fluidState[0].isEmpty()) { + + final double d = this.getEyeY() - 0.1111111119389534; + + final double origX = this.getX(); + final double origY = d; + final double origZ = this.getZ(); + + VSGameUtilsKt.transformToNearbyShipsAndWorld(this.level, origX, origY, origZ, this.bb.getSize(), + (x, y, z) -> { + fluidState[0] = getFluidState.call(level, new BlockPos(x, y, z)); + }); + isShipWater = true; + } + return fluidState[0]; + } + + @WrapOperation( + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/level/material/FluidState;getHeight(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;)F"), + method = "updateFluidOnEyes" + ) + private float fluidHeightOverride(final FluidState instance, final BlockGetter arg, final BlockPos arg2, + final Operation getHeight) { + if (!instance.isEmpty() && this.level instanceof Level) { + + if (isShipWater) { + if (instance.isSource()) { + return 1; + } + } + + } + return getHeight.call(instance, arg, arg2); + } + +} diff --git a/forge/src/main/resources/valkyrienskies-forge.mixins.json b/forge/src/main/resources/valkyrienskies-forge.mixins.json index 96701e995..57ba7bb5e 100644 --- a/forge/src/main/resources/valkyrienskies-forge.mixins.json +++ b/forge/src/main/resources/valkyrienskies-forge.mixins.json @@ -16,6 +16,7 @@ "compat.thermalexpansion.MixinTileCoFH", "compat.tis3d.MixinInfraredPacketEntity", "feature.forge_interact.MixinIForgePlayer", + "feature.water_in_ships_entity.MixinEntity", "world.level.block.FireMixin" ], "client": [ From 8a7faf21853039993b07a33655e732a5db91e0fe Mon Sep 17 00:00:00 2001 From: StewStrong Date: Mon, 5 Jun 2023 06:49:30 -0600 Subject: [PATCH 23/30] Fixed compatibility with Cull Leaves mod --- .../sodium/MixinRegionChunkRenderer.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/sodium/MixinRegionChunkRenderer.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/sodium/MixinRegionChunkRenderer.java index a4dcc8298..18f2d1376 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/sodium/MixinRegionChunkRenderer.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/sodium/MixinRegionChunkRenderer.java @@ -18,7 +18,7 @@ import org.valkyrienskies.mod.common.VSGameUtilsKt; import org.valkyrienskies.mod.mixinducks.mod_compat.sodium.RegionChunkRendererDuck; -@Mixin(value = RegionChunkRenderer.class, remap = false) +@Mixin(value = RegionChunkRenderer.class, remap = false, priority = 1101) public class MixinRegionChunkRenderer implements RegionChunkRendererDuck { @Unique @@ -27,28 +27,29 @@ public class MixinRegionChunkRenderer implements RegionChunkRendererDuck { @Unique private final Vector3d camInShip = new Vector3d(); - @Redirect( + @WrapOperation( at = @At( value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/RenderSection;getBounds()Lme/jellysquid/mods/sodium/client/render/chunk/data/ChunkRenderBounds;" ), method = "buildDrawBatches" ) - private ChunkRenderBounds injectBuildDrawBatches(final RenderSection section, final List sections, - final BlockRenderPass pass, final ChunkCameraContext c) { - + private ChunkRenderBounds injectBuildDrawBatches( + final RenderSection section, final Operation getBounds, final List sections, + final BlockRenderPass pass, final ChunkCameraContext c + ) { final ClientShip ship = VSGameUtilsKt.getShipObjectManagingPos(Minecraft.getInstance().level, section.getChunkX(), section.getChunkZ()); if (ship != null) { ship.getRenderTransform().getWorldToShip().transformPosition(camInWorld, camInShip); - final ChunkRenderBounds originalBounds = section.getBounds(); + final ChunkRenderBounds originalBounds = getBounds.call(section); return new ChunkRenderBounds(originalBounds.x1 - 1.9f, originalBounds.y1 - 1.9f, originalBounds.z1 - 1.9f, originalBounds.x2 + 1.9f, originalBounds.y2 + 1.9f, originalBounds.z2 + 1.9f); } else { camInShip.set(camInWorld); - return section.getBounds(); + return getBounds.call(section); } } From cc3901ad137a31a0091dee8a1956467c042f4857 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Thu, 8 Jun 2023 19:05:50 -0600 Subject: [PATCH 24/30] Fixed fabric failing to launch --- .../feature/duplicate_keybindings/MixinKeyMapping.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/duplicate_keybindings/MixinKeyMapping.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/duplicate_keybindings/MixinKeyMapping.java index 3a1401e85..3e20fe9f9 100644 --- a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/duplicate_keybindings/MixinKeyMapping.java +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/feature/duplicate_keybindings/MixinKeyMapping.java @@ -64,14 +64,8 @@ private static void preResetMapping(final CallbackInfo callbackInfo) { } } - @Inject(method = "(Ljava/lang/String;Lcom/mojang/blaze3d/platform/InputConstants$Type;ILjava/lang/String;)V", at = @At("RETURN"), remap = false) - private void postInit( - final String string, - final InputConstants.Type type, - final int i, - final String string2, - final CallbackInfo callbackInfo - ) { + @Inject(method = "", at = @At("RETURN"), remap = false) + private void postInit(final CallbackInfo callbackInfo) { final KeyMapping thisAsKeyMapping = KeyMapping.class.cast(this); if (VSKeyBindings.INSTANCE.isKeyMappingFromVS2(thisAsKeyMapping)) { VS2_KEYMAP.put(this.key, thisAsKeyMapping); From fb44adc8e8cf364daea125a385e3810b44efc32b Mon Sep 17 00:00:00 2001 From: Rubydesic Date: Fri, 9 Jun 2023 02:54:34 -0400 Subject: [PATCH 25/30] require MC 1.19.2 --- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 1b5e4680a..48ad3da8f 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -30,7 +30,7 @@ "accessWidener": "valkyrienskies-common.accesswidener", "depends": { "fabricloader": ">=0.14.9", - "minecraft": ">=1.19.2", + "minecraft": "1.19.2", "fabric": "*" }, "breaks": { diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 58b0a0433..99510ab45 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -23,6 +23,6 @@ side = "BOTH" [[dependencies.valkyrienskies]] modId = "minecraft" mandatory = true -versionRange = "[1.18.2,)" +versionRange = "[1.19.2]" ordering = "NONE" side = "BOTH" From de95b2cd2929637b66b1dfc3ef3318e250986dc8 Mon Sep 17 00:00:00 2001 From: Rubydesic Date: Fri, 9 Jun 2023 03:01:56 -0400 Subject: [PATCH 26/30] bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 840045741..ec1bcfb3c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G minecraft_version=1.19.2 enabled_platforms=quilt,fabric,forge archives_base_name=valkyrienskies-1192 -mod_version=2.2.0-beta.1 +mod_version=2.2.0-beta.2 maven_group=org.valkyrienskies.mod architectury_version=6.3.49 fabric_loader_version=0.14.11 From af75aac04897e73b72332603ece303288a302f4c Mon Sep 17 00:00:00 2001 From: Rubydesic Date: Fri, 9 Jun 2023 04:46:41 -0400 Subject: [PATCH 27/30] warn on broken big cannons mixin --- .../valkyrienskies/mod/mixin/ValkyrienMixinErrorHandler.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/ValkyrienMixinErrorHandler.java b/common/src/main/java/org/valkyrienskies/mod/mixin/ValkyrienMixinErrorHandler.java index 52d011744..a5fa9a31d 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/ValkyrienMixinErrorHandler.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/ValkyrienMixinErrorHandler.java @@ -10,7 +10,9 @@ public class ValkyrienMixinErrorHandler implements IMixinErrorHandler { private final Set warnList = new HashSet<>(Arrays.asList( - "org.valkyrienskies.mod.mixin.feature.water_in_ships_entity.MixinEntity" + "org.valkyrienskies.mod.mixin.feature.water_in_ships_entity.MixinEntity", + "org.valkyrienskies.mod.mixin.mod_compat.create_big_cannons.MixinAbstractCannonProjectile", + "org.valkyrienskies.mod.mixin.mod_compat.create_big_cannons.MixinPitchOrientedContraptionEntity" )); @Override From 2ad8817bc50bfcf86bc7ee147b90ef22213b710a Mon Sep 17 00:00:00 2001 From: Rubydesic Date: Fri, 9 Jun 2023 04:46:53 -0400 Subject: [PATCH 28/30] bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ec1bcfb3c..82baba634 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G minecraft_version=1.19.2 enabled_platforms=quilt,fabric,forge archives_base_name=valkyrienskies-1192 -mod_version=2.2.0-beta.2 +mod_version=2.2.0-beta.3 maven_group=org.valkyrienskies.mod architectury_version=6.3.49 fabric_loader_version=0.14.11 From c4d068cf4b0c01c57dc0d826f33a35449b164917 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Tue, 18 Jul 2023 20:58:33 -0600 Subject: [PATCH 29/30] Fix merge conflicts --- .../feature/mass_tooltip/MixinBlockItem.java | 3 +-- .../mod/common/command/ShipArgument.kt | 15 --------------- .../mod/common/command/VSCommands.kt | 12 +----------- .../resources/valkyrienskies-common.mixins.json | 1 - 4 files changed, 2 insertions(+), 29 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/mass_tooltip/MixinBlockItem.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/mass_tooltip/MixinBlockItem.java index fa9eac7dc..4b9155213 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/mass_tooltip/MixinBlockItem.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/mass_tooltip/MixinBlockItem.java @@ -4,7 +4,6 @@ import java.util.Objects; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; @@ -31,7 +30,7 @@ public class MixinBlockItem { final Double mass = Objects.requireNonNull(BlockStateInfo.INSTANCE.get(item.getBlock().defaultBlockState())) .getFirst(); - list.add(new TranslatableComponent("tooltip.valkyrienskies.mass") + list.add(Component.translatable("tooltip.valkyrienskies.mass") .append(VSGameConfig.CLIENT.getTooltip().getUseImperialUnits() ? getImperialText(mass) : ": " + mass + "kg").withStyle(ChatFormatting.DARK_GRAY)); } catch (final Exception ignored) { diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/command/ShipArgument.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/command/ShipArgument.kt index 7c51468ac..9687f8f4c 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/command/ShipArgument.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/command/ShipArgument.kt @@ -1,6 +1,5 @@ package org.valkyrienskies.mod.common.command -import com.google.gson.JsonObject import com.mojang.brigadier.StringReader import com.mojang.brigadier.arguments.ArgumentType import com.mojang.brigadier.context.CommandContext @@ -88,18 +87,4 @@ class ShipArgument private constructor(val selectorOnly: Boolean) : ArgumentType } override fun getExamples(): Collection = EXAMPLES - - object Serializer : ArgumentSerializer { - override fun serializeToNetwork(arg: ShipArgument, buf: FriendlyByteBuf) { - buf.writeBoolean(arg.selectorOnly) - } - - override fun deserializeFromNetwork(buf: FriendlyByteBuf): ShipArgument { - return ShipArgument(buf.readBoolean()) - } - - override fun serializeToJson(arg: ShipArgument, json: JsonObject) { - json.addProperty("selectorOnly", arg.selectorOnly) - } - } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/command/VSCommands.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/command/VSCommands.kt index 2f0815a3f..0a3f73197 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/command/VSCommands.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/command/VSCommands.kt @@ -12,7 +12,7 @@ import net.minecraft.commands.CommandSourceStack import net.minecraft.commands.arguments.EntityArgument import net.minecraft.commands.arguments.coordinates.BlockPosArgument import net.minecraft.commands.arguments.coordinates.Vec3Argument -import net.minecraft.network.chat.TranslatableComponent +import net.minecraft.network.chat.Component import net.minecraft.world.entity.Entity import net.minecraft.world.phys.BlockHitResult import org.joml.Vector3d @@ -44,16 +44,6 @@ object VSCommands { private const val TELEPORTED_MULTIPLE_SHIPS_SUCCESS = "command.valkyrienskies.teleport.multiple_ship_success" private const val TELEPORT_FIRST_ARG_CAN_ONLY_INPUT_1_SHIP = "command.valkyrienskies.mc_teleport.can_only_teleport_to_one_ship" - fun bootstrap() { - ArgumentTypes.register("valkyrienskies:ship", - ShipArgument::class.java, - ShipArgument.Serializer) - - ArgumentTypes.register("valkyrienskies:relative_vector", - RelativeVector3Argument::class.java, - EmptyArgumentSerializer(::RelativeVector3Argument)) - } - private fun literal(name: String) = LiteralArgumentBuilder.literal(name) diff --git a/common/src/main/resources/valkyrienskies-common.mixins.json b/common/src/main/resources/valkyrienskies-common.mixins.json index 1f509c9bc..6c9030508 100644 --- a/common/src/main/resources/valkyrienskies-common.mixins.json +++ b/common/src/main/resources/valkyrienskies-common.mixins.json @@ -18,7 +18,6 @@ "feature.block_placement_orientation.MixinBlockItem", "feature.block_placement_orientation.MixinBlockPlaceContext", "feature.clip_replace.MixinLevel", - "feature.commands.MixinArgumentTypes", "feature.commands.MixinArgumentTypeInfos", "feature.commands.MixinCommandSourceStack", "feature.conduit_fix.ConduitMixin", From b2de01d9de117e513e032af6267a57bdd2c9c1aa Mon Sep 17 00:00:00 2001 From: StewStrong Date: Wed, 19 Jul 2023 19:50:21 -0600 Subject: [PATCH 30/30] Updated version to 2.2.0-beta.4 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 82baba634..32645f7bd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G minecraft_version=1.19.2 enabled_platforms=quilt,fabric,forge archives_base_name=valkyrienskies-1192 -mod_version=2.2.0-beta.3 +mod_version=2.2.0-beta.4 maven_group=org.valkyrienskies.mod architectury_version=6.3.49 fabric_loader_version=0.14.11