From e12fe7b32abc2c43fa468033659b5654f0219383 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 4 Jun 2023 17:47:45 -0600 Subject: [PATCH 01/32] Initial work on 1.19.2 --- .../workflows/{build-1.18.x.yml => build.yml} | 1 + common/build.gradle | 2 +- .../eureka/block/EngineBlock.kt | 11 ++++---- .../eureka/block/ShipHelmBlock.kt | 5 ++-- .../eureka/blockentity/EngineBlockEntity.kt | 3 +- .../eureka/blockentity/ShipHelmBlockEntity.kt | 3 +- .../eureka/gui/shiphelm/ShipHelmScreen.kt | 11 ++++---- .../eureka/gui/shiphelm/ShipHelmScreenMenu.kt | 8 +++++- .../eureka/ship/EurekaShipControl.kt | 4 +-- fabric/build.gradle | 2 +- .../eureka/fabric/EurekaModFabric.java | 4 +-- forge/build.gradle | 2 +- .../eureka/forge/EurekaModForge.java | 28 ++++++++++--------- .../services/EurekaPlatformHelperForge.java | 3 +- gradle.properties | 20 ++++++------- 15 files changed, 57 insertions(+), 50 deletions(-) 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 46464861..d8520c9f 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: diff --git a/common/build.gradle b/common/build.gradle index 3618c03d..e9b3a654 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -12,7 +12,7 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" // Remove the next line if you don't want to depend on the API // modApi "me.shedaniel:architectury:${rootProject.architectury_version}" - modApi("org.valkyrienskies:valkyrienskies-118-common:${rootProject.vs2_version}") + modApi("org.valkyrienskies:valkyrienskies-1192-common:${rootProject.vs2_version}") implementation("org.valkyrienskies.core:api:1.1.0+c92814e9b7") { transitive = false } api "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.21" diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt index e5d43995..8f147d1a 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt @@ -5,6 +5,7 @@ import net.minecraft.core.Direction import net.minecraft.core.particles.ParticleTypes import net.minecraft.sounds.SoundEvents import net.minecraft.sounds.SoundSource +import net.minecraft.util.RandomSource import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult import net.minecraft.world.entity.player.Player @@ -84,7 +85,7 @@ class EngineBlock : BaseEntityBlock( } } - override fun animateTick(state: BlockState, level: Level, pos: BlockPos, random: Random) { + override fun animateTick(state: BlockState, level: Level, pos: BlockPos, randomSource: RandomSource) { val heat = state.getValue(HEAT) if (heat == 0) return @@ -92,18 +93,18 @@ class EngineBlock : BaseEntityBlock( val e = pos.y.toDouble() val f = pos.z.toDouble() + 0.5 - if (random.nextDouble() < (0.04 * heat)) { + if (randomSource.nextDouble() < (0.04 * heat)) { level.playLocalSound(d, e, f, SoundEvents.FURNACE_FIRE_CRACKLE, SoundSource.BLOCKS, 1.0f, 1.0f, false) } // Make the amount of particles based of the heat - if (random.nextDouble() > (0.2 * heat)) return + if (randomSource.nextDouble() > (0.2 * heat)) return val direction = state.getValue(HORIZONTAL_FACING) val axis = direction.axis - val h = random.nextDouble() * 0.6 - 0.3 + val h = randomSource.nextDouble() * 0.6 - 0.3 val i = if (axis === Direction.Axis.X) direction.stepX.toDouble() * 0.52 else h - val j = random.nextDouble() * 4.0 / 16.0 + val j = randomSource.nextDouble() * 4.0 / 16.0 val k = if (axis === Direction.Axis.Z) direction.stepZ.toDouble() * 0.52 else h level.addParticle(ParticleTypes.SMOKE, d + i, e + j, f + k, 0.0, 0.0, 0.0) level.addParticle(ParticleTypes.FLAME, d + i, e + j, f + k, 0.0, 0.0, 0.0) diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/block/ShipHelmBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/ShipHelmBlock.kt index b5b9938a..2662e9d3 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/ShipHelmBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/ShipHelmBlock.kt @@ -2,7 +2,7 @@ package org.valkyrienskies.eureka.block import net.minecraft.core.BlockPos import net.minecraft.core.Direction -import net.minecraft.network.chat.TextComponent +import net.minecraft.network.chat.Component import net.minecraft.server.level.ServerLevel import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult @@ -31,6 +31,7 @@ import org.valkyrienskies.eureka.util.DirectionalShape import org.valkyrienskies.eureka.util.RotShapes import org.valkyrienskies.mod.common.getShipManagingPos import org.valkyrienskies.mod.common.getShipObjectManagingPos +import java.awt.TextComponent class ShipHelmBlock(properties: Properties, val woodType: WoodType) : BaseEntityBlock(properties) { val HELM_BASE = RotShapes.box(1.0, 0.0, 1.0, 15.0, 1.0, 15.0) @@ -78,7 +79,7 @@ class ShipHelmBlock(properties: Properties, val woodType: WoodType) : BaseEntity player.openMenu(blockEntity) InteractionResult.CONSUME } else if (level.getShipManagingPos(pos) == null) { - player.displayClientMessage(TextComponent("Sneak to open the ship helm!"), true) + player.displayClientMessage(Component.literal("Sneak to open the ship helm!"), true) InteractionResult.CONSUME } else if (blockEntity.sit(player)) { InteractionResult.CONSUME diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/EngineBlockEntity.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/EngineBlockEntity.kt index 3c0d423f..daebbc33 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/EngineBlockEntity.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/EngineBlockEntity.kt @@ -4,7 +4,6 @@ import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.nbt.CompoundTag import net.minecraft.network.chat.Component -import net.minecraft.network.chat.TranslatableComponent import net.minecraft.server.level.ServerLevel import net.minecraft.world.ContainerHelper import net.minecraft.world.WorldlyContainer @@ -49,7 +48,7 @@ class EngineBlockEntity(pos: BlockPos, state: BlockState) : override fun createMenu(containerId: Int, inventory: Inventory): AbstractContainerMenu = EngineScreenMenu(containerId, inventory, this) - override fun getDefaultName(): Component = TranslatableComponent("gui.vs_eureka.engine") + override fun getDefaultName(): Component = Component.translatable("gui.vs_eureka.engine") private var heat = 0f fun tick() { diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt index 2402aa30..aa0635bf 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt @@ -5,7 +5,6 @@ import net.minecraft.core.BlockPos import net.minecraft.core.Direction.Axis import net.minecraft.core.Registry import net.minecraft.network.chat.Component -import net.minecraft.network.chat.TranslatableComponent import net.minecraft.server.level.ServerLevel import net.minecraft.world.MenuProvider import net.minecraft.world.entity.player.Inventory @@ -50,7 +49,7 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : } override fun getDisplayName(): Component { - return TranslatableComponent("gui.vs_eureka.ship_helm") + return Component.translatable("gui.vs_eureka.ship_helm") } // Needs to get called server-side diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt index 074cfb36..4c3bde8e 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt @@ -6,7 +6,6 @@ import net.minecraft.client.Minecraft import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen import net.minecraft.client.renderer.GameRenderer import net.minecraft.network.chat.Component -import net.minecraft.network.chat.TranslatableComponent import net.minecraft.resources.ResourceLocation import net.minecraft.world.entity.player.Inventory import net.minecraft.world.phys.BlockHitResult @@ -104,10 +103,10 @@ class ShipHelmScreen(handler: ShipHelmScreenMenu, playerInventory: Inventory, te private const val BUTTON_3_X = 10 private const val BUTTON_3_Y = 133 - private val ASSEMBLE_TEXT = TranslatableComponent("gui.vs_eureka.assemble") - private val DISSEMBLE_TEXT = TranslatableComponent("gui.vs_eureka.disassemble") - private val ALIGN_TEXT = TranslatableComponent("gui.vs_eureka.align") - private val ALIGNING_TEXT = TranslatableComponent("gui.vs_eureka.aligning") - private val TODO_TEXT = TranslatableComponent("gui.vs_eureka.todo") + private val ASSEMBLE_TEXT = Component.translatable("gui.vs_eureka.assemble") + private val DISSEMBLE_TEXT = Component.translatable("gui.vs_eureka.disassemble") + private val ALIGN_TEXT = Component.translatable("gui.vs_eureka.align") + private val ALIGNING_TEXT = Component.translatable("gui.vs_eureka.aligning") + private val TODO_TEXT = Component.translatable("gui.vs_eureka.todo") } } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreenMenu.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreenMenu.kt index 1a4e775e..8c3670da 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreenMenu.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreenMenu.kt @@ -3,11 +3,12 @@ package org.valkyrienskies.eureka.gui.shiphelm import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Player import net.minecraft.world.inventory.AbstractContainerMenu +import net.minecraft.world.item.ItemStack import org.valkyrienskies.eureka.EurekaConfig import org.valkyrienskies.eureka.EurekaScreens import org.valkyrienskies.eureka.blockentity.ShipHelmBlockEntity -class ShipHelmScreenMenu(syncId: Int, playerInv: Inventory, val blockEntity: ShipHelmBlockEntity?) : +class ShipHelmScreenMenu(syncId: Int, playerInv: Inventory, private val blockEntity: ShipHelmBlockEntity?) : AbstractContainerMenu(EurekaScreens.SHIP_HELM.get(), syncId) { constructor(syncId: Int, playerInv: Inventory) : this(syncId, playerInv, null) @@ -39,6 +40,11 @@ class ShipHelmScreenMenu(syncId: Int, playerInv: Inventory, val blockEntity: Shi return super.clickMenuButton(player, id) } + override fun quickMoveStack(player: Player, index: Int): ItemStack { + // Do nothing + return ItemStack.EMPTY + } + companion object { val factory: (syncId: Int, playerInv: Inventory) -> ShipHelmScreenMenu = ::ShipHelmScreenMenu } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/ship/EurekaShipControl.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/ship/EurekaShipControl.kt index a26174b5..45327c03 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/ship/EurekaShipControl.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/ship/EurekaShipControl.kt @@ -5,7 +5,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.annotation.JsonIgnoreProperties import com.fasterxml.jackson.annotation.JsonProperty import net.minecraft.core.Direction -import net.minecraft.network.chat.TranslatableComponent +import net.minecraft.network.chat.Component import net.minecraft.world.entity.player.Player import org.joml.AxisAngle4d import org.joml.Quaterniond @@ -333,7 +333,7 @@ class EurekaShipControl : ShipForcesInducer, ServerShipUser, Ticked { private fun showCruiseStatus() { val cruiseKey = if (isCruising) "hud.vs_eureka.start_cruising" else "hud.vs_eureka.stop_cruising" - seatedPlayer?.displayClientMessage(TranslatableComponent(cruiseKey), true) + seatedPlayer?.displayClientMessage(Component.translatable(cruiseKey), true) } var power = 0.0 diff --git a/fabric/build.gradle b/fabric/build.gradle index 97648c20..4db8c8eb 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -33,7 +33,7 @@ dependencies { modImplementation("me.shedaniel.cloth:cloth-config:${cloth_config_version}") // Remove the next line if you don't want to depend on the API - modApi("org.valkyrienskies:valkyrienskies-118-fabric:${rootProject.vs2_version}") + modApi("org.valkyrienskies:valkyrienskies-1192-fabric:${rootProject.vs2_version}") common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } diff --git a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java index a05c91bd..e6363b34 100644 --- a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java +++ b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java @@ -8,8 +8,8 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.model.BakedModelManagerHelper; import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry; -import net.fabricmc.fabric.api.client.rendereregistry.v1.BlockEntityRendererRegistry; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.resources.ResourceLocation; import org.valkyrienskies.core.impl.config.VSConfigClass; import org.valkyrienskies.eureka.EurekaBlockEntities; @@ -36,7 +36,7 @@ public static class Client implements ClientModInitializer { @Override public void onInitializeClient() { EurekaMod.initClient(); - BlockEntityRendererRegistry.INSTANCE.register( + BlockEntityRenderers.register( EurekaBlockEntities.INSTANCE.getSHIP_HELM().get(), ShipHelmBlockEntityRenderer::new ); diff --git a/forge/build.gradle b/forge/build.gradle index 76659956..701e4dd3 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -51,7 +51,7 @@ configurations { dependencies { forge "net.minecraftforge:forge:${rootProject.forge_version}" - modApi("org.valkyrienskies:valkyrienskies-118-forge:${rootProject.vs2_version}") { transitive = false } + modApi("org.valkyrienskies:valkyrienskies-1192-forge:${rootProject.vs2_version}") { transitive = false } implementation("org.valkyrienskies.core:api:1.1.0+c92814e9b7") { transitive = false } common(project(path: ":common", configuration: "namedElements")) { transitive false } diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java index 96bd78d7..2ab10e53 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java @@ -3,10 +3,9 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.client.ConfigGuiHandler; +import net.minecraftforge.client.ConfigScreenHandler; import net.minecraftforge.client.event.EntityRenderersEvent; -import net.minecraftforge.client.event.ModelRegistryEvent; -import net.minecraftforge.client.model.ForgeModelBakery; +import net.minecraftforge.client.event.ModelEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; @@ -31,13 +30,14 @@ public EurekaModForge() { MOD_BUS = FMLJavaModLoadingContext.get().getModEventBus(); MOD_BUS.addListener(this::clientSetup); - ModLoadingContext.get().registerExtensionPoint(ConfigGuiHandler.ConfigGuiFactory.class, - () -> new ConfigGuiHandler.ConfigGuiFactory((Minecraft client, Screen parent) -> + ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, + () -> new ConfigScreenHandler.ConfigScreenFactory((Minecraft client, Screen parent) -> VSClothConfig.createConfigScreenFor(parent, VSConfigClass.Companion.getRegisteredConfig(EurekaConfig.class))) ); MOD_BUS.addListener(this::onModelRegistry); + MOD_BUS.addListener(this::onModelBaked); MOD_BUS.addListener(this::clientSetup); MOD_BUS.addListener(this::entityRenderers); @@ -49,12 +49,6 @@ void clientSetup(final FMLClientSetupEvent event) { happendClientSetup = true; EurekaMod.initClient(); - - WheelModels.INSTANCE.setModelGetter(woodType -> ForgeModelBakery.instance().getBakedTopLevelModels() - .getOrDefault( - new ResourceLocation(EurekaMod.MOD_ID, "block/" + woodType.getResourceName() + "_ship_helm_wheel"), - Minecraft.getInstance().getModelManager().getMissingModel() - )); } void entityRenderers(final EntityRenderersEvent.RegisterRenderers event) { @@ -64,9 +58,17 @@ void entityRenderers(final EntityRenderersEvent.RegisterRenderers event) { ); } - void onModelRegistry(final ModelRegistryEvent event) { + void onModelRegistry(final ModelEvent.RegisterAdditional event) { for (WoodType woodType : WoodType.values()) { - ForgeModelBakery.addSpecialModel(new ResourceLocation(EurekaMod.MOD_ID, "block/" + woodType.getResourceName() + "_ship_helm_wheel")); + event.register(new ResourceLocation(EurekaMod.MOD_ID, "block/" + woodType.getResourceName() + "_ship_helm_wheel")); } } + + void onModelBaked(final ModelEvent.BakingCompleted event) { + WheelModels.INSTANCE.setModelGetter(woodType -> event.getModelBakery().getBakedTopLevelModels() + .getOrDefault( + new ResourceLocation(EurekaMod.MOD_ID, "block/" + woodType.getResourceName() + "_ship_helm_wheel"), + Minecraft.getInstance().getModelManager().getMissingModel() + )); + } } diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java index 3988b9b1..d73b6c58 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java @@ -2,7 +2,6 @@ import kotlin.jvm.functions.Function0; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; @@ -21,7 +20,7 @@ public ItemStack makeIcon() { @Override public Component getDisplayName() { - return new TranslatableComponent("itemGroup." + String.format("%s.%s", id.getNamespace(), id.getPath())); + return Component.translatable("itemGroup." + String.format("%s.%s", id.getNamespace(), id.getPath())); } }; } diff --git a/gradle.properties b/gradle.properties index 26722f1a..b6f0e1c8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,21 +1,21 @@ -org.gradle.jvmargs=-Xmx4096M +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G # Identity mod_name=eureka mod_id=vs_eureka -eureka_version=1.1.0-beta.10 +eureka_version=1.2.0-beta.1 enabled_platforms=fabric,forge archives_base_name=eureka maven_group=org.valkyrienskies # Dependencies -vs2_version=2.1.0-beta.10+f520a5c13d -minecraft_version=1.18.2 -architectury_version=4.10.86 -fabric_loader_version=0.14.10 -fabric_api_version=0.59.0+1.18.2 -forge_version=1.18.2-40.1.85 -forge_kotlin_version=3.6.0 +vs2_version=2.2.0-beta.1+82acff37d9 +minecraft_version=1.19.2 +architectury_version=6.3.49 +fabric_loader_version=0.14.11 +fabric_api_version=0.73.2+1.19.2 +forge_version=1.19.2-43.1.47 +forge_kotlin_version=3.12.0 kotlin_version=1.7.21 -cloth_config_version=6.4.90 +cloth_config_version=8.2.88 # Maven publishing vs_maven_url= vs_maven_username= From 3bb33bf6e545cd61f0026a9ef7cc52e79c2e4fb0 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 4 Jun 2023 19:31:46 -0600 Subject: [PATCH 02/32] Fixed fabric not working in dev --- build.gradle | 9 +++------ common/build.gradle | 2 +- fabric/build.gradle | 2 +- forge/build.gradle | 2 +- gradle.properties | 2 +- 5 files changed, 7 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 158e4d37..3370230f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ plugins { // Needed for Forge+Fabric - id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "0.12.0-SNAPSHOT" apply false + id "architectury-plugin" version "3.4.143" + id "dev.architectury.loom" version "1.0.306" apply false // Kotlin id "org.jetbrains.kotlin.jvm" version "1.7.21" apply false // Kotlin linter @@ -48,10 +48,7 @@ subprojects { dependencies { minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" // The following line declares the mojmap mappings, you may use other mappings as well - mappings(loom.layered { - officialMojangMappings() - parchment("org.parchmentmc.data:parchment-1.18.2:2022.09.04@zip") - }) + mappings loom.officialMojangMappings() } checkstyle { diff --git a/common/build.gradle b/common/build.gradle index e9b3a654..7faea99c 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -13,7 +13,7 @@ dependencies { // Remove the next line if you don't want to depend on the API // modApi "me.shedaniel:architectury:${rootProject.architectury_version}" modApi("org.valkyrienskies:valkyrienskies-1192-common:${rootProject.vs2_version}") - implementation("org.valkyrienskies.core:api:1.1.0+c92814e9b7") { transitive = false } + implementation("org.valkyrienskies.core:api:1.1.0+ead972f384") { transitive = false } api "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.21" api "org.jetbrains.kotlin:kotlin-reflect:1.7.21" diff --git a/fabric/build.gradle b/fabric/build.gradle index 4db8c8eb..a9cf711e 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -29,7 +29,7 @@ dependencies { modImplementation("net.fabricmc:fabric-language-kotlin:1.8.5+kotlin.1.7.20") // Mod menu - modImplementation("com.terraformersmc:modmenu:3.2.3") + modImplementation("com.terraformersmc:modmenu:4.1.0") modImplementation("me.shedaniel.cloth:cloth-config:${cloth_config_version}") // Remove the next line if you don't want to depend on the API diff --git a/forge/build.gradle b/forge/build.gradle index 701e4dd3..c4bc4e3d 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -52,7 +52,7 @@ configurations { dependencies { forge "net.minecraftforge:forge:${rootProject.forge_version}" modApi("org.valkyrienskies:valkyrienskies-1192-forge:${rootProject.vs2_version}") { transitive = false } - implementation("org.valkyrienskies.core:api:1.1.0+c92814e9b7") { transitive = false } + implementation("org.valkyrienskies.core:api:1.1.0+ead972f384") { transitive = false } common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } diff --git a/gradle.properties b/gradle.properties index b6f0e1c8..ba505b70 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ enabled_platforms=fabric,forge archives_base_name=eureka maven_group=org.valkyrienskies # Dependencies -vs2_version=2.2.0-beta.1+82acff37d9 +vs2_version=2.2.0-beta.1+3558977b32 minecraft_version=1.19.2 architectury_version=6.3.49 fabric_loader_version=0.14.11 From d552bb2cecce74a3646bbe3190b0b07c32c3cf9b Mon Sep 17 00:00:00 2001 From: Rubydesic Date: Sun, 4 Jun 2023 22:09:43 -0400 Subject: [PATCH 03/32] update archives base name to 1.19.2 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ba505b70..e0f94cfe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ mod_name=eureka mod_id=vs_eureka eureka_version=1.2.0-beta.1 enabled_platforms=fabric,forge -archives_base_name=eureka +archives_base_name=eureka-1192 maven_group=org.valkyrienskies # Dependencies vs2_version=2.2.0-beta.1+3558977b32 From 1593e9e0e569f952f15820c53da169feaadfbbd9 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Mon, 5 Jun 2023 03:52:47 -0600 Subject: [PATCH 04/32] Fixed cruise control keybind not working on fabric --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index e0f94cfe..91c73c35 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ enabled_platforms=fabric,forge archives_base_name=eureka-1192 maven_group=org.valkyrienskies # Dependencies -vs2_version=2.2.0-beta.1+3558977b32 +vs2_version=2.2.0-beta.1+d43a691e27 minecraft_version=1.19.2 architectury_version=6.3.49 fabric_loader_version=0.14.11 From b2d9e1b442fb50d2b4c5f2e37c68f761a5d1aad0 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Mon, 5 Jun 2023 05:43:59 -0600 Subject: [PATCH 05/32] Updated VS2 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 91c73c35..f3bdb424 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ enabled_platforms=fabric,forge archives_base_name=eureka-1192 maven_group=org.valkyrienskies # Dependencies -vs2_version=2.2.0-beta.1+d43a691e27 +vs2_version=2.2.0-beta.1+ceaa7cb2ca minecraft_version=1.19.2 architectury_version=6.3.49 fabric_loader_version=0.14.11 From 052d75d5c68240c8ddf5541bd49b5f67aabc6613 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Mon, 5 Jun 2023 09:21:28 -0600 Subject: [PATCH 06/32] An attempt at fixing forge server --- .../eureka/forge/EurekaModForge.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java index 2ab10e53..0cf52be1 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java @@ -11,6 +11,7 @@ import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.fml.loading.FMLEnvironment; import org.valkyrienskies.core.impl.config.VSConfigClass; import org.valkyrienskies.eureka.EurekaBlockEntities; import org.valkyrienskies.eureka.EurekaConfig; @@ -22,13 +23,22 @@ @Mod(EurekaMod.MOD_ID) public class EurekaModForge { - boolean happendClientSetup = false; + private boolean handledClientSetup = false; static IEventBus MOD_BUS; public EurekaModForge() { // Submit our event bus to let architectury register our content on the right time MOD_BUS = FMLJavaModLoadingContext.get().getModEventBus(); - MOD_BUS.addListener(this::clientSetup); + + final boolean isClient = FMLEnvironment.dist.isClient(); + + if (isClient) { + MOD_BUS.addListener(this::clientSetup); + MOD_BUS.addListener(this::onModelRegistry); + MOD_BUS.addListener(this::onModelBaked); + MOD_BUS.addListener(this::clientSetup); + MOD_BUS.addListener(this::entityRenderers); + } ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> new ConfigScreenHandler.ConfigScreenFactory((Minecraft client, Screen parent) -> @@ -36,17 +46,12 @@ public EurekaModForge() { VSConfigClass.Companion.getRegisteredConfig(EurekaConfig.class))) ); - MOD_BUS.addListener(this::onModelRegistry); - MOD_BUS.addListener(this::onModelBaked); - MOD_BUS.addListener(this::clientSetup); - MOD_BUS.addListener(this::entityRenderers); - EurekaMod.init(); } void clientSetup(final FMLClientSetupEvent event) { - if (happendClientSetup) return; - happendClientSetup = true; + if (handledClientSetup) return; + handledClientSetup = true; EurekaMod.initClient(); } From 87ccd2c9f9935331e608f5df3aa2e06c3200d324 Mon Sep 17 00:00:00 2001 From: Rubydesic Date: Fri, 9 Jun 2023 03:06:21 -0400 Subject: [PATCH 07/32] bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f3bdb424..3d0a488f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G # Identity mod_name=eureka mod_id=vs_eureka -eureka_version=1.2.0-beta.1 +eureka_version=1.2.0-beta.2 enabled_platforms=fabric,forge archives_base_name=eureka-1192 maven_group=org.valkyrienskies From 846cfc24bae63ab16f84922da7624f2b78314837 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Sat, 10 Jun 2023 05:47:10 +0200 Subject: [PATCH 08/32] Removed dublicate listener * removed duplicate of `MOD_BUS.addListener(this::clientSetup);` --- .../java/org/valkyrienskies/eureka/forge/EurekaModForge.java | 1 - 1 file changed, 1 deletion(-) diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java index 0cf52be1..80767613 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java @@ -36,7 +36,6 @@ public EurekaModForge() { MOD_BUS.addListener(this::clientSetup); MOD_BUS.addListener(this::onModelRegistry); MOD_BUS.addListener(this::onModelBaked); - MOD_BUS.addListener(this::clientSetup); MOD_BUS.addListener(this::entityRenderers); } From 71e1e5496efc2a48d51aee5ee3d104910ce1caa2 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Sat, 10 Jun 2023 13:38:12 +0200 Subject: [PATCH 09/32] Carry on mod support #209 Carry on does not properly handle the IMC events, there fore we have to call from init. Note: Does not work for Forge MC 1.18 --- .../eureka/forge/EurekaModForge.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java index 80767613..08d401d3 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java @@ -7,11 +7,15 @@ import net.minecraftforge.client.event.EntityRenderersEvent; import net.minecraftforge.client.event.ModelEvent; import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.InterModComms; +import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.loading.FMLEnvironment; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.valkyrienskies.core.impl.config.VSConfigClass; import org.valkyrienskies.eureka.EurekaBlockEntities; import org.valkyrienskies.eureka.EurekaConfig; @@ -46,6 +50,36 @@ public EurekaModForge() { ); EurekaMod.init(); + + carryOnModSupport(); + + } + + private static void carryOnModSupport() { + if (ModList.get().isLoaded("carryon")) { + + final Logger LOGGER = LogManager.getLogger(EurekaMod.MOD_ID); + + LOGGER.info(EurekaMod.MOD_ID + ": Carry On was detected, sending blocklist."); + + final var exclusions = new String[] { + "vs_eureka:oak_ship_helm", + "vs_eureka:spruce_ship_helm", + "vs_eureka:birch_ship_helm", + "vs_eureka:jungle_ship_helm", + "vs_eureka:acacia_ship_helm", + "vs_eureka:dark_oak_ship_helm", + "vs_eureka:crimson_ship_helm", + "vs_eureka:warped_ship_helm" + }; + + for (final String item : exclusions) { + InterModComms.sendTo("carryon", "blacklistBlock", () -> { + LOGGER.debug("carryon->blacklistBlock->" + item); + return item; + }); + } + } } void clientSetup(final FMLClientSetupEvent event) { From aebf457082bd62bcbcec649ec2df6a5dc53d42d6 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Mon, 12 Jun 2023 01:21:44 +0200 Subject: [PATCH 10/32] Fixed log message --- .../java/org/valkyrienskies/eureka/forge/EurekaModForge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java index 08d401d3..26f8ce8d 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java @@ -60,7 +60,7 @@ private static void carryOnModSupport() { final Logger LOGGER = LogManager.getLogger(EurekaMod.MOD_ID); - LOGGER.info(EurekaMod.MOD_ID + ": Carry On was detected, sending blocklist."); + LOGGER.info(EurekaMod.MOD_ID + ": Carry On was detected, sending blacklist."); final var exclusions = new String[] { "vs_eureka:oak_ship_helm", From 99e90db29d71986a2b69e3c2be2d10e93c58c7c9 Mon Sep 17 00:00:00 2001 From: Rubydesic Date: Wed, 14 Jun 2023 17:08:42 -0400 Subject: [PATCH 11/32] add issue templates --- .github/ISSUE_TEMPLATE/bug_report.yml | 48 +++++++++++++++ .../ISSUE_TEMPLATE/compatibility_issue.yml | 59 +++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/compatibility_issue.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..5d9341bb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,48 @@ +name: Bug report +description: Let us know about a bug that occurs without other mods +title: '' +labels: bug +assignees: [] +body: +- type: checkboxes + attributes: + label: This issue occurs when only Valkyrien Skies and addons are installed and no other mods + options: + - label: I have tested this issue and it occurs when no other mods are installed + required: true +- type: dropdown + attributes: + label: Minecraft Version + description: What Minecraft version does this issue occur on? + options: + - 1.16 + - 1.18 + - 1.19 + validations: + required: true +- type: dropdown + attributes: + label: Mod Loader + description: What mod loader does this issue occur on? + options: + - Forge + - Fabric + - Quilt + validations: + required: true +- type: textarea + attributes: + label: Issue description + description: Describe what happens, and what you expect to happen instead + validations: + required: true +- type: textarea + attributes: + label: Issue reproduction + description: Describe how to reproduce your issue + validations: + required: true +- type: textarea + attributes: + label: Logs + description: Go to `.minecraft/logs` and drag and drop the `latest.log` and `debug.log` file into this text field diff --git a/.github/ISSUE_TEMPLATE/compatibility_issue.yml b/.github/ISSUE_TEMPLATE/compatibility_issue.yml new file mode 100644 index 00000000..1fa48e82 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/compatibility_issue.yml @@ -0,0 +1,59 @@ +name: Compatibility issue +description: Let us know about a bug that occurs when another mod is installed +title: '<title>' +labels: compat +assignees: [] +body: +- type: markdown + attributes: + value: | + **Note:** do not report issues with the following mods: + - Optifine + - Magma Server (maybe try Arclight?) +- type: input + attributes: + label: Mod Name + description: The name of the mod that causes the compatibility issue + validations: + required: true +- type: checkboxes + attributes: + label: This issue occurs when only Valkyrien Skies, addons, and the mod I have specified are installed and no other mods + options: + - label: I have tested this issue and it occurs with only Valkyrien Skies, addons, and the mod I have specified +- type: dropdown + attributes: + label: Minecraft Version + description: What Minecraft version does this issue occur on? + options: + - 1.16 + - 1.18 + - 1.19 + validations: + required: true +- type: dropdown + attributes: + label: Mod Loader + description: What mod loader does this issue occur on? + options: + - Forge + - Fabric + - Quilt + validations: + required: true +- type: textarea + attributes: + label: Issue description + description: Describe what happens, and what you expect to happen instead + validations: + required: true +- type: textarea + attributes: + label: Issue reproduction + description: Describe how to reproduce your issue + validations: + required: true +- type: textarea + attributes: + label: Logs + description: Go to `.minecraft/logs` and drag and drop the `latest.log` and `debug.log` file into this text field From c0071fca8b63511f61c44f28b9c88c405875225a Mon Sep 17 00:00:00 2001 From: StewStrong <stew.strong.420@gmail.com> Date: Thu, 22 Jun 2023 19:05:13 -0600 Subject: [PATCH 12/32] Initial work on 1.20.1 --- .github/workflows/build.yml | 1 + common/build.gradle | 2 +- fabric/build.gradle | 2 +- fabric/src/main/resources/fabric.mod.json | 2 +- forge/build.gradle | 2 +- forge/src/main/resources/META-INF/mods.toml | 2 +- gradle.properties | 17 ++++++++--------- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d8520c9f..32cba144 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,6 +4,7 @@ on: branches: - '1.18.x/*' - '1.19.2/*' + - '1.20.1/*' pull_request: types: [ opened, synchronize, reopened ] jobs: diff --git a/common/build.gradle b/common/build.gradle index 7faea99c..2c40810b 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -12,7 +12,7 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" // Remove the next line if you don't want to depend on the API // modApi "me.shedaniel:architectury:${rootProject.architectury_version}" - modApi("org.valkyrienskies:valkyrienskies-1192-common:${rootProject.vs2_version}") + modApi("org.valkyrienskies:valkyrienskies-1201-common:${rootProject.vs2_version}") implementation("org.valkyrienskies.core:api:1.1.0+ead972f384") { transitive = false } api "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.21" diff --git a/fabric/build.gradle b/fabric/build.gradle index a9cf711e..d6eeabfa 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -33,7 +33,7 @@ dependencies { modImplementation("me.shedaniel.cloth:cloth-config:${cloth_config_version}") // Remove the next line if you don't want to depend on the API - modApi("org.valkyrienskies:valkyrienskies-1192-fabric:${rootProject.vs2_version}") + modApi("org.valkyrienskies:valkyrienskies-1201-fabric:${rootProject.vs2_version}") common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 6c373b8d..b0ad7614 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -40,7 +40,7 @@ "vs_eureka.mixins.json" ], "depends": { - "minecraft": ">=1.18.2", + "minecraft": ">=1.20.1", "valkyrienskies": ">=${vs2_version}" } } \ No newline at end of file diff --git a/forge/build.gradle b/forge/build.gradle index c4bc4e3d..d3facf53 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -51,7 +51,7 @@ configurations { dependencies { forge "net.minecraftforge:forge:${rootProject.forge_version}" - modApi("org.valkyrienskies:valkyrienskies-1192-forge:${rootProject.vs2_version}") { transitive = false } + modApi("org.valkyrienskies:valkyrienskies-1201-forge:${rootProject.vs2_version}") { transitive = false } implementation("org.valkyrienskies.core:api:1.1.0+ead972f384") { transitive = false } common(project(path: ":common", configuration: "namedElements")) { transitive false } diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 7a0d413a..1d37a6c3 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -23,7 +23,7 @@ side = "BOTH" [[dependencies.vs_eureka]] modId = "minecraft" mandatory = true -versionRange = "[1.18.2,)" +versionRange = "[1.20.1,)" ordering = "NONE" side = "BOTH" diff --git a/gradle.properties b/gradle.properties index 3d0a488f..63f21c1f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,20 +2,19 @@ org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G # Identity mod_name=eureka mod_id=vs_eureka -eureka_version=1.2.0-beta.2 +eureka_version=1.3.0-beta.1 enabled_platforms=fabric,forge -archives_base_name=eureka-1192 +archives_base_name=eureka-1201 maven_group=org.valkyrienskies # Dependencies -vs2_version=2.2.0-beta.1+ceaa7cb2ca -minecraft_version=1.19.2 +vs2_version=2.3.0-beta.1+414eee9897 +minecraft_version=1.20.1 architectury_version=6.3.49 -fabric_loader_version=0.14.11 -fabric_api_version=0.73.2+1.19.2 -forge_version=1.19.2-43.1.47 -forge_kotlin_version=3.12.0 +fabric_loader_version=0.14.21 +fabric_api_version=0.84.0+1.20.1 +forge_version=1.20.1-47.0.18 kotlin_version=1.7.21 -cloth_config_version=8.2.88 +cloth_config_version=4.14.64 # Maven publishing vs_maven_url= vs_maven_username= From 7bb438e9f3d6202fd892d2d6d9757328bc10373b Mon Sep 17 00:00:00 2001 From: StewStrong <stew.strong.420@gmail.com> Date: Thu, 22 Jun 2023 20:21:40 -0600 Subject: [PATCH 13/32] Got 1.20.1 mostly working --- .../mixin/client/PlayerEntityModelMixin.java | 2 +- .../eureka/EurekaBlockEntities.kt | 4 +- .../org/valkyrienskies/eureka/EurekaBlocks.kt | 67 ++++++++++--------- .../valkyrienskies/eureka/EurekaEntities.kt | 4 +- .../org/valkyrienskies/eureka/EurekaItems.kt | 31 ++++++--- .../valkyrienskies/eureka/EurekaScreens.kt | 7 +- .../eureka/block/AnchorBlock.kt | 4 +- .../eureka/block/BallastBlock.kt | 4 +- .../eureka/block/BalloonBlock.kt | 2 +- .../eureka/block/EngineBlock.kt | 5 +- .../eureka/block/FloaterBlock.kt | 4 +- .../eureka/blockentity/ShipHelmBlockEntity.kt | 5 +- .../renderer/ShipHelmBlockEntityRenderer.kt | 13 ++-- .../eureka/gui/engine/EngineScreen.kt | 21 +++--- .../eureka/gui/shiphelm/ShipHelmButton.kt | 18 ++--- .../eureka/gui/shiphelm/ShipHelmScreen.kt | 10 +-- .../eureka/gui/shiphelm/ShipHelmScreenMenu.kt | 6 +- .../eureka/util/ShipAssembler.kt | 2 +- .../main/resources/vs_eureka.accesswidener | 2 +- fabric/build.gradle | 2 +- .../eureka/fabric/DeferredRegisterImpl.java | 3 +- .../eureka/fabric/EurekaModFabric.java | 10 +-- .../services/EurekaPlatformHelperFabric.java | 17 ----- .../eureka/forge/EurekaModForge.java | 8 +++ .../services/EurekaPlatformHelperForge.java | 27 -------- 25 files changed, 136 insertions(+), 142 deletions(-) delete mode 100644 fabric/src/main/java/org/valkyrienskies/eureka/fabric/services/EurekaPlatformHelperFabric.java delete mode 100644 forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java diff --git a/common/src/main/java/org/valkyrienskies/eureka/mixin/client/PlayerEntityModelMixin.java b/common/src/main/java/org/valkyrienskies/eureka/mixin/client/PlayerEntityModelMixin.java index f23bf6a0..eb71c97e 100644 --- a/common/src/main/java/org/valkyrienskies/eureka/mixin/client/PlayerEntityModelMixin.java +++ b/common/src/main/java/org/valkyrienskies/eureka/mixin/client/PlayerEntityModelMixin.java @@ -29,7 +29,7 @@ public void setupAnim(final T livingEntity, final CallbackInfo info) { final Entity vehicle = livingEntity.getVehicle(); if (vehicle instanceof ShipMountingEntity) { - if (vehicle.level.getBlockState(vehicle.blockPosition()).isAir()) { + if (vehicle.level().getBlockState(vehicle.blockPosition()).isAir()) { this.riding = false; } } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlockEntities.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlockEntities.kt index edcbd4fa..829cae79 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlockEntities.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlockEntities.kt @@ -3,6 +3,8 @@ package org.valkyrienskies.eureka import net.minecraft.Util import net.minecraft.core.BlockPos import net.minecraft.core.Registry +import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.core.registries.Registries import net.minecraft.util.datafix.fixes.References import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.entity.BlockEntity @@ -15,7 +17,7 @@ import org.valkyrienskies.eureka.registry.RegistrySupplier @Suppress("unused") object EurekaBlockEntities { - private val BLOCKENTITIES = DeferredRegister.create(EurekaMod.MOD_ID, Registry.BLOCK_ENTITY_TYPE_REGISTRY) + private val BLOCKENTITIES = DeferredRegister.create(EurekaMod.MOD_ID, Registries.BLOCK_ENTITY_TYPE) val SHIP_HELM = setOf( EurekaBlocks.OAK_SHIP_HELM, diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlocks.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlocks.kt index 6860b352..f2555229 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlocks.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlocks.kt @@ -1,6 +1,6 @@ package org.valkyrienskies.eureka -import net.minecraft.core.Registry +import net.minecraft.core.registries.Registries import net.minecraft.world.item.BlockItem import net.minecraft.world.item.Item import net.minecraft.world.level.block.Block @@ -8,15 +8,20 @@ import net.minecraft.world.level.block.Blocks import net.minecraft.world.level.block.FireBlock import net.minecraft.world.level.block.SoundType import net.minecraft.world.level.block.state.BlockBehaviour -import net.minecraft.world.level.material.Material -import net.minecraft.world.level.material.MaterialColor -import org.valkyrienskies.eureka.block.* +import net.minecraft.world.level.material.MapColor +import org.valkyrienskies.eureka.block.AnchorBlock +import org.valkyrienskies.eureka.block.BallastBlock +import org.valkyrienskies.eureka.block.BalloonBlock +import org.valkyrienskies.eureka.block.EngineBlock +import org.valkyrienskies.eureka.block.FloaterBlock +import org.valkyrienskies.eureka.block.ShipHelmBlock +import org.valkyrienskies.eureka.block.WoodType import org.valkyrienskies.eureka.registry.DeferredRegister import org.valkyrienskies.mod.common.hooks.VSGameEvents @Suppress("unused") object EurekaBlocks { - private val BLOCKS = DeferredRegister.create(EurekaMod.MOD_ID, Registry.BLOCK_REGISTRY) + private val BLOCKS = DeferredRegister.create(EurekaMod.MOD_ID, Registries.BLOCK) val ANCHOR = BLOCKS.register("anchor", ::AnchorBlock) val ENGINE = BLOCKS.register("engine", ::EngineBlock) @@ -26,49 +31,49 @@ object EurekaBlocks { // region Ship Helms val OAK_SHIP_HELM = BLOCKS.register("oak_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of(Material.WOOD).strength(2.5F).sound(SoundType.WOOD), + BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).strength(2.5F).sound(SoundType.WOOD), WoodType.OAK ) } val SPRUCE_SHIP_HELM = BLOCKS.register("spruce_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of(Material.WOOD).strength(2.5F).sound(SoundType.WOOD), + BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).strength(2.5F).sound(SoundType.WOOD), WoodType.SPRUCE ) } val BIRCH_SHIP_HELM = BLOCKS.register("birch_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of(Material.WOOD).strength(2.5F).sound(SoundType.WOOD), + BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).strength(2.5F).sound(SoundType.WOOD), WoodType.BIRCH ) } val JUNGLE_SHIP_HELM = BLOCKS.register("jungle_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of(Material.WOOD).strength(2.5F).sound(SoundType.WOOD), + BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).strength(2.5F).sound(SoundType.WOOD), WoodType.JUNGLE ) } val ACACIA_SHIP_HELM = BLOCKS.register("acacia_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of(Material.WOOD).strength(2.5F).sound(SoundType.WOOD), + BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).strength(2.5F).sound(SoundType.WOOD), WoodType.ACACIA ) } val DARK_OAK_SHIP_HELM = BLOCKS.register("dark_oak_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of(Material.WOOD).strength(2.5F).sound(SoundType.WOOD), + BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).strength(2.5F).sound(SoundType.WOOD), WoodType.DARK_OAK ) } val CRIMSON_SHIP_HELM = BLOCKS.register("crimson_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of(Material.NETHER_WOOD).strength(2.5F).sound(SoundType.STEM), + BlockBehaviour.Properties.of().mapColor(MapColor.NETHER).strength(2.5F).sound(SoundType.STEM), WoodType.CRIMSON ) } val WARPED_SHIP_HELM = BLOCKS.register("warped_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of(Material.NETHER_WOOD).strength(2.5F).sound(SoundType.STEM), + BlockBehaviour.Properties.of().mapColor(MapColor.NETHER).strength(2.5F).sound(SoundType.STEM), WoodType.WARPED ) } @@ -77,87 +82,87 @@ object EurekaBlocks { // region Balloons val BALLOON = BLOCKS.register("balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.WOOL).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.SNOW).sound(SoundType.WOOL) ) } val WHITE_BALLOON = BLOCKS.register("white_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.SNOW).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.SNOW).sound(SoundType.WOOL) ) } val LIGHT_GRAY_BALLOON = BLOCKS.register("light_gray_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_LIGHT_GRAY).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GRAY).sound(SoundType.WOOL) ) } val GRAY_BALLOON = BLOCKS.register("gray_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_GRAY).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GRAY).sound(SoundType.WOOL) ) } val BLACK_BALLOON = BLOCKS.register("black_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_BLACK).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BLACK).sound(SoundType.WOOL) ) } val RED_BALLOON = BLOCKS.register("red_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_RED).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_RED).sound(SoundType.WOOL) ) } val ORANGE_BALLOON = BLOCKS.register("orange_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_ORANGE).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_ORANGE).sound(SoundType.WOOL) ) } val YELLOW_BALLOON = BLOCKS.register("yellow_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_YELLOW).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_YELLOW).sound(SoundType.WOOL) ) } val LIME_BALLOON = BLOCKS.register("lime_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_LIGHT_GREEN).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GREEN).sound(SoundType.WOOL) ) } val GREEN_BALLOON = BLOCKS.register("green_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_GREEN).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GREEN).sound(SoundType.WOOL) ) } val LIGHT_BLUE_BALLOON = BLOCKS.register("light_blue_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_LIGHT_BLUE).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_BLUE).sound(SoundType.WOOL) ) } val CYAN_BALLOON = BLOCKS.register("cyan_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_CYAN).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_CYAN).sound(SoundType.WOOL) ) } val BLUE_BALLOON = BLOCKS.register("blue_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_BLUE).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BLUE).sound(SoundType.WOOL) ) } val PURPLE_BALLOON = BLOCKS.register("purple_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_PURPLE).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_PURPLE).sound(SoundType.WOOL) ) } val MAGENTA_BALLOON = BLOCKS.register("magenta_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_MAGENTA).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_MAGENTA).sound(SoundType.WOOL) ) } val PINK_BALLOON = BLOCKS.register("pink_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_PINK).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_PINK).sound(SoundType.WOOL) ) } val BROWN_BALLOON = BLOCKS.register("brown_balloon") { BalloonBlock( - BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_BROWN).sound(SoundType.WOOL) + BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BROWN).sound(SoundType.WOOL) ) } // endregion @@ -209,7 +214,7 @@ object EurekaBlocks { // aka all blocks fun registerItems(items: DeferredRegister<Item>) { BLOCKS.forEach { - items.register(it.name) { BlockItem(it.get(), Item.Properties().tab(EurekaItems.TAB)) } + items.register(it.name) { BlockItem(it.get(), Item.Properties()) } } } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaEntities.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaEntities.kt index 96758a72..dada1583 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaEntities.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaEntities.kt @@ -2,7 +2,7 @@ package org.valkyrienskies.eureka import net.minecraft.client.renderer.entity.EntityRendererProvider import net.minecraft.client.renderer.entity.EntityRenderers -import net.minecraft.core.Registry +import net.minecraft.core.registries.Registries import net.minecraft.world.entity.Entity import net.minecraft.world.entity.EntityType import net.minecraft.world.entity.MobCategory @@ -22,7 +22,7 @@ private data class ToRegEntityRenderer<T : Entity>( } object EurekaEntities { - private val ENTITIES = DeferredRegister.create(EurekaMod.MOD_ID, Registry.ENTITY_TYPE_REGISTRY) + private val ENTITIES = DeferredRegister.create(EurekaMod.MOD_ID, Registries.ENTITY_TYPE) private val ENTITY_RENDERERS = mutableListOf<ToRegEntityRenderer<*>>() // val SEAT = ::SeatEntity category MobCategory.MISC byName "seat" registerRenderer ::EmptyRenderer diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaItems.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaItems.kt index e14fb84c..73aa0d04 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaItems.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaItems.kt @@ -1,27 +1,42 @@ package org.valkyrienskies.eureka import net.minecraft.core.Registry +import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.core.registries.Registries +import net.minecraft.network.chat.Component +import net.minecraft.resources.ResourceKey import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack -import org.valkyrienskies.eureka.registry.CreativeTabs import org.valkyrienskies.eureka.registry.DeferredRegister +import org.valkyrienskies.eureka.registry.RegistrySupplier @Suppress("unused") object EurekaItems { - private val ITEMS = DeferredRegister.create(EurekaMod.MOD_ID, Registry.ITEM_REGISTRY) - val TAB: CreativeModeTab = CreativeTabs.create( - ResourceLocation( - EurekaMod.MOD_ID, - "eureka_tab" - ) - ) { ItemStack(EurekaBlocks.OAK_SHIP_HELM.get()) } + private val ITEMS = DeferredRegister.create(EurekaMod.MOD_ID, Registries.ITEM) + private val TAB: ResourceKey<CreativeModeTab> = ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation(EurekaMod.MOD_ID, "eureka_tab")) fun register() { EurekaBlocks.registerItems(ITEMS) ITEMS.applyAll() } + fun registerCreativeTab() { + Registry.register( + BuiltInRegistries.CREATIVE_MODE_TAB, + TAB, + CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) + .title(Component.translatable("itemGroup.eureka")) + .icon { ItemStack(EurekaBlocks.OAK_SHIP_HELM.get()) } + .displayItems { _, output -> + ITEMS.forEach { registrySupplier: RegistrySupplier<Item> -> + output.accept(registrySupplier.get()) + } + } + .build() + ) + } + private infix fun Item.byName(name: String) = ITEMS.register(name) { this } } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaScreens.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaScreens.kt index df9457da..1bcabae7 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaScreens.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaScreens.kt @@ -1,7 +1,8 @@ package org.valkyrienskies.eureka -import net.minecraft.core.Registry +import net.minecraft.core.registries.Registries import net.minecraft.world.entity.player.Inventory +import net.minecraft.world.flag.FeatureFlags import net.minecraft.world.inventory.AbstractContainerMenu import net.minecraft.world.inventory.MenuType import org.valkyrienskies.eureka.gui.engine.EngineScreenMenu @@ -12,7 +13,7 @@ private typealias HFactory<T> = (syncId: Int, playerInv: Inventory) -> T @Suppress("unused") object EurekaScreens { - private val SCREENS = DeferredRegister.create(EurekaMod.MOD_ID, Registry.MENU_REGISTRY) + private val SCREENS = DeferredRegister.create(EurekaMod.MOD_ID, Registries.MENU) val SHIP_HELM = ShipHelmScreenMenu.factory withName "ship_helm" val ENGINE = EngineScreenMenu.factory withName "engine" @@ -22,5 +23,5 @@ object EurekaScreens { } private infix fun <T : AbstractContainerMenu> HFactory<T>.withName(name: String) = - SCREENS.register(name) { MenuType(this) } + SCREENS.register(name) { MenuType(this, FeatureFlags.VANILLA_SET) } } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/block/AnchorBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/AnchorBlock.kt index e4255bf8..34805d4c 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/AnchorBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/AnchorBlock.kt @@ -12,7 +12,7 @@ import net.minecraft.world.level.block.SoundType import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.block.state.StateDefinition import net.minecraft.world.level.block.state.properties.BlockStateProperties -import net.minecraft.world.level.material.Material +import net.minecraft.world.level.material.MapColor import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape import org.valkyrienskies.core.api.ships.getAttachment @@ -23,7 +23,7 @@ import org.valkyrienskies.mod.common.getShipManagingPos import org.valkyrienskies.mod.common.getShipObjectManagingPos class AnchorBlock : - HorizontalDirectionalBlock(Properties.of(Material.METAL).strength(5.0f, 1200.0f).sound(SoundType.ANVIL)) { + HorizontalDirectionalBlock(Properties.of().mapColor(MapColor.METAL).strength(5.0f, 1200.0f).sound(SoundType.ANVIL)) { val ANCHOR_BOTTOM = RotShapes.box(2.0, 2.0, 14.0, 14.0, 4.0, 16.0) val ANCHOR_ROD = RotShapes.box(7.0, 2.0, 14.0, 9.0, 24.0, 16.0) diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/block/BallastBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/BallastBlock.kt index 3eeb7602..f528aad5 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/BallastBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/BallastBlock.kt @@ -8,10 +8,10 @@ import net.minecraft.world.level.block.SoundType import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.block.state.StateDefinition import net.minecraft.world.level.block.state.properties.BlockStateProperties.POWER -import net.minecraft.world.level.material.Material +import net.minecraft.world.level.material.MapColor class BallastBlock : Block( - Properties.of(Material.STONE) + Properties.of().mapColor(MapColor.STONE) .sound(SoundType.STONE).strength(1.0f, 2.0f) ) { diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/block/BalloonBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/BalloonBlock.kt index 9964df5d..c486a521 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/BalloonBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/BalloonBlock.kt @@ -19,7 +19,7 @@ import org.valkyrienskies.mod.common.getShipObjectManagingPos class BalloonBlock(properties: Properties) : Block(properties) { override fun fallOn(level: Level, state: BlockState, blockPos: BlockPos, entity: Entity, f: Float) { - entity.causeFallDamage(f, 0.2f, DamageSource.FALL) + entity.causeFallDamage(f, 0.2f, entity.damageSources().fall()) } override fun onPlace(state: BlockState, level: Level, pos: BlockPos, oldState: BlockState, isMoving: Boolean) { diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt index 8f147d1a..add92590 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt @@ -22,14 +22,13 @@ import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.block.state.StateDefinition import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING -import net.minecraft.world.level.material.Material +import net.minecraft.world.level.material.MapColor import net.minecraft.world.phys.BlockHitResult import org.valkyrienskies.eureka.EurekaProperties.HEAT import org.valkyrienskies.eureka.blockentity.EngineBlockEntity -import java.util.* class EngineBlock : BaseEntityBlock( - Properties.of(Material.STONE) + Properties.of().mapColor(MapColor.STONE) .requiresCorrectToolForDrops() .strength(3.5F) .sound(SoundType.STONE) diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/block/FloaterBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/FloaterBlock.kt index d7b4b8f8..9b3d9d89 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/FloaterBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/FloaterBlock.kt @@ -8,14 +8,14 @@ import net.minecraft.world.level.block.SoundType import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.block.state.StateDefinition import net.minecraft.world.level.block.state.properties.BlockStateProperties.POWER -import net.minecraft.world.level.material.Material +import net.minecraft.world.level.material.MapColor import org.valkyrienskies.core.api.ships.getAttachment import org.valkyrienskies.eureka.ship.EurekaShipControl import org.valkyrienskies.mod.common.getShipManagingPos import org.valkyrienskies.mod.common.getShipObjectManagingPos class FloaterBlock : Block( - Properties.of(Material.WOOD) + Properties.of().mapColor(MapColor.WOOD) .sound(SoundType.WOOL).strength(1.0f, 2.0f) ) { init { diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt index aa0635bf..76114d4d 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt @@ -4,6 +4,7 @@ import net.minecraft.commands.arguments.EntityAnchorArgument import net.minecraft.core.BlockPos import net.minecraft.core.Direction.Axis import net.minecraft.core.Registry +import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.network.chat.Component import net.minecraft.server.level.ServerLevel import net.minecraft.world.MenuProvider @@ -101,7 +102,7 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : ShipAssembler.collectBlocks( level, blockPos - ) { !it.isAir && !EurekaConfig.SERVER.blockBlacklist.contains(Registry.BLOCK.getKey(it.block).toString()) } + ) { !it.isAir && !EurekaConfig.SERVER.blockBlacklist.contains(BuiltInRegistries.BLOCK.getKey(it.block).toString()) } } fun disassemble() { @@ -123,7 +124,7 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : ship, control.aligningTo, this.blockPos, - BlockPos(inWorld.x, inWorld.y, inWorld.z) + BlockPos.containing(inWorld.x, inWorld.y, inWorld.z) ) // ship.die() TODO i think we do need this no? or autodetecting on all air diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/renderer/ShipHelmBlockEntityRenderer.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/renderer/ShipHelmBlockEntityRenderer.kt index a48e2778..64a97c12 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/renderer/ShipHelmBlockEntityRenderer.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/renderer/ShipHelmBlockEntityRenderer.kt @@ -1,11 +1,13 @@ package org.valkyrienskies.eureka.blockentity.renderer import com.mojang.blaze3d.vertex.PoseStack -import com.mojang.math.Vector3f import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BlockEntityRenderer import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider import net.minecraft.world.level.block.state.properties.BlockStateProperties +import org.joml.AxisAngle4f +import org.joml.Quaternionf +import org.joml.Vector3f import org.valkyrienskies.eureka.blockentity.ShipHelmBlockEntity import org.valkyrienskies.mod.common.getShipManagingPos @@ -25,8 +27,11 @@ class ShipHelmBlockEntityRenderer(val ctx: BlockEntityRendererProvider.Context) matrixStack.translate(0.5, 0.60, 0.5) // Rotate wheel towards the direction its facing matrixStack.mulPose( - Vector3f.YP.rotationDegrees( - -blockEntity.blockState.getValue(BlockStateProperties.HORIZONTAL_FACING).toYRot() + Quaternionf( + AxisAngle4f( + (-blockEntity.blockState.getValue(BlockStateProperties.HORIZONTAL_FACING) + .toYRot() * Math.PI / 180.0).toFloat(), 0.0f, 1.0f, 0.0f + ) ) ) val ship = (blockEntity.level)?.getShipManagingPos(blockEntity.blockPos) @@ -37,7 +42,7 @@ class ShipHelmBlockEntityRenderer(val ctx: BlockEntityRendererProvider.Context) // Add offset of the base based of rotation matrixStack.translate(0.0, 0.0, 0.19) // Rotate the wheel based of the ship omega - matrixStack.mulPose(Vector3f.ZP.rotation((rot / 20f * Math.PI.toFloat()).toFloat())) + matrixStack.mulPose(Quaternionf(AxisAngle4f((rot / 20f * Math.PI.toFloat()).toFloat(), 0.0f, 0.0f, 1.0f))) // Render the wheel WheelModels.render(matrixStack, blockEntity, buffer, combinedLight, combinedOverlay) diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/engine/EngineScreen.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/engine/EngineScreen.kt index 7bbc6bee..4a83b830 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/engine/EngineScreen.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/engine/EngineScreen.kt @@ -2,6 +2,7 @@ package org.valkyrienskies.eureka.gui.engine import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.PoseStack +import net.minecraft.client.gui.GuiGraphics import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen import net.minecraft.client.renderer.GameRenderer import net.minecraft.network.chat.Component @@ -13,7 +14,7 @@ class EngineScreen(handler: EngineScreenMenu, playerInventory: Inventory, text: AbstractContainerScreen<EngineScreenMenu>(handler, playerInventory, text) { // The texture is 512 so every coord is 2 pixels big - override fun renderBg(matrixStack: PoseStack, partialTicks: Float, mouseX: Int, mouseY: Int) { + override fun renderBg(guiGraphics: GuiGraphics, partialTicks: Float, mouseX: Int, mouseY: Int) { RenderSystem.setShader { GameRenderer.getPositionTexShader() } RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f) RenderSystem.setShaderTexture(0, TEXTURE) @@ -22,10 +23,10 @@ class EngineScreen(handler: EngineScreenMenu, playerInventory: Inventory, text: menu as EngineScreenMenu - matrixStack.pushPose() + guiGraphics.pose().pushPose() // This matrix magic is bcs the texture is 512x512 and is 256x256 mc classic (mojank) - matrixStack.translate(xP.toDouble(), yP.toDouble(), 0.0) - matrixStack.scale(2f, 2f, 2F) + guiGraphics.pose().translate(xP.toDouble(), yP.toDouble(), 0.0) + guiGraphics.pose().scale(2f, 2f, 2F) // Draw the container background val (containerX, containerY) = if (menu.heatLevel > 1) @@ -33,7 +34,7 @@ class EngineScreen(handler: EngineScreenMenu, playerInventory: Inventory, text: else Pair(CONTAINER_X, CONTAINER_Y) - blit(matrixStack, FIRE_HOLE_X, FIRE_HOLE_Y, containerX, containerY, FIRE_HOLE_WIDTH, FIRE_HOLE_HEIGHT) + guiGraphics.blit(TEXTURE, FIRE_HOLE_X, FIRE_HOLE_Y, containerX, containerY, FIRE_HOLE_WIDTH, FIRE_HOLE_HEIGHT) // region COALS // Draw the coal @@ -42,7 +43,7 @@ class EngineScreen(handler: EngineScreenMenu, playerInventory: Inventory, text: fun coal(xC: Int, yC: Int, heightC: Int, mult: Float) { val drop = (t * mult).toInt() val calcY = FIRE_HOLE_HEIGHT - heightC + drop - blit(matrixStack, FIRE_HOLE_X, FIRE_HOLE_Y + calcY, xC, yC, COAL_WIDTH, heightC) + guiGraphics.blit(TEXTURE, FIRE_HOLE_X, FIRE_HOLE_Y + calcY, xC, yC, COAL_WIDTH, heightC) } coal(COAL_4_X, COAL_4_Y, COAL_4_HEIGHT, COAL_4_MULT) @@ -58,14 +59,14 @@ class EngineScreen(handler: EngineScreenMenu, playerInventory: Inventory, text: else Pair(GLASS_X, GLASS_Y) - blit(matrixStack, FIRE_HOLE_X, FIRE_HOLE_Y, glassX, glassY, FIRE_HOLE_WIDTH, FIRE_HOLE_HEIGHT) + guiGraphics.blit(TEXTURE, FIRE_HOLE_X, FIRE_HOLE_Y, glassX, glassY, FIRE_HOLE_WIDTH, FIRE_HOLE_HEIGHT) // Draw the inventory - blit(matrixStack, 0, 0, 0, 0, imageWidth / 2, imageHeight / 2) - matrixStack.popPose() + guiGraphics.blit(TEXTURE, 0, 0, 0, 0, imageWidth / 2, imageHeight / 2) + guiGraphics.pose().popPose() } - override fun renderLabels(poseStack: PoseStack?, mouseX: Int, mouseY: Int) { + override fun renderLabels(guiGraphics: GuiGraphics, mouseX: Int, mouseY: Int) { // super.renderLabels(poseStack, mouseX, mouseY) } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmButton.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmButton.kt index 45ab9c6c..4f6226f3 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmButton.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmButton.kt @@ -1,15 +1,15 @@ package org.valkyrienskies.eureka.gui.shiphelm import com.mojang.blaze3d.systems.RenderSystem -import com.mojang.blaze3d.vertex.PoseStack import net.minecraft.client.gui.Font +import net.minecraft.client.gui.GuiGraphics import net.minecraft.client.gui.components.Button import net.minecraft.client.renderer.GameRenderer import net.minecraft.network.chat.Component import net.minecraft.util.FormattedCharSequence class ShipHelmButton(x: Int, y: Int, text: Component, private val font: Font, onPress: OnPress) : - Button(x, y, 156, 23, text, onPress) { + Button(x, y, 156, 23, text, onPress, DEFAULT_NARRATION) { var isPressed = false @@ -17,7 +17,7 @@ class ShipHelmButton(x: Int, y: Int, text: Component, private val font: Font, on active = true } - override fun renderButton(poseStack: PoseStack, mouseX: Int, mouseY: Int, partialTicks: Float) { + override fun renderWidget(guiGraphics: GuiGraphics, mouseX: Int, mouseY: Int, partialTicks: Float) { if (!isHovered) isPressed = false RenderSystem.setShader { GameRenderer.getPositionTexShader() } @@ -29,18 +29,18 @@ class ShipHelmButton(x: Int, y: Int, text: Component, private val font: Font, on RenderSystem.enableDepthTest() if (this.isPressed || !this.active) { - this.blit(poseStack, x, y, BUTTON_P_X, BUTTON_P_Y, width, height) + guiGraphics.blit(ShipHelmScreen.TEXTURE, x, y, BUTTON_P_X, BUTTON_P_Y, width, height) } else if (this.isHovered) { - this.blit(poseStack, x, y, BUTTON_H_X, BUTTON_H_Y, width, height) + guiGraphics.blit(ShipHelmScreen.TEXTURE, x, y, BUTTON_H_X, BUTTON_H_Y, width, height) } val color = 0x404040 val formattedCharSequence: FormattedCharSequence = message.visualOrderText - font.draw( - poseStack, + guiGraphics.drawString( + font, formattedCharSequence, - ((x + width / 2) - font.width(formattedCharSequence) / 2).toFloat(), - (y + (height - 8) / 2).toFloat(), + ((x + width / 2) - font.width(formattedCharSequence) / 2), + (y + (height - 8) / 2), color ) } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt index 4c3bde8e..6eed517d 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt @@ -1,8 +1,8 @@ package org.valkyrienskies.eureka.gui.shiphelm import com.mojang.blaze3d.systems.RenderSystem -import com.mojang.blaze3d.vertex.PoseStack import net.minecraft.client.Minecraft +import net.minecraft.client.gui.GuiGraphics import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen import net.minecraft.client.renderer.GameRenderer import net.minecraft.network.chat.Component @@ -60,7 +60,7 @@ class ShipHelmScreen(handler: ShipHelmScreenMenu, playerInventory: Inventory, te disassembleButton.active = EurekaConfig.SERVER.allowDisassembly && isLookingAtShip } - override fun renderBg(matrixStack: PoseStack, partialTicks: Float, mouseX: Int, mouseY: Int) { + override fun renderBg(guiGraphics: GuiGraphics, partialTicks: Float, mouseX: Int, mouseY: Int) { updateButtons() RenderSystem.setShader { GameRenderer.getPositionTexShader() } @@ -68,11 +68,11 @@ class ShipHelmScreen(handler: ShipHelmScreenMenu, playerInventory: Inventory, te RenderSystem.setShaderTexture(0, TEXTURE) val x = (width - imageWidth) / 2 val y = (height - imageHeight) / 2 - blit(matrixStack, x, y, 0, 0, imageWidth, imageHeight) + guiGraphics.blit(TEXTURE, x, y, 0, 0, imageWidth, imageHeight) } - override fun renderLabels(matrixStack: PoseStack, i: Int, j: Int) { - font.draw(matrixStack, title, titleLabelX.toFloat(), titleLabelY.toFloat(), 0x404040) + override fun renderLabels(guiGraphics: GuiGraphics, i: Int, j: Int) { + guiGraphics.drawString(font, title, titleLabelX, titleLabelY, 0x404040) if (this.menu.aligning) { alignButton.message = ALIGNING_TEXT diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreenMenu.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreenMenu.kt index 8c3670da..228fb533 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreenMenu.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreenMenu.kt @@ -22,17 +22,17 @@ class ShipHelmScreenMenu(syncId: Int, playerInv: Inventory, private val blockEnt override fun clickMenuButton(player: Player, id: Int): Boolean { if (blockEntity == null) return false - if (id == 0 && !assembled && !player.level.isClientSide) { + if (id == 0 && !assembled && !player.level().isClientSide) { blockEntity.assemble() return true } - if (id == 1 && assembled && !player.level.isClientSide) { + if (id == 1 && assembled && !player.level().isClientSide) { blockEntity.align() return true } - if (id == 3 && assembled && !player.level.isClientSide && EurekaConfig.SERVER.allowDisassembly) { + if (id == 3 && assembled && !player.level().isClientSide && EurekaConfig.SERVER.allowDisassembly) { blockEntity.disassemble() return true } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt index 44df1c78..7ff49449 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt @@ -117,7 +117,7 @@ object ShipAssembler { if (state.isAir) continue val realX = (chunkX shl 4) + x - val realY = section.bottomBlockY() + y + val realY = chunk.minBuildHeight + y val realZ = (chunkZ shl 4) + z val inWorldPos = shipToWorld.transformPosition(alloc0.set(realX + 0.5, realY + 0.5, realZ + 0.5)).floor() diff --git a/common/src/main/resources/vs_eureka.accesswidener b/common/src/main/resources/vs_eureka.accesswidener index dce1e7e9..eba66be8 100644 --- a/common/src/main/resources/vs_eureka.accesswidener +++ b/common/src/main/resources/vs_eureka.accesswidener @@ -1,5 +1,5 @@ accessWidener v1 named -accessible method net/minecraft/world/inventory/MenuType <init> (Lnet/minecraft/world/inventory/MenuType$MenuSupplier;)V +accessible method net/minecraft/world/inventory/MenuType <init> (Lnet/minecraft/world/inventory/MenuType$MenuSupplier;Lnet/minecraft/world/flag/FeatureFlagSet;)V accessible method net/minecraft/client/gui/screens/MenuScreens register (Lnet/minecraft/world/inventory/MenuType;Lnet/minecraft/client/gui/screens/MenuScreens$ScreenConstructor;)V accessible class net/minecraft/world/entity/EntityType$Builder accessible method net/minecraft/client/renderer/entity/EntityRenderers register (Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/client/renderer/entity/EntityRendererProvider;)V diff --git a/fabric/build.gradle b/fabric/build.gradle index d6eeabfa..1e8898e6 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -29,7 +29,7 @@ dependencies { modImplementation("net.fabricmc:fabric-language-kotlin:1.8.5+kotlin.1.7.20") // Mod menu - modImplementation("com.terraformersmc:modmenu:4.1.0") + // modImplementation("com.terraformersmc:modmenu:4.1.0") modImplementation("me.shedaniel.cloth:cloth-config:${cloth_config_version}") // Remove the next line if you don't want to depend on the API diff --git a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/DeferredRegisterImpl.java b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/DeferredRegisterImpl.java index 97c7d3d9..6dffa766 100644 --- a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/DeferredRegisterImpl.java +++ b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/DeferredRegisterImpl.java @@ -2,6 +2,7 @@ import kotlin.jvm.functions.Function0; import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; @@ -19,7 +20,7 @@ public class DeferredRegisterImpl<T> implements DeferredRegister<T> { public DeferredRegisterImpl(String modId, ResourceKey<Registry<T>> registry) { this.modId = modId; - this.registry = (Registry<T>) Registry.REGISTRY.get(registry.location()); + this.registry = (Registry<T>) BuiltInRegistries.REGISTRY.get(registry.location()); } @NotNull diff --git a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java index e6363b34..d5b23d93 100644 --- a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java +++ b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java @@ -1,7 +1,5 @@ package org.valkyrienskies.eureka.fabric; -import com.terraformersmc.modmenu.api.ConfigScreenFactory; -import com.terraformersmc.modmenu.api.ModMenuApi; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -11,14 +9,12 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.resources.ResourceLocation; -import org.valkyrienskies.core.impl.config.VSConfigClass; import org.valkyrienskies.eureka.EurekaBlockEntities; -import org.valkyrienskies.eureka.EurekaConfig; +import org.valkyrienskies.eureka.EurekaItems; import org.valkyrienskies.eureka.EurekaMod; import org.valkyrienskies.eureka.block.WoodType; import org.valkyrienskies.eureka.blockentity.renderer.ShipHelmBlockEntityRenderer; import org.valkyrienskies.eureka.blockentity.renderer.WheelModels; -import org.valkyrienskies.mod.compat.clothconfig.VSClothConfig; import org.valkyrienskies.mod.fabric.common.ValkyrienSkiesModFabric; public class EurekaModFabric implements ModInitializer { @@ -28,6 +24,8 @@ public void onInitialize() { new ValkyrienSkiesModFabric().onInitialize(); EurekaMod.init(); + + EurekaItems.INSTANCE.registerCreativeTab(); } @Environment(EnvType.CLIENT) @@ -53,6 +51,7 @@ public void onInitializeClient() { } } + /* public static class ModMenu implements ModMenuApi { @Override public ConfigScreenFactory<?> getModConfigScreenFactory() { @@ -62,4 +61,5 @@ public ConfigScreenFactory<?> getModConfigScreenFactory() { ); } } + */ } diff --git a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/services/EurekaPlatformHelperFabric.java b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/services/EurekaPlatformHelperFabric.java deleted file mode 100644 index a26deedf..00000000 --- a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/services/EurekaPlatformHelperFabric.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.valkyrienskies.eureka.fabric.services; - -import kotlin.jvm.functions.Function0; -import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.NotNull; -import org.valkyrienskies.eureka.services.EurekaPlatformHelper; - -public class EurekaPlatformHelperFabric implements EurekaPlatformHelper { - @NotNull - @Override - public CreativeModeTab createCreativeTab(@NotNull ResourceLocation id, @NotNull Function0<ItemStack> stack) { - return FabricItemGroupBuilder.build(id, stack::invoke); - } -} diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java index 26f8ce8d..746f6f78 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java @@ -12,6 +12,7 @@ import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.loading.FMLEnvironment; import org.apache.logging.log4j.LogManager; @@ -19,6 +20,7 @@ import org.valkyrienskies.core.impl.config.VSConfigClass; import org.valkyrienskies.eureka.EurekaBlockEntities; import org.valkyrienskies.eureka.EurekaConfig; +import org.valkyrienskies.eureka.EurekaItems; import org.valkyrienskies.eureka.EurekaMod; import org.valkyrienskies.eureka.block.WoodType; import org.valkyrienskies.eureka.blockentity.renderer.ShipHelmBlockEntityRenderer; @@ -43,6 +45,8 @@ public EurekaModForge() { MOD_BUS.addListener(this::entityRenderers); } + MOD_BUS.addListener(this::loadComplete); + ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> new ConfigScreenHandler.ConfigScreenFactory((Minecraft client, Screen parent) -> VSClothConfig.createConfigScreenFor(parent, @@ -109,4 +113,8 @@ void onModelBaked(final ModelEvent.BakingCompleted event) { Minecraft.getInstance().getModelManager().getMissingModel() )); } + + void loadComplete(final FMLLoadCompleteEvent event) { + EurekaItems.INSTANCE.registerCreativeTab(); + } } diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java deleted file mode 100644 index d73b6c58..00000000 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.valkyrienskies.eureka.forge.services; - -import kotlin.jvm.functions.Function0; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.NotNull; -import org.valkyrienskies.eureka.services.EurekaPlatformHelper; - -public class EurekaPlatformHelperForge implements EurekaPlatformHelper { - @NotNull - @Override - public CreativeModeTab createCreativeTab(@NotNull ResourceLocation id, @NotNull Function0<ItemStack> stack) { - return new CreativeModeTab(id.toString()) { - @Override - public ItemStack makeIcon() { - return stack.invoke(); - } - - @Override - public Component getDisplayName() { - return Component.translatable("itemGroup." + String.format("%s.%s", id.getNamespace(), id.getPath())); - } - }; - } -} From 939263cca9b3df784c0da709f365b06cda83a47c Mon Sep 17 00:00:00 2001 From: StewStrong <stew.strong.420@gmail.com> Date: Thu, 22 Jun 2023 21:11:32 -0600 Subject: [PATCH 14/32] Re-enabled modmenu --- build.gradle | 4 ++++ fabric/build.gradle | 4 ++-- .../org/valkyrienskies/eureka/fabric/EurekaModFabric.java | 7 +++++-- gradle.properties | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 3370230f..75c0183c 100644 --- a/build.gradle +++ b/build.gradle @@ -43,6 +43,10 @@ subprojects { name = "ParchmentMC" url = "https://maven.parchmentmc.org" } + maven { + name = "Modrinth" + url = "https://api.modrinth.com/maven" + } } dependencies { diff --git a/fabric/build.gradle b/fabric/build.gradle index 1e8898e6..75fc58b2 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -29,8 +29,8 @@ dependencies { modImplementation("net.fabricmc:fabric-language-kotlin:1.8.5+kotlin.1.7.20") // Mod menu - // modImplementation("com.terraformersmc:modmenu:4.1.0") - modImplementation("me.shedaniel.cloth:cloth-config:${cloth_config_version}") + modImplementation("maven.modrinth:modmenu:7.1.0") + modImplementation("me.shedaniel.cloth:cloth-config:11.0.99") // Remove the next line if you don't want to depend on the API modApi("org.valkyrienskies:valkyrienskies-1201-fabric:${rootProject.vs2_version}") diff --git a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java index d5b23d93..53266f4f 100644 --- a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java +++ b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java @@ -1,5 +1,7 @@ package org.valkyrienskies.eureka.fabric; +import com.terraformersmc.modmenu.api.ConfigScreenFactory; +import com.terraformersmc.modmenu.api.ModMenuApi; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -9,12 +11,15 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.resources.ResourceLocation; +import org.valkyrienskies.core.impl.config.VSConfigClass; import org.valkyrienskies.eureka.EurekaBlockEntities; +import org.valkyrienskies.eureka.EurekaConfig; import org.valkyrienskies.eureka.EurekaItems; import org.valkyrienskies.eureka.EurekaMod; import org.valkyrienskies.eureka.block.WoodType; import org.valkyrienskies.eureka.blockentity.renderer.ShipHelmBlockEntityRenderer; import org.valkyrienskies.eureka.blockentity.renderer.WheelModels; +import org.valkyrienskies.mod.compat.clothconfig.VSClothConfig; import org.valkyrienskies.mod.fabric.common.ValkyrienSkiesModFabric; public class EurekaModFabric implements ModInitializer { @@ -51,7 +56,6 @@ public void onInitializeClient() { } } - /* public static class ModMenu implements ModMenuApi { @Override public ConfigScreenFactory<?> getModConfigScreenFactory() { @@ -61,5 +65,4 @@ public ConfigScreenFactory<?> getModConfigScreenFactory() { ); } } - */ } diff --git a/gradle.properties b/gradle.properties index 63f21c1f..a66c2cbf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ enabled_platforms=fabric,forge archives_base_name=eureka-1201 maven_group=org.valkyrienskies # Dependencies -vs2_version=2.3.0-beta.1+414eee9897 +vs2_version=2.3.0-beta.1+c9e7ee4d7f minecraft_version=1.20.1 architectury_version=6.3.49 fabric_loader_version=0.14.21 From b50ccea2a8349427195765974ac4e88d8a1c94ee Mon Sep 17 00:00:00 2001 From: StewStrong <stew.strong.420@gmail.com> Date: Thu, 22 Jun 2023 22:10:50 -0600 Subject: [PATCH 15/32] Fixed ship helm text looking sus --- .../org/valkyrienskies/eureka/gui/shiphelm/ShipHelmButton.kt | 3 ++- .../org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmButton.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmButton.kt index 4f6226f3..4d182868 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmButton.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmButton.kt @@ -41,7 +41,8 @@ class ShipHelmButton(x: Int, y: Int, text: Component, private val font: Font, on formattedCharSequence, ((x + width / 2) - font.width(formattedCharSequence) / 2), (y + (height - 8) / 2), - color + color, + false ) } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt index 6eed517d..77f6beda 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreen.kt @@ -72,7 +72,7 @@ class ShipHelmScreen(handler: ShipHelmScreenMenu, playerInventory: Inventory, te } override fun renderLabels(guiGraphics: GuiGraphics, i: Int, j: Int) { - guiGraphics.drawString(font, title, titleLabelX, titleLabelY, 0x404040) + guiGraphics.drawString(font, title, titleLabelX, titleLabelY, 0x404040, false) if (this.menu.aligning) { alignButton.message = ALIGNING_TEXT From 8c62c8b7ec917a0a387d736077b08efce503b2c9 Mon Sep 17 00:00:00 2001 From: StewStrong <stew.strong.420@gmail.com> Date: Fri, 23 Jun 2023 03:29:01 -0600 Subject: [PATCH 16/32] Added block tags to Fabric --- .../eureka/fabric/EurekaBlockTagsProvider.kt | 58 +++++++++++++++++++ .../eureka/fabric/EurekaDataGenerator.kt | 13 +++++ fabric/src/main/resources/fabric.mod.json | 3 + 3 files changed, 74 insertions(+) create mode 100644 fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaBlockTagsProvider.kt create mode 100644 fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaDataGenerator.kt diff --git a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaBlockTagsProvider.kt b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaBlockTagsProvider.kt new file mode 100644 index 00000000..8a3a004d --- /dev/null +++ b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaBlockTagsProvider.kt @@ -0,0 +1,58 @@ +package org.valkyrienskies.eureka.fabric + +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput +import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider +import net.minecraft.core.HolderLookup +import net.minecraft.tags.BlockTags +import org.valkyrienskies.eureka.EurekaBlocks +import java.util.concurrent.CompletableFuture + +class EurekaBlockTagsProvider(output: FabricDataOutput, registriesFuture: CompletableFuture<HolderLookup.Provider>) : + FabricTagProvider.BlockTagProvider(output, registriesFuture) { + override fun addTags(arg: HolderLookup.Provider) { + getOrCreateTagBuilder(BlockTags.WOOL) + .add(EurekaBlocks.BALLOON.get()) + .add(EurekaBlocks.WHITE_BALLOON.get()) + .add(EurekaBlocks.LIGHT_GRAY_BALLOON.get()) + .add(EurekaBlocks.GRAY_BALLOON.get()) + .add(EurekaBlocks.BLACK_BALLOON.get()) + .add(EurekaBlocks.RED_BALLOON.get()) + .add(EurekaBlocks.ORANGE_BALLOON.get()) + .add(EurekaBlocks.YELLOW_BALLOON.get()) + .add(EurekaBlocks.LIME_BALLOON.get()) + .add(EurekaBlocks.GREEN_BALLOON.get()) + .add(EurekaBlocks.LIGHT_BLUE_BALLOON.get()) + .add(EurekaBlocks.CYAN_BALLOON.get()) + .add(EurekaBlocks.BLUE_BALLOON.get()) + .add(EurekaBlocks.PURPLE_BALLOON.get()) + .add(EurekaBlocks.MAGENTA_BALLOON.get()) + .add(EurekaBlocks.PINK_BALLOON.get()) + .add(EurekaBlocks.BROWN_BALLOON.get()) + .add(EurekaBlocks.FLOATER.get()) + + getOrCreateTagBuilder(BlockTags.PLANKS) + .add(EurekaBlocks.OAK_SHIP_HELM.get()) + .add(EurekaBlocks.SPRUCE_SHIP_HELM.get()) + .add(EurekaBlocks.BIRCH_SHIP_HELM.get()) + .add(EurekaBlocks.JUNGLE_SHIP_HELM.get()) + .add(EurekaBlocks.ACACIA_SHIP_HELM.get()) + .add(EurekaBlocks.DARK_OAK_SHIP_HELM.get()) + .add(EurekaBlocks.CRIMSON_SHIP_HELM.get()) + .add(EurekaBlocks.WARPED_SHIP_HELM.get()) + + getOrCreateTagBuilder(BlockTags.MINEABLE_WITH_AXE) + .add(EurekaBlocks.OAK_SHIP_HELM.get()) + .add(EurekaBlocks.SPRUCE_SHIP_HELM.get()) + .add(EurekaBlocks.BIRCH_SHIP_HELM.get()) + .add(EurekaBlocks.JUNGLE_SHIP_HELM.get()) + .add(EurekaBlocks.ACACIA_SHIP_HELM.get()) + .add(EurekaBlocks.DARK_OAK_SHIP_HELM.get()) + .add(EurekaBlocks.CRIMSON_SHIP_HELM.get()) + .add(EurekaBlocks.WARPED_SHIP_HELM.get()) + + getOrCreateTagBuilder(BlockTags.MINEABLE_WITH_PICKAXE) + .add(EurekaBlocks.ANCHOR.get()) + .add(EurekaBlocks.ENGINE.get()) + .add(EurekaBlocks.BALLAST.get()) + } +} diff --git a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaDataGenerator.kt b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaDataGenerator.kt new file mode 100644 index 00000000..77ff06d2 --- /dev/null +++ b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaDataGenerator.kt @@ -0,0 +1,13 @@ +package org.valkyrienskies.eureka.fabric + +import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint +import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator + +class EurekaDataGenerator : DataGeneratorEntrypoint { + override fun onInitializeDataGenerator(fabricDataGenerator: FabricDataGenerator) { + val pack: FabricDataGenerator.Pack = fabricDataGenerator.createPack() + pack.addProvider { output, registriesFuture -> + EurekaBlockTagsProvider(output, registriesFuture) + } + } +} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index b0ad7614..dc09a092 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -33,6 +33,9 @@ ], "modmenu": [ "org.valkyrienskies.eureka.fabric.EurekaModFabric${'$'}ModMenu" + ], + "fabric-datagen": [ + "org.valkyrienskies.eureka.fabric.EurekaDataGenerator" ] }, "mixins": [ From 47aeb5edd9a08380edd0a5e2bb626ae02ec93fda Mon Sep 17 00:00:00 2001 From: StewStrong <stew.strong.420@gmail.com> Date: Fri, 23 Jun 2023 03:44:19 -0600 Subject: [PATCH 17/32] Added block tags to Forge --- .../eureka/forge/EurekaBlockTagsProvider.kt | 63 +++++++++++++++++++ .../eureka/forge/EurekaModForge.java | 13 ++++ 2 files changed, 76 insertions(+) create mode 100644 forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaBlockTagsProvider.kt diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaBlockTagsProvider.kt b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaBlockTagsProvider.kt new file mode 100644 index 00000000..5fa88410 --- /dev/null +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaBlockTagsProvider.kt @@ -0,0 +1,63 @@ +package org.valkyrienskies.eureka.forge + +import net.minecraft.core.HolderLookup +import net.minecraft.data.PackOutput +import net.minecraft.tags.BlockTags +import net.minecraftforge.common.data.BlockTagsProvider +import net.minecraftforge.common.data.ExistingFileHelper +import org.valkyrienskies.eureka.EurekaBlocks +import java.util.concurrent.CompletableFuture + +class EurekaBlockTagsProvider( + output: PackOutput, + lookupProvider: CompletableFuture<HolderLookup.Provider>, + modId: String, + existingFileHelper: ExistingFileHelper? +) : BlockTagsProvider(output, lookupProvider, modId, existingFileHelper) { + override fun addTags(arg: HolderLookup.Provider) { + tag(BlockTags.WOOL) + .add(EurekaBlocks.BALLOON.get()) + .add(EurekaBlocks.WHITE_BALLOON.get()) + .add(EurekaBlocks.LIGHT_GRAY_BALLOON.get()) + .add(EurekaBlocks.GRAY_BALLOON.get()) + .add(EurekaBlocks.BLACK_BALLOON.get()) + .add(EurekaBlocks.RED_BALLOON.get()) + .add(EurekaBlocks.ORANGE_BALLOON.get()) + .add(EurekaBlocks.YELLOW_BALLOON.get()) + .add(EurekaBlocks.LIME_BALLOON.get()) + .add(EurekaBlocks.GREEN_BALLOON.get()) + .add(EurekaBlocks.LIGHT_BLUE_BALLOON.get()) + .add(EurekaBlocks.CYAN_BALLOON.get()) + .add(EurekaBlocks.BLUE_BALLOON.get()) + .add(EurekaBlocks.PURPLE_BALLOON.get()) + .add(EurekaBlocks.MAGENTA_BALLOON.get()) + .add(EurekaBlocks.PINK_BALLOON.get()) + .add(EurekaBlocks.BROWN_BALLOON.get()) + .add(EurekaBlocks.FLOATER.get()) + + tag(BlockTags.PLANKS) + .add(EurekaBlocks.OAK_SHIP_HELM.get()) + .add(EurekaBlocks.SPRUCE_SHIP_HELM.get()) + .add(EurekaBlocks.BIRCH_SHIP_HELM.get()) + .add(EurekaBlocks.JUNGLE_SHIP_HELM.get()) + .add(EurekaBlocks.ACACIA_SHIP_HELM.get()) + .add(EurekaBlocks.DARK_OAK_SHIP_HELM.get()) + .add(EurekaBlocks.CRIMSON_SHIP_HELM.get()) + .add(EurekaBlocks.WARPED_SHIP_HELM.get()) + + tag(BlockTags.MINEABLE_WITH_AXE) + .add(EurekaBlocks.OAK_SHIP_HELM.get()) + .add(EurekaBlocks.SPRUCE_SHIP_HELM.get()) + .add(EurekaBlocks.BIRCH_SHIP_HELM.get()) + .add(EurekaBlocks.JUNGLE_SHIP_HELM.get()) + .add(EurekaBlocks.ACACIA_SHIP_HELM.get()) + .add(EurekaBlocks.DARK_OAK_SHIP_HELM.get()) + .add(EurekaBlocks.CRIMSON_SHIP_HELM.get()) + .add(EurekaBlocks.WARPED_SHIP_HELM.get()) + + tag(BlockTags.MINEABLE_WITH_PICKAXE) + .add(EurekaBlocks.ANCHOR.get()) + .add(EurekaBlocks.ENGINE.get()) + .add(EurekaBlocks.BALLAST.get()) + } +} diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java index 746f6f78..22067d6b 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java @@ -6,6 +6,8 @@ import net.minecraftforge.client.ConfigScreenHandler; import net.minecraftforge.client.event.EntityRenderersEvent; import net.minecraftforge.client.event.ModelEvent; +import net.minecraftforge.common.data.BlockTagsProvider; +import net.minecraftforge.data.event.GatherDataEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.InterModComms; import net.minecraftforge.fml.ModList; @@ -45,6 +47,7 @@ public EurekaModForge() { MOD_BUS.addListener(this::entityRenderers); } + MOD_BUS.addListener(this::onGatherData); MOD_BUS.addListener(this::loadComplete); ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, @@ -114,6 +117,16 @@ void onModelBaked(final ModelEvent.BakingCompleted event) { )); } + void onGatherData(final GatherDataEvent event) { + final BlockTagsProvider blockTagProvider = new EurekaBlockTagsProvider( + event.getGenerator().getPackOutput(), + event.getLookupProvider(), + EurekaMod.MOD_ID, + event.getExistingFileHelper() + ); + event.getGenerator().addProvider(event.includeServer(), blockTagProvider); + } + void loadComplete(final FMLLoadCompleteEvent event) { EurekaItems.INSTANCE.registerCreativeTab(); } From a3af9481038b9645634b8eef5b8aa2022f536324 Mon Sep 17 00:00:00 2001 From: StewStrong <stew.strong.420@gmail.com> Date: Wed, 28 Jun 2023 22:28:30 -0600 Subject: [PATCH 18/32] Bump version to 1.3.0-beta.2 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index a66c2cbf..c6c506eb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G # Identity mod_name=eureka mod_id=vs_eureka -eureka_version=1.3.0-beta.1 +eureka_version=1.3.0-beta.2 enabled_platforms=fabric,forge archives_base_name=eureka-1201 maven_group=org.valkyrienskies From c9ef7ad7cb14ac5e80b1105b5cedca65adba5450 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Sat, 15 Jul 2023 21:35:22 +0200 Subject: [PATCH 19/32] Expanded blacklist Blacklist items: * samplings * leaves * some 1.19 blocks --- .../org/valkyrienskies/eureka/EurekaConfig.kt | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt index 5b204c21..66011368 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt @@ -163,7 +163,32 @@ object EurekaConfig { "minecraft:end_portal_frame", "minecraft:end_portal", "minecraft:end_gateway", - "minecraft:portal" + "minecraft:portal", + "minecraft:oak_sapling", + "minecraft:spruce_sapling", + "minecraft:birch_sapling", + "minecraft:jungle_sapling", + "minecraft:acacia_sapling", + "minecraft:dark_oak_sapling", + "minecraft:mangrove_propagule", + "minecraft:cherry_sapling", + "minecraft:oak_leaves", + "minecraft:spruce_leaves", + "minecraft:birch_leaves", + "minecraft:jungle_leaves", + "minecraft:acacia_leaves", + "minecraft:dark_oak_leaves", + "minecraft:mangrove_leaves", + "minecraft:cherry_leaves", + "minecraft:azalea_leaves", + "minecraft:flowering_azalea_leaves", + "minecraft:frog_spawn", + "minecraft:mangrove_roots", + "minecraft:mud", + "minecraft:muddy_mangrove_roots", + "minecraft:reinforced_deepslate", + "minecraft:sculk", + "minecraft:sculk_vein" ) @JsonSchema(description = "Whether the ship helm assembles diagonally connected blocks or not") From 4e0fdd83f0e4a338313f37df51677ab008bd35f8 Mon Sep 17 00:00:00 2001 From: StewStrong <stew.strong.420@gmail.com> Date: Tue, 18 Jul 2023 05:42:15 -0600 Subject: [PATCH 20/32] Fixed forge creative tab --- .../org/valkyrienskies/eureka/EurekaItems.kt | 27 ++++++++----------- .../assets/vs_eureka/lang/en_us.json | 3 ++- .../eureka/fabric/EurekaModFabric.java | 8 +++++- .../eureka/forge/EurekaModForge.java | 12 ++++----- 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaItems.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaItems.kt index 73aa0d04..40ea34a0 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaItems.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaItems.kt @@ -1,7 +1,5 @@ package org.valkyrienskies.eureka -import net.minecraft.core.Registry -import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.core.registries.Registries import net.minecraft.network.chat.Component import net.minecraft.resources.ResourceKey @@ -15,27 +13,24 @@ import org.valkyrienskies.eureka.registry.RegistrySupplier @Suppress("unused") object EurekaItems { private val ITEMS = DeferredRegister.create(EurekaMod.MOD_ID, Registries.ITEM) - private val TAB: ResourceKey<CreativeModeTab> = ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation(EurekaMod.MOD_ID, "eureka_tab")) + val TAB: ResourceKey<CreativeModeTab> = + ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation(EurekaMod.MOD_ID, "eureka_tab")) fun register() { EurekaBlocks.registerItems(ITEMS) ITEMS.applyAll() } - fun registerCreativeTab() { - Registry.register( - BuiltInRegistries.CREATIVE_MODE_TAB, - TAB, - CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) - .title(Component.translatable("itemGroup.eureka")) - .icon { ItemStack(EurekaBlocks.OAK_SHIP_HELM.get()) } - .displayItems { _, output -> - ITEMS.forEach { registrySupplier: RegistrySupplier<Item> -> - output.accept(registrySupplier.get()) - } + fun createCreativeTab(): CreativeModeTab { + return CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) + .title(Component.translatable("itemGroup.eureka")) + .icon { ItemStack(EurekaBlocks.OAK_SHIP_HELM.get()) } + .displayItems { _, output -> + ITEMS.forEach { registrySupplier: RegistrySupplier<Item> -> + output.accept(registrySupplier.get()) } - .build() - ) + } + .build() } private infix fun Item.byName(name: String) = ITEMS.register(name) { this } diff --git a/common/src/main/resources/assets/vs_eureka/lang/en_us.json b/common/src/main/resources/assets/vs_eureka/lang/en_us.json index 0f720f75..f836213f 100644 --- a/common/src/main/resources/assets/vs_eureka/lang/en_us.json +++ b/common/src/main/resources/assets/vs_eureka/lang/en_us.json @@ -37,5 +37,6 @@ "gui.vs_eureka.aligning": "Aligning...", "gui.vs_eureka.todo": "Disassemble", "hud.vs_eureka.start_cruising": "Cruise control enabled", - "hud.vs_eureka.stop_cruising": "Cruise control disabled" + "hud.vs_eureka.stop_cruising": "Cruise control disabled", + "itemGroup.eureka": "Eureka" } \ No newline at end of file diff --git a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java index 53266f4f..273a6c30 100644 --- a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java +++ b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java @@ -10,6 +10,8 @@ import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import org.valkyrienskies.core.impl.config.VSConfigClass; import org.valkyrienskies.eureka.EurekaBlockEntities; @@ -30,7 +32,11 @@ public void onInitialize() { EurekaMod.init(); - EurekaItems.INSTANCE.registerCreativeTab(); + Registry.register( + BuiltInRegistries.CREATIVE_MODE_TAB, + EurekaItems.INSTANCE.getTAB(), + EurekaItems.INSTANCE.createCreativeTab() + ); } @Environment(EnvType.CLIENT) diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java index 22067d6b..54d4b4e8 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java @@ -2,7 +2,9 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.CreativeModeTab; import net.minecraftforge.client.ConfigScreenHandler; import net.minecraftforge.client.event.EntityRenderersEvent; import net.minecraftforge.client.event.ModelEvent; @@ -14,9 +16,9 @@ import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.registries.DeferredRegister; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.valkyrienskies.core.impl.config.VSConfigClass; @@ -48,7 +50,6 @@ public EurekaModForge() { } MOD_BUS.addListener(this::onGatherData); - MOD_BUS.addListener(this::loadComplete); ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> new ConfigScreenHandler.ConfigScreenFactory((Minecraft client, Screen parent) -> @@ -60,6 +61,9 @@ public EurekaModForge() { carryOnModSupport(); + DeferredRegister<CreativeModeTab> deferredRegister = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, EurekaMod.MOD_ID); + deferredRegister.register("general", EurekaItems.INSTANCE::createCreativeTab); + deferredRegister.register(MOD_BUS); } private static void carryOnModSupport() { @@ -126,8 +130,4 @@ void onGatherData(final GatherDataEvent event) { ); event.getGenerator().addProvider(event.includeServer(), blockTagProvider); } - - void loadComplete(final FMLLoadCompleteEvent event) { - EurekaItems.INSTANCE.registerCreativeTab(); - } } From 529e41f46c55cf4394a1755afee1d5ffa9a70a36 Mon Sep 17 00:00:00 2001 From: StewStrong <stew.strong.420@gmail.com> Date: Wed, 19 Jul 2023 20:15:19 -0600 Subject: [PATCH 21/32] Updated version to 1.3.0-beta.3 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index c6c506eb..7e98b6fc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G # Identity mod_name=eureka mod_id=vs_eureka -eureka_version=1.3.0-beta.2 +eureka_version=1.3.0-beta.3 enabled_platforms=fabric,forge archives_base_name=eureka-1201 maven_group=org.valkyrienskies From ba61791cf8aa86192f84112694013155d4146a19 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Sun, 13 Aug 2023 15:54:23 +0200 Subject: [PATCH 22/32] Merge remote-tracking branch 'upstream/1.18.x/main' into 1.19.2/main and Added language entry for "ship too big" (#239) * Merge remote-tracking branch 'upstream/1.18.x/main' into 1.19.2/main * Added translation support for the "Ship is too big" message --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + .../org/valkyrienskies/eureka/EurekaBlocks.kt | 2 +- .../org/valkyrienskies/eureka/EurekaConfig.kt | 35 ++++- .../valkyrienskies/eureka/EurekaWeights.kt | 4 +- .../eureka/block/AnchorBlock.kt | 6 +- .../eureka/block/BalloonBlock.kt | 5 +- .../eureka/block/EngineBlock.kt | 22 ++- .../eureka/block/FloaterBlock.kt | 5 +- .../eureka/block/ShipHelmBlock.kt | 16 ++- .../eureka/blockentity/EngineBlockEntity.kt | 131 +++++++++++++----- .../eureka/blockentity/ShipHelmBlockEntity.kt | 61 +++++++- .../eureka/gui/engine/EngineScreen.kt | 2 +- .../eureka/gui/shiphelm/ShipHelmScreenMenu.kt | 2 +- .../eureka/ship/EurekaShipControl.kt | 28 ++-- .../eureka/util/ShipAssembler.kt | 20 ++- .../assets/vs_eureka/lang/en_au.json | 41 ++++++ .../assets/vs_eureka/lang/en_us.json | 1 + .../resources/assets/vs_eureka/lang/tok.json | 41 ++++++ .../textures/block/engine_front_on_1.png | Bin 2742 -> 736 bytes .../textures/block/engine_front_on_2.png | Bin 2778 -> 818 bytes .../textures/block/engine_front_on_3.png | Bin 2778 -> 857 bytes .../textures/block/engine_front_on_4.png | Bin 2769 -> 1028 bytes .../block/engine_front_on_4.png.mcmeta | 3 +- .../data/vs_eureka/recipes/anchor.json | 6 +- .../vs_eureka/recipes/balloon_leather.json | 2 +- .../data/vs_eureka/recipes/balloon_paper.json | 2 +- .../vs_eureka/recipes/balloon_string.json | 17 --- .../data/vs_eureka/recipes/balloon_wool.json | 2 +- .../data/vs_eureka/recipes/brown_balloon.json | 4 +- .../data/vs_eureka/vs_mass/eureka.json | 8 ++ .../eureka/forge/DeferredRegisterImpl.java | 16 ++- .../eureka/forge/EurekaModForge.java | 4 +- .../ValkyrienForgeMixinConfigPlugin.java | 5 +- .../DeferredRegisterBackendForge.java | 5 +- .../services/EurekaPlatformHelperForge.java | 5 +- 35 files changed, 384 insertions(+), 118 deletions(-) create mode 100644 common/src/main/resources/assets/vs_eureka/lang/en_au.json create mode 100644 common/src/main/resources/assets/vs_eureka/lang/tok.json delete mode 100644 common/src/main/resources/data/vs_eureka/recipes/balloon_string.json diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 5d9341bb..f61ff7a1 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -18,6 +18,7 @@ body: - 1.16 - 1.18 - 1.19 + - 1.20​ validations: required: true - type: dropdown diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlocks.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlocks.kt index 6860b352..cd34ec4e 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlocks.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlocks.kt @@ -172,7 +172,7 @@ object EurekaBlocks { // region Flammables // TODO make this part of the registration sequence - fun flammableBlock(block: Block?, flameOdds: Int, burnOdds: Int) { + fun flammableBlock(block: Block, flameOdds: Int, burnOdds: Int) { val fire = Blocks.FIRE as FireBlock fire.setFlammable(block, flameOdds, burnOdds) } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt index 5b204c21..e36f381f 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt @@ -13,11 +13,14 @@ object EurekaConfig { class Server { - @JsonSchema(description = "Movement power per engine heated fully") + @JsonSchema(description = "Movement power per engine when heated fully") val enginePower: Float = 2000000f @JsonSchema(description = "Movement power per engine with minimal heat") - val minEnginePower: Float = 700000f + val minEnginePower: Float = 10000f + + @JsonSchema(description = "Turning power per engine when heated fully") + val engineTurnPower = 1f @JsonSchema(description = "The amount of heat a engine loses per tick") val engineHeatLoss = 0.01f @@ -25,8 +28,20 @@ object EurekaConfig { @JsonSchema(description = "The amount of heat a gain per tick (when burning)") val engineHeatGain = 0.03f + @JsonSchema(description = "Increases heat gained at low heat level, and increased heat decreases when at high heat and not consuming fuel") + val engineHeatChangeExponent = 0.1f + + @JsonSchema(description = "Avoids consuming fuel when heat is 100%") + val engineFuelSaving = false + + @JsonSchema(description = "Increasing this value will result in more items being able to converted to fuel") + val engineMinCapacity = 2000 + + @JsonSchema(description = "Fuel burn time multiplier") + val engineFuelMultiplier = 2f + @JsonSchema(description = "Max speed of a ship without boosting") - val maxCasualSpeed = 20f + val maxCasualSpeed = 15.0 @JsonSchema(description = "The speed at which the ship stabilizes") var stabilizationSpeed = 10.0 @@ -44,13 +59,20 @@ object EurekaConfig { // Sensitivity of the up/down impulse buttons. // TODO maybe should be moved to VS2 client-side config? @JsonSchema(description = "Vertical sensitivity up ascend/descend") - var impulseElevationRate = 7 + var baseImpulseElevationRate = 2.0 + + @JsonSchema(description = "The max elevation speed boost gained by having extra extra balloons") + var balloonElevationMaxSpeed = 5.5 + + // Higher numbers make the ship accelerate to max speed faster + @JsonSchema(description = "Ascend and descend acceleration") + var elevationSnappiness = 1.0 // Allow Eureka controlled ships to be affected by fluid drag @JsonSchema(description = "Allow Eureka controlled ships to be affected by fluid drag") var doFluidDrag = false - // Do i need to explain? the mass 1 baloon gets to float + // Do I need to explain? the mass 1 balloon gets to float @JsonSchema(description = "Amount of mass in kg a balloon can lift") var massPerBalloon = 5000.0 @@ -177,5 +199,8 @@ object EurekaConfig { @JsonSchema(description = "Whether or not disassembly is permitted") val allowDisassembly = true + + @JsonSchema(description = "Maximum number of blocks allowed in a ship. Set to 0 for no limit") + val maxShipBlocks = 32*32*32 } } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaWeights.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaWeights.kt index 6379f84c..316397c3 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaWeights.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaWeights.kt @@ -4,7 +4,7 @@ import net.minecraft.core.Registry import net.minecraft.resources.ResourceLocation import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.block.state.properties.BlockStateProperties -import org.valkyrienskies.core.game.VSBlockType +import org.valkyrienskies.core.apigame.world.chunks.BlockType import org.valkyrienskies.mod.common.BlockStateInfo import org.valkyrienskies.mod.common.BlockStateInfoProvider @@ -26,7 +26,7 @@ object EurekaWeights : BlockStateInfoProvider { return null } - override fun getBlockStateType(blockState: BlockState): VSBlockType? { + override fun getBlockStateType(blockState: BlockState): BlockType? { return null } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/block/AnchorBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/AnchorBlock.kt index e4255bf8..9b133e6f 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/AnchorBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/AnchorBlock.kt @@ -6,6 +6,7 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.world.item.context.BlockPlaceContext import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level +import net.minecraft.world.level.LevelAccessor import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.HorizontalDirectionalBlock import net.minecraft.world.level.block.SoundType @@ -90,9 +91,8 @@ class AnchorBlock : attachment.anchorsActive += if (bl) 1 else 0 } - override fun onRemove(state: BlockState, level: Level, pos: BlockPos, newState: BlockState, isMoving: Boolean) { - super.onRemove(state, level, pos, newState, isMoving) - + override fun destroy(level: LevelAccessor, pos: BlockPos, state: BlockState) { + super.destroy(level, pos, state) if (level.isClientSide) return level as ServerLevel diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/block/BalloonBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/BalloonBlock.kt index 9964df5d..9ed3b21e 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/BalloonBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/BalloonBlock.kt @@ -7,6 +7,7 @@ import net.minecraft.world.damagesource.DamageSource import net.minecraft.world.entity.Entity import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.level.Level +import net.minecraft.world.level.LevelAccessor import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.phys.BlockHitResult @@ -32,8 +33,8 @@ class BalloonBlock(properties: Properties) : Block(properties) { EurekaShipControl.getOrCreate(ship).balloons += 1 } - override fun onRemove(state: BlockState, level: Level, pos: BlockPos, newState: BlockState, isMoving: Boolean) { - super.onRemove(state, level, pos, newState, isMoving) + override fun destroy(level: LevelAccessor, pos: BlockPos, state: BlockState) { + super.destroy(level, pos, state) if (level.isClientSide) return level as ServerLevel diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt index 8f147d1a..680f62e7 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt @@ -8,6 +8,7 @@ import net.minecraft.sounds.SoundSource import net.minecraft.util.RandomSource import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult +import net.minecraft.world.entity.item.ItemEntity import net.minecraft.world.entity.player.Player import net.minecraft.world.item.context.BlockPlaceContext import net.minecraft.world.level.BlockGetter @@ -77,11 +78,11 @@ class EngineBlock : BaseEntityBlock( return RenderShape.MODEL } - override fun getShadeBrightness(state: BlockState?, level: BlockGetter?, pos: BlockPos?): Float { - if (state?.getValue(HEAT) ?: 0 > 0) { - return 1.0f + override fun getShadeBrightness(state: BlockState, level: BlockGetter, pos: BlockPos): Float { + return if ((state.getValue(HEAT) ?: 0) > 0) { + 1.0f } else { - return super.getShadeBrightness(state, level, pos) + super.getShadeBrightness(state, level, pos) } } @@ -120,4 +121,17 @@ class EngineBlock : BaseEntityBlock( blockEntity.tick() } } + + override fun playerWillDestroy(level: Level, pos: BlockPos, state: BlockState, player: Player) { + if (!level.isClientSide) { + val blockEntity = level.getBlockEntity(pos) as EngineBlockEntity + + // Drop inventory + if (!blockEntity.fuel.isEmpty) { + level.addFreshEntity(ItemEntity(level, pos.x.toDouble(), pos.y.toDouble(), pos.z.toDouble(), blockEntity.fuel)) + } + } + + super.playerWillDestroy(level, pos, state, player) + } } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/block/FloaterBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/FloaterBlock.kt index d7b4b8f8..c9aa97b4 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/FloaterBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/FloaterBlock.kt @@ -3,6 +3,7 @@ package org.valkyrienskies.eureka.block import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.Level +import net.minecraft.world.level.LevelAccessor import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.SoundType import net.minecraft.world.level.block.state.BlockState @@ -61,8 +62,8 @@ class FloaterBlock : Block( level.setBlock(pos, state.setValue(POWER, signal), 2) } - override fun onRemove(state: BlockState, level: Level, pos: BlockPos, newState: BlockState, isMoving: Boolean) { - super.onRemove(state, level, pos, newState, isMoving) + override fun destroy(level: LevelAccessor, pos: BlockPos, state: BlockState) { + super.destroy(level, pos, state) if (level.isClientSide) return level as ServerLevel diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/block/ShipHelmBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/ShipHelmBlock.kt index 2662e9d3..0619b09d 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/ShipHelmBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/ShipHelmBlock.kt @@ -10,6 +10,7 @@ import net.minecraft.world.entity.player.Player import net.minecraft.world.item.context.BlockPlaceContext import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level +import net.minecraft.world.level.LevelAccessor import net.minecraft.world.level.block.BaseEntityBlock import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.RenderShape @@ -29,6 +30,7 @@ import org.valkyrienskies.eureka.blockentity.ShipHelmBlockEntity import org.valkyrienskies.eureka.ship.EurekaShipControl import org.valkyrienskies.eureka.util.DirectionalShape import org.valkyrienskies.eureka.util.RotShapes +import org.valkyrienskies.mod.common.ValkyrienSkiesMod import org.valkyrienskies.mod.common.getShipManagingPos import org.valkyrienskies.mod.common.getShipObjectManagingPos import java.awt.TextComponent @@ -53,14 +55,20 @@ class ShipHelmBlock(properties: Properties, val woodType: WoodType) : BaseEntity EurekaShipControl.getOrCreate(ship).helms += 1 } - override fun onRemove(state: BlockState, level: Level, pos: BlockPos, newState: BlockState, isMoving: Boolean) { - super.onRemove(state, level, pos, newState, isMoving) + override fun destroy(level: LevelAccessor, pos: BlockPos, state: BlockState) { + super.destroy(level, pos, state) if (level.isClientSide) return level as ServerLevel - level.getShipManagingPos(pos)?.getAttachment<EurekaShipControl>()?.let { - it.helms -= 1 + level.getShipManagingPos(pos)?.getAttachment<EurekaShipControl>()?.let { control -> + + if (control.helms <= 1 && control.seatedPlayer?.vehicle?.type == ValkyrienSkiesMod.SHIP_MOUNTING_ENTITY_TYPE) { + control.seatedPlayer!!.unRide() + control.seatedPlayer = null + } + + control.helms -= 1 } } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/EngineBlockEntity.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/EngineBlockEntity.kt index daebbc33..dbf349f1 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/EngineBlockEntity.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/EngineBlockEntity.kt @@ -30,6 +30,7 @@ import org.valkyrienskies.eureka.ship.EurekaShipControl import org.valkyrienskies.eureka.util.KtContainerData import org.valkyrienskies.mod.common.getShipManagingPos import kotlin.math.ceil +import kotlin.math.max class EngineBlockEntity(pos: BlockPos, state: BlockState) : BaseContainerBlockEntity(EurekaBlockEntities.ENGINE.get(), pos, state), @@ -40,10 +41,12 @@ class EngineBlockEntity(pos: BlockPos, state: BlockState) : override val ship: ServerShip? get() = (this.level as ServerLevel).getShipManagingPos(this.blockPos) private val eurekaShipControl by shipValue<EurekaShipControl>() val data = KtContainerData() - var heatLevel by data - var fuelLeft by data - var fuelTotal by data - private var fuel: ItemStack = ItemStack.EMPTY + private var heatLevel by data + private var fuelLeft by data + private var fuelTotal by data + var fuel: ItemStack = ItemStack.EMPTY + private var maxEffectiveFuel = 100f - EurekaConfig.SERVER.engineHeatGain + private var lastFuelValue = 1600; // coal: 1600 override fun createMenu(containerId: Int, inventory: Inventory): AbstractContainerMenu = EngineScreenMenu(containerId, inventory, this) @@ -53,24 +56,31 @@ class EngineBlockEntity(pos: BlockPos, state: BlockState) : private var heat = 0f fun tick() { if (!this.level!!.isClientSide) { - // Disable engines when they are receiving a redstone signal - if (level!!.hasNeighborSignal(blockPos)) { - heatLevel = 0 - level!!.setBlock(blockPos, this.blockState.setValue(HEAT, 0), 11) - return - } - - if (this.fuelLeft > 0) { - this.fuelLeft-- - - if (this.heat < 100f) { - this.heat += EurekaConfig.SERVER.engineHeatGain + // Disable engine feeding when they are receiving a redstone signal + if (!level!!.hasNeighborSignal(blockPos)) { + if (fuelLeft > 0) { + + if (EurekaConfig.SERVER.engineFuelSaving) { + if (heat <= maxEffectiveFuel) { + heat += scaleEngineHeating(EurekaConfig.SERVER.engineHeatGain) + fuelLeft-- + } + } else { + fuelLeft-- + + if (heat <= maxEffectiveFuel) { + heat += scaleEngineHeating(EurekaConfig.SERVER.engineHeatGain) + } + } + + // Refill while burning + if (!fuel.isEmpty && lastFuelValue <= EurekaConfig.SERVER.engineMinCapacity - fuelLeft) { + consumeFuel() + } + + } else if (!fuel.isEmpty) { + consumeFuel() } - } else if (!fuel.isEmpty && this.heat < 100f) { - fuelTotal = (FurnaceBlockEntity.getFuel()[fuel.item] ?: 0) * 2 - fuelLeft = fuelTotal - removeItem(0, 1) - setChanged() } val prevHeatLevel = heatLevel @@ -79,23 +89,78 @@ class EngineBlockEntity(pos: BlockPos, state: BlockState) : level!!.setBlock(blockPos, this.blockState.setValue(HEAT, heatLevel), 11) } - if (heat > 0 && ship != null && eurekaShipControl != null) { - eurekaShipControl!!.power += lerp( - heat / 100f, - EurekaConfig.SERVER.minEnginePower, - EurekaConfig.SERVER.enginePower - ) + if (heat > 0) { + + if (ship != null && eurekaShipControl != null) { + + // Avoid fluctuations in speed + var effectiveHeat = 1f + if (heat < maxEffectiveFuel) { + effectiveHeat = heat / 100f; + } + + eurekaShipControl!!.power += lerp( + EurekaConfig.SERVER.minEnginePower, + EurekaConfig.SERVER.enginePower, + effectiveHeat, + ) + + heat -= eurekaShipControl!!.consumed; + } + + heat = max(heat - scaleEngineCooling(EurekaConfig.SERVER.engineHeatLoss),0f) + } + } + } + + fun isBurning(): Boolean = fuelLeft > 0 + + /** + * Get fuel value from the item type stored in the engine. + * + * @return scaled fuel ticks. + */ + private fun getScaledFuel(): Int = ((FurnaceBlockEntity.getFuel()[fuel.item] ?: 0) * EurekaConfig.SERVER.engineFuelMultiplier).toInt() + + /** + * Absorb one fuel item into the engine. + */ + private fun consumeFuel() { - heat -= eurekaShipControl!!.consumed + lastFuelValue = getScaledFuel() + + if (lastFuelValue > 0) { + if (fuelLeft > 0 && lastFuelValue > EurekaConfig.SERVER.engineMinCapacity - fuelLeft) { + return } - if (heat > 0) { - heat -= min(EurekaConfig.SERVER.engineHeatLoss, heat) + fuelLeft += lastFuelValue + fuelTotal = max(lastFuelValue, EurekaConfig.SERVER.engineMinCapacity) + + // Handle items like lava buckets + if (fuel.item.hasCraftingRemainingItem()) { + fuel = ItemStack(fuel.item.craftingRemainingItem!!, 1) + } else { + removeItem(0, 1) } + setChanged() } } - fun isBurning() = fuelLeft > 0 + /** + * Scale given heating [value] based on current heat. + * + * @return the scaled value. + */ + private fun scaleEngineHeating(value: Float): Float = (100 * EurekaConfig.SERVER.engineHeatChangeExponent - + this.heat * EurekaConfig.SERVER.engineHeatChangeExponent + 1f) * value + + /** + * Scale given cooling [value] based on current heat. + * + * @return the scaled value. + */ + private fun scaleEngineCooling(value: Float): Float = (this.heat * EurekaConfig.SERVER.engineHeatChangeExponent + 1f) * value override fun saveAdditional(tag: CompoundTag) { tag.put("FuelSlot", fuel.save(CompoundTag())) @@ -148,13 +213,13 @@ class EngineBlockEntity(pos: BlockPos, state: BlockState) : ) <= 64.0 } - override fun getSlotsForFace(side: Direction?): IntArray = + override fun getSlotsForFace(side: Direction): IntArray = if (side == Direction.DOWN) intArrayOf() else intArrayOf(0) override fun canPlaceItemThroughFace(index: Int, itemStack: ItemStack, direction: Direction?): Boolean = direction != Direction.DOWN && canPlaceItem(index, itemStack) - override fun canTakeItemThroughFace(index: Int, stack: ItemStack?, direction: Direction?): Boolean = false + override fun canTakeItemThroughFace(index: Int, stack: ItemStack, direction: Direction): Boolean = false override fun canPlaceItem(index: Int, stack: ItemStack): Boolean = index == 0 && AbstractFurnaceBlockEntity.isFuel(stack) diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt index aa0635bf..5c4ad9a2 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt @@ -22,6 +22,7 @@ import org.valkyrienskies.core.api.ships.ServerShip import org.valkyrienskies.core.api.ships.getAttachment import org.valkyrienskies.core.impl.api.ServerShipProvider import org.valkyrienskies.core.impl.api.shipValue +import org.valkyrienskies.core.impl.util.logger import org.valkyrienskies.eureka.EurekaBlockEntities import org.valkyrienskies.eureka.EurekaConfig import org.valkyrienskies.eureka.block.ShipHelmBlock @@ -40,6 +41,7 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : override var ship: ServerShip? = null // TODO ship is not being set in vs2? get() = field ?: (level as ServerLevel).getShipObjectManagingPos(this.blockPos) val control by shipValue<EurekaShipControl>() + val seats = mutableListOf<ShipMountingEntity>() val assembled get() = ship != null val aligning get() = control?.aligning ?: false var shouldDisassembleWhenPossible = false @@ -84,6 +86,28 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : return entity } + fun startRiding(player: Player, force: Boolean, blockPos: BlockPos, state: BlockState, level: ServerLevel): Boolean { + + for (i in seats.size-1 downTo 0) { + if (!seats[i].isVehicle) { + seats[i].kill() + seats.removeAt(i) + } else if (!seats[i].isAlive) { + seats.removeAt(i) + } + } + + val seat = spawnSeat(blockPos, blockState, level) + val ride = player.startRiding(seat, force) + + if (ride) { + control?.seatedPlayer = player + seats.add(seat) + } + + return ride; + } + fun tick() { if (shouldDisassembleWhenPossible && ship?.getAttachment<EurekaShipControl>()?.canDisassemble == true) { this.disassemble() @@ -91,17 +115,22 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : } // Needs to get called server-side - fun assemble() { + fun assemble(player: Player) { val level = level as ServerLevel // Check the block state before assembling to avoid creating an empty ship val blockState = level.getBlockState(blockPos) if (blockState.block !is ShipHelmBlock) return - ShipAssembler.collectBlocks( + val builtShip = ShipAssembler.collectBlocks( level, blockPos ) { !it.isAir && !EurekaConfig.SERVER.blockBlacklist.contains(Registry.BLOCK.getKey(it.block).toString()) } + + if (builtShip == null){ + player.sendSystemMessage(Component.translatable("itemGroup.vs_eureka.maxShipBlocks", EurekaConfig.SERVER.maxShipBlocks)) + logger.warn("Failed to assemble ship for ${player.name.string}") + } } fun disassemble() { @@ -135,9 +164,31 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : control.aligning = !control.aligning } + override fun setRemoved() { + + if (level?.isClientSide == false) { + for (i in seats.indices) { + seats[i].kill() + } + seats.clear() + } + + super.setRemoved() + } + fun sit(player: Player, force: Boolean = false): Boolean { - val seat = spawnSeat(blockPos, blockState, level as ServerLevel) - control?.seatedPlayer = player - return player.startRiding(seat, force) + // If player is already controlling the ship, open the helm menu + if (!force && player.vehicle?.type == ValkyrienSkiesMod.SHIP_MOUNTING_ENTITY_TYPE && seats.contains(player.vehicle as ShipMountingEntity)) + { + player.openMenu(this); + return true; + } + + //val seat = spawnSeat(blockPos, blockState, level as ServerLevel) + //control?.seatedPlayer = player + //return player.startRiding(seat, force) + return startRiding(player, force, blockPos, blockState, level as ServerLevel) + } + private val logger by logger() } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/engine/EngineScreen.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/engine/EngineScreen.kt index 7bbc6bee..c3b68902 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/engine/EngineScreen.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/engine/EngineScreen.kt @@ -65,7 +65,7 @@ class EngineScreen(handler: EngineScreenMenu, playerInventory: Inventory, text: matrixStack.popPose() } - override fun renderLabels(poseStack: PoseStack?, mouseX: Int, mouseY: Int) { + override fun renderLabels(poseStack: PoseStack, mouseX: Int, mouseY: Int) { // super.renderLabels(poseStack, mouseX, mouseY) } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreenMenu.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreenMenu.kt index 8c3670da..d348ba02 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreenMenu.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmScreenMenu.kt @@ -23,7 +23,7 @@ class ShipHelmScreenMenu(syncId: Int, playerInv: Inventory, private val blockEnt if (blockEntity == null) return false if (id == 0 && !assembled && !player.level.isClientSide) { - blockEntity.assemble() + blockEntity.assemble(player) return true } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/ship/EurekaShipControl.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/ship/EurekaShipControl.kt index 45327c03..2133ac15 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/ship/EurekaShipControl.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/ship/EurekaShipControl.kt @@ -100,12 +100,13 @@ class EurekaShipControl : ShipForcesInducer, ServerShipUser, Ticked { physShip as PhysShipImpl + val ship = ship ?: return val mass = physShip.inertia.shipMass val moiTensor = physShip.inertia.momentOfInertiaTensor val segment = physShip.segments.segments[0]?.segmentDisplacement!! val omega: Vector3dc = SegmentUtils.getOmega(physShip.poseVel, segment, Vector3d()) val vel = SegmentUtils.getVelocity(physShip.poseVel, segment, Vector3d()) - val ship = ship ?: return + val balloonForceProvided = balloons * forcePerBalloon val buoyantFactorPerFloater = min( @@ -216,7 +217,8 @@ class EurekaShipControl : ShipForcesInducer, ServerShipUser, Ticked { }.coerceIn(0.5, EurekaConfig.SERVER.maxSizeForTurnSpeedPenalty) val maxLinearAcceleration = EurekaConfig.SERVER.turnAcceleration - val maxLinearSpeed = EurekaConfig.SERVER.turnSpeed + val maxLinearSpeed = EurekaConfig.SERVER.turnSpeed + + extraForce / EurekaConfig.SERVER.enginePower * EurekaConfig.SERVER.engineTurnPower // acceleration = alpha * r // therefore: maxAlpha = maxAcceleration / r @@ -287,7 +289,7 @@ class EurekaShipControl : ShipForcesInducer, ServerShipUser, Ticked { val baseForwardForce = Vector3d(baseForwardVel).sub(velOrthogonalToPlayerUp).mul(mass * 10) // This is the maximum speed we want to go in any scenario (when not sprinting) - val idealForwardVel = Vector3d(forwardVector).mul(EurekaConfig.SERVER.maxCasualSpeed.toDouble()) + val idealForwardVel = Vector3d(forwardVector).mul(EurekaConfig.SERVER.maxCasualSpeed) val idealForwardForce = Vector3d(idealForwardVel).sub(velOrthogonalToPlayerUp).mul(mass * 10) val extraForceNeeded = Vector3d(idealForwardForce).sub(baseForwardForce) @@ -304,20 +306,19 @@ class EurekaShipControl : ShipForcesInducer, ServerShipUser, Ticked { if (control.upImpulse != 0.0f) { idealUpwardVel = Vector3d(0.0, 1.0, 0.0) .mul(control.upImpulse.toDouble()) - .mul(EurekaConfig.SERVER.impulseElevationRate.toDouble()) + .mul(EurekaConfig.SERVER.baseImpulseElevationRate + + // Smoothing for how the elevation scales as you approaches the balloonElevationMaxSpeed + smoothing(2.0, EurekaConfig.SERVER.balloonElevationMaxSpeed, balloonForceProvided / mass) + ) } } // region Elevation - // Higher numbers make the ship accelerate to max speed faster - val elevationSnappiness = 10.0 val idealUpwardForce = Vector3d( 0.0, - idealUpwardVel.y() - vel.y() - (GRAVITY / elevationSnappiness), + idealUpwardVel.y() - vel.y() - (GRAVITY / EurekaConfig.SERVER.elevationSnappiness), 0.0 - ).mul(mass * elevationSnappiness) - - val balloonForceProvided = balloons * forcePerBalloon + ).mul(mass * EurekaConfig.SERVER.elevationSnappiness) val actualUpwardForce = Vector3d(0.0, min(balloonForceProvided, max(idealUpwardForce.y(), 0.0)), 0.0) physShip.applyInvariantForce(actualUpwardForce) @@ -366,11 +367,16 @@ class EurekaShipControl : ShipForcesInducer, ServerShipUser, Ticked { } private fun deleteIfEmpty() { - if (helms == 0 && floaters == 0 && anchors == 0 && balloons == 0) { + if (helms <= 0 && floaters <= 0 && anchors <= 0 && balloons <= 0) { ship?.saveAttachment<EurekaShipControl>(null) } } + /** + * f(x) = max - smoothing / (x + (smoothing / max)) + */ + private fun smoothing(smoothing: Double, max: Double, x: Double): Double = max - smoothing / (x + (smoothing / max)) + companion object { fun getOrCreate(ship: ServerShip): EurekaShipControl { return ship.getAttachment<EurekaShipControl>() diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt index 44df1c78..4a00cfa0 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt @@ -33,12 +33,16 @@ import kotlin.math.round import kotlin.math.sign object ShipAssembler { - fun collectBlocks(level: ServerLevel, center: BlockPos, predicate: (BlockState) -> Boolean): ServerShip { + fun collectBlocks(level: ServerLevel, center: BlockPos, predicate: (BlockState) -> Boolean): ServerShip? { val blocks = DenseBlockPosSet() blocks.add(center.toJOML()) - bfs(level, center, blocks, predicate) - return createNewShipWithBlocks(center, blocks, level) + val result = bfs(level, center, blocks, predicate) + if (result) { + return createNewShipWithBlocks(center, blocks, level) + } else { + return null + } } private fun roundToNearestMultipleOf(number: Double, multiple: Double) = multiple * round(number / multiple) @@ -154,7 +158,7 @@ object ShipAssembler { start: BlockPos, blocks: DenseBlockPosSet, predicate: (BlockState) -> Boolean - ) { + ): Boolean { val blacklist = DenseBlockPosSet() val stack = ObjectArrayList<BlockPos>() @@ -173,7 +177,15 @@ object ShipAssembler { } } } + if ((EurekaConfig.SERVER.maxShipBlocks > 0) and (blocks.size > EurekaConfig.SERVER.maxShipBlocks)) { + logger.info("Stopped ship assembly due too many blocks") + return false + } + } + if (EurekaConfig.SERVER.maxShipBlocks > 0){ + logger.info("Assembled ship with ${blocks.size} blocks, out of ${EurekaConfig.SERVER.maxShipBlocks} allowed") } + return true } private fun directions(center: BlockPos, lambda: (BlockPos) -> Unit) { diff --git a/common/src/main/resources/assets/vs_eureka/lang/en_au.json b/common/src/main/resources/assets/vs_eureka/lang/en_au.json new file mode 100644 index 00000000..861c3927 --- /dev/null +++ b/common/src/main/resources/assets/vs_eureka/lang/en_au.json @@ -0,0 +1,41 @@ +{ + "itemGroup.vs_eureka.eureka_tab": "Vis ya-eeka?", + "block.vs_eureka.oak_ship_helm": "Oyshelm", + "block.vs_eureka.spruce_ship_helm": "Spruy shelm", + "block.vs_eureka.birch_ship_helm": "Bury shelm", + "block.vs_eureka.jungle_ship_helm": "Junga shelm", + "block.vs_eureka.acacia_ship_helm": "Acky shelm", + "block.vs_eureka.dark_oak_ship_helm": "Droaka' shelm", + "block.vs_eureka.crimson_ship_helm": "Crimy shelm", + "block.vs_eureka.warped_ship_helm": "Wapa shelm", + "block.vs_eureka.anchor": "Ancha", + "block.vs_eureka.engine": "Enin'", + "block.vs_eureka.balloon": "Loony", + "block.vs_eureka.white_balloon": "White Loony", + "block.vs_eureka.light_gray_balloon": "Light Gray Loony", + "block.vs_eureka.gray_balloon": "Gray Loony", + "block.vs_eureka.black_balloon": "Black Loony", + "block.vs_eureka.red_balloon": "Red Loony", + "block.vs_eureka.orange_balloon": "Orange Loony", + "block.vs_eureka.yellow_balloon": "Yellow Loony", + "block.vs_eureka.lime_balloon": "Lime Loony", + "block.vs_eureka.green_balloon": "Green Loony", + "block.vs_eureka.light_blue_balloon": "Light Blue Loony", + "block.vs_eureka.cyan_balloon": "Cyan Loony", + "block.vs_eureka.blue_balloon": "Blue Loony", + "block.vs_eureka.purple_balloon": "Purple Loony", + "block.vs_eureka.magenta_balloon": "Magenta Loony", + "block.vs_eureka.pink_balloon": "Pink Loony", + "block.vs_eureka.brown_balloon": "Brown Loony", + "block.vs_eureka.floater": "Doodoo", + "block.vs_eureka.ballast": "Ballis", + "gui.vs_eureka.ship_helm": "Shelm", + "gui.vs_eureka.engine": "Enin", + "gui.vs_eureka.assemble": "Bang'n a twist", + "gui.vs_eureka.disassemble": "Right, now yoowh put it down", + "gui.vs_eureka.align": "M8", + "gui.vs_eureka.aligning": "M8ing...", + "gui.vs_eureka.todo": "Right, now yoowh put it down", + "hud.vs_eureka.start_cruising": "Cruise is on, watch out for roo's", + "hud.vs_eureka.stop_cruising": "Cruise is out" +} diff --git a/common/src/main/resources/assets/vs_eureka/lang/en_us.json b/common/src/main/resources/assets/vs_eureka/lang/en_us.json index 0f720f75..869dc9ef 100644 --- a/common/src/main/resources/assets/vs_eureka/lang/en_us.json +++ b/common/src/main/resources/assets/vs_eureka/lang/en_us.json @@ -1,5 +1,6 @@ { "itemGroup.vs_eureka.eureka_tab": "VS Eureka", + "itemGroup.vs_eureka.maxShipBlocks": "Ship is too big! Max size is %s blocks (changeable in the config)", "block.vs_eureka.oak_ship_helm": "Oak Ship Helm", "block.vs_eureka.spruce_ship_helm": "Spruce Ship Helm", "block.vs_eureka.birch_ship_helm": "Birch Ship Helm", diff --git a/common/src/main/resources/assets/vs_eureka/lang/tok.json b/common/src/main/resources/assets/vs_eureka/lang/tok.json new file mode 100644 index 00000000..be5ad106 --- /dev/null +++ b/common/src/main/resources/assets/vs_eureka/lang/tok.json @@ -0,0 +1,41 @@ +{ + "itemGroup.vs_eureka.eureka_tab": "ilo VS Eureka", + "block.vs_eureka.oak_ship_helm": "ilo lawa pi tomo tawa pi kasi kili", + "block.vs_eureka.spruce_ship_helm": "ilo lawa pi tomo tawa pi kasi lete", + "block.vs_eureka.birch_ship_helm": "ilo lawa kasi walo pi tomo tawa", + "block.vs_eureka.jungle_ship_helm": "ilo lawa pi tomo tawa pi kasi suli", + "block.vs_eureka.acacia_ship_helm": "ilo lawa kasi loje jelo pi tomo tawa", + "block.vs_eureka.dark_oak_ship_helm": "ilo lawa kasi pimeja pi tomo tawa", + "block.vs_eureka.crimson_ship_helm": "ilo lawa loje pi tomo tawa", + "block.vs_eureka.warped_ship_helm": "ilo lawa laso pi tomo tawa", + "block.vs_eureka.anchor": "ilo awen", + "block.vs_eureka.engine": "ilo wawa pi tomo tawa", + "block.vs_eureka.balloon": "poki kon", + "block.vs_eureka.white_balloon": "poki kon walo", + "block.vs_eureka.light_gray_balloon": "poki kon pi walo pimeja", + "block.vs_eureka.gray_balloon": "poki kon pi pimeja walo", + "block.vs_eureka.black_balloon": "poki kon pimeja", + "block.vs_eureka.red_balloon": "poki kon loje", + "block.vs_eureka.orange_balloon": "poki kon pi loje jelo", + "block.vs_eureka.yellow_balloon": "poki kon jelo", + "block.vs_eureka.lime_balloon": "poki kon pi laso jelo", + "block.vs_eureka.green_balloon": "poki kon pi laso kasi", + "block.vs_eureka.light_blue_balloon": "poki kon pi laso telo walo", + "block.vs_eureka.cyan_balloon": "poki kon laso", + "block.vs_eureka.blue_balloon": "poki kon pi laso telo", + "block.vs_eureka.purple_balloon": "poki kon pi laso loje", + "block.vs_eureka.magenta_balloon": "poki kon pi loje laso", + "block.vs_eureka.pink_balloon": "poki kon pi walo loje", + "block.vs_eureka.brown_balloon": "poki kon pi kule ma", + "block.vs_eureka.floater": "leko pi tawa sewi lon telo", + "block.vs_eureka.ballast": "leko pi tawa anpa lon telo", + "gui.vs_eureka.ship_helm": "ilo lawa pi tomo tawa", + "gui.vs_eureka.engine": "ilo wawa pi tomo tawa", + "gui.vs_eureka.assemble": "o pali", + "gui.vs_eureka.disassemble": "o leko", + "gui.vs_eureka.align": "o lon nasin leko", + "gui.vs_eureka.aligning": "mi tawa nasin leko", + "gui.vs_eureka.todo": "o leko", + "hud.vs_eureka.start_cruising": "tomo tawa li tawa sama ni", + "hud.vs_eureka.stop_cruising": "sina ken lawa e tomo tawa" +} diff --git a/common/src/main/resources/assets/vs_eureka/textures/block/engine_front_on_1.png b/common/src/main/resources/assets/vs_eureka/textures/block/engine_front_on_1.png index c19d67315e53df3c65dd3bc6782e299615891336..d7c0143f9df35804dec506bdda67fd03f7cc1192 100644 GIT binary patch delta 704 zcmV;x0zdt>72pMs85IKn001mk2>t*700DDSM?wMF$t-`7As2rEN>EHxMa9L%tE{V! zkB?|*XmoURKR!Z9NJvjlPgz)4a(QkuGBP$cHZn3YIyyQ#IyyZ)J!NENE-o*Be}Br# z%6E5o!@|U0UtcOJDu{=OGcq(KB_+YZ!PnN-&d$!u%gevNzbq^)aZyp$*4D(t#B+0V zFfcH!o}Qqfpr3!ApF~4LG&3_WFEO>XwVa%skdKdidU}0&dUSDdaBOXfhloW$Jw-k` zL_9c0J~}`<IDmhDX=Y|NF)c(X97HM{Ln<0WDH=m58#OR2aBXciGAu(c7DO)=L@*XY zE*3N}DrskCb#!z@Ks!i36iGf7NIe!vJQhko7&9;`Vqkw?T3A?HSy)|LSYcgQV_sNf zUsz>dSdov9etLR!adB~NZACpeMn5`1JUBNpEk!CEL@OFYDj7s88$>A^HZd$lHx_DW zW<@p@Mm82?URYvXSYQC$0{{R4FG)l}RCt`#ka<&rP!z?lyvG9~v!X>sEZQt914_*b zEX7<(TikyO+ZWot|GzzGn(8BT=FXinXXY;R0|+n-!k89Do`(QS5Jy;+5W;#M7{Uu= zNEC;IBO%WN7KG6;7?&m{r>3b717aglITlltxI7b$u!sh;sye5{C23w>SmY64BFgfT zs!CEKu^i+uU~VNSCPi^INn40uIzsRH@($A-%-Vk+F@VDBsSQonblosE>C-ew8C&U0 zHk(Or>p4Hz+1)cO%gUSk2SyG7pDPq?s?uS(RH@c@;A_>R<9egfIH{kWoqIvE)$VkA z{eG|8X}6j@{3{+8+NG{J&JT})&*SR)#`)q=y}dK<E$iX&>AB$Z7!+OGwM%Z<t-O5m ma48^<*SFt1`c&^99*<A;LqXiIVakI50000<MNUMnLSTZ!_8va~ literal 2742 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 K+rHxJ=l%<>TiQ<m diff --git a/common/src/main/resources/assets/vs_eureka/textures/block/engine_front_on_2.png b/common/src/main/resources/assets/vs_eureka/textures/block/engine_front_on_2.png index 8d0b00e33ef480fa7e592f199507313b7cce8170..6fc3fa1475e84e2fa41852a794f349e004e80ba0 100644 GIT binary patch delta 786 zcmV+t1MU3U6|x4985IKn001mk2>t*700DDSM?wMF$t-`7As2rEk5EihMa9L%tE{V! zkB?|*XmoURKR!Z9NJvjlPgz)4a(QkuGBP$cHZn3YIyyQ#IyyZ)J!NENE-o*Be}Br# z%6E5o!@|U0UtcOJDu{=OGcq(KB_(lDQP<Yi&d$!u%ge#R!N0%1EG#Uno}R?S#B+0V zFfcIH)YPD$pr3!ApF~4LG&3_WFEO>XwYIgjoSdAIkB@$OdVhL)cX4rmdU|tgZE|dF ziie1hkB^Cmh;waiOhP?QK{`)BI8j16M?E-!e}8LdW<4}5YB?clJ0NH}9%wopXgM8e zJ0NH{AUrcHa&2vZe}6wVEN4R&XhargL>6g87HLHmW<q}!Jv1t7Xl8YEbar)gOGG<! zVH9&;7I9n_aa|U2UKVm;7&|p8WMW@-baYx-SX^3IVO>~fU|4HoSZ-xlZDm-JkB@<R zdU<hib#84?K{!xCI!Qk`d2(@VXl6e)EowU<X+0fiI~`~`9BMouX*nN0H7s*(ZFFvJ zZBZ6&QWk%1QWkA#W^7LuZBQ0(Wms@!SZriiX<}IRF39o#00BHnL_t(|oMT{MWMX1w zVF4l*W)Pc!k(G^^osE^1jg5^J#AaY(<KSfD;^yYz<>Lpj8CW<u1q2y{ghfQf#DQ!H z24+@CDQOuQSy?%G1u02ZW}twgg1nNnoUpL6yo!G+2Qvc;8@Gb6ny|F6u)4YiFFOkZ z3%e#Sw-z_Iwib}!XJY|s0on%!Ad7)!FzEn+E*OAVObpBtdin;2M#e@)CZ=ZQOh8*K z^ewHdZES6AtnG~K%|QYVj!w=lF0O9w9-dy_%nTgfUOv8le*OW0K>@)bp&SexVIkoW zkx_C{(NQt6aq$U2fyAWbl+?7ewDi=J<fKFnh9MOm8HSlg##vd2@W=*-M^0{DJ|sK} z3X7bJOG--1$}1|t;ZfyN?N{R$P!m)eTn7t}8en+THz0>cV^dRFa|<Xu04u6W&JLsA QaR2}S07*qoM6N<$f)Uj<n*aa+ literal 2778 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 diff --git a/common/src/main/resources/assets/vs_eureka/textures/block/engine_front_on_3.png b/common/src/main/resources/assets/vs_eureka/textures/block/engine_front_on_3.png index aeeac5c983fed8c317303980933a3b7e32060bc5..cd2e9a20814b7a7ede80b3c27dcc15b56cf86593 100644 GIT binary patch delta 826 zcmV-A1I7H>71;)m85IKn001mk2>t*700DDSM?wMF$t-`7As2rEwopt|Ma9L%tE{V! zkB?|*XmoURKR!Z9NJvjlPgz)4a(QkuGBP$cHZn3YIyyQ#IyyZ)J!NENE-o*Be}Br# z%6E5oaZyoUUtcOJDu{=OGcq(KB_+YZ!PnN-&d$!u%gevNzbq^)*4Ea<#Kd!Rb1*P4 z)zs9WprD_hpG1E{Lo_opFfTE+wY9djwTXv_ot&JKkB@<RdV_j;d~tDvdU|+lZFOvI zjE9JjkB@h4ZC6G;T}C=zMmS?gI$}sVUqv`lK{$JHaf5$<Zf9mmIW4GDDyUW{rBx)P zR3oHRBBWCyrd24VP$x(@EOl*dfq#F2fPZ#wZB0Hbq-1{<rDhhSW)`Mq7N%zwp<@=N zW*195DsO3Kc6D@jb#!lPW>!l(xtbKWl@_#+7PXKTwUHLIj~2F*7PXcbM?ETNV_#cY zSYKRNXJJ@zXIOb`Sbc6-er{NNZdiD0SY}{Yl#h>tdwPa?dVX<ndT(uFNH}0gI#xtD zesXbfYG!{-JT0kJDW+K>rB))PRUxNXC#F*-OFJxhZ*6&SZLNJ4u6`DBYi6x}7OZ*} zt$P-KZ&-kDSblF<du&*AX;@y|M}q(W0X#`WK~#90V_;xpVq#`t0U{P=5SxLKm5rI5 zjg^&+jg1w=W?*9D;AG?C=H}t$;|H-BSU5Qa1Q~yXghfQf#DQ!H24+@CDQOuQSy4G@ zc_~R&W}twAytJaMoT#vpw6Y2ZGXo17x4f{bu&A)GnwmN<I|~B~y9O_}CO5a1CXnD~ zV*zRb+6M+8i-Be^Y3slMkfqJUz^tpMZ(wL-Y-D6&YG!T@v_)6n!qUpx#@5ct-oX(p z;N*Yo;_Bw^;pye=<Lk%Fz~LVd7!({55*ijB5g8TD!N3s{8yBCDn3SB7nwFjs0~E;2 z%FfBn%g-+;%qhys<X{+5;Za;tYGhnih6s;xaClTyR#ij7qo%gbwZ5UDv8lPG6&xOI zf$hN^A)y`N9g&@|@aRfRPVVkO4v*fxzWy2s6G7nt05q#k`j1&xZvX%Q07*qoM6N<$ Ef=<F?CIA2c literal 2778 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 diff --git a/common/src/main/resources/assets/vs_eureka/textures/block/engine_front_on_4.png b/common/src/main/resources/assets/vs_eureka/textures/block/engine_front_on_4.png index 87126b567346c906d91c7b99fde909217dc8a166..152c3f3cc8822bd162738e58e982f4e5993a0721 100644 GIT binary patch delta 1000 zcmV<E0~h?!6@&<o7Z*SX0{{R3B%=qU00001b5ch_0olnce~}><e*z*<OjJe1#l@?v ztB;S5XlQ73baX#HLP<zSPft%-SXgp-ZZk46Ha0dgGBP?kIy*W#Jv}{TWMwWcFMof3 z%F4=jcX-3X#9v=uDk>_7hln#WG$kb^!NI}T*4EC>&dbZozrVjMEG*X6*2Kibb8~Yr zFfi5B)NxT!L_<R~e={>MFEO>XwYIgjx3#s2hlrh=oRg1_gnD|1dU}9yafo_)d~9ua zY;BE)h>?$vkdKdwhlqP_ZDC10YD+q9OE_{(I&n=pZb~?6N;+IcIDc_*gnxf=Xl7GB zE#7J|-fk}1Y$@4mDA{W#*=Z)?gDBc&EmA!!cy4Wie}962e}8&!ZCOMt*nt+>eH+<% z9@v8x+k_U|g%;wS7TbdtS3@duYG!wJba-}ja%*N_Q9Jg`6!XLu=9M7kmmlh>8}7Uo z^1>GCtQ}HBDr;q5cy)AKT3BISSZriidTdyQb6ARYSd4a9iFR0oa#(9)SeB2EhkJU8 zdU}I#aer`ae{xPZZcaL3NjQUZadm5ESVAq|Z7|$&C)#c&+HNM=Y$e@rE!$}<S3xX% zaBY5ZZRMjD+JhG6q!!tO7S(?i=cE>QZD!@97Vo_l@V*xCzZT=47UiK9@5LC6cvz2k zSd4gBhjdteZ&>7pC){l=;g%KZuNB~y73;4R-jfyYf3X|$#uf0r7VN4U?5Z5!g(BdG zAm5Z1;FTBTlpN}wAn2_Z>#rN@up8!@A-T>t0RR92dr3q=RCt_YU|?ioVrF3hA{J&4 zn}Ly)jhUT|m6eT+jTOXZU}EFoWaHxI=Hcbz2eBDgI5`Cb8H9vIM8(8`YzYQtR!J#o z85vnwe>rJ+DM?mlpn!tBw4$t>u&|P}vI++?0}C6sys)aUuo?*Pva>L-u&eWOYjAUG zY5)m-HWr{3pnYHfvKVLvla{u&whkBoSz1gC%({B|28Kq)Mn)#4X66<^TP*dhtZi)V z>>V7PoL$U80<LcE9-dy_KE8hb0fEd696`Y$f1zRF5s^{RF|l#+91I)@iAl*RscGpM znOWI6xj=!u{DQ)w;*yfmvcmHGJPw8-6&@9pRYu0u)rjz@0f$FzU3~*2JQ|ytJz84Z z+B-VCy20Vm6Vlt)KOwSz;-uKgu<)2Nb=ve9GiM=%$Lu+C=FXcx^umLf^sxYxJ{BUS zMvp~{mqadIhDaaFQ&y~8m9cu($Vne-kkiN7b^Yts_fOmaPahjMP2Id@#>}l)(+2>K WoUA{F-rKkU0000<MNUMnLSTaWZ^}^s literal 2769 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 diff --git a/common/src/main/resources/assets/vs_eureka/textures/block/engine_front_on_4.png.mcmeta b/common/src/main/resources/assets/vs_eureka/textures/block/engine_front_on_4.png.mcmeta index b4e1b3cd..f6730e30 100644 --- a/common/src/main/resources/assets/vs_eureka/textures/block/engine_front_on_4.png.mcmeta +++ b/common/src/main/resources/assets/vs_eureka/textures/block/engine_front_on_4.png.mcmeta @@ -1,6 +1,5 @@ { "animation": { - "interpolate": true, - "frametime": 10 + "frametime": 4 } } \ No newline at end of file diff --git a/common/src/main/resources/data/vs_eureka/recipes/anchor.json b/common/src/main/resources/data/vs_eureka/recipes/anchor.json index f3fad2e1..247fe20e 100644 --- a/common/src/main/resources/data/vs_eureka/recipes/anchor.json +++ b/common/src/main/resources/data/vs_eureka/recipes/anchor.json @@ -3,17 +3,17 @@ "pattern": [ "#i#", " i ", - "IiI" + "iIi" ], "key": { "#": { - "item": "minecraft:string" + "item": "minecraft:lead" }, "i": { "item": "minecraft:iron_ingot" }, "I": { - "item": "minecraft:iron_nugget" + "item": "minecraft:iron_block" } }, "result": { diff --git a/common/src/main/resources/data/vs_eureka/recipes/balloon_leather.json b/common/src/main/resources/data/vs_eureka/recipes/balloon_leather.json index 11f4be31..188215b1 100644 --- a/common/src/main/resources/data/vs_eureka/recipes/balloon_leather.json +++ b/common/src/main/resources/data/vs_eureka/recipes/balloon_leather.json @@ -12,6 +12,6 @@ }, "result": { "item": "vs_eureka:balloon", - "count": 32 + "count": 4 } } \ No newline at end of file diff --git a/common/src/main/resources/data/vs_eureka/recipes/balloon_paper.json b/common/src/main/resources/data/vs_eureka/recipes/balloon_paper.json index a2708426..1cda12b3 100644 --- a/common/src/main/resources/data/vs_eureka/recipes/balloon_paper.json +++ b/common/src/main/resources/data/vs_eureka/recipes/balloon_paper.json @@ -12,6 +12,6 @@ }, "result": { "item": "vs_eureka:balloon", - "count": 16 + "count": 2 } } \ No newline at end of file diff --git a/common/src/main/resources/data/vs_eureka/recipes/balloon_string.json b/common/src/main/resources/data/vs_eureka/recipes/balloon_string.json deleted file mode 100644 index a463943f..00000000 --- a/common/src/main/resources/data/vs_eureka/recipes/balloon_string.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - " # ", - "# #", - " # " - ], - "key": { - "#": { - "item": "minecraft:string" - } - }, - "result": { - "item": "vs_eureka:balloon", - "count": 8 - } -} \ No newline at end of file diff --git a/common/src/main/resources/data/vs_eureka/recipes/balloon_wool.json b/common/src/main/resources/data/vs_eureka/recipes/balloon_wool.json index 96707d45..46e05c32 100644 --- a/common/src/main/resources/data/vs_eureka/recipes/balloon_wool.json +++ b/common/src/main/resources/data/vs_eureka/recipes/balloon_wool.json @@ -12,6 +12,6 @@ }, "result": { "item": "vs_eureka:balloon", - "count": 32 + "count": 4 } } \ No newline at end of file diff --git a/common/src/main/resources/data/vs_eureka/recipes/brown_balloon.json b/common/src/main/resources/data/vs_eureka/recipes/brown_balloon.json index 0ada9051..3c99b894 100644 --- a/common/src/main/resources/data/vs_eureka/recipes/brown_balloon.json +++ b/common/src/main/resources/data/vs_eureka/recipes/brown_balloon.json @@ -5,11 +5,11 @@ "item": "vs_eureka:balloon" }, { - "item": "minecraft:cyan_dye" + "item": "minecraft:brown_dye" } ], "result": { - "item": "vs_eureka:cyan_balloon", + "item": "vs_eureka:brown_balloon", "count": 1 } } \ No newline at end of file diff --git a/common/src/main/resources/data/vs_eureka/vs_mass/eureka.json b/common/src/main/resources/data/vs_eureka/vs_mass/eureka.json index 531f8555..e6472de3 100644 --- a/common/src/main/resources/data/vs_eureka/vs_mass/eureka.json +++ b/common/src/main/resources/data/vs_eureka/vs_mass/eureka.json @@ -2,5 +2,13 @@ { "block": "vs_eureka:ship_helm", "mass": 350.0 + }, + { + "block": "vs_eureka:engine", + "mass": 3200.0 + }, + { + "block": "vs_eureka:anchor", + "mass": 8840.0 } ] diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/DeferredRegisterImpl.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/DeferredRegisterImpl.java index 8e915986..0d48ca5d 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/DeferredRegisterImpl.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/DeferredRegisterImpl.java @@ -1,5 +1,6 @@ package org.valkyrienskies.eureka.forge; +import java.util.Iterator; import kotlin.jvm.functions.Function0; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; @@ -8,19 +9,20 @@ import org.valkyrienskies.eureka.registry.DeferredRegister; import org.valkyrienskies.eureka.registry.RegistrySupplier; -import java.util.Iterator; - public class DeferredRegisterImpl<T> implements DeferredRegister<T> { private final net.minecraftforge.registries.DeferredRegister<T> forge; - public DeferredRegisterImpl(String modId, ResourceKey<Registry<T>> registry) { + public DeferredRegisterImpl(final String modId, final ResourceKey<Registry<T>> registry) { forge = net.minecraftforge.registries.DeferredRegister.create(registry.location(), modId); } @NotNull @Override - public <I extends T> RegistrySupplier<I> register(@NotNull String name, @NotNull Function0<? extends I> builder) { - RegistryObject<I> result = forge.register(name, builder::invoke); + public <I extends T> RegistrySupplier<I> register( + @NotNull final String name, + @NotNull final Function0<? extends I> builder + ) { + final RegistryObject<I> result = forge.register(name, builder::invoke); return new RegistrySupplier<I>() { @NotNull @@ -44,7 +46,7 @@ public void applyAll() { @NotNull @Override public Iterator<RegistrySupplier<T>> iterator() { - Iterator<RegistryObject<T>> iterator = forge.getEntries().iterator(); + final Iterator<RegistryObject<T>> iterator = forge.getEntries().iterator(); return new Iterator<RegistrySupplier<T>>() { @Override @@ -54,7 +56,7 @@ public boolean hasNext() { @Override public RegistrySupplier<T> next() { - RegistryObject<T> result = iterator.next(); + final RegistryObject<T> result = iterator.next(); return new RegistrySupplier<T>() { @NotNull diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java index 26f8ce8d..f4b67fe2 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaModForge.java @@ -83,7 +83,9 @@ private static void carryOnModSupport() { } void clientSetup(final FMLClientSetupEvent event) { - if (handledClientSetup) return; + if (handledClientSetup) { + return; + } handledClientSetup = true; EurekaMod.initClient(); diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/mixin/ValkyrienForgeMixinConfigPlugin.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/mixin/ValkyrienForgeMixinConfigPlugin.java index 57268241..9ca5f567 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/mixin/ValkyrienForgeMixinConfigPlugin.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/mixin/ValkyrienForgeMixinConfigPlugin.java @@ -1,12 +1,11 @@ package org.valkyrienskies.eureka.forge.mixin; +import java.util.List; +import java.util.Set; import org.objectweb.asm.tree.ClassNode; import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; import org.spongepowered.asm.mixin.extensibility.IMixinInfo; -import java.util.List; -import java.util.Set; - /** * For now, just using this class as an abusive early entrypoint to run the updater */ diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/services/DeferredRegisterBackendForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/services/DeferredRegisterBackendForge.java index 25165896..16707975 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/services/DeferredRegisterBackendForge.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/services/DeferredRegisterBackendForge.java @@ -11,7 +11,10 @@ public class DeferredRegisterBackendForge implements DeferredRegisterBackend { @NotNull @Override - public <T> DeferredRegister<T> makeDeferredRegister(@NotNull String id, @NotNull ResourceKey<Registry<T>> registry) { + public <T> DeferredRegister<T> makeDeferredRegister( + @NotNull final String id, + @NotNull final ResourceKey<Registry<T>> registry + ) { return new DeferredRegisterImpl(id, registry); } } diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java index d73b6c58..1e7e9371 100644 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java +++ b/forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java @@ -11,7 +11,10 @@ public class EurekaPlatformHelperForge implements EurekaPlatformHelper { @NotNull @Override - public CreativeModeTab createCreativeTab(@NotNull ResourceLocation id, @NotNull Function0<ItemStack> stack) { + public CreativeModeTab createCreativeTab( + @NotNull final ResourceLocation id, + @NotNull final Function0<ItemStack> stack + ) { return new CreativeModeTab(id.toString()) { @Override public ItemStack makeIcon() { From a19337ec6e3321692c0f8648216ffeed58ac21be Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Sun, 13 Aug 2023 17:31:59 +0200 Subject: [PATCH 23/32] Updated blacklist --- common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt index e17ee58a..2d2bb5df 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt @@ -141,6 +141,7 @@ object EurekaConfig { "minecraft:fern", "minecraft:dead_bush", "minecraft:seagrass", + "minecraft:tall_seagrass", "minecraft:sea_pickle", "minecraft:kelp", "minecraft:bamboo", From 3aa67d49e9dfa574145c4b46f4a1442057ca6bce Mon Sep 17 00:00:00 2001 From: StewStrong <stewstronger@gmail.com> Date: Sat, 30 Dec 2023 12:30:46 -0700 Subject: [PATCH 24/32] Increment version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 85f014fb..1e824633 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G # Identity mod_name=eureka mod_id=vs_eureka -eureka_version=1.2.0-beta.2 +eureka_version=1.2.0-beta.3 enabled_platforms=fabric,forge archives_base_name=eureka-1192 maven_group=org.valkyrienskies From e42f93620ace57b05ef01dab25d1d6cc28e7da96 Mon Sep 17 00:00:00 2001 From: StewStrong <stewstronger@gmail.com> Date: Sat, 30 Dec 2023 13:08:16 -0700 Subject: [PATCH 25/32] Fixed forge server not working --- .../eureka/forge/EurekaModForge.kt | 71 ++----------------- .../eureka/forge/EurekaModForgeClient.kt | 71 +++++++++++++++++++ 2 files changed, 78 insertions(+), 64 deletions(-) create mode 100644 forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForgeClient.kt diff --git a/forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForge.kt b/forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForge.kt index d24ba3be..1cc65e3b 100644 --- a/forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForge.kt +++ b/forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForge.kt @@ -2,48 +2,27 @@ package org.valkyrienskies.eureka.forge import net.minecraft.client.Minecraft import net.minecraft.client.gui.screens.Screen -import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider -import net.minecraft.resources.ResourceLocation import net.minecraftforge.client.ConfigScreenHandler -import net.minecraftforge.client.event.EntityRenderersEvent.RegisterRenderers -import net.minecraftforge.client.event.ModelEvent -import net.minecraftforge.client.event.ModelEvent.BakingCompleted import net.minecraftforge.eventbus.api.IEventBus import net.minecraftforge.fml.common.Mod import org.valkyrienskies.core.impl.config.VSConfigClass.Companion.getRegisteredConfig -import org.valkyrienskies.eureka.EurekaBlockEntities.SHIP_HELM import org.valkyrienskies.eureka.EurekaConfig import org.valkyrienskies.eureka.EurekaMod import org.valkyrienskies.eureka.EurekaMod.init -import org.valkyrienskies.eureka.EurekaMod.initClient -import org.valkyrienskies.eureka.block.WoodType -import org.valkyrienskies.eureka.blockentity.renderer.ShipHelmBlockEntityRenderer -import org.valkyrienskies.eureka.blockentity.renderer.WheelModels.setModelGetter import org.valkyrienskies.mod.compat.clothconfig.VSClothConfig.createConfigScreenFor import thedarkcolour.kotlinforforge.forge.LOADING_CONTEXT import thedarkcolour.kotlinforforge.forge.MOD_BUS +import thedarkcolour.kotlinforforge.forge.runForDist @Mod(EurekaMod.MOD_ID) class EurekaModForge { - private var happendClientSetup = false - init { - // Submit our event bus to let architectury register our content on the right time - MOD_BUS.addListener { event: BakingCompleted -> - clientSetup( - event - ) - } - MOD_BUS.addListener { event: ModelEvent.RegisterAdditional -> - onModelRegistry( - event - ) - } - MOD_BUS.addListener { event: RegisterRenderers -> - entityRenderers( - event - ) - } + runForDist ( + clientTarget = { + EurekaModForgeClient.registerClient() + }, + serverTarget = {} + ) LOADING_CONTEXT.registerExtensionPoint( ConfigScreenHandler.ConfigScreenFactory::class.java ) { @@ -57,42 +36,6 @@ class EurekaModForge { init() } - private fun clientSetup(event: BakingCompleted) { - if (happendClientSetup) { - return - } - happendClientSetup = true - initClient() - setModelGetter { woodType: WoodType -> - event.modelBakery.bakedTopLevelModels - .getOrDefault( - ResourceLocation( - EurekaMod.MOD_ID, - "block/" + woodType.resourceName + "_ship_helm_wheel" - ), - Minecraft.getInstance().modelManager.missingModel - ) - } - } - - private fun entityRenderers(event: RegisterRenderers) { - event.registerBlockEntityRenderer(SHIP_HELM.get()) { ctx: BlockEntityRendererProvider.Context -> - ShipHelmBlockEntityRenderer( - ctx - ) - } - } - - private fun onModelRegistry(event: ModelEvent.RegisterAdditional) { - for (woodType in WoodType.values()) { - event.register( - ResourceLocation( - EurekaMod.MOD_ID, "block/" + woodType.resourceName + "_ship_helm_wheel" - ) - ) - } - } - companion object { fun getModBus(): IEventBus = MOD_BUS } diff --git a/forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForgeClient.kt b/forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForgeClient.kt new file mode 100644 index 00000000..986f68de --- /dev/null +++ b/forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForgeClient.kt @@ -0,0 +1,71 @@ +package org.valkyrienskies.eureka.forge + +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider +import net.minecraft.resources.ResourceLocation +import net.minecraftforge.client.event.EntityRenderersEvent +import net.minecraftforge.client.event.ModelEvent +import org.valkyrienskies.eureka.EurekaBlockEntities +import org.valkyrienskies.eureka.EurekaMod +import org.valkyrienskies.eureka.block.WoodType +import org.valkyrienskies.eureka.blockentity.renderer.ShipHelmBlockEntityRenderer +import org.valkyrienskies.eureka.blockentity.renderer.WheelModels +import thedarkcolour.kotlinforforge.forge.MOD_BUS + +object EurekaModForgeClient { + private var happendClientSetup = false + + fun registerClient() { + MOD_BUS.addListener { event: ModelEvent.BakingCompleted -> + clientSetup( + event + ) + } + MOD_BUS.addListener { event: ModelEvent.RegisterAdditional -> + onModelRegistry( + event + ) + } + MOD_BUS.addListener { event: EntityRenderersEvent.RegisterRenderers -> + entityRenderers( + event + ) + } + } + + fun clientSetup(event: ModelEvent.BakingCompleted) { + if (happendClientSetup) { + return + } + happendClientSetup = true + EurekaMod.initClient() + WheelModels.setModelGetter { woodType: WoodType -> + event.modelBakery.bakedTopLevelModels + .getOrDefault( + ResourceLocation( + EurekaMod.MOD_ID, + "block/" + woodType.resourceName + "_ship_helm_wheel" + ), + Minecraft.getInstance().modelManager.missingModel + ) + } + } + + fun entityRenderers(event: EntityRenderersEvent.RegisterRenderers) { + event.registerBlockEntityRenderer(EurekaBlockEntities.SHIP_HELM.get()) { ctx: BlockEntityRendererProvider.Context -> + ShipHelmBlockEntityRenderer( + ctx + ) + } + } + + fun onModelRegistry(event: ModelEvent.RegisterAdditional) { + for (woodType in WoodType.values()) { + event.register( + ResourceLocation( + EurekaMod.MOD_ID, "block/" + woodType.resourceName + "_ship_helm_wheel" + ) + ) + } + } +} From 7e31a163031ec69e73cb71a7cfef8861310500da Mon Sep 17 00:00:00 2001 From: StewStrong <stewstronger@gmail.com> Date: Sun, 31 Dec 2023 18:01:13 -0700 Subject: [PATCH 26/32] Updated dependency requirements --- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 5fd80194..e338365c 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -40,7 +40,7 @@ "vs_eureka.mixins.json" ], "depends": { - "minecraft": ">=1.18.2", + "minecraft": ">=1.19.2", "valkyrienskies": ">=${vs2_version}", "fabricloader": ">=0.14.21" } diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index cd005f50..0973990a 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -16,14 +16,14 @@ logoFile = "icon.png" [[dependencies.vs_eureka]] modId = "forge" mandatory = true -versionRange = "[40.1.69,)" +versionRange = "[43.1.47,)" ordering = "NONE" side = "BOTH" [[dependencies.vs_eureka]] modId = "minecraft" mandatory = true -versionRange = "[1.18.2,)" +versionRange = "[1.19.2,)" ordering = "NONE" side = "BOTH" From 25a35bac8af27b72b505884cdffbb5a49e4a9ea1 Mon Sep 17 00:00:00 2001 From: StewStrong <stewstronger@gmail.com> Date: Sun, 31 Dec 2023 20:12:14 -0700 Subject: [PATCH 27/32] An attempt at fixing fabric server --- .../eureka/mixin/client/PlayerEntityModelMixin.java | 3 +-- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/eureka/mixin/client/PlayerEntityModelMixin.java b/common/src/main/java/org/valkyrienskies/eureka/mixin/client/PlayerEntityModelMixin.java index 7fa18110..af466f56 100644 --- a/common/src/main/java/org/valkyrienskies/eureka/mixin/client/PlayerEntityModelMixin.java +++ b/common/src/main/java/org/valkyrienskies/eureka/mixin/client/PlayerEntityModelMixin.java @@ -18,8 +18,7 @@ public PlayerEntityModelMixin(final ModelPart model) { super(model); } - @SuppressWarnings("unchecked") - @Inject(method = "setupAnim", at = @At(value = "HEAD")) + @Inject(method = "setupAnim(Lnet/minecraft/world/entity/LivingEntity;FFFFF)V", at = @At(value = "HEAD")) public void setupAnim(final T livingEntity, final float swing, final float g, diff --git a/gradle.properties b/gradle.properties index 42d0a3c3..53223200 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ enabled_platforms=fabric,forge archives_base_name=eureka-1201 maven_group=org.valkyrienskies # Dependencies -vs2_version=2.1.3-beta.1+151ecf5193 +vs2_version=2.1.3-beta.1+a52f38bd68 vs_core_version=1.1.0+8a93383ce5 minecraft_version=1.20.1 architectury_version=6.3.49 From de6bc0b46eaae0d7515a68d62d75b9c5677467ce Mon Sep 17 00:00:00 2001 From: MrSterner <32911664+mrsterner@users.noreply.github.com> Date: Mon, 1 Jan 2024 04:44:49 +0100 Subject: [PATCH 28/32] fix disassemble 1.20 (#287) --- .../org/valkyrienskies/eureka/util/ShipAssembler.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt index 5e495547..4f904267 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt @@ -109,8 +109,13 @@ object ShipAssembler { ship.activeChunksSet.forEach { chunkX, chunkZ -> val chunk = level.getChunk(chunkX, chunkZ) - for (section in chunk.sections) { + for (sectionIndex in 0 until chunk.sections.size) { + val section = chunk.sections[sectionIndex] + if (section == null || section.hasOnlyAir()) continue + + val bottomY = sectionIndex shl 4 + for (x in 0..15) { for (y in 0..15) { for (z in 0..15) { @@ -118,7 +123,7 @@ object ShipAssembler { if (state.isAir) continue val realX = (chunkX shl 4) + x - val realY = chunk.minBuildHeight + y + val realY = bottomY + y + level.minBuildHeight val realZ = (chunkZ shl 4) + z val inWorldPos = shipToWorld.transformPosition(alloc0.set(realX + 0.5, realY + 0.5, realZ + 0.5)).floor() From 4e9b3d7092ec0702d0767da00e4e7f135317bd47 Mon Sep 17 00:00:00 2001 From: StewStrong <stewstronger@gmail.com> Date: Sun, 31 Dec 2023 20:51:24 -0700 Subject: [PATCH 29/32] Increment version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 53223200..c52b2d47 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G # Identity mod_name=eureka mod_id=vs_eureka -eureka_version=1.3.0-beta.3 +eureka_version=1.3.0-beta.4 enabled_platforms=fabric,forge archives_base_name=eureka-1201 maven_group=org.valkyrienskies From 268540eb241029f34a3985e50b168a6940e03bbd Mon Sep 17 00:00:00 2001 From: StewStrong <stewstronger@gmail.com> Date: Mon, 1 Jan 2024 19:00:37 -0700 Subject: [PATCH 30/32] An attempt at fixing creative tab crashing in fabric --- .../kotlin/org/valkyrienskies/eureka/registry/CreativeTabs.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/registry/CreativeTabs.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/registry/CreativeTabs.kt index 61e54d12..1dd097b3 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/registry/CreativeTabs.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/registry/CreativeTabs.kt @@ -15,9 +15,6 @@ object CreativeTabs { EurekaItems.ITEMS.forEach { output.accept(it.get()) } - EurekaBlocks.BLOCKS.forEach { - output.accept(it.get().asItem()) - } } .build() } From 156760618f7a6b17534ec130fd89fb768f77caaf Mon Sep 17 00:00:00 2001 From: StewStrong <stewstronger@gmail.com> Date: Mon, 1 Jan 2024 19:15:29 -0700 Subject: [PATCH 31/32] Increment version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index c52b2d47..0bc0b244 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G # Identity mod_name=eureka mod_id=vs_eureka -eureka_version=1.3.0-beta.4 +eureka_version=1.3.0-beta.5 enabled_platforms=fabric,forge archives_base_name=eureka-1201 maven_group=org.valkyrienskies From 88b99b0cda1864386dc8a3d2e82cd537c0e3acb7 Mon Sep 17 00:00:00 2001 From: PROMETHIA-27 <42193387+PROMETHIA-27@users.noreply.github.com> Date: Wed, 17 Apr 2024 13:35:20 -0400 Subject: [PATCH 32/32] Fix issue where rotating the ship sometimes causes blocks to rotate in odd ways (#315) * add kotlin for forge to build.gradle so forge can build * use ship rotation instead of buggy `aligningTo` * update shipAssembler to take a rotation and make snapRotation public * move logic into ShipAssembler * remove buggy aligningTo, demote alignTarget to a local * fix float comparisons * Removed unnecessary imports (millennIumAMbiguity) --------- Co-authored-by: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> --- build.gradle | 4 ++ .../eureka/blockentity/ShipHelmBlockEntity.kt | 5 +- .../eureka/ship/EurekaShipControl.kt | 4 +- .../eureka/util/ShipAssembler.kt | 54 +++++++++++++------ 4 files changed, 43 insertions(+), 24 deletions(-) diff --git a/build.gradle b/build.gradle index 59240da1..a08f7253 100644 --- a/build.gradle +++ b/build.gradle @@ -99,6 +99,10 @@ allprojects { repositories { mavenLocal() + maven { + name = 'Kotlin for Forge' + url = 'https://thedarkcolour.github.io/KotlinForForge/' + } maven { name = "Valkyrien Skies Internal" url = project.vs_maven_url ?: 'https://maven.valkyrienskies.org' diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt index 4096eb99..fd133123 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt @@ -84,7 +84,6 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : } fun startRiding(player: Player, force: Boolean, blockPos: BlockPos, state: BlockState, level: ServerLevel): Boolean { - for (i in seats.size - 1 downTo 0) { if (!seats[i].isVehicle) { seats[i].kill() @@ -126,7 +125,7 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : ) { !it.isAir && !EurekaConfig.SERVER.blockBlacklist.contains(BuiltInRegistries.BLOCK.getKey(it.block).toString()) } if (builtShip == null) { - player.displayClientMessage(Component.translatable("Ship is too big! Max size is ${EurekaConfig.SERVER.maxShipBlocks} blocks (changable in the config)"), true) + player.displayClientMessage(Component.translatable("Ship is too big! Max size is ${EurekaConfig.SERVER.maxShipBlocks} blocks (changeable in the config)"), true) logger.warn("Failed to assemble ship for ${player.name.string}") } } @@ -148,7 +147,6 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : ShipAssembler.unfillShip( level as ServerLevel, ship, - control.aligningTo, this.blockPos, BlockPos.containing(inWorld.x, inWorld.y, inWorld.z) ) @@ -163,7 +161,6 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : } override fun setRemoved() { - if (level?.isClientSide == false) { for (i in seats.indices) { seats[i].kill() diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/ship/EurekaShipControl.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/ship/EurekaShipControl.kt index fa2d31b1..231118f1 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/ship/EurekaShipControl.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/ship/EurekaShipControl.kt @@ -50,13 +50,11 @@ class EurekaShipControl : ShipForcesInducer, ServerTickListener { private var angleUntilAligned = 0.0 private var positionUntilAligned = Vector3d() - private var alignTarget = 0 val canDisassemble get() = ship != null && disassembling && abs(angleUntilAligned) < DISASSEMBLE_THRESHOLD && positionUntilAligned.distanceSquared(this.ship!!.transform.positionInWorld) < 4.0 - val aligningTo: Direction get() = Direction.from2DDataValue(alignTarget) var consumed = 0f private set @@ -132,7 +130,7 @@ class EurekaShipControl : ShipForcesInducer, ServerTickListener { val invRotation = physShip.poseVel.rot.invert(Quaterniond()) val invRotationAxisAngle = AxisAngle4d(invRotation) // Floor makes a number 0 to 3, which corresponds to direction - alignTarget = floor((invRotationAxisAngle.angle / (PI * 0.5)) + 4.5).toInt() % 4 + val alignTarget = floor((invRotationAxisAngle.angle / (PI * 0.5)) + 4.5).toInt() % 4 angleUntilAligned = (alignTarget.toDouble() * (0.5 * PI)) - invRotationAxisAngle.angle if (disassembling) { val pos = ship.transform.positionInWorld diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt index 4f904267..e39851a7 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt @@ -26,10 +26,7 @@ import org.valkyrienskies.mod.util.logger import org.valkyrienskies.mod.util.relocateBlock import org.valkyrienskies.mod.util.updateBlock import kotlin.collections.set -import kotlin.math.PI -import kotlin.math.abs -import kotlin.math.round -import kotlin.math.sign +import kotlin.math.* object ShipAssembler { fun collectBlocks(level: ServerLevel, center: BlockPos, predicate: (BlockState) -> Boolean): ServerShip? { @@ -62,9 +59,44 @@ object ShipAssembler { } } - fun unfillShip(level: ServerLevel, ship: ServerShip, direction: Direction, shipCenter: BlockPos, center: BlockPos) { + private fun rotationFromAxisAngle(axis: AxisAngle4d): Rotation { + if (axis.y.absoluteValue < 0.1) { + // if the axis isn't Y, either we're tilted up/down (which should not happen often) or we haven't moved and it's + // along the z axis with a magnitude of 0 for some reason. In these cases, we don't rotate. + return Rotation.NONE + } + + // normalize into counterclockwise rotation (i.e. positive y-axis, according to testing + right hand rule) + if (axis.y.sign < 0.0) { + axis.y = 1.0 + // the angle is always positive and < 2pi coming in + axis.angle = 2.0 * PI - axis.angle + axis.angle %= (2.0 * PI) + } + + val eps = 0.001 + if (axis.angle < eps) + return Rotation.NONE + else if ((axis.angle - PI / 2.0).absoluteValue < eps) + return Rotation.COUNTERCLOCKWISE_90 + else if ((axis.angle - PI).absoluteValue < eps) + return Rotation.CLOCKWISE_180 + else if ((axis.angle - 3.0 * PI / 2.0).absoluteValue < eps) + return Rotation.CLOCKWISE_90 + else { + logger.warn("failed to convert $axis into a rotation") + return Rotation.NONE + } + } + + fun unfillShip(level: ServerLevel, ship: ServerShip, shipCenter: BlockPos, center: BlockPos) { ship.isStatic = true + val rotation: Rotation = ship.transform.shipToWorldRotation + .let(::AxisAngle4d) + .let(ShipAssembler::snapRotation) + .let(::rotationFromAxisAngle) + // ship's rotation rounded to nearest 90* val shipToWorld = ship.transform.run { Matrix4d() @@ -76,18 +108,6 @@ object ShipAssembler { val alloc0 = Vector3d() - // Direction comes from direction ship is aligning to - // We can assume that the ship in shipspace is always facing north, because it has to be - val rotation: Rotation = when (direction) { - Direction.SOUTH -> Rotation.NONE // Bug in Direction.from2DDataValue() can return south/north as opposite - Direction.NORTH -> Rotation.CLOCKWISE_180 - Direction.EAST -> Rotation.CLOCKWISE_90 - Direction.WEST -> Rotation.COUNTERCLOCKWISE_90 - else -> { - Rotation.NONE - } - } - val chunksToBeUpdated = mutableMapOf<ChunkPos, Pair<ChunkPos, ChunkPos>>() ship.activeChunksSet.forEach { chunkX, chunkZ ->