diff --git a/.github/workflows/build.yml b/.github/workflows/build-1.18.x.yml similarity index 96% rename from .github/workflows/build.yml rename to .github/workflows/build-1.18.x.yml index 32cba144..46464861 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build-1.18.x.yml @@ -3,8 +3,6 @@ on: push: branches: - '1.18.x/*' - - '1.19.2/*' - - '1.20.1/*' pull_request: types: [ opened, synchronize, reopened ] jobs: diff --git a/build.gradle b/build.gradle index 53d413ef..85ace07c 100644 --- a/build.gradle +++ b/build.gradle @@ -46,16 +46,15 @@ subprojects { name = "ParchmentMC" url = "https://maven.parchmentmc.org" } - maven { - name = "Modrinth" - url = "https://api.modrinth.com/maven" - } } dependencies { minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" // The following line declares the mojmap mappings, you may use other mappings as well - mappings loom.officialMojangMappings() + mappings(loom.layered { + officialMojangMappings() + parchment("org.parchmentmc.data:parchment-1.18.2:2022.09.04@zip") + }) implementation("org.joml:joml:1.10.4") { transitive = false } implementation("org.joml:joml-primitives:1.10.0") { transitive = false } @@ -109,6 +108,7 @@ allprojects { maven { name = 'Kotlin for Forge' url = 'https://thedarkcolour.github.io/KotlinForForge/' + content { includeGroup "thedarkcolour" } } maven { name = "Valkyrien Skies Internal" diff --git a/common/build.gradle b/common/build.gradle index ef7aa564..2f3f81b2 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -7,14 +7,12 @@ loom { } dependencies { - implementation(annotationProcessor("io.github.llamalad7:mixinextras-common:$mixin_extras_version")) - // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies // Do NOT use other classes from fabric loader 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-120-common:${rootProject.vs2_version}") + modApi("org.valkyrienskies:valkyrienskies-118-common:${rootProject.vs2_version}") compileOnly("org.valkyrienskies.core:api:${rootProject.vs_core_version}") compileOnly("org.valkyrienskies.core:api-game:${rootProject.vs_core_version}") 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 af466f56..ffd64dfc 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,7 +18,8 @@ public PlayerEntityModelMixin(final ModelPart model) { super(model); } - @Inject(method = "setupAnim(Lnet/minecraft/world/entity/LivingEntity;FFFFF)V", at = @At(value = "HEAD")) + @SuppressWarnings("unchecked") + @Inject(method = "setupAnim", at = @At(value = "HEAD")) public void setupAnim(final T livingEntity, final float swing, final float g, @@ -28,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 829cae79..edcbd4fa 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlockEntities.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaBlockEntities.kt @@ -3,8 +3,6 @@ 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 @@ -17,7 +15,7 @@ import org.valkyrienskies.eureka.registry.RegistrySupplier @Suppress("unused") object EurekaBlockEntities { - private val BLOCKENTITIES = DeferredRegister.create(EurekaMod.MOD_ID, Registries.BLOCK_ENTITY_TYPE) + private val BLOCKENTITIES = DeferredRegister.create(EurekaMod.MOD_ID, Registry.BLOCK_ENTITY_TYPE_REGISTRY) 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 48357554..64ec3dc3 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.registries.Registries +import net.minecraft.core.Registry import net.minecraft.world.item.BlockItem import net.minecraft.world.item.Item import net.minecraft.world.level.block.Block @@ -8,20 +8,15 @@ 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.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 net.minecraft.world.level.material.Material +import net.minecraft.world.level.material.MaterialColor +import org.valkyrienskies.eureka.block.* import org.valkyrienskies.eureka.registry.DeferredRegister import org.valkyrienskies.mod.common.hooks.VSGameEvents @Suppress("unused") object EurekaBlocks { - internal val BLOCKS = DeferredRegister.create(EurekaMod.MOD_ID, Registries.BLOCK) + private val BLOCKS = DeferredRegister.create(EurekaMod.MOD_ID, Registry.BLOCK_REGISTRY) val ANCHOR = BLOCKS.register("anchor", ::AnchorBlock) val ENGINE = BLOCKS.register("engine", ::EngineBlock) @@ -31,49 +26,49 @@ object EurekaBlocks { // region Ship Helms val OAK_SHIP_HELM = BLOCKS.register("oak_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).strength(2.5F).sound(SoundType.WOOD), + BlockBehaviour.Properties.of(Material.WOOD).strength(2.5F).sound(SoundType.WOOD), WoodType.OAK ) } val SPRUCE_SHIP_HELM = BLOCKS.register("spruce_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).strength(2.5F).sound(SoundType.WOOD), + BlockBehaviour.Properties.of(Material.WOOD).strength(2.5F).sound(SoundType.WOOD), WoodType.SPRUCE ) } val BIRCH_SHIP_HELM = BLOCKS.register("birch_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).strength(2.5F).sound(SoundType.WOOD), + BlockBehaviour.Properties.of(Material.WOOD).strength(2.5F).sound(SoundType.WOOD), WoodType.BIRCH ) } val JUNGLE_SHIP_HELM = BLOCKS.register("jungle_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).strength(2.5F).sound(SoundType.WOOD), + BlockBehaviour.Properties.of(Material.WOOD).strength(2.5F).sound(SoundType.WOOD), WoodType.JUNGLE ) } val ACACIA_SHIP_HELM = BLOCKS.register("acacia_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).strength(2.5F).sound(SoundType.WOOD), + BlockBehaviour.Properties.of(Material.WOOD).strength(2.5F).sound(SoundType.WOOD), WoodType.ACACIA ) } val DARK_OAK_SHIP_HELM = BLOCKS.register("dark_oak_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.WOOD).strength(2.5F).sound(SoundType.WOOD), + BlockBehaviour.Properties.of(Material.WOOD).strength(2.5F).sound(SoundType.WOOD), WoodType.DARK_OAK ) } val CRIMSON_SHIP_HELM = BLOCKS.register("crimson_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.NETHER).strength(2.5F).sound(SoundType.STEM), + BlockBehaviour.Properties.of(Material.NETHER_WOOD).strength(2.5F).sound(SoundType.STEM), WoodType.CRIMSON ) } val WARPED_SHIP_HELM = BLOCKS.register("warped_ship_helm") { ShipHelmBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.NETHER).strength(2.5F).sound(SoundType.STEM), + BlockBehaviour.Properties.of(Material.NETHER_WOOD).strength(2.5F).sound(SoundType.STEM), WoodType.WARPED ) } @@ -82,87 +77,87 @@ object EurekaBlocks { // region Balloons val BALLOON = BLOCKS.register("balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.WOOL).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.WOOL).strength(0.8F).sound(SoundType.WOOL) ) } val WHITE_BALLOON = BLOCKS.register("white_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.SNOW).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.SNOW).strength(0.8F).sound(SoundType.WOOL) ) } val LIGHT_GRAY_BALLOON = BLOCKS.register("light_gray_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GRAY).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_LIGHT_GRAY).strength(0.8F).sound(SoundType.WOOL) ) } val GRAY_BALLOON = BLOCKS.register("gray_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GRAY).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_GRAY).strength(0.8F).sound(SoundType.WOOL) ) } val BLACK_BALLOON = BLOCKS.register("black_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BLACK).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_BLACK).strength(0.8F).sound(SoundType.WOOL) ) } val RED_BALLOON = BLOCKS.register("red_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_RED).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_RED).strength(0.8F).sound(SoundType.WOOL) ) } val ORANGE_BALLOON = BLOCKS.register("orange_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_ORANGE).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_ORANGE).strength(0.8F).sound(SoundType.WOOL) ) } val YELLOW_BALLOON = BLOCKS.register("yellow_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_YELLOW).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_YELLOW).strength(0.8F).sound(SoundType.WOOL) ) } val LIME_BALLOON = BLOCKS.register("lime_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GREEN).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_LIGHT_GREEN).strength(0.8F).sound(SoundType.WOOL) ) } val GREEN_BALLOON = BLOCKS.register("green_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GREEN).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_GREEN).strength(0.8F).sound(SoundType.WOOL) ) } val LIGHT_BLUE_BALLOON = BLOCKS.register("light_blue_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_BLUE).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_LIGHT_BLUE).strength(0.8F).sound(SoundType.WOOL) ) } val CYAN_BALLOON = BLOCKS.register("cyan_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_CYAN).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_CYAN).strength(0.8F).sound(SoundType.WOOL) ) } val BLUE_BALLOON = BLOCKS.register("blue_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BLUE).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_BLUE).strength(0.8F).sound(SoundType.WOOL) ) } val PURPLE_BALLOON = BLOCKS.register("purple_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_PURPLE).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_PURPLE).strength(0.8F).sound(SoundType.WOOL) ) } val MAGENTA_BALLOON = BLOCKS.register("magenta_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_MAGENTA).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_MAGENTA).strength(0.8F).sound(SoundType.WOOL) ) } val PINK_BALLOON = BLOCKS.register("pink_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_PINK).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_PINK).strength(0.8F).sound(SoundType.WOOL) ) } val BROWN_BALLOON = BLOCKS.register("brown_balloon") { BalloonBlock( - BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BROWN).strength(0.8F).sound(SoundType.WOOL) + BlockBehaviour.Properties.of(Material.WOOL, MaterialColor.COLOR_BROWN).strength(0.8F).sound(SoundType.WOOL) ) } // endregion @@ -214,7 +209,7 @@ object EurekaBlocks { // aka all blocks fun registerItems(items: DeferredRegister) { BLOCKS.forEach { - items.register(it.name) { BlockItem(it.get(), Item.Properties()) } + items.register(it.name) { BlockItem(it.get(), Item.Properties().tab(EurekaItems.TAB)) } } } } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaEntities.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaEntities.kt index dada1583..96758a72 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.registries.Registries +import net.minecraft.core.Registry 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( } object EurekaEntities { - private val ENTITIES = DeferredRegister.create(EurekaMod.MOD_ID, Registries.ENTITY_TYPE) + private val ENTITIES = DeferredRegister.create(EurekaMod.MOD_ID, Registry.ENTITY_TYPE_REGISTRY) private val ENTITY_RENDERERS = mutableListOf>() // 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 6fae6f74..e14fb84c 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaItems.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaItems.kt @@ -1,17 +1,22 @@ package org.valkyrienskies.eureka -import net.minecraft.core.registries.Registries -import net.minecraft.resources.ResourceKey +import net.minecraft.core.Registry 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 @Suppress("unused") object EurekaItems { - internal val ITEMS = DeferredRegister.create(EurekaMod.MOD_ID, Registries.ITEM) - val TAB: ResourceKey = - ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation(EurekaMod.MOD_ID, "eureka_tab")) + 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()) } fun register() { EurekaBlocks.registerItems(ITEMS) diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaScreens.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaScreens.kt index 1bcabae7..df9457da 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaScreens.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaScreens.kt @@ -1,8 +1,7 @@ package org.valkyrienskies.eureka -import net.minecraft.core.registries.Registries +import net.minecraft.core.Registry 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 @@ -13,7 +12,7 @@ private typealias HFactory = (syncId: Int, playerInv: Inventory) -> T @Suppress("unused") object EurekaScreens { - private val SCREENS = DeferredRegister.create(EurekaMod.MOD_ID, Registries.MENU) + private val SCREENS = DeferredRegister.create(EurekaMod.MOD_ID, Registry.MENU_REGISTRY) val SHIP_HELM = ShipHelmScreenMenu.factory withName "ship_helm" val ENGINE = EngineScreenMenu.factory withName "engine" @@ -23,5 +22,5 @@ object EurekaScreens { } private infix fun HFactory.withName(name: String) = - SCREENS.register(name) { MenuType(this, FeatureFlags.VANILLA_SET) } + SCREENS.register(name) { MenuType(this) } } 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 a20348f8..522323e0 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/AnchorBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/AnchorBlock.kt @@ -13,7 +13,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.MapColor +import net.minecraft.world.level.material.Material import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape import org.valkyrienskies.core.api.ships.getAttachment @@ -24,7 +24,7 @@ import org.valkyrienskies.mod.common.getShipManagingPos import org.valkyrienskies.mod.common.getShipObjectManagingPos class AnchorBlock : - HorizontalDirectionalBlock(Properties.of().mapColor(MapColor.METAL).strength(5.0f, 6.0f).sound(SoundType.ANVIL)) { + HorizontalDirectionalBlock(Properties.of(Material.METAL).strength(5.0f, 6.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 f528aad5..3eeb7602 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.MapColor +import net.minecraft.world.level.material.Material class BallastBlock : Block( - Properties.of().mapColor(MapColor.STONE) + Properties.of(Material.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 387d31b1..399097d2 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/BalloonBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/BalloonBlock.kt @@ -20,7 +20,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, entity.damageSources().fall()) + entity.causeFallDamage(f, 0.2f, DamageSource.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 44b20cd4..4527f81d 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/EngineBlock.kt @@ -5,7 +5,6 @@ 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.item.ItemEntity @@ -23,13 +22,14 @@ 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.MapColor +import net.minecraft.world.level.material.Material 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().mapColor(MapColor.STONE) + Properties.of(Material.STONE) .requiresCorrectToolForDrops() .strength(3.5F) .sound(SoundType.STONE) @@ -85,7 +85,7 @@ class EngineBlock : BaseEntityBlock( } } - override fun animateTick(state: BlockState, level: Level, pos: BlockPos, randomSource: RandomSource) { + override fun animateTick(state: BlockState, level: Level, pos: BlockPos, random: Random) { val heat = state.getValue(HEAT) if (heat == 0) return @@ -93,18 +93,18 @@ class EngineBlock : BaseEntityBlock( val e = pos.y.toDouble() val f = pos.z.toDouble() + 0.5 - if (randomSource.nextDouble() < (0.04 * heat)) { + if (random.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 (randomSource.nextDouble() > (0.2 * heat)) return + if (random.nextDouble() > (0.2 * heat)) return val direction = state.getValue(HORIZONTAL_FACING) val axis = direction.axis - val h = randomSource.nextDouble() * 0.6 - 0.3 + val h = random.nextDouble() * 0.6 - 0.3 val i = if (axis === Direction.Axis.X) direction.stepX.toDouble() * 0.52 else h - val j = randomSource.nextDouble() * 4.0 / 16.0 + val j = random.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/FloaterBlock.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/block/FloaterBlock.kt index d7bec6b0..a28e4c02 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/block/FloaterBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/block/FloaterBlock.kt @@ -9,14 +9,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.MapColor +import net.minecraft.world.level.material.Material 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().mapColor(MapColor.WOOD) + Properties.of(Material.WOOD) .sound(SoundType.WOOL).strength(1.0f, 2.0f) ) { init { 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 04c90b1e..613e8beb 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.Component +import net.minecraft.network.chat.TextComponent import net.minecraft.server.level.ServerLevel import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult @@ -33,7 +33,6 @@ 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 class ShipHelmBlock(properties: Properties, val woodType: WoodType) : BaseEntityBlock(properties) { val HELM_BASE = RotShapes.box(2.0, 0.0, 2.0, 14.0, 2.0, 14.0) @@ -87,7 +86,7 @@ class ShipHelmBlock(properties: Properties, val woodType: WoodType) : BaseEntity player.openMenu(blockEntity) InteractionResult.CONSUME } else if (level.getShipManagingPos(pos) == null) { - player.displayClientMessage(Component.literal("Sneak to open the ship helm!"), true) + player.displayClientMessage(TextComponent("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 fbe44291..b38bb2d4 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/EngineBlockEntity.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/EngineBlockEntity.kt @@ -4,6 +4,7 @@ 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 @@ -47,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 = Component.translatable("gui.vs_eureka.engine") + override fun getDefaultName(): Component = TranslatableComponent("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 fd133123..78d169b0 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/blockentity/ShipHelmBlockEntity.kt @@ -1,10 +1,13 @@ package org.valkyrienskies.eureka.blockentity +import net.minecraft.Util import net.minecraft.commands.arguments.EntityAnchorArgument import net.minecraft.core.BlockPos import net.minecraft.core.Direction.Axis -import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.core.Registry import net.minecraft.network.chat.Component +import net.minecraft.network.chat.TextComponent +import net.minecraft.network.chat.TranslatableComponent import net.minecraft.server.level.ServerLevel import net.minecraft.world.MenuProvider import net.minecraft.world.entity.player.Inventory @@ -48,7 +51,7 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : } override fun getDisplayName(): Component { - return Component.translatable("gui.vs_eureka.ship_helm") + return TranslatableComponent("gui.vs_eureka.ship_helm") } // Needs to get called server-side @@ -122,10 +125,10 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : val builtShip = ShipAssembler.collectBlocks( level, blockPos - ) { !it.isAir && !EurekaConfig.SERVER.blockBlacklist.contains(BuiltInRegistries.BLOCK.getKey(it.block).toString()) } + ) { !it.isAir && !EurekaConfig.SERVER.blockBlacklist.contains(Registry.BLOCK.getKey(it.block).toString()) } if (builtShip == null) { - player.displayClientMessage(Component.translatable("Ship is too big! Max size is ${EurekaConfig.SERVER.maxShipBlocks} blocks (changeable in the config)"), true) + player.sendMessage(TextComponent("Ship is too big! Max size is ${EurekaConfig.SERVER.maxShipBlocks} blocks (changeable in the config)"), Util.NIL_UUID) logger.warn("Failed to assemble ship for ${player.name.string}") } } @@ -148,7 +151,7 @@ class ShipHelmBlockEntity(pos: BlockPos, state: BlockState) : level as ServerLevel, ship, this.blockPos, - BlockPos.containing(inWorld.x, inWorld.y, inWorld.z) + BlockPos(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 64a97c12..a48e2778 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,13 +1,11 @@ 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 @@ -27,11 +25,8 @@ class ShipHelmBlockEntityRenderer(val ctx: BlockEntityRendererProvider.Context) matrixStack.translate(0.5, 0.60, 0.5) // Rotate wheel towards the direction its facing matrixStack.mulPose( - Quaternionf( - AxisAngle4f( - (-blockEntity.blockState.getValue(BlockStateProperties.HORIZONTAL_FACING) - .toYRot() * Math.PI / 180.0).toFloat(), 0.0f, 1.0f, 0.0f - ) + Vector3f.YP.rotationDegrees( + -blockEntity.blockState.getValue(BlockStateProperties.HORIZONTAL_FACING).toYRot() ) ) val ship = (blockEntity.level)?.getShipManagingPos(blockEntity.blockPos) @@ -42,7 +37,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(Quaternionf(AxisAngle4f((rot / 20f * Math.PI.toFloat()).toFloat(), 0.0f, 0.0f, 1.0f))) + matrixStack.mulPose(Vector3f.ZP.rotation((rot / 20f * Math.PI.toFloat()).toFloat())) // 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 43b2156d..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 @@ -1,7 +1,7 @@ package org.valkyrienskies.eureka.gui.engine import com.mojang.blaze3d.systems.RenderSystem -import net.minecraft.client.gui.GuiGraphics +import com.mojang.blaze3d.vertex.PoseStack import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen import net.minecraft.client.renderer.GameRenderer import net.minecraft.network.chat.Component @@ -13,7 +13,7 @@ class EngineScreen(handler: EngineScreenMenu, playerInventory: Inventory, text: AbstractContainerScreen(handler, playerInventory, text) { // The texture is 512 so every coord is 2 pixels big - override fun renderBg(guiGraphics: GuiGraphics, partialTicks: Float, mouseX: Int, mouseY: Int) { + override fun renderBg(matrixStack: PoseStack, 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 +22,10 @@ class EngineScreen(handler: EngineScreenMenu, playerInventory: Inventory, text: menu as EngineScreenMenu - guiGraphics.pose().pushPose() + matrixStack.pushPose() // This matrix magic is bcs the texture is 512x512 and is 256x256 mc classic (mojank) - guiGraphics.pose().translate(xP.toDouble(), yP.toDouble(), 0.0) - guiGraphics.pose().scale(2f, 2f, 2F) + matrixStack.translate(xP.toDouble(), yP.toDouble(), 0.0) + matrixStack.scale(2f, 2f, 2F) // Draw the container background val (containerX, containerY) = if (menu.heatLevel > 1) @@ -33,7 +33,7 @@ class EngineScreen(handler: EngineScreenMenu, playerInventory: Inventory, text: else Pair(CONTAINER_X, CONTAINER_Y) - guiGraphics.blit(TEXTURE, FIRE_HOLE_X, FIRE_HOLE_Y, containerX, containerY, FIRE_HOLE_WIDTH, FIRE_HOLE_HEIGHT) + blit(matrixStack, FIRE_HOLE_X, FIRE_HOLE_Y, containerX, containerY, FIRE_HOLE_WIDTH, FIRE_HOLE_HEIGHT) // region COALS // Draw the coal @@ -42,7 +42,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 - guiGraphics.blit(TEXTURE, FIRE_HOLE_X, FIRE_HOLE_Y + calcY, xC, yC, COAL_WIDTH, heightC) + blit(matrixStack, 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 +58,14 @@ class EngineScreen(handler: EngineScreenMenu, playerInventory: Inventory, text: else Pair(GLASS_X, GLASS_Y) - guiGraphics.blit(TEXTURE, FIRE_HOLE_X, FIRE_HOLE_Y, glassX, glassY, FIRE_HOLE_WIDTH, FIRE_HOLE_HEIGHT) + blit(matrixStack, FIRE_HOLE_X, FIRE_HOLE_Y, glassX, glassY, FIRE_HOLE_WIDTH, FIRE_HOLE_HEIGHT) // Draw the inventory - guiGraphics.blit(TEXTURE, 0, 0, 0, 0, imageWidth / 2, imageHeight / 2) - guiGraphics.pose().popPose() + blit(matrixStack, 0, 0, 0, 0, imageWidth / 2, imageHeight / 2) + matrixStack.popPose() } - override fun renderLabels(guiGraphics: GuiGraphics, 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/ShipHelmButton.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/gui/shiphelm/ShipHelmButton.kt index 4d182868..45ab9c6c 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, DEFAULT_NARRATION) { + Button(x, y, 156, 23, text, onPress) { var isPressed = false @@ -17,7 +17,7 @@ class ShipHelmButton(x: Int, y: Int, text: Component, private val font: Font, on active = true } - override fun renderWidget(guiGraphics: GuiGraphics, mouseX: Int, mouseY: Int, partialTicks: Float) { + override fun renderButton(poseStack: PoseStack, mouseX: Int, mouseY: Int, partialTicks: Float) { if (!isHovered) isPressed = false RenderSystem.setShader { GameRenderer.getPositionTexShader() } @@ -29,20 +29,19 @@ class ShipHelmButton(x: Int, y: Int, text: Component, private val font: Font, on RenderSystem.enableDepthTest() if (this.isPressed || !this.active) { - guiGraphics.blit(ShipHelmScreen.TEXTURE, x, y, BUTTON_P_X, BUTTON_P_Y, width, height) + this.blit(poseStack, x, y, BUTTON_P_X, BUTTON_P_Y, width, height) } else if (this.isHovered) { - guiGraphics.blit(ShipHelmScreen.TEXTURE, x, y, BUTTON_H_X, BUTTON_H_Y, width, height) + this.blit(poseStack, x, y, BUTTON_H_X, BUTTON_H_Y, width, height) } val color = 0x404040 val formattedCharSequence: FormattedCharSequence = message.visualOrderText - guiGraphics.drawString( - font, + font.draw( + poseStack, formattedCharSequence, - ((x + width / 2) - font.width(formattedCharSequence) / 2), - (y + (height - 8) / 2), - color, - false + ((x + width / 2) - font.width(formattedCharSequence) / 2).toFloat(), + (y + (height - 8) / 2).toFloat(), + 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 f8d647c6..0988b607 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,11 +1,12 @@ 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 +import net.minecraft.network.chat.TranslatableComponent import net.minecraft.resources.ResourceLocation import net.minecraft.world.entity.player.Inventory import net.minecraft.world.phys.BlockHitResult @@ -73,7 +74,7 @@ class ShipHelmScreen(handler: ShipHelmScreenMenu, playerInventory: Inventory, te alignButton.active = disassembleButton.active } - override fun renderBg(guiGraphics: GuiGraphics, partialTicks: Float, mouseX: Int, mouseY: Int) { + override fun renderBg(matrixStack: PoseStack, partialTicks: Float, mouseX: Int, mouseY: Int) { updateButtons() RenderSystem.setShader { GameRenderer.getPositionTexShader() } @@ -81,10 +82,10 @@ class ShipHelmScreen(handler: ShipHelmScreenMenu, playerInventory: Inventory, te RenderSystem.setShaderTexture(0, TEXTURE) val x = (width - imageWidth) / 2 val y = (height - imageHeight) / 2 - guiGraphics.blit(TEXTURE, x, y, 0, 0, imageWidth, imageHeight) + blit(matrixStack, x, y, 0, 0, imageWidth, imageHeight) } - override fun renderLabels(guiGraphics: GuiGraphics, i: Int, j: Int) { + override fun renderLabels(matrixStack: PoseStack, i: Int, j: Int) { if (this.menu.aligning) { alignButton.message = ALIGNING_TEXT alignButton.active = false @@ -95,8 +96,8 @@ class ShipHelmScreen(handler: ShipHelmScreenMenu, playerInventory: Inventory, te // TODO render stats if (ship == null) return - ship!!.slug?.let { guiGraphics.drawString(font, it, titleLabelX, titleLabelY, 0x404040, false) } - guiGraphics.drawString(font, String.format("%.2f", ship!!.velocity.length()) + "m/s", 8, 25, 0x404040, false) + ship!!.slug?.let { font.draw(matrixStack, it, titleLabelX.toFloat(), titleLabelY.toFloat(), 0x404040) } + font.draw(matrixStack, String.format("%.2f", ship!!.velocity.length()) + "m/s", 8f, 25f, 0x404040) } // mojank doesn't check mouse release for their widgets for some reason @@ -117,10 +118,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 = 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") + 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") } } 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 71ef958c..b0a689b4 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,12 +3,11 @@ 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, private val blockEntity: ShipHelmBlockEntity?) : +class ShipHelmScreenMenu(syncId: Int, playerInv: Inventory, val blockEntity: ShipHelmBlockEntity?) : AbstractContainerMenu(EurekaScreens.SHIP_HELM.get(), syncId) { constructor(syncId: Int, playerInv: Inventory) : this(syncId, playerInv, null) @@ -22,17 +21,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(player) 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 } @@ -40,11 +39,6 @@ class ShipHelmScreenMenu(syncId: Int, playerInv: Inventory, private val blockEnt 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/registry/CreativeTabs.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/registry/CreativeTabs.kt index 1dd097b3..31a014d8 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/registry/CreativeTabs.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/registry/CreativeTabs.kt @@ -1,21 +1,18 @@ package org.valkyrienskies.eureka.registry -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.valkyrienskies.eureka.EurekaBlocks -import org.valkyrienskies.eureka.EurekaItems +import org.valkyrienskies.eureka.services.EurekaPlatformHelper +import java.util.ServiceLoader -object CreativeTabs { - fun create(): CreativeModeTab { - return CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) - .title(Component.translatable("itemGroup.eureka")) - .icon { ItemStack(EurekaBlocks.OAK_SHIP_HELM.get().asItem()) } - .displayItems { _, output -> - EurekaItems.ITEMS.forEach { - output.accept(it.get()) - } - } - .build() +class CreativeTabs { + companion object { + fun create(id: ResourceLocation, stack: () -> ItemStack): CreativeModeTab { + return ServiceLoader.load(EurekaPlatformHelper::class.java) + .findFirst() + .get() + .createCreativeTab(id, stack) + } } } diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/services/EurekaPlatformHelper.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/services/EurekaPlatformHelper.kt index 7a9ca60f..5db647cb 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/services/EurekaPlatformHelper.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/services/EurekaPlatformHelper.kt @@ -1,6 +1,9 @@ package org.valkyrienskies.eureka.services -// TODO: Delete this? -interface EurekaPlatformHelper { +import net.minecraft.resources.ResourceLocation +import net.minecraft.world.item.CreativeModeTab +import net.minecraft.world.item.ItemStack +interface EurekaPlatformHelper { + fun createCreativeTab(id: ResourceLocation, stack: () -> ItemStack): CreativeModeTab } 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 6754247b..c00441a8 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.Component +import net.minecraft.network.chat.TranslatableComponent import net.minecraft.world.entity.player.Player import org.joml.* import org.valkyrienskies.core.api.VSBeta @@ -359,7 +359,7 @@ class EurekaShipControl : ShipForcesInducer, ServerTickListener { private fun showCruiseStatus() { val cruiseKey = if (isCruising) "hud.vs_eureka.start_cruising" else "hud.vs_eureka.stop_cruising" - seatedPlayer?.displayClientMessage(Component.translatable(cruiseKey), true) + seatedPlayer?.displayClientMessage(TranslatableComponent(cruiseKey), true) } var powerLinear = 0.0 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 e39851a7..92d29d99 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/util/ShipAssembler.kt @@ -129,13 +129,8 @@ object ShipAssembler { ship.activeChunksSet.forEach { chunkX, chunkZ -> val chunk = level.getChunk(chunkX, chunkZ) - for (sectionIndex in 0 until chunk.sections.size) { - val section = chunk.sections[sectionIndex] - + for (section in chunk.sections) { 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) { @@ -143,7 +138,7 @@ object ShipAssembler { if (state.isAir) continue val realX = (chunkX shl 4) + x - val realY = bottomY + y + level.minBuildHeight + val realY = section.bottomBlockY() + 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/assets/vs_eureka/lang/en_us.json b/common/src/main/resources/assets/vs_eureka/lang/en_us.json index bcf6d819..0f720f75 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,6 +1,5 @@ { "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", @@ -38,6 +37,5 @@ "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", - "itemGroup.eureka": "Eureka" + "hud.vs_eureka.stop_cruising": "Cruise control disabled" } \ No newline at end of file diff --git a/common/src/main/resources/vs_eureka.accesswidener b/common/src/main/resources/vs_eureka.accesswidener index eba66be8..dce1e7e9 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 (Lnet/minecraft/world/inventory/MenuType$MenuSupplier;Lnet/minecraft/world/flag/FeatureFlagSet;)V +accessible method net/minecraft/world/inventory/MenuType (Lnet/minecraft/world/inventory/MenuType$MenuSupplier;)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 fa6db662..fe4d6e3c 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -24,18 +24,16 @@ configurations { } dependencies { - include(implementation(annotationProcessor("io.github.llamalad7:mixinextras-fabric:$mixin_extras_version"))) - modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" modApi "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" modImplementation("net.fabricmc:fabric-language-kotlin:1.10.10+kotlin.1.9.10") // Mod menu - modImplementation("maven.modrinth:modmenu:7.1.0") - modImplementation("me.shedaniel.cloth:cloth-config:11.0.99") + modImplementation("com.terraformersmc:modmenu:3.2.3") + 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-120-fabric:${rootProject.vs2_version}") + modApi("org.valkyrienskies:valkyrienskies-118-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/DeferredRegisterImpl.java b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/DeferredRegisterImpl.java index d9a76923..248ebd72 100644 --- a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/DeferredRegisterImpl.java +++ b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/DeferredRegisterImpl.java @@ -5,7 +5,6 @@ import java.util.List; 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 +18,7 @@ public class DeferredRegisterImpl implements DeferredRegister { public DeferredRegisterImpl(final String modId, final ResourceKey> registry) { this.modId = modId; - this.registry = (Registry) BuiltInRegistries.REGISTRY.get(registry.location()); + this.registry = (Registry) Registry.REGISTRY.get(registry.location()); } @NotNull diff --git a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaBlockTagsProvider.kt b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaBlockTagsProvider.kt deleted file mode 100644 index 8a3a004d..00000000 --- a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaBlockTagsProvider.kt +++ /dev/null @@ -1,58 +0,0 @@ -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) : - 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 deleted file mode 100644 index 77ff06d2..00000000 --- a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaDataGenerator.kt +++ /dev/null @@ -1,13 +0,0 @@ -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/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java index 5faaa26a..f9f5ceb9 100644 --- a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java +++ b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/EurekaModFabric.java @@ -8,24 +8,20 @@ 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.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.fabricmc.fabric.api.resource.ResourcePackActivationType; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; 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; 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.eureka.registry.CreativeTabs; import org.valkyrienskies.mod.compat.clothconfig.VSClothConfig; import org.valkyrienskies.mod.fabric.common.ValkyrienSkiesModFabric; @@ -37,12 +33,6 @@ public void onInitialize() { EurekaMod.init(); - Registry.register( - BuiltInRegistries.CREATIVE_MODE_TAB, - EurekaItems.INSTANCE.getTAB(), - CreativeTabs.INSTANCE.create() - ); - // TODO: make resources packs work ModContainer eureka = FabricLoader.getInstance().getModContainer(EurekaMod.MOD_ID) .orElseThrow(() -> new IllegalStateException("Eureka's ModContainer couldn't be found!")); @@ -56,13 +46,13 @@ public static class Client implements ClientModInitializer { @Override public void onInitializeClient() { EurekaMod.initClient(); - BlockEntityRenderers.register( + BlockEntityRendererRegistry.INSTANCE.register( EurekaBlockEntities.INSTANCE.getSHIP_HELM().get(), ShipHelmBlockEntityRenderer::new ); ModelLoadingRegistry.INSTANCE.registerModelProvider((manager, out) -> { - for (final WoodType woodType : WoodType.getEntries()) { + for (final WoodType woodType : WoodType.values()) { out.accept(new ResourceLocation( EurekaMod.MOD_ID, "block/" + woodType.getResourceName() + "_ship_helm_wheel" 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 index 7bdd636d..395a4b9a 100644 --- a/fabric/src/main/java/org/valkyrienskies/eureka/fabric/services/EurekaPlatformHelperFabric.java +++ b/fabric/src/main/java/org/valkyrienskies/eureka/fabric/services/EurekaPlatformHelperFabric.java @@ -1,7 +1,19 @@ 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 final ResourceLocation id, + @NotNull final Function0 stack) { + return FabricItemGroupBuilder.build(id, stack::invoke); + } } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 5b216542..5fd80194 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -33,9 +33,6 @@ ], "modmenu": [ "org.valkyrienskies.eureka.fabric.EurekaModFabric${'$'}ModMenu" - ], - "fabric-datagen": [ - "org.valkyrienskies.eureka.fabric.EurekaDataGenerator" ] }, "mixins": [ @@ -43,7 +40,7 @@ "vs_eureka.mixins.json" ], "depends": { - "minecraft": ">=1.20.1", + "minecraft": ">=1.18.2", "valkyrienskies": ">=${vs2_version}", "fabricloader": ">=0.14.21" } diff --git a/forge/build.gradle b/forge/build.gradle index 870e979d..5573e300 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -34,13 +34,6 @@ loom { } } -repositories { - maven { - name = 'Kotlin for Forge' - url = 'https://thedarkcolour.github.io/KotlinForForge/' - } -} - configurations { common shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. @@ -50,11 +43,8 @@ configurations { } dependencies { - implementation(annotationProcessor("io.github.llamalad7:mixinextras-common:$mixin_extras_version")) - implementation(include("io.github.llamalad7:mixinextras-forge:$mixin_extras_version")) - - forge "net.minecraftforge:forge:${rootProject.forge_version}" - modApi("org.valkyrienskies:valkyrienskies-120-forge:${rootProject.vs2_version}") { transitive = false } + forge "net.minecraftforge:forge:$forge_version" + modApi("org.valkyrienskies:valkyrienskies-118-forge:$vs2_version") { transitive = false } implementation("org.valkyrienskies.core:api:$vs_core_version") implementation("org.valkyrienskies.core:api-game:$vs_core_version") @@ -64,7 +54,6 @@ dependencies { common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } - // Add Kotlin for Forge. implementation "thedarkcolour:kotlinforforge:$forge_kotlin_version" } diff --git a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaBlockTagsProvider.kt b/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaBlockTagsProvider.kt deleted file mode 100644 index 5fa88410..00000000 --- a/forge/src/main/java/org/valkyrienskies/eureka/forge/EurekaBlockTagsProvider.kt +++ /dev/null @@ -1,63 +0,0 @@ -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, - 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/services/EurekaPlatformHelperForge.java b/forge/src/main/java/org/valkyrienskies/eureka/forge/services/EurekaPlatformHelperForge.java index 31606983..c35d0dc7 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 @@ -1,7 +1,32 @@ package org.valkyrienskies.eureka.forge.services; +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; +import org.jetbrains.annotations.NotNull; import org.valkyrienskies.eureka.services.EurekaPlatformHelper; public class EurekaPlatformHelperForge implements EurekaPlatformHelper { + @NotNull + @Override + public CreativeModeTab createCreativeTab( + @NotNull final ResourceLocation id, + @NotNull final Function0 stack + ) { + return new CreativeModeTab(id.toString()) { + @Override + public ItemStack makeIcon() { + return stack.invoke(); + } + @Override + public Component getDisplayName() { + return new TranslatableComponent( + "itemGroup." + String.format("%s.%s", id.getNamespace(), id.getPath())); + } + }; + } } 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 95888a36..dfe94bbe 100644 --- a/forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForge.kt +++ b/forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForge.kt @@ -2,35 +2,53 @@ package org.valkyrienskies.eureka.forge import net.minecraft.client.Minecraft import net.minecraft.client.gui.screens.Screen -import net.minecraft.core.registries.Registries -import net.minecraftforge.client.ConfigScreenHandler +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider +import net.minecraft.resources.ResourceLocation +import net.minecraftforge.client.ConfigGuiHandler.ConfigGuiFactory +import net.minecraftforge.client.event.EntityRenderersEvent.RegisterRenderers +import net.minecraftforge.client.event.ModelRegistryEvent +import net.minecraftforge.client.model.ForgeModelBakery import net.minecraftforge.eventbus.api.IEventBus import net.minecraftforge.fml.common.Mod -import net.minecraftforge.registries.DeferredRegister +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent 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.registry.CreativeTabs -import org.valkyrienskies.mod.common.ValkyrienSkiesMod +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 { - runForDist ( - clientTarget = { - EurekaModForgeClient.registerClient() - }, - serverTarget = {} - ) + // Submit our event bus to let architectury register our content on the right time + MOD_BUS.addListener { event: FMLClientSetupEvent? -> + clientSetup( + event + ) + } + MOD_BUS.addListener { event: ModelRegistryEvent? -> + onModelRegistry( + event + ) + } + MOD_BUS.addListener { event: RegisterRenderers -> + entityRenderers( + event + ) + } LOADING_CONTEXT.registerExtensionPoint( - ConfigScreenHandler.ConfigScreenFactory::class.java + ConfigGuiFactory::class.java ) { - ConfigScreenHandler.ConfigScreenFactory { _: Minecraft?, parent: Screen? -> + ConfigGuiFactory { _: Minecraft?, parent: Screen? -> createConfigScreenFor( parent!!, getRegisteredConfig(EurekaConfig::class.java) @@ -38,12 +56,43 @@ class EurekaModForge { } } init() + } + + private fun clientSetup(event: FMLClientSetupEvent?) { + if (happendClientSetup) { + return + } + happendClientSetup = true + initClient() + setModelGetter { woodType: WoodType -> + ForgeModelBakery.instance()!! + .bakedTopLevelModels + .getOrDefault( + ResourceLocation( + EurekaMod.MOD_ID, + "block/" + woodType.resourceName + "_ship_helm_wheel" + ), + Minecraft.getInstance().modelManager.missingModel + ) + } + } - val deferredRegister = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, EurekaMod.MOD_ID) - deferredRegister.register("general") { - CreativeTabs.create() + private fun entityRenderers(event: RegisterRenderers) { + event.registerBlockEntityRenderer(SHIP_HELM.get()) { ctx: BlockEntityRendererProvider.Context -> + ShipHelmBlockEntityRenderer( + ctx + ) + } + } + + private fun onModelRegistry(event: ModelRegistryEvent?) { + for (woodType in WoodType.values()) { + ForgeModelBakery.addSpecialModel( + ResourceLocation( + EurekaMod.MOD_ID, "block/" + woodType.resourceName + "_ship_helm_wheel" + ) + ) } - deferredRegister.register(getModBus()) } companion object { diff --git a/forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForgeClient.kt b/forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForgeClient.kt deleted file mode 100644 index 986f68de..00000000 --- a/forge/src/main/kotlin/org/valkyrienskies/eureka/forge/EurekaModForgeClient.kt +++ /dev/null @@ -1,71 +0,0 @@ -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" - ) - ) - } - } -} diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index a99f81db..cd005f50 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 = "[47.0.18,)" +versionRange = "[40.1.69,)" ordering = "NONE" side = "BOTH" [[dependencies.vs_eureka]] modId = "minecraft" mandatory = true -versionRange = "[1.20.1,)" +versionRange = "[1.18.2,)" ordering = "NONE" side = "BOTH" diff --git a/gradle.properties b/gradle.properties index 50a163b6..3198ce21 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,23 +1,22 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G +org.gradle.jvmargs=-Xmx4096M # Identity mod_name=eureka mod_id=vs_eureka -eureka_version=1.5.1-beta.3 +eureka_version=1.5.1-beta.1 enabled_platforms=fabric,forge -archives_base_name=eureka-1201 +archives_base_name=eureka maven_group=org.valkyrienskies # Dependencies -vs2_version=2.1.3-beta.1+a52f38bd68 +vs2_version=2.1.1-beta.5+72fac3232e vs_core_version=1.1.0+b19b27c4a4 -minecraft_version=1.20.1 -architectury_version=9.1.12 -fabric_loader_version=0.14.24 -fabric_api_version=0.90.7+1.20.1 -forge_version=1.20.1-47.2.0 +minecraft_version=1.18.2 +architectury_version=4.10.86 +fabric_loader_version=0.14.11 +fabric_api_version=0.67.0+1.18.2 +forge_version=1.18.2-40.2.4 +forge_kotlin_version=3.12.0 kotlin_version=1.9.10 -cloth_config_version=4.14.64 -mixin_extras_version=0.2.0 -forge_kotlin_version=4.10.0 +cloth_config_version=6.4.90 # Maven publishing vs_maven_url= vs_maven_username=