From 53049ab1c08e473daa66ac2cf1d7656da115b089 Mon Sep 17 00:00:00 2001 From: thedarkcolour <30441001+thedarkcolour@users.noreply.github.com> Date: Fri, 3 Apr 2026 15:07:50 -0700 Subject: [PATCH] WIP port to 26.1.1 --- build.gradle | 46 ++-- gradle.properties | 24 +- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 2 +- .../java/thedarkcolour/exdeorum/ExDeorum.java | 6 +- .../thedarkcolour/exdeorum/asm/ASMHooks.java | 4 +- .../exdeorum/asm/package-info.java | 1 - .../exdeorum/block/CompressedBlockType.java | 12 +- .../thedarkcolour/exdeorum/block/EBlock.java | 5 +- .../exdeorum/block/ETankBlock.java | 3 +- .../exdeorum/block/EndCakeBlock.java | 11 +- .../exdeorum/block/MachineBlock.java | 2 +- .../exdeorum/block/MechanicalHammerBlock.java | 5 +- .../exdeorum/block/WitchWaterBlock.java | 4 +- .../exdeorum/block/package-info.java | 1 - .../AbstractCrucibleBlockEntity.java | 22 +- .../blockentity/AbstractSieveBlockEntity.java | 9 +- .../blockentity/BarrelBlockEntity.java | 20 +- .../exdeorum/blockentity/EBlockEntity.java | 5 +- .../InfestedLeavesBlockEntity.java | 4 +- .../blockentity/helper/package-info.java | 1 - .../blockentity/logic/package-info.java | 1 - .../exdeorum/blockentity/package-info.java | 1 - .../exdeorum/client/ClientHandler.java | 67 +---- .../exdeorum/client/ClientsideCode.java | 13 - .../exdeorum/client/CompostColors.java | 53 +--- .../exdeorum/client/RenderFace.java | 2 +- .../exdeorum/client/RenderUtil.java | 142 ++-------- .../exdeorum/client/package-info.java | 1 - .../client/screen/MechanicalHammerScreen.java | 30 +-- .../client/screen/MechanicalSieveScreen.java | 30 +-- .../client/screen/RedstoneControlWidget.java | 35 +-- .../exdeorum/client/screen/package-info.java | 1 - .../exdeorum/client/ter/BarrelRenderer.java | 120 +-------- .../exdeorum/client/ter/CrucibleRenderer.java | 54 +--- .../client/ter/InfestedLeavesRenderer.java | 38 +-- .../exdeorum/client/ter/SieveRenderer.java | 59 +---- .../exdeorum/client/ter/package-info.java | 1 - .../exdeorum/compat/ClientXeiUtil.java | 245 ++---------------- .../exdeorum/compat/CompatUtil.java | 2 +- .../exdeorum/compat/PreferredOres.java | 10 +- .../exdeorum/compat/XeiUtil.java | 2 +- .../compat/emi/BarrelCompostEmiRecipe.java | 4 +- .../compat/emi/BarrelMixingEmiRecipe.java | 8 +- .../exdeorum/compat/emi/CrookEmiRecipe.java | 4 +- .../compat/emi/CrucibleEmiRecipe.java | 8 +- .../compat/emi/CrucibleHeatEmiRecipe.java | 4 +- .../exdeorum/compat/emi/EEmiRecipe.java | 8 +- .../compat/emi/EmiOneToOneRecipe.java | 4 +- .../exdeorum/compat/emi/EmiUtil.java | 4 +- .../exdeorum/compat/emi/HammerEmiRecipe.java | 8 +- .../exdeorum/compat/emi/SieveEmiRecipe.java | 4 +- .../exdeorum/compat/emi/package-info.java | 1 - .../compat/jade/BarrelComponentProvider.java | 4 +- .../jade/CrucibleComponentProvider.java | 4 +- .../compat/jade/ExDeorumJadePlugin.java | 10 +- .../jade/InfestedLeavesComponentProvider.java | 4 +- .../compat/jade/SieveComponentProvider.java | 4 +- .../exdeorum/compat/jade/package-info.java | 1 - .../compat/jei/ExDeorumJeiPlugin.java | 6 +- .../exdeorum/compat/jei/package-info.java | 1 - .../compat/kubejs/ExDeorumKubeJsBindings.java | 2 +- .../exdeorum/compat/kubejs/package-info.java | 1 - .../exdeorum/compat/package-info.java | 1 - .../compat/top/ExDeorumInfoProvider.java | 6 +- .../exdeorum/compat/top/package-info.java | 1 - .../exdeorum/config/package-info.java | 1 - .../exdeorum/data/Advancements.java | 34 +-- .../exdeorum/data/BlockModels.java | 6 +- .../exdeorum/data/LootModifiers.java | 2 +- .../exdeorum/data/ModCompatData.java | 8 +- .../thedarkcolour/exdeorum/data/ModTags.java | 8 +- .../thedarkcolour/exdeorum/data/Sounds.java | 5 +- .../exdeorum/data/package-info.java | 1 - .../exdeorum/data/recipe/Recipes.java | 6 +- .../exdeorum/data/recipe/package-info.java | 1 - .../exdeorum/event/EventHandler.java | 24 +- .../exdeorum/event/package-info.java | 1 - .../exdeorum/fluid/WitchWaterFluid.java | 42 ++- .../exdeorum/fluid/package-info.java | 1 - .../exdeorum/item/GrassSpreaderItem.java | 2 +- .../exdeorum/item/HammerItem.java | 10 +- .../exdeorum/item/PorcelainBucket.java | 21 +- .../exdeorum/item/PorcelainMilkBucket.java | 14 +- .../exdeorum/item/RandomResultItem.java | 10 +- .../exdeorum/item/WateringCanItem.java | 24 +- .../exdeorum/item/package-info.java | 1 - .../exdeorum/loot/MachineLootFunction.java | 7 +- .../exdeorum/loot/SummationGenerator.java | 7 +- .../exdeorum/loot/package-info.java | 1 - .../exdeorum/material/MaterialParser.java | 12 +- .../exdeorum/material/package-info.java | 1 - .../exdeorum/menu/MechanicalHammerMenu.java | 4 +- .../exdeorum/menu/MechanicalSieveMenu.java | 4 +- .../exdeorum/menu/package-info.java | 1 - .../exdeorum/network/VoidWorldMessage.java | 2 +- .../exdeorum/network/package-info.java | 1 - .../thedarkcolour/exdeorum/package-info.java | 1 - .../exdeorum/recipe/BlockPredicate.java | 2 +- .../exdeorum/recipe/CodecUtil.java | 2 +- .../exdeorum/recipe/OreChunkRecipe.java | 36 ++- .../exdeorum/recipe/ProbabilityRecipe.java | 6 - .../exdeorum/recipe/RecipeUtil.java | 117 ++------- .../recipe/SingleIngredientRecipe.java | 22 +- .../recipe/barrel/BarrelCompostRecipe.java | 15 +- .../barrel/BarrelFluidMixingRecipe.java | 37 +-- .../recipe/barrel/BarrelMixingRecipe.java | 21 +- .../barrel/FluidTransformationRecipe.java | 37 +-- .../exdeorum/recipe/barrel/package-info.java | 1 - .../cache/BarrelFluidMixingRecipeCache.java | 6 +- .../recipe/cache/CrookRecipeCache.java | 6 +- .../recipe/cache/CrucibleHeatRecipeCache.java | 6 +- .../cache/FluidTransformationRecipeCache.java | 6 +- .../recipe/cache/SieveRecipeCache.java | 6 +- .../cache/SingleIngredientRecipeCache.java | 6 +- .../exdeorum/recipe/cache/package-info.java | 1 - .../exdeorum/recipe/crook/CrookRecipe.java | 37 +-- .../exdeorum/recipe/crook/package-info.java | 1 - .../recipe/crucible/CrucibleHeatRecipe.java | 37 +-- .../recipe/crucible/CrucibleRecipe.java | 19 +- .../recipe/crucible/package-info.java | 1 - .../recipe/hammer/CompressedHammerRecipe.java | 19 +- .../exdeorum/recipe/hammer/HammerRecipe.java | 19 +- .../exdeorum/recipe/hammer/package-info.java | 1 - .../exdeorum/recipe/package-info.java | 1 - .../recipe/sieve/CompressedSieveRecipe.java | 19 +- .../exdeorum/recipe/sieve/SieveRecipe.java | 21 +- .../exdeorum/recipe/sieve/package-info.java | 1 - .../exdeorum/registry/EItems.java | 24 +- .../exdeorum/registry/ELootFunctions.java | 7 +- .../exdeorum/registry/ENumberProviders.java | 7 +- .../exdeorum/registry/ERecipeSerializers.java | 26 +- .../exdeorum/registry/package-info.java | 1 - .../exdeorum/tag/EBiomeTags.java | 20 +- .../thedarkcolour/exdeorum/tag/EItemTags.java | 4 +- .../exdeorum/tag/EStructureSetTags.java | 2 +- .../exdeorum/tag/package-info.java | 1 - .../voidworld/VoidChunkGenerator.java | 10 +- .../exdeorum/voidworld/package-info.java | 1 - 139 files changed, 648 insertions(+), 1425 deletions(-) diff --git a/build.gradle b/build.gradle index 6e73c2da..a2ff5880 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java-library' id 'idea' - id 'net.neoforged.moddev' version '2.0.107' + id 'net.neoforged.moddev' version '2.0.141' id("com.modrinth.minotaur") version '2.+' id("com.matthewprenger.cursegradle") version '1.4.0' } @@ -12,7 +12,7 @@ base { archivesName = 'exdeorum' } -java.toolchain.languageVersion = JavaLanguageVersion.of(21) +java.toolchain.languageVersion = JavaLanguageVersion.of(25) java.toolchain.vendor = JvmVendorSpec.JETBRAINS java.withSourcesJar() @@ -21,11 +21,6 @@ evaluationDependsOn(":coremod") neoForge { version = neo_version - parchment { - mappingsVersion = project.parchment_mappings_version - minecraftVersion = project.parchment_minecraft_version - } - accessTransformers = project.files('src/main/resources/META-INF/accesstransformer.cfg') runs { @@ -65,6 +60,15 @@ neoForge { // Include resources generated by data generators. sourceSets.main.resources { srcDir 'src/generated/resources' } +// Exclude compat packages for libraries without 1.26.1 support yet +sourceSets.main.java.exclude( + '**/compat/jei/**', + '**/compat/emi/**', + '**/compat/jade/**', + '**/compat/kubejs/**', + '**/compat/top/**' +) + repositories { mavenCentral() maven { @@ -117,36 +121,36 @@ repositories { dependencies { // TOP OPTIONAL - compileOnly("mcjty.theoneprobe:theoneprobe:1.21_neo-${top_version}") { - transitive = false - } + //compileOnly("mcjty.theoneprobe:theoneprobe:1.21_neo-${top_version}") { + // transitive = false + //} // JADE OPTIONAL - implementation("curse.maven:jade-324717:6291517") + //implementation("curse.maven:jade-324717:6291517") // JEI OPTIONAL - compileOnly("mezz.jei:jei-${mc_version}-neoforge-api:${jei_version}") - runtimeOnly("mezz.jei:jei-${mc_version}-neoforge:${jei_version}") + //compileOnly("mezz.jei:jei-${mc_version}-neoforge-api:${jei_version}") + //runtimeOnly("mezz.jei:jei-${mc_version}-neoforge:${jei_version}") // EMI OPTIONAL - compileOnly("dev.emi:emi-neoforge:${emi_version}+${mc_version}:api") + //compileOnly("dev.emi:emi-neoforge:${emi_version}+${mc_version}:api") //runtimeOnly("dev.emi:emi-neoforge:${emi_version}+${mc_version}") // KubeJS OPTIONAL - implementation("dev.architectury:architectury-neoforge:${architectury_version}") - implementation("dev.latvian.mods:rhino:${rhino_version}") - implementation("dev.latvian.mods:kubejs-neoforge:${kubejs_version}") + //implementation("dev.architectury:architectury-neoforge:${architectury_version}") + //implementation("dev.latvian.mods:rhino:${rhino_version}") + //implementation("dev.latvian.mods:kubejs-neoforge:${kubejs_version}") // ModKit DEV ONLY - implementation('com.github.thedarkcolour:ModKit:4f83c92767') + implementation('com.github.thedarkcolour:ModKit:d801a318cf') // Core mod implementation(project(':coremod')) jarJar(project(':coremod')) // Oculus + Embeddium OPTIONAL - compileOnly('maven.modrinth:oculus:1.20.1-1.6.9') - compileOnly('maven.modrinth:embeddium:0.3.9+mc1.20.4') + //compileOnly('maven.modrinth:oculus:1.20.1-1.6.9') + //compileOnly('maven.modrinth:embeddium:0.3.9+mc1.20.4') // testing //implementation("curse.maven:allthecompressed-514045:4938351") - compileOnly("curse.maven:alltheores-405593:5500624") + //compileOnly("curse.maven:alltheores-405593:5500624") //implementation("curse.maven:inventorysorter-240633:4655091") //implementation("curse.maven:cyclic-239286:4994392") //implementation("curse.maven:flib-661261:4724762") diff --git a/gradle.properties b/gradle.properties index fd446f89..71439e09 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,19 +5,19 @@ org.gradle.daemon=true org.gradle.parallel=true org.gradle.caching=true -mc_version=1.21.1 -neo_version=21.1.213 -neo_version_range=[21.1,) +mc_version=1.26.1 +neo_version=26.1.1.1-beta +neo_version_range=[26.1,) loader_version_range=[4,) -jei_version=19.25.0.323 -emi_version=1.1.21 -cloth_config_version=15.0.127 -top_version=12.0.3-5 +#jei_version=19.25.0.323 +#emi_version=1.1.21 +#cloth_config_version=15.0.127 +#top_version=12.0.3-5 -kubejs_version=2101.7.2-build.296 -rhino_version=2101.2.7-build.81 -architectury_version=13.0.8 +#kubejs_version=2101.7.2-build.296 +#rhino_version=2101.2.7-build.81 +#architectury_version=13.0.8 -parchment_minecraft_version=1.21.1 -parchment_mappings_version=2024.11.17 \ No newline at end of file +#parchment_minecraft_version=1.26.1 +#parchment_mappings_version=2024.11.17 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138..c61a118f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index 0f90d355..6b580e56 100644 --- a/settings.gradle +++ b/settings.gradle @@ -6,7 +6,7 @@ pluginManagement { } plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0' + id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' } include('coremod') diff --git a/src/main/java/thedarkcolour/exdeorum/ExDeorum.java b/src/main/java/thedarkcolour/exdeorum/ExDeorum.java index ff56584d..3ed32154 100644 --- a/src/main/java/thedarkcolour/exdeorum/ExDeorum.java +++ b/src/main/java/thedarkcolour/exdeorum/ExDeorum.java @@ -18,7 +18,7 @@ package thedarkcolour.exdeorum; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModList; @@ -90,7 +90,7 @@ public class ExDeorum { ECompressedBlocks.register(); } - public static ResourceLocation loc(String menuProperty) { - return ResourceLocation.fromNamespaceAndPath(ID, menuProperty); + public static Identifier loc(String menuProperty) { + return Identifier.fromNamespaceAndPath(ID, menuProperty); } } diff --git a/src/main/java/thedarkcolour/exdeorum/asm/ASMHooks.java b/src/main/java/thedarkcolour/exdeorum/asm/ASMHooks.java index ef58858e..3e977720 100644 --- a/src/main/java/thedarkcolour/exdeorum/asm/ASMHooks.java +++ b/src/main/java/thedarkcolour/exdeorum/asm/ASMHooks.java @@ -21,7 +21,7 @@ package thedarkcolour.exdeorum.asm; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.levelgen.presets.WorldPresets; import net.minecraft.world.level.levelgen.structure.Structure; @@ -67,7 +67,7 @@ public final class ASMHooks { */ public static ResourceKey overrideDefaultWorldPreset() { if (ModList.get().isLoaded(ModIds.SKYBLOCK_BUILDER)) { - return ResourceKey.create(Registries.WORLD_PRESET, ResourceLocation.fromNamespaceAndPath(ModIds.SKYBLOCK_BUILDER, "skyblock")); + return ResourceKey.create(Registries.WORLD_PRESET, Identifier.fromNamespaceAndPath(ModIds.SKYBLOCK_BUILDER, "skyblock")); } return EConfig.COMMON.setVoidWorldAsDefault.get() ? EWorldPresets.VOID_WORLD : WorldPresets.NORMAL; } diff --git a/src/main/java/thedarkcolour/exdeorum/asm/package-info.java b/src/main/java/thedarkcolour/exdeorum/asm/package-info.java index f21ee6c7..f8235b37 100644 --- a/src/main/java/thedarkcolour/exdeorum/asm/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/asm/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.asm; diff --git a/src/main/java/thedarkcolour/exdeorum/block/CompressedBlockType.java b/src/main/java/thedarkcolour/exdeorum/block/CompressedBlockType.java index 9d34219e..1dceeb4a 100644 --- a/src/main/java/thedarkcolour/exdeorum/block/CompressedBlockType.java +++ b/src/main/java/thedarkcolour/exdeorum/block/CompressedBlockType.java @@ -1,7 +1,7 @@ package thedarkcolour.exdeorum.block; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.tags.TagKey; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -67,19 +67,19 @@ public class CompressedBlockType implements ItemLike { return this.hasCompressium; } - public ResourceLocation getAtc() { - return ResourceLocation.fromNamespaceAndPath(ModIds.ALL_THE_COMPRESSED, BuiltInRegistries.BLOCK.getKey(this.base.get()).getPath() + "_1x"); + public Identifier getAtc() { + return Identifier.fromNamespaceAndPath(ModIds.ALL_THE_COMPRESSED, BuiltInRegistries.BLOCK.getKey(this.base.get()).getPath() + "_1x"); } - public ResourceLocation getCompressium() { - return ResourceLocation.fromNamespaceAndPath(ModIds.COMPRESSIUM, BuiltInRegistries.BLOCK.getKey(this.base.get()).getPath() + "_1"); + public Identifier getCompressium() { + return Identifier.fromNamespaceAndPath(ModIds.COMPRESSIUM, BuiltInRegistries.BLOCK.getKey(this.base.get()).getPath() + "_1"); } public Block getBase() { return this.base.get(); } - public ResourceLocation getId() { + public Identifier getId() { return this.block.getId(); } } diff --git a/src/main/java/thedarkcolour/exdeorum/block/EBlock.java b/src/main/java/thedarkcolour/exdeorum/block/EBlock.java index 3076c471..697b86b9 100644 --- a/src/main/java/thedarkcolour/exdeorum/block/EBlock.java +++ b/src/main/java/thedarkcolour/exdeorum/block/EBlock.java @@ -22,7 +22,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.Containers; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -61,14 +60,14 @@ public abstract class EBlock extends Block implements EntityBlock { } @Override - protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + protected InteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { var blockEntity = level.getBlockEntity(pos); if (blockEntity instanceof EBlockEntity entity) { return entity.useItemOn(level, player, stack, hand); } - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + return InteractionResult.TRY_WITH_EMPTY_HAND; } public static void dropItem(Level level, BlockPos pos, ItemStack stack) { diff --git a/src/main/java/thedarkcolour/exdeorum/block/ETankBlock.java b/src/main/java/thedarkcolour/exdeorum/block/ETankBlock.java index 02bae726..b4382cd2 100644 --- a/src/main/java/thedarkcolour/exdeorum/block/ETankBlock.java +++ b/src/main/java/thedarkcolour/exdeorum/block/ETankBlock.java @@ -26,7 +26,6 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluids; -import net.neoforged.neoforge.common.EffectCures; import net.neoforged.neoforge.common.NeoForgeMod; import net.neoforged.neoforge.fluids.FluidStack; import thedarkcolour.exdeorum.blockentity.ETankBlockEntity; @@ -65,7 +64,7 @@ public abstract class ETankBlock extends EBlock { } else if (fluidType.getFluidType().canExtinguish(entity)) { entity.extinguishFire(); } else if (entity instanceof LivingEntity living && NeoForgeMod.MILK.isBound() && fluidType == NeoForgeMod.MILK.get()) { - living.removeEffectsCuredBy(EffectCures.MILK); + living.removeAllEffects(); } } } diff --git a/src/main/java/thedarkcolour/exdeorum/block/EndCakeBlock.java b/src/main/java/thedarkcolour/exdeorum/block/EndCakeBlock.java index fd5f7d81..2c87b7ce 100644 --- a/src/main/java/thedarkcolour/exdeorum/block/EndCakeBlock.java +++ b/src/main/java/thedarkcolour/exdeorum/block/EndCakeBlock.java @@ -23,7 +23,6 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.stats.Stats; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -43,12 +42,12 @@ public class EndCakeBlock extends CakeBlock { } @Override - protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + protected InteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { if (stack.is(EItemTags.END_CAKE_MATERIAL)) { int bites = state.getValue(BITES); if (bites == 0) { - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + return InteractionResult.TRY_WITH_EMPTY_HAND; } else { if (!level.isClientSide) { if (!player.getAbilities().instabuild) { @@ -57,10 +56,10 @@ public class EndCakeBlock extends CakeBlock { level.setBlock(pos, state.setValue(BITES, bites - 1), 3); } - return ItemInteractionResult.sidedSuccess(level.isClientSide); + return InteractionResult.SUCCESS; } } - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + return InteractionResult.TRY_WITH_EMPTY_HAND; } @Override @@ -83,7 +82,7 @@ public class EndCakeBlock extends CakeBlock { } } - return InteractionResult.sidedSuccess(level.isClientSide); + return InteractionResult.SUCCESS; } return InteractionResult.PASS; diff --git a/src/main/java/thedarkcolour/exdeorum/block/MachineBlock.java b/src/main/java/thedarkcolour/exdeorum/block/MachineBlock.java index d6877f2e..e419a9df 100644 --- a/src/main/java/thedarkcolour/exdeorum/block/MachineBlock.java +++ b/src/main/java/thedarkcolour/exdeorum/block/MachineBlock.java @@ -29,7 +29,7 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.gamerules.GameRules; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; diff --git a/src/main/java/thedarkcolour/exdeorum/block/MechanicalHammerBlock.java b/src/main/java/thedarkcolour/exdeorum/block/MechanicalHammerBlock.java index b08e002b..1d84e595 100644 --- a/src/main/java/thedarkcolour/exdeorum/block/MechanicalHammerBlock.java +++ b/src/main/java/thedarkcolour/exdeorum/block/MechanicalHammerBlock.java @@ -26,15 +26,16 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; import thedarkcolour.exdeorum.blockentity.MechanicalHammerBlockEntity; import thedarkcolour.exdeorum.data.TranslationKeys; import thedarkcolour.exdeorum.registry.EBlockEntities; public class MechanicalHammerBlock extends MachineBlock { public static final BooleanProperty RUNNING = BooleanProperty.create("running"); - public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + public static final EnumProperty FACING = HorizontalDirectionalBlock.FACING; public MechanicalHammerBlock(Properties properties) { super(properties, EBlockEntities.MECHANICAL_HAMMER); diff --git a/src/main/java/thedarkcolour/exdeorum/block/WitchWaterBlock.java b/src/main/java/thedarkcolour/exdeorum/block/WitchWaterBlock.java index 22b1bb0b..20001bf7 100644 --- a/src/main/java/thedarkcolour/exdeorum/block/WitchWaterBlock.java +++ b/src/main/java/thedarkcolour/exdeorum/block/WitchWaterBlock.java @@ -24,8 +24,8 @@ import net.minecraft.world.Difficulty; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.*; -import net.minecraft.world.entity.animal.MushroomCow; -import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.animal.cow.MushroomCow; +import net.minecraft.world.entity.animal.rabbit.Rabbit; import net.minecraft.world.entity.animal.axolotl.Axolotl; import net.minecraft.world.entity.monster.Creeper; import net.minecraft.world.entity.monster.Zombie; diff --git a/src/main/java/thedarkcolour/exdeorum/block/package-info.java b/src/main/java/thedarkcolour/exdeorum/block/package-info.java index bcd5b573..80fa917c 100644 --- a/src/main/java/thedarkcolour/exdeorum/block/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/block/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.block; diff --git a/src/main/java/thedarkcolour/exdeorum/blockentity/AbstractCrucibleBlockEntity.java b/src/main/java/thedarkcolour/exdeorum/blockentity/AbstractCrucibleBlockEntity.java index 347ee031..ea513b21 100644 --- a/src/main/java/thedarkcolour/exdeorum/blockentity/AbstractCrucibleBlockEntity.java +++ b/src/main/java/thedarkcolour/exdeorum/blockentity/AbstractCrucibleBlockEntity.java @@ -23,9 +23,9 @@ import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -103,8 +103,8 @@ public abstract class AbstractCrucibleBlockEntity extends ETankBlockEntity { super.loadAdditional(nbt, registries); this.tank.readFromNBT(registries, nbt.getCompound("Tank")); - this.lastMelted = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(nbt.getString("LastMelted"))); - this.fluid = BuiltInRegistries.FLUID.get(ResourceLocation.parse(nbt.getString("Fluid"))); + this.lastMelted = BuiltInRegistries.BLOCK.get(Identifier.parse(nbt.getString("LastMelted"))); + this.fluid = BuiltInRegistries.FLUID.get(Identifier.parse(nbt.getString("Fluid"))); this.solids = nbt.getShort("Solids"); updateLight(this.level, this.worldPosition, this.fluid); @@ -152,11 +152,11 @@ public abstract class AbstractCrucibleBlockEntity extends ETankBlockEntity { } @Override - public ItemInteractionResult useItemOn(Level level, Player player, ItemStack stack, InteractionHand hand) { + public InteractionResult useItemOn(Level level, Player player, ItemStack stack, InteractionHand hand) { var playerItem = player.getItemInHand(hand); if (playerItem.getCapability(Capabilities.FluidHandler.ITEM) != null) { - return FluidUtil.interactWithFluidHandler(player, hand, this.tank) ? ItemInteractionResult.sidedSuccess(level.isClientSide) : ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + return FluidUtil.interactWithFluidHandler(player, hand, this.tank) ? InteractionResult.SUCCESS : InteractionResult.TRY_WITH_EMPTY_HAND; } if (playerItem.getItem() == Items.GLASS_BOTTLE && this.getType() == EBlockEntities.WATER_CRUCIBLE.get() && EConfig.SERVER.allowWaterBottleTransfer.get()) { @@ -167,21 +167,21 @@ public abstract class AbstractCrucibleBlockEntity extends ETankBlockEntity { BarrelBlockEntity.extractWaterBottle(this.tank, level, player, playerItem, fluid); markUpdated(); } - return ItemInteractionResult.sidedSuccess(level.isClientSide); + return InteractionResult.SUCCESS; } } else { var result = canInsertItem(playerItem); if (result == InsertionResult.YES) { if (tryMelt(playerItem, player.getAbilities().instabuild ? playerStack -> {} : playerStack -> playerStack.shrink(1))) { - return ItemInteractionResult.sidedSuccess(level.isClientSide); + return InteractionResult.SUCCESS; } } else if (result == InsertionResult.FULL) { - return ItemInteractionResult.sidedSuccess(level.isClientSide); + return InteractionResult.SUCCESS; } } - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + return InteractionResult.TRY_WITH_EMPTY_HAND; } // Gets a crucible recipe, using the cache if possible @@ -296,7 +296,7 @@ public abstract class AbstractCrucibleBlockEntity extends ETankBlockEntity { if (key.getPath().endsWith("sapling")) { try { - overrides.put(item, BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath(key.getNamespace(), key.getPath().replace("sapling", "leaves")))); + overrides.put(item, BuiltInRegistries.BLOCK.get(Identifier.fromNamespaceAndPath(key.getNamespace(), key.getPath().replace("sapling", "leaves")))); } catch (Exception ignored) { } } diff --git a/src/main/java/thedarkcolour/exdeorum/blockentity/AbstractSieveBlockEntity.java b/src/main/java/thedarkcolour/exdeorum/blockentity/AbstractSieveBlockEntity.java index ee0247eb..1b6b484f 100644 --- a/src/main/java/thedarkcolour/exdeorum/blockentity/AbstractSieveBlockEntity.java +++ b/src/main/java/thedarkcolour/exdeorum/blockentity/AbstractSieveBlockEntity.java @@ -27,7 +27,6 @@ import net.minecraft.stats.Stats; import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; @@ -109,7 +108,7 @@ public abstract class AbstractSieveBlockEntity extends EBlockEntity implements S } @Override - public ItemInteractionResult useItemOn(Level level, Player player, ItemStack stack, InteractionHand hand) { + public InteractionResult useItemOn(Level level, Player player, ItemStack stack, InteractionHand hand) { ItemStack playerItem = player.getItemInHand(hand); boolean isClientSide = level.isClientSide; @@ -122,9 +121,9 @@ public abstract class AbstractSieveBlockEntity extends EBlockEntity implements S if (!player.getAbilities().instabuild) { playerItem.shrink(1); } - return ItemInteractionResult.CONSUME; + return InteractionResult.CONSUME; } else { - return ItemInteractionResult.SUCCESS; + return InteractionResult.SUCCESS; } } } else if (this.logic.getContents().isEmpty()) { @@ -207,7 +206,7 @@ public abstract class AbstractSieveBlockEntity extends EBlockEntity implements S } } - return ItemInteractionResult.sidedSuccess(isClientSide); + return InteractionResult.SUCCESS; } // search for another stack in inventory and restock held item diff --git a/src/main/java/thedarkcolour/exdeorum/blockentity/BarrelBlockEntity.java b/src/main/java/thedarkcolour/exdeorum/blockentity/BarrelBlockEntity.java index 1f22f892..863ec8b9 100644 --- a/src/main/java/thedarkcolour/exdeorum/blockentity/BarrelBlockEntity.java +++ b/src/main/java/thedarkcolour/exdeorum/blockentity/BarrelBlockEntity.java @@ -29,7 +29,7 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.tags.FluidTags; import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -211,7 +211,7 @@ public class BarrelBlockEntity extends ETankBlockEntity { } @Override - public ItemInteractionResult useItemOn(Level level, Player player, ItemStack stack, InteractionHand hand) { + public InteractionResult useItemOn(Level level, Player player, ItemStack stack, InteractionHand hand) { // Collect an item if (!getItem().isEmpty()) { return giveResultItem(level); @@ -233,7 +233,7 @@ public class BarrelBlockEntity extends ETankBlockEntity { this.progress = 0.0f; } - return ItemInteractionResult.sidedSuccess(level.isClientSide); + return InteractionResult.SUCCESS; } else { this.isBeingFilledByPlayer = false; // try one more time to transfer fluids between item and barrel @@ -250,14 +250,14 @@ public class BarrelBlockEntity extends ETankBlockEntity { level.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.BOTTLE_FILL, SoundSource.NEUTRAL, 1.0F, 1.0F); markUpdated(); - return ItemInteractionResult.sidedSuccess(level.isClientSide); + return InteractionResult.SUCCESS; } } else if (playerItem.getItem() == Items.GLASS_BOTTLE) { if (this.tank.drain(fluid, IFluidHandler.FluidAction.SIMULATE).getAmount() == 250) { extractWaterBottle(this.tank, level, player, playerItem, fluid); markUpdated(); - return ItemInteractionResult.sidedSuccess(level.isClientSide); + return InteractionResult.SUCCESS; } } } @@ -280,7 +280,7 @@ public class BarrelBlockEntity extends ETankBlockEntity { } } // If a mix was successful, skip rest of logic - return ItemInteractionResult.sidedSuccess(level.isClientSide); + return InteractionResult.SUCCESS; } } } @@ -298,7 +298,7 @@ public class BarrelBlockEntity extends ETankBlockEntity { } } - return ItemInteractionResult.sidedSuccess(level.isClientSide); + return InteractionResult.SUCCESS; } // Also used by Water Crucibles @@ -316,7 +316,7 @@ public class BarrelBlockEntity extends ETankBlockEntity { } // Pops the item out of the barrel (ex. dirt that has finished composting) - private ItemInteractionResult giveResultItem(Level level) { + private InteractionResult giveResultItem(Level level) { if (!level.isClientSide) { popOutItem(level, this.worldPosition, this.item.extract(false)); @@ -325,7 +325,7 @@ public class BarrelBlockEntity extends ETankBlockEntity { markUpdated(); } - return ItemInteractionResult.sidedSuccess(level.isClientSide); + return InteractionResult.SUCCESS; } private static void popOutItem(Level level, BlockPos pos, ItemStack stack) { @@ -370,7 +370,7 @@ public class BarrelBlockEntity extends ETankBlockEntity { return false; } - var recipe = RecipeUtil.getBarrelMixingRecipe(this.level.getRecipeManager(), playerItem, this.tank.getFluid()); + var recipe = RecipeUtil.getBarrelMixingRecipe(playerItem, this.tank.getFluid()); if (recipe != null) { if (!simulate) { diff --git a/src/main/java/thedarkcolour/exdeorum/blockentity/EBlockEntity.java b/src/main/java/thedarkcolour/exdeorum/blockentity/EBlockEntity.java index 544663fb..f2ca93c3 100644 --- a/src/main/java/thedarkcolour/exdeorum/blockentity/EBlockEntity.java +++ b/src/main/java/thedarkcolour/exdeorum/blockentity/EBlockEntity.java @@ -26,7 +26,6 @@ import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -71,8 +70,8 @@ public abstract class EBlockEntity extends BlockEntity { public void copyVisualData(BlockEntity fromIntegratedServer) { } - public ItemInteractionResult useItemOn(Level level, Player player, ItemStack stack, InteractionHand hand) { - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + public InteractionResult useItemOn(Level level, Player player, ItemStack stack, InteractionHand hand) { + return InteractionResult.TRY_WITH_EMPTY_HAND; } public InteractionResult useWithoutItem(Level level, Player player) { diff --git a/src/main/java/thedarkcolour/exdeorum/blockentity/InfestedLeavesBlockEntity.java b/src/main/java/thedarkcolour/exdeorum/blockentity/InfestedLeavesBlockEntity.java index aee02821..0742edc0 100644 --- a/src/main/java/thedarkcolour/exdeorum/blockentity/InfestedLeavesBlockEntity.java +++ b/src/main/java/thedarkcolour/exdeorum/blockentity/InfestedLeavesBlockEntity.java @@ -31,8 +31,8 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.client.model.data.ModelData; -import net.neoforged.neoforge.client.model.data.ModelProperty; +import net.neoforged.neoforge.model.data.ModelData; +import net.neoforged.neoforge.model.data.ModelProperty; import org.jetbrains.annotations.NotNull; import thedarkcolour.exdeorum.block.InfestedLeavesBlock; import thedarkcolour.exdeorum.registry.EBlockEntities; diff --git a/src/main/java/thedarkcolour/exdeorum/blockentity/helper/package-info.java b/src/main/java/thedarkcolour/exdeorum/blockentity/helper/package-info.java index 8b11a89a..7c7328b5 100644 --- a/src/main/java/thedarkcolour/exdeorum/blockentity/helper/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/blockentity/helper/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.blockentity.helper; diff --git a/src/main/java/thedarkcolour/exdeorum/blockentity/logic/package-info.java b/src/main/java/thedarkcolour/exdeorum/blockentity/logic/package-info.java index e8de7280..f8e9a53f 100644 --- a/src/main/java/thedarkcolour/exdeorum/blockentity/logic/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/blockentity/logic/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.blockentity.logic; diff --git a/src/main/java/thedarkcolour/exdeorum/blockentity/package-info.java b/src/main/java/thedarkcolour/exdeorum/blockentity/package-info.java index 782f7965..dc78b29f 100644 --- a/src/main/java/thedarkcolour/exdeorum/blockentity/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/blockentity/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.blockentity; diff --git a/src/main/java/thedarkcolour/exdeorum/client/ClientHandler.java b/src/main/java/thedarkcolour/exdeorum/client/ClientHandler.java index ee12b26d..d204154a 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/ClientHandler.java +++ b/src/main/java/thedarkcolour/exdeorum/client/ClientHandler.java @@ -18,15 +18,9 @@ package thedarkcolour.exdeorum.client; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen; import net.minecraft.client.gui.screens.worldselection.WorldCreationUiState; -import net.minecraft.client.renderer.ItemBlockRenderTypes; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.ShaderInstance; -import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; import net.minecraft.util.Unit; @@ -34,8 +28,8 @@ import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModList; import net.neoforged.fml.event.config.ModConfigEvent; -import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.*; +import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent; import net.neoforged.neoforge.common.NeoForge; import thedarkcolour.exdeorum.ExDeorum; import thedarkcolour.exdeorum.asm.ASMHooks; @@ -44,16 +38,13 @@ import thedarkcolour.exdeorum.client.screen.MechanicalSieveScreen; import thedarkcolour.exdeorum.client.ter.*; import thedarkcolour.exdeorum.compat.ModIds; import thedarkcolour.exdeorum.config.EConfig; +import thedarkcolour.exdeorum.fluid.WitchWaterFluid; import thedarkcolour.exdeorum.recipe.RecipeUtil; import thedarkcolour.exdeorum.registry.EBlockEntities; import thedarkcolour.exdeorum.registry.EFluids; import thedarkcolour.exdeorum.registry.EMenus; -import java.io.IOException; - public class ClientHandler { - // Used for the composting recipe category in JEI - public static final ModelResourceLocation OAK_BARREL_COMPOSTING = new ModelResourceLocation(ExDeorum.loc("item/oak_barrel_composting"), ModelResourceLocation.STANDALONE_VARIANT); public static boolean isInVoidWorld; // This is used to prevent Ex Deorum from resetting world type when trying to configure Superflat, Single Biome, etc. public static Holder originalDefaultWorldPreset; @@ -61,43 +52,32 @@ public class ClientHandler { public static void register(IEventBus modBus) { var fmlBus = NeoForge.EVENT_BUS; - modBus.addListener(ClientHandler::clientSetup); modBus.addListener(ClientHandler::registerMenuScreens); modBus.addListener(ClientHandler::registerRenderers); - modBus.addListener(ClientHandler::registerShaders); + modBus.addListener(ClientHandler::registerClientExtensions); modBus.addListener(ClientHandler::addClientReloadListeners); modBus.addListener(ClientHandler::onConfigChanged); fmlBus.addListener(ClientHandler::onPlayerRespawn); fmlBus.addListener(ClientHandler::onPlayerLogout); fmlBus.addListener(ClientHandler::onScreenOpen); - fmlBus.addListener(ClientHandler::onRecipesUpdated); - - if (ModList.get().isLoaded(ModIds.JEI) || ModList.get().isLoaded(ModIds.EMI)) { - modBus.addListener(ClientHandler::registerAdditionalModels); - } + fmlBus.addListener(ClientHandler::onRecipesReceived); } - private static void addClientReloadListeners(RegisterClientReloadListenersEvent event) { - event.registerReloadListener((prepBarrier, resourceManager, prepProfiler, reloadProfiler, backgroundExecutor, gameExecutor) -> { + private static void registerClientExtensions(RegisterClientExtensionsEvent event) { + event.registerFluidType(WitchWaterFluid.createClientExtensions(), EFluids.WITCH_WATER_TYPE.get()); + } + + private static void addClientReloadListeners(AddClientReloadListenersEvent event) { + event.addListener(ExDeorum.loc("render_util"), (prepBarrier, resourceManager, prepProfiler, reloadProfiler, backgroundExecutor, gameExecutor) -> { return prepBarrier.wait(Unit.INSTANCE).thenRunAsync(RenderUtil::reload, gameExecutor); }); } - private static void clientSetup(FMLClientSetupEvent event) { - event.enqueueWork(ClientHandler::setRenderLayers); - } - private static void registerMenuScreens(RegisterMenuScreensEvent event) { event.register(EMenus.MECHANICAL_SIEVE.get(), MechanicalSieveScreen::new); event.register(EMenus.MECHANICAL_HAMMER.get(), MechanicalHammerScreen::new); } - private static void setRenderLayers() { - // Fluids - ItemBlockRenderTypes.setRenderLayer(EFluids.WITCH_WATER.get(), RenderType.translucent()); - ItemBlockRenderTypes.setRenderLayer(EFluids.WITCH_WATER_FLOWING.get(), RenderType.translucent()); - } - private static void onPlayerRespawn(ClientPlayerNetworkEvent.Clone event) { if (isInVoidWorld) { disableVoidFogRendering(); @@ -110,13 +90,13 @@ public class ClientHandler { private static void onConfigChanged(ModConfigEvent.Reloading event) { if (event.getConfig().getSpec() == EConfig.CLIENT_SPEC) { - RenderSystem.recordRenderCall(() -> Minecraft.getInstance().levelRenderer.allChanged()); + Minecraft.getInstance().levelRenderer.allChanged(); } } private static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) { event.registerBlockEntityRenderer(EBlockEntities.INFESTED_LEAVES.get(), ctx -> new InfestedLeavesRenderer()); - event.registerBlockEntityRenderer(EBlockEntities.BARREL.get(), BarrelRenderer::new); + event.registerBlockEntityRenderer(EBlockEntities.BARREL.get(), ctx -> new BarrelRenderer()); event.registerBlockEntityRenderer(EBlockEntities.LAVA_CRUCIBLE.get(), ctx -> new CrucibleRenderer()); event.registerBlockEntityRenderer(EBlockEntities.WATER_CRUCIBLE.get(), ctx -> new CrucibleRenderer()); event.registerBlockEntityRenderer(EBlockEntities.SIEVE.get(), ctx -> new SieveRenderer<>(0.75f, 15f)); @@ -124,17 +104,6 @@ public class ClientHandler { event.registerBlockEntityRenderer(EBlockEntities.COMPRESSED_SIEVE.get(), ctx -> new CompressedSieveRenderer<>(0.5625f, 16f)); } - private static void registerShaders(RegisterShadersEvent event) { - try { - // NEW_ENTITY is BLOCK except it also uses UV1 (overlay coordinates) - event.registerShader(new ShaderInstance(event.getResourceProvider(), ExDeorum.loc("rendertype_tinted_cutout_mipped"), DefaultVertexFormat.NEW_ENTITY), instance -> { - RenderUtil.renderTypeTintedCutoutMippedShader = instance; - }); - } catch (IOException e) { - ExDeorum.LOGGER.error("Unable to load tinted shader", e); - } - } - // Sets Ex Deorum world type as default private static void onScreenOpen(ScreenEvent.Opening event) { if (event.getNewScreen() instanceof CreateWorldScreen screen && EConfig.COMMON.setVoidWorldAsDefault.get()) { @@ -153,16 +122,8 @@ public class ClientHandler { } } - // Only called when JEI is loaded, because this registers the recipe category icon models. - private static void registerAdditionalModels(ModelEvent.RegisterAdditional event) { - event.register(new ModelResourceLocation(ExDeorum.loc("block/oak_barrel_composting"), ModelResourceLocation.STANDALONE_VARIANT)); - event.register(OAK_BARREL_COMPOSTING); - } - - private static void onRecipesUpdated(RecipesUpdatedEvent event) { - if (!Minecraft.getInstance().isSingleplayer()) { - RecipeUtil.reload(event.getRecipeManager()); - } + private static void onRecipesReceived(RecipesReceivedEvent event) { + RecipeUtil.reload(event.getRecipeMap()); } public static void disableVoidFogRendering() { diff --git a/src/main/java/thedarkcolour/exdeorum/client/ClientsideCode.java b/src/main/java/thedarkcolour/exdeorum/client/ClientsideCode.java index cd9830bc..3d64d5d4 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/ClientsideCode.java +++ b/src/main/java/thedarkcolour/exdeorum/client/ClientsideCode.java @@ -18,18 +18,5 @@ package thedarkcolour.exdeorum.client; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.world.item.crafting.RecipeManager; -import org.jetbrains.annotations.Nullable; - public class ClientsideCode { - @Nullable - public static RecipeManager getRecipeManager() { - ClientPacketListener connection = Minecraft.getInstance().getConnection(); - if (connection != null) { - return connection.getRecipeManager(); - } - return null; - } } diff --git a/src/main/java/thedarkcolour/exdeorum/client/CompostColors.java b/src/main/java/thedarkcolour/exdeorum/client/CompostColors.java index 191921ba..272520c2 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/CompostColors.java +++ b/src/main/java/thedarkcolour/exdeorum/client/CompostColors.java @@ -21,14 +21,13 @@ package thedarkcolour.exdeorum.client; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.JsonPrimitive; -import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.NativeImage; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import it.unimi.dsi.fastutil.objects.ObjectSet; import net.minecraft.client.Minecraft; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.util.GsonHelper; import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.item.Item; @@ -37,7 +36,6 @@ import net.minecraft.world.item.Items; import net.neoforged.api.distmarker.Dist; import net.neoforged.fml.ModList; import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.neoforge.client.model.data.ModelData; import org.apache.commons.io.IOUtils; import org.jetbrains.annotations.Nullable; import org.joml.Vector3i; @@ -89,50 +87,9 @@ public class CompostColors { } // Used to generate the list of vanilla colors shipped with the Ex Deorum jar + // TODO: port debugCompute to MC 26.x (ItemRenderer/getItemModelShaper/BakedModel.getParticleIcon removed) public static void debugCompute() { - // Instead of reading from files, this method pulls colors directly from the texture atlas. - var atlas = Minecraft.getInstance().getModelManager().getAtlas(InventoryMenu.BLOCK_ATLAS); - int atlasWidth = atlas.width; - int atlasHeight = atlas.height; - - try (var image = new NativeImage(atlasWidth, atlasHeight, false)) { - // should already be bound but just in case - GlStateManager._bindTexture(atlas.getId()); - // alpha doesn't matter, only RGB - image.downloadTexture(0, false); - - for (var item : BuiltInRegistries.ITEM) { - var model = Minecraft.getInstance().getItemRenderer().getItemModelShaper().getItemModel(item); - - if (model != null) { - var sprite = model.getParticleIcon(ModelData.EMPTY); - - if (sprite.atlasLocation().equals(InventoryMenu.BLOCK_ATLAS)) { - int width = sprite.contents().width(); - int height = sprite.contents().height(); - int pixels = 0; - int totalR = 0; - int totalG = 0; - int totalB = 0; - - for (int i = sprite.x; i < sprite.x + width; i++) { - for (int j = sprite.y; j < sprite.y + height; j++) { - int pixel = image.getPixelRGBA(i, j); - if (pixel != 0) { - // bgr because Minecraft has the pixels backwards - totalB += (pixel >> 16) & 0xff; - totalG += (pixel >> 8) & 0xff; - totalR += (pixel) & 0xff; - pixels++; - } - } - } - - putColor(pixels, totalR, totalG, totalB, item); - } - } - } - } + throw new UnsupportedOperationException("debugCompute not yet ported to MC 26.x"); } private static void loadModded() { @@ -216,7 +173,7 @@ public class CompostColors { @Nullable private static String findFirstTexture(JsonObject textureMap) { if (textureMap.get("layer0") instanceof JsonPrimitive primitive) { - return ResourceLocation.parse(primitive.getAsString()).getPath(); + return Identifier.parse(primitive.getAsString()).getPath(); } return null; @@ -310,7 +267,7 @@ public class CompostColors { var tokenizer = new StringTokenizer(line, ", #"); try { - var id = ResourceLocation.fromNamespaceAndPath(modid, tokenizer.nextToken()); + var id = Identifier.fromNamespaceAndPath(modid, tokenizer.nextToken()); var item = BuiltInRegistries.ITEM.get(id); String token = tokenizer.nextToken(); var color = Integer.parseInt(token, 16); diff --git a/src/main/java/thedarkcolour/exdeorum/client/RenderFace.java b/src/main/java/thedarkcolour/exdeorum/client/RenderFace.java index 58d86110..70474949 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/RenderFace.java +++ b/src/main/java/thedarkcolour/exdeorum/client/RenderFace.java @@ -21,7 +21,7 @@ package thedarkcolour.exdeorum.client; import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.Pair; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.rendertype.RenderType; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import java.util.List; diff --git a/src/main/java/thedarkcolour/exdeorum/client/RenderUtil.java b/src/main/java/thedarkcolour/exdeorum/client/RenderUtil.java index 4db12a2d..033b985e 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/RenderUtil.java +++ b/src/main/java/thedarkcolour/exdeorum/client/RenderUtil.java @@ -18,70 +18,37 @@ package thedarkcolour.exdeorum.client; -import com.google.common.collect.ImmutableMap; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.blaze3d.vertex.VertexFormat; -import net.irisshaders.iris.api.v0.IrisApi; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderStateShard; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.ShaderInstance; import net.minecraft.client.renderer.Sheets; import net.minecraft.client.renderer.texture.MissingTextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlas; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.BlockPos; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; -import net.minecraft.util.RandomSource; import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.levelgen.LegacyRandomSource; import net.minecraft.world.level.material.Fluid; -import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions; -import net.neoforged.neoforge.client.model.CompositeModel; -import net.neoforged.neoforge.client.model.data.ModelData; import org.joml.Vector3f; import thedarkcolour.exdeorum.ExDeorum; import thedarkcolour.exdeorum.client.ter.SieveRenderer; import java.awt.Color; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.VarHandle; import java.util.HashMap; import java.util.Map; public class RenderUtil { - private static final VarHandle COMPOSITE_MODEL_CHILDREN; private static final Map TOP_FACES = new HashMap<>(); - public static final RenderStateShard.ShaderStateShard RENDER_TYPE_TINTED_CUTOUT_MIPPED_SHADER = new RenderStateShard.ShaderStateShard(RenderUtil::getRenderTypeTintedCutoutMippedShader); - public static final RenderType TINTED_CUTOUT_MIPPED = RenderType.create(ExDeorum.ID + ":tinted_cutout_mipped", DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, RenderType.SMALL_BUFFER_SIZE, false, false, RenderType.CompositeState.builder().setLightmapState(RenderStateShard.LIGHTMAP).setShaderState(RENDER_TYPE_TINTED_CUTOUT_MIPPED_SHADER).setTextureState(RenderStateShard.BLOCK_SHEET_MIPPED).createCompositeState(true)); + // TODO: port TINTED_CUTOUT_MIPPED to MC 26.x RenderSetup API (RenderStateShard/CompositeState removed) + public static final Object TINTED_CUTOUT_MIPPED = null; public static TextureAtlas blockAtlas; - public static ShaderInstance renderTypeTintedCutoutMippedShader; public static final IrisAccess IRIS_ACCESS; static { - IrisAccess irisAccess; - try { - Class.forName("net.irisshaders.iris.api.v0.IrisApi"); - irisAccess = IrisApi.getInstance()::isShaderPackInUse; - } catch (ClassNotFoundException e) { - irisAccess = () -> false; - } - IRIS_ACCESS = irisAccess; - - var lookup = MethodHandles.lookup(); - try { - COMPOSITE_MODEL_CHILDREN = MethodHandles.privateLookupIn(CompositeModel.Baked.class, lookup).findVarHandle(CompositeModel.Baked.class, "children", ImmutableMap.class); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } + IRIS_ACCESS = () -> false; } public static void reload() { @@ -95,91 +62,45 @@ public class RenderUtil { blockAtlas = null; } + // TODO: port getTopFace to MC 26.x (BakedModel/BlockRenderDispatcher removed; use FluidStateModelSet/BlockStateModelSet) public static RenderFace getTopFaceOrDefault(Block block, Block defaultBlock) { - var face = getTopFace(block); - if (face.isMissingTexture()) { - return getTopFace(defaultBlock); - } else { - return face; - } + return getTopFace(block); } public static RenderFace getTopFace(Block block) { - if (TOP_FACES.containsKey(block)) { - return TOP_FACES.get(block); - } else { - var rand = new LegacyRandomSource(block.hashCode()); - BakedModel model = Minecraft.getInstance().getBlockRenderer().getBlockModel(block.defaultBlockState()); - RenderFace face; - - if (model instanceof CompositeModel.Baked composite) { - @SuppressWarnings("unchecked") - ImmutableMap children = (ImmutableMap) COMPOSITE_MODEL_CHILDREN.get(composite); - RenderFace.CompositeLayer[] layers = new RenderFace.CompositeLayer[children.size()]; - int i = 0; - - for (var childModel : children.values()) { - var singleFace = getFaceFromModel(block, rand, childModel); - layers[i++] = new RenderFace.CompositeLayer(singleFace.renderType(), singleFace.sprite()); - } - - face = new RenderFace.Composite(layers); - } else { - face = getFaceFromModel(block, rand, model); - } - - TOP_FACES.put(block, face); - - return face; - } - } - - private static RenderFace.Single getFaceFromModel(Block block, RandomSource rand, BakedModel model) { - var texture = getTopTexture(block, model); - var blockTypes = model.getRenderTypes(block.defaultBlockState(), rand, ModelData.EMPTY); - for (var bufferLayer : RenderType.chunkBufferLayers()) { - if (blockTypes.contains(bufferLayer)) { - return new RenderFace.Single(bufferLayer, texture); - } - } - throw new IllegalStateException("No render type found for block " + block); - } - - private static TextureAtlasSprite getTopTexture(Block block, BakedModel model) { - var registryName = BuiltInRegistries.BLOCK.getKey(block); - var sprite = blockAtlas.getSprite(registryName.withPrefix("block/")); - // for stuff like azalea bush, retry to get the top texture - if (isMissingTexture(sprite)) { - sprite = blockAtlas.getSprite(ResourceLocation.fromNamespaceAndPath(registryName.getNamespace(), "block/" + registryName.getPath() + "_top")); - } - if (isMissingTexture(sprite)) { - sprite = model.getParticleIcon(ModelData.EMPTY); - } - return sprite; + return TOP_FACES.computeIfAbsent(block, b -> { + // TODO: implement using 26.x block model API + // Placeholder: use missing texture sprite + var sprite = blockAtlas != null ? blockAtlas.getSprite(MissingTextureAtlasSprite.getLocation()) : null; + return new RenderFace.Single(null, sprite); + }); } public static boolean isMissingTexture(TextureAtlasSprite sprite) { return sprite.contents().name() == MissingTextureAtlasSprite.getLocation(); } + // TODO: port renderFlatFluidSprite to 26.x (IClientFluidTypeExtensions no longer has getStillTexture/getTintColor) public static void renderFlatFluidSprite(MultiBufferSource buffers, PoseStack stack, Level level, BlockPos pos, float y, float edge, int light, int r, int g, int b, Fluid fluid) { - var extensions = IClientFluidTypeExtensions.of(fluid); - var state = fluid.defaultFluidState(); - var builder = buffers.getBuffer(Sheets.translucentCullBlockSheet()); - - RenderUtil.renderFlatSprite(builder, stack, y, r, g, b, RenderUtil.blockAtlas.getSprite(extensions.getStillTexture(state, level, pos)), light, edge); + if (blockAtlas == null) return; + var builder = buffers.getBuffer(Sheets.translucentBlockSheet()); + // Use a placeholder sprite until fluid model system is ported + var sprite = blockAtlas.getSprite(MissingTextureAtlasSprite.getLocation()); + RenderUtil.renderFlatSprite(builder, stack, y, r, g, b, sprite, light, edge); } + // TODO: port renderFluidCube to 26.x (IClientFluidTypeExtensions no longer has getStillTexture/getTintColor) @SuppressWarnings("DuplicatedCode") public static void renderFluidCube(MultiBufferSource buffers, PoseStack stack, Level level, BlockPos pos, float minY, float maxY, float edge, int light, int r, int g, int b, Fluid fluid) { - var extensions = IClientFluidTypeExtensions.of(fluid); - var state = fluid.defaultFluidState(); - var builder = buffers.getBuffer(Sheets.translucentCullBlockSheet()); + if (blockAtlas == null) return; + var builder = buffers.getBuffer(Sheets.translucentBlockSheet()); + // Use a placeholder sprite until fluid model system is ported + var sprite = blockAtlas.getSprite(MissingTextureAtlasSprite.getLocation()); + var pose = stack.last().pose(); var poseNormal = stack.last().normal(); Vector3f normal; - TextureAtlasSprite sprite = RenderUtil.blockAtlas.getSprite(extensions.getStillTexture(state, level, pos)); float uMin = sprite.getU0(); float uMax = sprite.getU1(); float vMin = sprite.getV0(); @@ -201,13 +122,6 @@ public class RenderUtil { builder.addVertex(pose, edgeMax, minY, edgeMax).setColor(r, g, b, 255).setUv(uMax, vMax).setUv1(0, 10).setLight(light).setNormal(normal.x, normal.y, normal.z); builder.addVertex(pose, edgeMin, minY, edgeMax).setColor(r, g, b, 255).setUv(uMin, vMax).setUv1(0, 10).setLight(light).setNormal(normal.x, normal.y, normal.z); - // Flowing texture coordinates - //sprite = RenderUtil.blockAtlas.getSprite(extensions.getFlowingTexture(state, level, pos)); - //uMin = sprite.getU0(); - //uMax = sprite.getU(8); - //vMin = sprite.getV0(); - //vMax = sprite.getV(8); - // South face normal = poseNormal.transform(new Vector3f(0, 0, 1)); builder.addVertex(pose, edgeMax, maxY, edgeMax).setColor(r, g, b, 255).setUv(uMax, vMin).setUv1(0, 10).setLight(light).setNormal(normal.x, normal.y, normal.z); @@ -237,13 +151,13 @@ public class RenderUtil { // Renders a sprite inside the barrel with the height determined by how full the barrel is. public static void renderFlatSpriteLerp(VertexConsumer builder, PoseStack stack, float percentage, int r, int g, int b, TextureAtlasSprite sprite, int light, float edge, float yMin, float yMax) { float y = Mth.lerp(percentage, yMin, yMax) / 16f; - renderFlatSprite(builder, stack, y, r, g, b, sprite, light, edge); } // Renders a sprite (y should be between 0 and 1) @SuppressWarnings("DuplicatedCode") public static void renderFlatSprite(VertexConsumer builder, PoseStack stack, float y, int r, int g, int b, TextureAtlasSprite sprite, int light, float edge) { + if (sprite == null) return; var pose = stack.last().pose(); var normal = stack.last().normal().transform(new Vector3f(0, 1, 0)); @@ -268,17 +182,15 @@ public class RenderUtil { return Color.getHSBColor((180 * Mth.sin((time + partialTicks) / 30.0f) - 180) / 360.0f, 0.5f, 0.8f); } - public static ShaderInstance getRenderTypeTintedCutoutMippedShader() { - return renderTypeTintedCutoutMippedShader; - } - + // TODO: port getFluidColor to 26.x (IClientFluidTypeExtensions no longer has getTintColor) public static int getFluidColor(Fluid fluid, Level level, BlockPos pos) { - return IClientFluidTypeExtensions.of(fluid).getTintColor(fluid.defaultFluidState(), level, pos); + return -1; // white/no tint; use FluidModel.fluidTintSource() in 26.x } // todo use ambient occlusion // Renders a cuboid using the same side sprite on all six sides public static void renderCuboid(VertexConsumer builder, PoseStack stack, float minY, float maxY, int r, int g, int b, TextureAtlasSprite sprite, int light, float edge) { + if (sprite == null) return; var pose = stack.last().pose(); var poseNormal = stack.last().normal(); diff --git a/src/main/java/thedarkcolour/exdeorum/client/package-info.java b/src/main/java/thedarkcolour/exdeorum/client/package-info.java index c6a581da..5448f757 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/client/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.client; diff --git a/src/main/java/thedarkcolour/exdeorum/client/screen/MechanicalHammerScreen.java b/src/main/java/thedarkcolour/exdeorum/client/screen/MechanicalHammerScreen.java index 865b2442..6233c81a 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/screen/MechanicalHammerScreen.java +++ b/src/main/java/thedarkcolour/exdeorum/client/screen/MechanicalHammerScreen.java @@ -18,11 +18,11 @@ package thedarkcolour.exdeorum.client.screen; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Inventory; import org.jetbrains.annotations.Nullable; @@ -32,7 +32,7 @@ import thedarkcolour.exdeorum.config.EConfig; import thedarkcolour.exdeorum.data.TranslationKeys; public class MechanicalHammerScreen extends AbstractContainerScreen { - private static final ResourceLocation BACKGROUND_TEXTURE = ExDeorum.loc("textures/gui/container/mechanical_hammer.png"); + private static final Identifier BACKGROUND_TEXTURE = ExDeorum.loc("textures/gui/container/mechanical_hammer.png"); public static final int RECIPE_CLICK_AREA_POS_X = 80; public static final int RECIPE_CLICK_AREA_POS_Y = 34; @@ -63,31 +63,29 @@ public class MechanicalHammerScreen extends AbstractContainerScreen { - private static final ResourceLocation BACKGROUND_TEXTURE = ExDeorum.loc("textures/gui/container/mechanical_sieve.png"); + private static final Identifier BACKGROUND_TEXTURE = ExDeorum.loc("textures/gui/container/mechanical_sieve.png"); // Used by JEI and REI, these are bounds of the little grains texture between the mesh/input and the output slots public static final int RECIPE_CLICK_AREA_POS_X = 51; @@ -65,31 +65,29 @@ public class MechanicalSieveScreen extends AbstractContainerScreen screen; - private final ResourceLocation texture; + private final Identifier texture; private final int posX; private final int posY; private final int tabU; @@ -69,7 +70,7 @@ public class RedstoneControlWidget implements GuiEventListener, NarratableEntry, // Last time (from currentTimeMillis) this button was clicked, used in animation lerp private long lastClicked = -1L; - public RedstoneControlWidget(AbstractMachineMenu screen, ResourceLocation texture, int posX, int posY) { + public RedstoneControlWidget(AbstractMachineMenu screen, Identifier texture, int posX, int posY) { this.screen = screen; this.texture = texture; this.posX = posX; @@ -88,7 +89,7 @@ public class RedstoneControlWidget implements GuiEventListener, NarratableEntry, } @Override - public void render(GuiGraphics graphics, int mx, int my, float pPartialTick) { + public void extractRenderState(GuiGraphicsExtractor graphics, int mx, int my, float pPartialTick) { if (this.lastClicked != -1L) { // animation is 200 ms this.percentage = (System.currentTimeMillis() - this.lastClicked) / 200.0f; @@ -108,20 +109,20 @@ public class RedstoneControlWidget implements GuiEventListener, NarratableEntry, if (this.expanded) { var redstoneMode = this.screen.machine.getRedstoneMode(); - graphics.blit(this.texture, this.posX, this.posY, this.expandedU, this.expandedV, this.expandedWidth, this.expandedHeight); + graphics.blit(RenderPipelines.GUI_TEXTURED, this.texture, this.posX, this.posY, this.expandedU, this.expandedV, this.expandedWidth, this.expandedHeight, 256, 256); for (int i = 0; i < 3; ++i) { - graphics.blit(this.texture, this.buttonsPosX + (i * 19), this.buttonsPosY, (redstoneMode == i ? this.tabU + 16 : this.tabU), this.tabV + this.tabHeight, 16, 16); + graphics.blit(RenderPipelines.GUI_TEXTURED, this.texture, this.buttonsPosX + (i * 19), this.buttonsPosY, (redstoneMode == i ? this.tabU + 16 : this.tabU), this.tabV + this.tabHeight, 16, 16, 256, 256); } - graphics.blit(this.texture, this.buttonsPosX, this.buttonsPosY, this.tabU, this.tabV + this.tabHeight + 16, 52, 14); + graphics.blit(RenderPipelines.GUI_TEXTURED, this.texture, this.buttonsPosX, this.buttonsPosY, this.tabU, this.tabV + this.tabHeight + 16, 52, 14, 256, 256); - graphics.drawString(font, Component.translatable(TranslationKeys.REDSTONE_CONTROL_LABEL), this.posX + 16, this.posY + 10, 0xffffff); + graphics.text(font, Component.translatable(TranslationKeys.REDSTONE_CONTROL_LABEL), this.posX + 16, this.posY + 10, 0xffffff); // The label - graphics.drawString(font, Component.translatable(TranslationKeys.REDSTONE_CONTROL_MODE).append(REDSTONE_MODES[redstoneMode]), this.posX + 4, this.posY + 26, 0xffffff); + graphics.text(font, Component.translatable(TranslationKeys.REDSTONE_CONTROL_MODE).append(REDSTONE_MODES[redstoneMode]), this.posX + 4, this.posY + 26, 0xffffff); } else { - graphics.blit(this.texture, this.posX, this.posY, this.tabU, this.tabV, this.tabWidth, this.tabHeight); + graphics.blit(RenderPipelines.GUI_TEXTURED, this.texture, this.posX, this.posY, this.tabU, this.tabV, this.tabWidth, this.tabHeight, 256, 256); if (this.posX <= mx && mx < this.posX + this.tabWidth && this.posY <= my && my < this.posY + this.tabHeight) { - graphics.renderTooltip(font, REDSTONE_CONTROL_LABEL, mx, my); + graphics.setTooltipForNextFrame(REDSTONE_CONTROL_LABEL, mx, my); } } } @@ -164,7 +165,7 @@ public class RedstoneControlWidget implements GuiEventListener, NarratableEntry, Minecraft.getInstance().gameMode.handleInventoryButtonClick(this.screen.containerId, redstoneMode); } - private void drawPartialConfig(GuiGraphics graphics) { + private void drawPartialConfig(GuiGraphicsExtractor graphics) { float percentage = this.expanded ? 1.0f - this.percentage : this.percentage; // top left without edge int width = getWidth(percentage) - 3; @@ -174,13 +175,13 @@ public class RedstoneControlWidget implements GuiEventListener, NarratableEntry, int edgeV = this.expandedV + this.expandedHeight - 3; // top left section (no edges) - graphics.blit(this.texture, this.posX, this.posY, this.expandedU, this.expandedV, width, height); + graphics.blit(RenderPipelines.GUI_TEXTURED, this.texture, this.posX, this.posY, this.expandedU, this.expandedV, width, height, 256, 256); // bottom edge - graphics.blit(this.texture, this.posX, this.posY + height, this.expandedU, edgeV, width, 3); + graphics.blit(RenderPipelines.GUI_TEXTURED, this.texture, this.posX, this.posY + height, this.expandedU, edgeV, width, 3, 256, 256); // right edge - graphics.blit(this.texture, this.posX + width, this.posY, edgeU, this.expandedV, 3, height); + graphics.blit(RenderPipelines.GUI_TEXTURED, this.texture, this.posX + width, this.posY, edgeU, this.expandedV, 3, height, 256, 256); // bottom right corner - graphics.blit(this.texture, this.posX + width, this.posY + height, edgeU, edgeV, 3, 3); + graphics.blit(RenderPipelines.GUI_TEXTURED, this.texture, this.posX + width, this.posY + height, edgeU, edgeV, 3, 3, 256, 256); } public int getWidth(float percentage) { diff --git a/src/main/java/thedarkcolour/exdeorum/client/screen/package-info.java b/src/main/java/thedarkcolour/exdeorum/client/screen/package-info.java index 7bd065cb..9a41394d 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/screen/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/client/screen/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.client.screen; diff --git a/src/main/java/thedarkcolour/exdeorum/client/ter/BarrelRenderer.java b/src/main/java/thedarkcolour/exdeorum/client/ter/BarrelRenderer.java index 35ea2f27..ce3c6124 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/ter/BarrelRenderer.java +++ b/src/main/java/thedarkcolour/exdeorum/client/ter/BarrelRenderer.java @@ -19,120 +19,26 @@ package thedarkcolour.exdeorum.client.ter; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Axis; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.state.level.CameraRenderState; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; -import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; -import net.minecraft.client.renderer.entity.ItemRenderer; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Mth; -import net.minecraft.world.inventory.InventoryMenu; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemDisplayContext; -import net.neoforged.neoforge.client.model.data.ModelData; +import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState; +import net.minecraft.resources.Identifier; import thedarkcolour.exdeorum.ExDeorum; -import thedarkcolour.exdeorum.block.BarrelBlock; import thedarkcolour.exdeorum.blockentity.BarrelBlockEntity; -import thedarkcolour.exdeorum.client.RenderUtil; -import thedarkcolour.exdeorum.config.EConfig; -import java.util.Objects; +// TODO: port BarrelRenderer to MC 26.x rendering API (BlockEntityRenderer changed to extract/submit pattern, +// BlockRenderDispatcher/ItemRenderer removed, fluid color/texture APIs changed) +public class BarrelRenderer implements BlockEntityRenderer { + public static final Identifier COMPOST_DIRT_TEXTURE = ExDeorum.loc("block/compost_dirt"); -public class BarrelRenderer implements BlockEntityRenderer { - public static final ResourceLocation COMPOST_DIRT_TEXTURE = ExDeorum.loc("block/compost_dirt"); - private final BlockRenderDispatcher blockRenderer; - private final ItemRenderer itemRenderer; - - public BarrelRenderer(BlockEntityRendererProvider.Context ctx) { - this.blockRenderer = ctx.getBlockRenderDispatcher(); - this.itemRenderer = ctx.getItemRenderer(); + @Override + public BlockEntityRenderState createRenderState() { + return new BlockEntityRenderState(); } @Override - public void render(BarrelBlockEntity barrel, float partialTicks, PoseStack stack, MultiBufferSource buffers, int light, int overlay) { - var item = barrel.getItem(); - - // render an output - if (item.getItem() instanceof BlockItem blockItem) { - var block = blockItem.getBlock(); - var state = block.defaultBlockState(); - - stack.pushPose(); - stack.translate(2 / 16f, 2 / 16f, 2 / 16f); - stack.scale(12 / 16f, 12 / 16f, 12 / 16f); - - //noinspection DataFlowIssue - this.blockRenderer.renderSingleBlock(state, stack, buffers, light, overlay, ModelData.EMPTY, null); - - stack.popPose(); - } else { - stack.pushPose(); - stack.translate(0.5, 1.5 / 16f + (barrel.getTank().getFluidAmount() / 1000f) * 13f / 16f, 0.5); - stack.mulPose(Axis.XP.rotation(Mth.HALF_PI)); - this.itemRenderer.renderStatic(item, ItemDisplayContext.FIXED, light, OverlayTexture.NO_OVERLAY, stack, buffers, null, 0); - stack.popPose(); - } - - var tank = barrel.getTank(); - var fluidStack = tank.getFluidInTank(0); - - if (!fluidStack.isEmpty()) { // Get texture - var fluid = fluidStack.getFluid(); - var level = Objects.requireNonNull(barrel.getLevel()); - var pos = barrel.getBlockPos(); - var percentage = fluidStack.getAmount() / 1000.0f; - var y = Mth.lerp(percentage, BarrelBlock.BARREL_FLUID_BOTTOM, BarrelBlock.BARREL_FLUID_TOP); - var inputFluidColor = RenderUtil.getFluidColor(fluid, level, pos); - // Split into RGB components - var r = (inputFluidColor >> 16) & 0xff; - var g = (inputFluidColor >> 8) & 0xff; - var b = inputFluidColor & 0xff; - - if (barrel.isBrewing()) { - float progress = barrel.progress; - - // Transition between water color and witch water color (200B41) - r = (int) Mth.lerp(progress, r, barrel.r); - g = (int) Mth.lerp(progress, g, barrel.g); - b = (int) Mth.lerp(progress, b, barrel.b); - } - - if (barrel.transparent) { - RenderUtil.renderFluidCube(buffers, stack, level, pos, BarrelBlock.BARREL_FLUID_BOTTOM, y, 2.0f, light, r, g, b, fluid); - } else { - RenderUtil.renderFlatFluidSprite(buffers, stack, level, pos, y, 2.0f, light, r, g, b, fluid); - } - } - - // render compost - if (barrel.compost > 0) { - var sprite = Minecraft.getInstance().getTextureAtlas(InventoryMenu.BLOCK_ATLAS).apply(COMPOST_DIRT_TEXTURE); - var builder = buffers.getBuffer(RenderType.solid()); - - float compostProgress = barrel.progress; - int r, g, b; - - if (ExDeorum.IS_JUNE && EConfig.CLIENT.rainbowCompostDuringJune.get() && barrel.getLevel() != null) { - var rainbow = RenderUtil.getRainbowColor(barrel.getLevel().getGameTime(), partialTicks); - r = rainbow.getRed(); - g = rainbow.getGreen(); - b = rainbow.getBlue(); - } else { - r = barrel.r; - g = barrel.g; - b = barrel.b; - } - - // Transition between default green and dirt brown - r = (int) Mth.lerp(compostProgress, r, 238); // default green is - g = (int) Mth.lerp(compostProgress, g, 169); // default green is - b = (int) Mth.lerp(compostProgress, b, 109); // default green is - - RenderUtil.renderFlatSpriteLerp(builder, stack, barrel.compost / 1000.0f, r, g, b, sprite, light, 2.0f, BarrelBlock.BARREL_FLUID_BOTTOM * 16f, BarrelBlock.BARREL_FLUID_TOP * 16f); - } + public void submit(BlockEntityRenderState state, PoseStack stack, SubmitNodeCollector collector, CameraRenderState cameraState) { + // TODO: implement barrel fluid/compost/item rendering using new 26.x rendering API } } diff --git a/src/main/java/thedarkcolour/exdeorum/client/ter/CrucibleRenderer.java b/src/main/java/thedarkcolour/exdeorum/client/ter/CrucibleRenderer.java index b99d49e0..b4ca31ea 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/ter/CrucibleRenderer.java +++ b/src/main/java/thedarkcolour/exdeorum/client/ter/CrucibleRenderer.java @@ -19,53 +19,21 @@ package thedarkcolour.exdeorum.client.ter; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.state.level.CameraRenderState; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; -import net.minecraft.util.Mth; -import thedarkcolour.exdeorum.block.AbstractCrucibleBlock; +import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState; import thedarkcolour.exdeorum.blockentity.AbstractCrucibleBlockEntity; -import thedarkcolour.exdeorum.client.RenderUtil; -public class CrucibleRenderer implements BlockEntityRenderer { +// TODO: port CrucibleRenderer to MC 26.x rendering API (BlockEntityRenderer changed to extract/submit pattern) +public class CrucibleRenderer implements BlockEntityRenderer { @Override - public void render(AbstractCrucibleBlockEntity crucible, float partialTicks, PoseStack stack, MultiBufferSource buffers, int light, int overlay) { - var tank = crucible.getTank(); - var level = crucible.getLevel(); - if (level == null) return; + public BlockEntityRenderState createRenderState() { + return new BlockEntityRenderState(); + } - var fluidStack = tank.getFluidInTank(0); - - // These are percentages - var solids = (float) crucible.getSolids() / (float) AbstractCrucibleBlockEntity.MAX_SOLIDS; - var liquid = (float) fluidStack.getAmount() / (float) tank.getTankCapacity(0); - - if (solids != 0 || liquid != 0) { - var pos = crucible.getBlockPos(); - - if (liquid != 0) { - var fluid = fluidStack.getFluid(); - var color = RenderUtil.getFluidColor(fluid, level, pos); - var y = Mth.lerp(liquid, AbstractCrucibleBlock.CRUCIBLE_FLUID_BOTTOM, AbstractCrucibleBlock.CRUCIBLE_FLUID_TOP); - - RenderUtil.renderFlatFluidSprite(buffers, stack, level, pos, y, 2.0f, light, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff, fluid); - } - if (solids != 0) { - // eating my words rn :( - var lastMelted = crucible.getLastMelted(); - if (lastMelted == null) { - lastMelted = crucible.getDefaultMeltBlock(); - } - - var face = RenderUtil.getTopFaceOrDefault(lastMelted, crucible.getDefaultMeltBlock()); - - var color = Minecraft.getInstance().getBlockColors().getColor(lastMelted.defaultBlockState(), level, pos, 0); - - if (color == -1) color = 0xffffff; - - face.renderFlatSpriteLerp(buffers, stack, solids, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff, light, 2.0f, AbstractCrucibleBlock.CRUCIBLE_FLUID_BOTTOM * 16f, AbstractCrucibleBlock.CRUCIBLE_FLUID_TOP * 16f); - - } - } + @Override + public void submit(BlockEntityRenderState state, PoseStack stack, SubmitNodeCollector collector, CameraRenderState cameraState) { + // TODO: implement crucible fluid/solid rendering using new 26.x rendering API } } diff --git a/src/main/java/thedarkcolour/exdeorum/client/ter/InfestedLeavesRenderer.java b/src/main/java/thedarkcolour/exdeorum/client/ter/InfestedLeavesRenderer.java index 61eb5be4..498b2c35 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/ter/InfestedLeavesRenderer.java +++ b/src/main/java/thedarkcolour/exdeorum/client/ter/InfestedLeavesRenderer.java @@ -19,37 +19,21 @@ package thedarkcolour.exdeorum.client.ter; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.state.level.CameraRenderState; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; -import net.minecraft.world.level.block.Blocks; -import net.neoforged.neoforge.client.model.data.ModelData; +import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState; import thedarkcolour.exdeorum.blockentity.InfestedLeavesBlockEntity; -import thedarkcolour.exdeorum.client.RenderUtil; -import thedarkcolour.exdeorum.config.EConfig; -public class InfestedLeavesRenderer implements BlockEntityRenderer { +// TODO: port InfestedLeavesRenderer to MC 26.x rendering API (BlockEntityRenderer changed to extract/submit pattern) +public class InfestedLeavesRenderer implements BlockEntityRenderer { @Override - public void render(InfestedLeavesBlockEntity te, float partialTicks, PoseStack stack, MultiBufferSource buffer, int light, int unused) { - if (EConfig.CLIENT.useFastInfestedLeaves.get() || RenderUtil.IRIS_ACCESS.areShadersEnabled()) return; + public BlockEntityRenderState createRenderState() { + return new BlockEntityRenderState(); + } - var mc = Minecraft.getInstance(); - var state = te.getMimic(); - - // Default to oak leaves - if (state == null) state = Blocks.OAK_LEAVES.defaultBlockState(); - - // If something is wrong skip rendering - var level = te.getLevel(); - if (level == null) { - return; - } - - // Get infested percentage - int progress = Math.min(te.getProgress(), 16000); - // Render - var model = mc.getBlockRenderer().getBlockModel(state); - var pos = te.getBlockPos(); - mc.getBlockRenderer().getModelRenderer().tesselateBlock(level, model, state, pos, stack, buffer.getBuffer(RenderUtil.TINTED_CUTOUT_MIPPED), false, level.random, state.getSeed(pos), progress, ModelData.EMPTY, null); + @Override + public void submit(BlockEntityRenderState state, PoseStack stack, SubmitNodeCollector collector, CameraRenderState cameraState) { + // TODO: implement infested leaves tinting using new 26.x rendering API } } diff --git a/src/main/java/thedarkcolour/exdeorum/client/ter/SieveRenderer.java b/src/main/java/thedarkcolour/exdeorum/client/ter/SieveRenderer.java index bec8e120..14ea5c1e 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/ter/SieveRenderer.java +++ b/src/main/java/thedarkcolour/exdeorum/client/ter/SieveRenderer.java @@ -19,23 +19,20 @@ package thedarkcolour.exdeorum.client.ter; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.state.level.CameraRenderState; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Mth; -import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import thedarkcolour.exdeorum.blockentity.EBlockEntity; import thedarkcolour.exdeorum.blockentity.logic.SieveLogic; -import thedarkcolour.exdeorum.client.RenderUtil; import java.util.HashMap; import java.util.Map; -public class SieveRenderer implements BlockEntityRenderer { +// TODO: port SieveRenderer to MC 26.x rendering API (BlockEntityRenderer changed to extract/submit pattern) +public class SieveRenderer implements BlockEntityRenderer { public static final Map MESH_TEXTURES = new HashMap<>(); private final float meshHeight; @@ -49,47 +46,15 @@ public class SieveRenderer implements } @Override - public void render(T sieve, float partialTicks, PoseStack stack, MultiBufferSource buffers, int light, int overlay) { - var logic = sieve.getLogic(); - var contents = logic.getContents(); - - if (!contents.isEmpty() && contents.getItem() instanceof BlockItem blockItem) { - var block = blockItem.getBlock(); - var percentage = logic.getProgress(); - var face = RenderUtil.getTopFace(block); - - if (shouldContentsRender3d(sieve)) { - face.renderCuboid(buffers, stack, this.contentsMinY / 16f, Mth.lerp(percentage, this.contentsMaxY, this.contentsMinY) / 16f, 0xff, 0xff, 0xff, light, 1.0f); - } else { - face.renderFlatSpriteLerp(buffers, stack, percentage, 0xff, 0xff, 0xff, light, 1.0f, this.contentsMaxY, this.contentsMinY); - } - } - - var mesh = logic.getMesh(); - - if (!mesh.isEmpty()) { - var builder = buffers.getBuffer(RenderType.cutoutMipped()); - var meshItem = mesh.getItem(); - - TextureAtlasSprite meshSprite; - if (MESH_TEXTURES.containsKey(meshItem)) { - meshSprite = MESH_TEXTURES.get(meshItem); - } else { - ResourceLocation registryName = BuiltInRegistries.ITEM.getKey(meshItem); - ResourceLocation textureLoc = registryName.withPrefix("item/mesh/"); - meshSprite = RenderUtil.blockAtlas.getSprite(textureLoc); - MESH_TEXTURES.put(meshItem, meshSprite); - } - - RenderUtil.renderFlatSprite(builder, stack, this.meshHeight, 0xff, 0xff, 0xff, meshSprite, light, 1f); - - if (mesh.hasFoil()) { - RenderUtil.renderFlatSprite(buffers.getBuffer(RenderType.glint()), stack, this.meshHeight, 0xff, 0xff, 0xff, meshSprite, light, 1f); - } - } + public BlockEntityRenderState createRenderState() { + return new BlockEntityRenderState(); + } + + @Override + public void submit(BlockEntityRenderState state, PoseStack stack, SubmitNodeCollector collector, CameraRenderState cameraState) { + // TODO: implement sieve mesh/contents rendering using new 26.x rendering API } - // todo return true for transparent sieves protected boolean shouldContentsRender3d(T sieve) { return false; } diff --git a/src/main/java/thedarkcolour/exdeorum/client/ter/package-info.java b/src/main/java/thedarkcolour/exdeorum/client/ter/package-info.java index d0a7edd5..232e5f76 100644 --- a/src/main/java/thedarkcolour/exdeorum/client/ter/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/client/ter/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.client.ter; diff --git a/src/main/java/thedarkcolour/exdeorum/compat/ClientXeiUtil.java b/src/main/java/thedarkcolour/exdeorum/compat/ClientXeiUtil.java index 8681d3ca..65abc659 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/ClientXeiUtil.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/ClientXeiUtil.java @@ -1,173 +1,37 @@ package thedarkcolour.exdeorum.compat; -import com.mojang.blaze3d.platform.Lighting; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.*; -import com.mojang.math.Axis; import net.minecraft.ChatFormatting; -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import net.minecraft.ReportedException; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.renderer.ItemBlockRenderTypes; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.network.chat.Component; -import net.minecraft.util.RandomSource; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.ColorResolver; -import net.minecraft.world.level.LightLayer; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.lighting.LevelLightEngine; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.level.material.Fluids; -import net.neoforged.neoforge.client.RenderTypeHelper; -import net.neoforged.neoforge.client.model.data.ModelData; -import org.jetbrains.annotations.Nullable; -import org.joml.Matrix4f; -import org.joml.Matrix4fStack; -import org.joml.Vector3f; -import thedarkcolour.exdeorum.client.ClientHandler; import thedarkcolour.exdeorum.data.TranslationKeys; -import thedarkcolour.exdeorum.material.DefaultMaterials; -import thedarkcolour.exdeorum.registry.EBlocks; +// TODO: port ClientXeiUtil to MC 26.x: +// - GuiGraphics → GuiGraphicsExtractor +// - BakedModel/ItemRenderer removed; use new item rendering API +// - BlockRenderDispatcher/renderSingleBlock removed +// - ItemBlockRenderTypes.getRenderLayer removed; use FluidStateModelSet/FluidModel +// - RenderTypeHelper removed +// - ModelData moved package +// - OAK_BARREL_COMPOSTING removed from ClientHandler (ModelResourceLocation removed) // client-only logic shared between JEI and EMI public class ClientXeiUtil { - private static final ItemStack OAK_BARREL = new ItemStack(DefaultMaterials.OAK_BARREL.getItem()); - - private static final FluidState EMPTY = Fluids.EMPTY.defaultFluidState(); - private static final BlockState AIR = Blocks.AIR.defaultBlockState(); - - // From https://github.com/The-Aether-Team/Nitrogen/blob/1.20.1-develop/src/main/java/com/aetherteam/nitrogen/integration/jei/BlockStateRenderer.java - private static final Vector3f L1 = new Vector3f(0.4F, 0.0F, 1.0F).normalize(); - private static final Vector3f L2 = new Vector3f(-0.4F, 1.0F, -0.2F).normalize(); - - public static void renderItemAlternativeModel(GuiGraphics graphics, BakedModel model, ItemStack stack, int xOffset, int yOffset) { - Minecraft mc = Minecraft.getInstance(); - - var pose = graphics.pose(); - pose.pushPose(); - pose.translate(8 + xOffset, 8 + yOffset, 150); - - try { - pose.mulPose(new Matrix4f().scaling(1.0F, -1.0F, 1.0F)); - pose.scale(16f, 16f, 16f); - boolean flag = !model.usesBlockLight(); - if (flag) { - Lighting.setupForFlatItems(); - } - - mc.getItemRenderer().render(stack, ItemDisplayContext.GUI, false, pose, graphics.bufferSource(), 0xf000f0, OverlayTexture.NO_OVERLAY, model); - graphics.flush(); - if (flag) { - Lighting.setupFor3DItems(); - } - } catch (Throwable throwable) { - CrashReport crashreport = CrashReport.forThrowable(throwable, "Rendering item"); - CrashReportCategory crashreportcategory = crashreport.addCategory("Item being rendered"); - crashreportcategory.setDetail("Item Type", () -> String.valueOf(stack.getItem())); - crashreportcategory.setDetail("Registry Name", () -> BuiltInRegistries.ITEM.getKey(stack.getItem()).toString()); - throw new ReportedException(crashreport); - } - - pose.popPose(); - - // From end of ItemStackRenderer - RenderSystem.disableBlend(); + public static void renderBlock(GuiGraphicsExtractor guiGraphics, BlockState state, float x, float y, float z, float scale) { + // TODO: port block/fluid rendering using 26.x FluidRenderer and block model APIs } - // https://github.com/way2muchnoise/JustEnoughResources/blob/89ee40ff068c8d6eb6ab103f76381445691cffc9/Common/src/main/java/jeresources/util/RenderHelper.java#L100 - public static void renderBlock(GuiGraphics guiGraphics, BlockState state, float x, float y, float z, float scale) { - PoseStack poseStack = guiGraphics.pose(); - - poseStack.pushPose(); - - poseStack.translate(x, y, z); - poseStack.scale(-scale, -scale, -scale); - poseStack.translate(-0.5F, -0.5F, 0); - poseStack.mulPose(Axis.XP.rotationDegrees(-30F)); - poseStack.translate(0.5F, 0, -0.5F); - poseStack.mulPose(Axis.YP.rotationDegrees(45f)); - poseStack.translate(-0.5F, 0, 0.5F); - - RenderSystem.setShaderColor(1F, 1F, 1F, 1F); - poseStack.translate(0, 0, -1); - - FluidState fluidState = state.getFluidState(); - - if (fluidState.isEmpty()) { - MultiBufferSource.BufferSource buffers = Minecraft.getInstance().renderBuffers().bufferSource(); - - RenderSystem.setupGui3DDiffuseLighting(L1, L2); - if (state.is(EBlocks.INFESTED_LEAVES.get())) { - var blockRenderer = Minecraft.getInstance().getBlockRenderer(); - var bakedmodel = blockRenderer.getBlockModel(state); - - for (var renderType : bakedmodel.getRenderTypes(state, RandomSource.create(42), ModelData.EMPTY)) { - blockRenderer.getModelRenderer().renderModel(poseStack.last(), buffers.getBuffer(RenderTypeHelper.getEntityRenderType(renderType, false)), state, bakedmodel, 1f, 1f, 1f, 15728880, OverlayTexture.NO_OVERLAY, ModelData.EMPTY, renderType); - } - } else { - Minecraft.getInstance().getBlockRenderer().renderSingleBlock(state, poseStack, buffers, 15728880, OverlayTexture.NO_OVERLAY, ModelData.EMPTY, null); - } - - buffers.endBatch(); - } else { - RenderType renderType = ItemBlockRenderTypes.getRenderLayer(fluidState); - Matrix4fStack modelView = RenderSystem.getModelViewStack(); - Tesselator tesselator = Tesselator.getInstance(); - renderType.setupRenderState(); - modelView.pushMatrix(); - modelView.mul(poseStack.last().pose()); - RenderSystem.applyModelViewMatrix(); - - BufferBuilder builder = tesselator.begin(renderType.mode(), renderType.format()); - - Dummy.tempState = state; - Dummy.tempFluid = fluidState; - Minecraft.getInstance().getBlockRenderer().renderLiquid(BlockPos.ZERO, Dummy.INSTANCE, builder, state, state.getFluidState()); - Dummy.tempFluid = EMPTY; - Dummy.tempState = AIR; - - MeshData build = builder.build(); - if (build != null) { - BufferUploader.drawWithShader(build); - } - - renderType.clearRenderState(); - modelView.popMatrix(); - RenderSystem.applyModelViewMatrix(); - } - - poseStack.popPose(); + public static void renderItemWithAsterisk(GuiGraphicsExtractor graphics, net.minecraft.world.item.ItemStack stack) { + // TODO: port item rendering using 26.x item model API } - public static void renderItemWithAsterisk(GuiGraphics graphics, ItemStack stack) { - Minecraft mc = Minecraft.getInstance(); - BakedModel model = mc.getItemRenderer().getModel(stack, mc.level, null, 0); - renderItemAlternativeModel(graphics, model, stack, 0, 0); - renderAsterisk(graphics, 0, 0); - } - - public static void renderAsterisk(GuiGraphics graphics, int xOffset, int yOffset) { - graphics.pose().pushPose(); - graphics.pose().translate(0f, 0f, 200f); - - var font = Minecraft.getInstance().font; + public static void renderAsterisk(GuiGraphicsExtractor graphics, int xOffset, int yOffset) { + var font = net.minecraft.client.Minecraft.getInstance().font; // 0xff5555 is Minecraft's red text color. - graphics.drawString(font, "*", xOffset + 19 - 2 - font.width("*"), yOffset + 12, 0xff5555, true); + graphics.text(font, "*", xOffset + 19 - 2 - font.width("*"), yOffset + 12, 0xff5555); + } - graphics.pose().popPose(); + public static void renderFilledCompostBarrel(GuiGraphicsExtractor guiGraphics, int xOffset, int yOffset) { + // TODO: port using 26.x item model API (ModelResourceLocation/OAK_BARREL_COMPOSTING removed) } // Takes a decimal probability and returns a user-friendly percentage value @@ -175,75 +39,4 @@ public class ClientXeiUtil { var chance = XeiUtil.FORMATTER.format(probability * 100); return Component.translatable(TranslationKeys.SIEVE_RECIPE_CHANCE, chance).withStyle(ChatFormatting.GRAY); } - - public static void renderFilledCompostBarrel(GuiGraphics guiGraphics, int xOffset, int yOffset) { - // From mezz.jei.library.render.ItemStackRenderer - RenderSystem.enableDepthTest(); - - Minecraft mc = Minecraft.getInstance(); - var model = mc.getModelManager().getModel(ClientHandler.OAK_BARREL_COMPOSTING); - // From GuiGraphics.renderFakeItem - ClientXeiUtil.renderItemAlternativeModel(guiGraphics, model, OAK_BARREL, xOffset, yOffset); - // From end of DrawableIngredient - RenderSystem.disableDepthTest(); - } - - public enum Dummy implements BlockAndTintGetter { - INSTANCE; - - private static BlockState tempState = AIR; - private static FluidState tempFluid = EMPTY; - - @Override - public float getShade(Direction pDirection, boolean pShade) { - return 1; - } - - @SuppressWarnings("DataFlowIssue") - @Override - public LevelLightEngine getLightEngine() { - return Minecraft.getInstance().level.getLightEngine(); - } - - @Override - public int getBlockTint(BlockPos pBlockPos, ColorResolver pColorResolver) { - return 0; - } - - @Override - public int getBrightness(LightLayer pLightType, BlockPos pBlockPos) { - return 15; - } - - @Override - public int getRawBrightness(BlockPos pBlockPos, int pAmount) { - return 15; - } - - @Nullable - @Override - public BlockEntity getBlockEntity(BlockPos pPos) { - return null; - } - - @Override - public BlockState getBlockState(BlockPos pos) { - return pos.equals(BlockPos.ZERO) ? tempState : AIR; - } - - @Override - public FluidState getFluidState(BlockPos pos) { - return pos.equals(BlockPos.ZERO) ? tempFluid : EMPTY; - } - - @Override - public int getHeight() { - return 0; - } - - @Override - public int getMinBuildHeight() { - return 0; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/CompatUtil.java b/src/main/java/thedarkcolour/exdeorum/compat/CompatUtil.java index 7b9d7f85..6e855b1d 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/CompatUtil.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/CompatUtil.java @@ -80,7 +80,7 @@ public class CompatUtil { } public static , T> List collectAllRecipes(RecipeType recipeType, Function mapper) { - var byType = RecipeUtil.getRecipeManager().byType(recipeType); + var byType = RecipeUtil.getRecipeMap().byType(recipeType); List recipes = new ObjectArrayList<>(byType.size()); for (RecipeHolder value : byType) { recipes.add(mapper.apply(value.value())); diff --git a/src/main/java/thedarkcolour/exdeorum/compat/PreferredOres.java b/src/main/java/thedarkcolour/exdeorum/compat/PreferredOres.java index 8eee536a..ac9369f5 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/PreferredOres.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/PreferredOres.java @@ -22,7 +22,7 @@ import com.google.common.collect.Lists; import it.unimi.dsi.fastutil.Hash; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; @@ -66,7 +66,7 @@ public class PreferredOres { * @param defaultOre The default ore choice, picked by Ex Deorum based on which mod is the "best" choice according to thedarkcolour. */ private static void putPreferredOre(TagKey tag, ModConfigSpec.ConfigValue config, Item defaultOre) { - var item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(config.get())); + var item = BuiltInRegistries.ITEM.get(Identifier.parse(config.get())); if (item == Items.AIR) { item = defaultOre; @@ -171,11 +171,11 @@ public class PreferredOres { if (modId != null) { if (modId.equals(ModIds.FACTORIUM)) { - return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(modId, "mat_" + path)); + return BuiltInRegistries.ITEM.get(Identifier.fromNamespaceAndPath(modId, "mat_" + path)); } else if (modId.equals(ModIds.IMMERSIVE_ENGINEERING)) { - return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(modId, "ore_" + path.substring(0, path.length() - 4))); + return BuiltInRegistries.ITEM.get(Identifier.fromNamespaceAndPath(modId, "ore_" + path.substring(0, path.length() - 4))); } else { - return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(modId, path)); + return BuiltInRegistries.ITEM.get(Identifier.fromNamespaceAndPath(modId, path)); } } else { return Items.AIR; diff --git a/src/main/java/thedarkcolour/exdeorum/compat/XeiUtil.java b/src/main/java/thedarkcolour/exdeorum/compat/XeiUtil.java index d9a9bc21..b64b78ea 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/XeiUtil.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/XeiUtil.java @@ -22,7 +22,7 @@ import com.google.common.collect.ImmutableList; import com.google.gson.JsonObject; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.minecraft.ChatFormatting; -import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.advancements.criterion.StatePropertiesPredicate; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.world.level.block.Block; diff --git a/src/main/java/thedarkcolour/exdeorum/compat/emi/BarrelCompostEmiRecipe.java b/src/main/java/thedarkcolour/exdeorum/compat/emi/BarrelCompostEmiRecipe.java index 61b1398e..94468d76 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/emi/BarrelCompostEmiRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/emi/BarrelCompostEmiRecipe.java @@ -23,7 +23,7 @@ import dev.emi.emi.api.stack.EmiIngredient; import dev.emi.emi.api.stack.EmiStack; import dev.emi.emi.api.widget.WidgetHolder; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import thedarkcolour.exdeorum.data.TranslationKeys; import thedarkcolour.exdeorum.recipe.barrel.BarrelCompostRecipe; @@ -33,7 +33,7 @@ class BarrelCompostEmiRecipe extends EEmiRecipe { private final List inputs; private final int volume; - public BarrelCompostEmiRecipe(BarrelCompostRecipe recipe, ResourceLocation id) { + public BarrelCompostEmiRecipe(BarrelCompostRecipe recipe, Identifier id) { super(id); this.inputs = EmiUtil.inputs(recipe); diff --git a/src/main/java/thedarkcolour/exdeorum/compat/emi/BarrelMixingEmiRecipe.java b/src/main/java/thedarkcolour/exdeorum/compat/emi/BarrelMixingEmiRecipe.java index 96dc2899..1064bf75 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/emi/BarrelMixingEmiRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/emi/BarrelMixingEmiRecipe.java @@ -24,7 +24,7 @@ import dev.emi.emi.api.render.EmiTexture; import dev.emi.emi.api.stack.EmiIngredient; import dev.emi.emi.api.stack.EmiStack; import dev.emi.emi.api.widget.WidgetHolder; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import thedarkcolour.exdeorum.compat.XeiUtil; import thedarkcolour.exdeorum.recipe.barrel.BarrelFluidMixingRecipe; import thedarkcolour.exdeorum.recipe.barrel.BarrelMixingRecipe; @@ -37,7 +37,7 @@ abstract class BarrelMixingEmiRecipe extends EEmiRecipe { private final List inputs; private final List outputs; - public BarrelMixingEmiRecipe(EmiIngredient base, EmiIngredient additive, List outputs, ResourceLocation id) { + public BarrelMixingEmiRecipe(EmiIngredient base, EmiIngredient additive, List outputs, Identifier id) { super(id); this.base = base; @@ -77,7 +77,7 @@ abstract class BarrelMixingEmiRecipe extends EEmiRecipe { } static class Items extends BarrelMixingEmiRecipe { - public Items(BarrelMixingRecipe recipe, ResourceLocation id) { + public Items(BarrelMixingRecipe recipe, Identifier id) { super(NeoForgeEmiIngredient.of(recipe.fluid), EmiIngredient.of(recipe.ingredient), EmiUtil.outputs(recipe.result), id); } @@ -88,7 +88,7 @@ abstract class BarrelMixingEmiRecipe extends EEmiRecipe { } static class Fluids extends BarrelMixingEmiRecipe { - public Fluids(BarrelFluidMixingRecipe recipe, ResourceLocation id) { + public Fluids(BarrelFluidMixingRecipe recipe, Identifier id) { super(NeoForgeEmiIngredient.of(recipe.baseFluid()), NeoForgeEmiIngredient.of(recipe.additiveFluid()), EmiUtil.outputs(recipe.result()), id); } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/emi/CrookEmiRecipe.java b/src/main/java/thedarkcolour/exdeorum/compat/emi/CrookEmiRecipe.java index 14aaacbe..0db82794 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/emi/CrookEmiRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/emi/CrookEmiRecipe.java @@ -24,7 +24,7 @@ import dev.emi.emi.api.render.EmiTexture; import dev.emi.emi.api.stack.EmiIngredient; import dev.emi.emi.api.stack.EmiStack; import dev.emi.emi.api.widget.WidgetHolder; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.level.block.state.BlockState; import thedarkcolour.exdeorum.compat.XeiUtil; import thedarkcolour.exdeorum.recipe.BlockPredicate; @@ -38,7 +38,7 @@ class CrookEmiRecipe extends EEmiRecipe { private final List states; private final BlockPredicate predicate; - public CrookEmiRecipe(CrookRecipe recipe, ResourceLocation id) { + public CrookEmiRecipe(CrookRecipe recipe, Identifier id) { super(id); this.inputs = EmiUtil.inputs(recipe.blockPredicate()); diff --git a/src/main/java/thedarkcolour/exdeorum/compat/emi/CrucibleEmiRecipe.java b/src/main/java/thedarkcolour/exdeorum/compat/emi/CrucibleEmiRecipe.java index d668e347..f7f3d21d 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/emi/CrucibleEmiRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/emi/CrucibleEmiRecipe.java @@ -20,7 +20,7 @@ package thedarkcolour.exdeorum.compat.emi; import dev.emi.emi.api.recipe.EmiRecipeCategory; import dev.emi.emi.api.stack.EmiStack; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import thedarkcolour.exdeorum.recipe.crucible.CrucibleRecipe; import java.util.List; @@ -28,7 +28,7 @@ import java.util.List; abstract class CrucibleEmiRecipe extends EmiOneToOneRecipe { private final List outputs; - CrucibleEmiRecipe(CrucibleRecipe recipe, ResourceLocation id) { + CrucibleEmiRecipe(CrucibleRecipe recipe, Identifier id) { super(recipe, id); this.outputs = EmiUtil.outputs(recipe.getResult()); @@ -40,7 +40,7 @@ abstract class CrucibleEmiRecipe extends EmiOneToOneRecipe { } static class Lava extends CrucibleEmiRecipe { - Lava(CrucibleRecipe recipe, ResourceLocation id) { + Lava(CrucibleRecipe recipe, Identifier id) { super(recipe, id); } @@ -51,7 +51,7 @@ abstract class CrucibleEmiRecipe extends EmiOneToOneRecipe { } static class Water extends CrucibleEmiRecipe { - Water(CrucibleRecipe recipe, ResourceLocation id) { + Water(CrucibleRecipe recipe, Identifier id) { super(recipe, id); } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/emi/CrucibleHeatEmiRecipe.java b/src/main/java/thedarkcolour/exdeorum/compat/emi/CrucibleHeatEmiRecipe.java index 494fdfec..55e4c090 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/emi/CrucibleHeatEmiRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/emi/CrucibleHeatEmiRecipe.java @@ -24,7 +24,7 @@ import dev.emi.emi.api.stack.EmiStack; import dev.emi.emi.api.widget.TextWidget; import dev.emi.emi.api.widget.WidgetHolder; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.level.block.state.BlockState; import thedarkcolour.exdeorum.compat.XeiUtil; import thedarkcolour.exdeorum.data.TranslationKeys; @@ -39,7 +39,7 @@ class CrucibleHeatEmiRecipe extends EEmiRecipe { private final BlockPredicate predicate; private final int heatValue; - public CrucibleHeatEmiRecipe(CrucibleHeatRecipe recipe, ResourceLocation id) { + public CrucibleHeatEmiRecipe(CrucibleHeatRecipe recipe, Identifier id) { super(id); this.inputs = EmiUtil.inputs(recipe.blockPredicate()); diff --git a/src/main/java/thedarkcolour/exdeorum/compat/emi/EEmiRecipe.java b/src/main/java/thedarkcolour/exdeorum/compat/emi/EEmiRecipe.java index 8546a848..616386e2 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/emi/EEmiRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/emi/EEmiRecipe.java @@ -19,18 +19,18 @@ package thedarkcolour.exdeorum.compat.emi; import dev.emi.emi.api.recipe.EmiRecipe; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import org.jetbrains.annotations.Nullable; abstract class EEmiRecipe implements EmiRecipe { - protected final ResourceLocation id; + protected final Identifier id; - EEmiRecipe(ResourceLocation id) { + EEmiRecipe(Identifier id) { this.id = id; } @Override - public @Nullable ResourceLocation getId() { + public @Nullable Identifier getId() { return this.id; } } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/emi/EmiOneToOneRecipe.java b/src/main/java/thedarkcolour/exdeorum/compat/emi/EmiOneToOneRecipe.java index dc99563e..98914ef5 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/emi/EmiOneToOneRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/emi/EmiOneToOneRecipe.java @@ -21,7 +21,7 @@ package thedarkcolour.exdeorum.compat.emi; import dev.emi.emi.api.render.EmiTexture; import dev.emi.emi.api.stack.EmiIngredient; import dev.emi.emi.api.widget.WidgetHolder; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import thedarkcolour.exdeorum.compat.XeiUtil; import thedarkcolour.exdeorum.recipe.SingleIngredientRecipe; @@ -30,7 +30,7 @@ import java.util.List; abstract class EmiOneToOneRecipe extends EEmiRecipe { private final List inputs; - EmiOneToOneRecipe(SingleIngredientRecipe recipe, ResourceLocation id) { + EmiOneToOneRecipe(SingleIngredientRecipe recipe, Identifier id) { super(id); this.inputs = EmiUtil.inputs(recipe); diff --git a/src/main/java/thedarkcolour/exdeorum/compat/emi/EmiUtil.java b/src/main/java/thedarkcolour/exdeorum/compat/emi/EmiUtil.java index f8bfed76..8fe7fcf2 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/emi/EmiUtil.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/emi/EmiUtil.java @@ -24,7 +24,7 @@ import dev.emi.emi.api.neoforge.NeoForgeEmiStack; import dev.emi.emi.api.recipe.EmiRecipe; import dev.emi.emi.api.stack.EmiIngredient; import dev.emi.emi.api.stack.EmiStack; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; @@ -74,7 +74,7 @@ class EmiUtil { return ImmutableList.of(); } - public static > void addAll(EmiRegistry registry, Supplier> type, BiFunction factory) { + public static > void addAll(EmiRegistry registry, Supplier> type, BiFunction factory) { for (var holder : registry.getRecipeManager().byType(type.get())) { registry.addRecipe(factory.apply(holder.value(), holder.id())); } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/emi/HammerEmiRecipe.java b/src/main/java/thedarkcolour/exdeorum/compat/emi/HammerEmiRecipe.java index 6b50acba..498c6881 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/emi/HammerEmiRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/emi/HammerEmiRecipe.java @@ -2,7 +2,7 @@ package thedarkcolour.exdeorum.compat.emi; import dev.emi.emi.api.recipe.EmiRecipeCategory; import dev.emi.emi.api.stack.EmiStack; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import thedarkcolour.exdeorum.recipe.hammer.HammerRecipe; import java.util.List; @@ -10,7 +10,7 @@ import java.util.List; abstract class HammerEmiRecipe extends EmiOneToOneRecipe { private final List outputs; - HammerEmiRecipe(HammerRecipe recipe, ResourceLocation id) { + HammerEmiRecipe(HammerRecipe recipe, Identifier id) { super(recipe, id); this.outputs = EmiUtil.outputs(recipe.result); @@ -22,7 +22,7 @@ abstract class HammerEmiRecipe extends EmiOneToOneRecipe { } static class Hammer extends HammerEmiRecipe { - Hammer(HammerRecipe recipe, ResourceLocation id) { + Hammer(HammerRecipe recipe, Identifier id) { super(recipe, id); } @@ -33,7 +33,7 @@ abstract class HammerEmiRecipe extends EmiOneToOneRecipe { } static class CompressedHammer extends HammerEmiRecipe { - CompressedHammer(HammerRecipe recipe, ResourceLocation id) { + CompressedHammer(HammerRecipe recipe, Identifier id) { super(recipe, id); } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/emi/SieveEmiRecipe.java b/src/main/java/thedarkcolour/exdeorum/compat/emi/SieveEmiRecipe.java index 70bb0fa2..b89d822a 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/emi/SieveEmiRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/emi/SieveEmiRecipe.java @@ -26,7 +26,7 @@ import dev.emi.emi.api.widget.SlotWidget; import dev.emi.emi.api.widget.WidgetHolder; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.storage.loot.providers.number.NumberProvider; @@ -56,7 +56,7 @@ abstract class SieveEmiRecipe extends EEmiRecipe { this.outputs = outputs.build(); } - private static ResourceLocation determineId(XeiSieveRecipe recipe) { + private static Identifier determineId(XeiSieveRecipe recipe) { Item mesh = recipe.mesh().getItem(); int hashCode = Arrays.hashCode(Arrays.stream(recipe.ingredient().getItems()) .map(ItemStack::getItem) diff --git a/src/main/java/thedarkcolour/exdeorum/compat/emi/package-info.java b/src/main/java/thedarkcolour/exdeorum/compat/emi/package-info.java index 3eb8e366..d8b0408a 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/emi/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/emi/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.compat.emi; diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jade/BarrelComponentProvider.java b/src/main/java/thedarkcolour/exdeorum/compat/jade/BarrelComponentProvider.java index 179ad4fb..83b66387 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jade/BarrelComponentProvider.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jade/BarrelComponentProvider.java @@ -19,7 +19,7 @@ package thedarkcolour.exdeorum.compat.jade; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import snownee.jade.api.BlockAccessor; import snownee.jade.api.IBlockComponentProvider; import snownee.jade.api.ITooltip; @@ -57,7 +57,7 @@ enum BarrelComponentProvider implements IBlockComponentProvider { } @Override - public ResourceLocation getUid() { + public Identifier getUid() { return ExDeorumJadePlugin.BARREL; } } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jade/CrucibleComponentProvider.java b/src/main/java/thedarkcolour/exdeorum/compat/jade/CrucibleComponentProvider.java index 8c8fa0bc..ca369572 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jade/CrucibleComponentProvider.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jade/CrucibleComponentProvider.java @@ -19,7 +19,7 @@ package thedarkcolour.exdeorum.compat.jade; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import snownee.jade.api.BlockAccessor; import snownee.jade.api.IBlockComponentProvider; import snownee.jade.api.ITooltip; @@ -37,7 +37,7 @@ enum CrucibleComponentProvider implements IBlockComponentProvider { } @Override - public ResourceLocation getUid() { + public Identifier getUid() { return ExDeorumJadePlugin.CRUCIBLE; } } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jade/ExDeorumJadePlugin.java b/src/main/java/thedarkcolour/exdeorum/compat/jade/ExDeorumJadePlugin.java index a6b88130..a24ffac3 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jade/ExDeorumJadePlugin.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jade/ExDeorumJadePlugin.java @@ -18,7 +18,7 @@ package thedarkcolour.exdeorum.compat.jade; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import snownee.jade.api.IWailaClientRegistration; import snownee.jade.api.IWailaPlugin; import snownee.jade.api.WailaPlugin; @@ -30,10 +30,10 @@ import thedarkcolour.exdeorum.block.SieveBlock; @WailaPlugin public class ExDeorumJadePlugin implements IWailaPlugin { - static final ResourceLocation INFESTED_LEAVES = ExDeorum.loc("infested_leaves"); - static final ResourceLocation BARREL = ExDeorum.loc("barrel"); - static final ResourceLocation SIEVE = ExDeorum.loc("sieve"); - static final ResourceLocation CRUCIBLE = ExDeorum.loc("crucible"); + static final Identifier INFESTED_LEAVES = ExDeorum.loc("infested_leaves"); + static final Identifier BARREL = ExDeorum.loc("barrel"); + static final Identifier SIEVE = ExDeorum.loc("sieve"); + static final Identifier CRUCIBLE = ExDeorum.loc("crucible"); @Override public void registerClient(IWailaClientRegistration registration) { diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jade/InfestedLeavesComponentProvider.java b/src/main/java/thedarkcolour/exdeorum/compat/jade/InfestedLeavesComponentProvider.java index 99337c90..92e8ab71 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jade/InfestedLeavesComponentProvider.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jade/InfestedLeavesComponentProvider.java @@ -19,7 +19,7 @@ package thedarkcolour.exdeorum.compat.jade; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import snownee.jade.api.BlockAccessor; import snownee.jade.api.IBlockComponentProvider; import snownee.jade.api.ITooltip; @@ -43,7 +43,7 @@ enum InfestedLeavesComponentProvider implements IBlockComponentProvider { } @Override - public ResourceLocation getUid() { + public Identifier getUid() { return ExDeorumJadePlugin.INFESTED_LEAVES; } } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jade/SieveComponentProvider.java b/src/main/java/thedarkcolour/exdeorum/compat/jade/SieveComponentProvider.java index 955f963a..74e86d0e 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jade/SieveComponentProvider.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jade/SieveComponentProvider.java @@ -19,7 +19,7 @@ package thedarkcolour.exdeorum.compat.jade; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.phys.Vec2; import snownee.jade.api.BlockAccessor; import snownee.jade.api.IBlockComponentProvider; @@ -52,7 +52,7 @@ enum SieveComponentProvider implements IBlockComponentProvider { } @Override - public ResourceLocation getUid() { + public Identifier getUid() { return ExDeorumJadePlugin.SIEVE; } } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jade/package-info.java b/src/main/java/thedarkcolour/exdeorum/compat/jade/package-info.java index 82c82ae3..da96d59d 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jade/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jade/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.compat.jade; diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jei/ExDeorumJeiPlugin.java b/src/main/java/thedarkcolour/exdeorum/compat/jei/ExDeorumJeiPlugin.java index 177b3eb8..e42721db 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jei/ExDeorumJeiPlugin.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jei/ExDeorumJeiPlugin.java @@ -33,7 +33,7 @@ import mezz.jei.api.registration.IRecipeRegistration; import net.minecraft.client.renderer.Rect2i; import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.Recipe; @@ -73,7 +73,7 @@ import java.util.function.Supplier; @JeiPlugin public class ExDeorumJeiPlugin implements IModPlugin { - public static final ResourceLocation EX_DEORUM_JEI_TEXTURE = ExDeorum.loc("textures/gui/jei/enr_jei.png"); + public static final Identifier EX_DEORUM_JEI_TEXTURE = ExDeorum.loc("textures/gui/jei/enr_jei.png"); static final RecipeType BARREL_COMPOST = recipeType("barrel_compost", BarrelCompostRecipe.class); static final RecipeType BARREL_MIXING = recipeType("barrel_mixing", BarrelMixingRecipe.class); @@ -94,7 +94,7 @@ public class ExDeorumJeiPlugin implements IModPlugin { } @Override - public ResourceLocation getPluginUid() { + public Identifier getPluginUid() { return ExDeorum.loc("jei_plugin"); } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jei/package-info.java b/src/main/java/thedarkcolour/exdeorum/compat/jei/package-info.java index dc3de3d8..2d5a7d37 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jei/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jei/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.compat.jei; diff --git a/src/main/java/thedarkcolour/exdeorum/compat/kubejs/ExDeorumKubeJsBindings.java b/src/main/java/thedarkcolour/exdeorum/compat/kubejs/ExDeorumKubeJsBindings.java index 8ded3bf0..4fbad02c 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/kubejs/ExDeorumKubeJsBindings.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/kubejs/ExDeorumKubeJsBindings.java @@ -27,7 +27,7 @@ import dev.latvian.mods.kubejs.recipe.match.ReplacementMatchInfo; import dev.latvian.mods.kubejs.script.ScriptType; import dev.latvian.mods.rhino.Context; import dev.latvian.mods.rhino.util.HideFromJS; -import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.advancements.criterion.StatePropertiesPredicate; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; diff --git a/src/main/java/thedarkcolour/exdeorum/compat/kubejs/package-info.java b/src/main/java/thedarkcolour/exdeorum/compat/kubejs/package-info.java index 57fb5071..99ba25b6 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/kubejs/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/kubejs/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.compat.kubejs; diff --git a/src/main/java/thedarkcolour/exdeorum/compat/package-info.java b/src/main/java/thedarkcolour/exdeorum/compat/package-info.java index f617e44d..e7cb2e63 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.compat; diff --git a/src/main/java/thedarkcolour/exdeorum/compat/top/ExDeorumInfoProvider.java b/src/main/java/thedarkcolour/exdeorum/compat/top/ExDeorumInfoProvider.java index 9da1db33..21749b04 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/top/ExDeorumInfoProvider.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/top/ExDeorumInfoProvider.java @@ -21,7 +21,7 @@ package thedarkcolour.exdeorum.compat.top; import mcjty.theoneprobe.api.*; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; @@ -36,8 +36,8 @@ import thedarkcolour.exdeorum.registry.EBlocks; public class ExDeorumInfoProvider implements IProbeInfoProvider { @Override - public ResourceLocation getID() { - return ResourceLocation.fromNamespaceAndPath(ExDeorum.ID, "info_provider"); + public Identifier getID() { + return Identifier.fromNamespaceAndPath(ExDeorum.ID, "info_provider"); } @Override diff --git a/src/main/java/thedarkcolour/exdeorum/compat/top/package-info.java b/src/main/java/thedarkcolour/exdeorum/compat/top/package-info.java index bfd47f24..276562ec 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/top/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/top/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.compat.top; diff --git a/src/main/java/thedarkcolour/exdeorum/config/package-info.java b/src/main/java/thedarkcolour/exdeorum/config/package-info.java index 51eee779..3c648fb3 100644 --- a/src/main/java/thedarkcolour/exdeorum/config/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/config/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.config; diff --git a/src/main/java/thedarkcolour/exdeorum/data/Advancements.java b/src/main/java/thedarkcolour/exdeorum/data/Advancements.java index 3c76d7f9..27d7b057 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/Advancements.java +++ b/src/main/java/thedarkcolour/exdeorum/data/Advancements.java @@ -21,14 +21,14 @@ package thedarkcolour.exdeorum.data; import net.minecraft.advancements.AdvancementHolder; import net.minecraft.advancements.AdvancementType; import net.minecraft.advancements.CriteriaTriggers; -import net.minecraft.advancements.critereon.ImpossibleTrigger; +import net.minecraft.advancements.criterion.ImpossibleTrigger; import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; +import net.minecraft.data.advancements.AdvancementProvider; +import net.minecraft.data.advancements.AdvancementSubProvider; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.level.block.Blocks; -import net.neoforged.neoforge.common.data.AdvancementProvider; -import net.neoforged.neoforge.common.data.ExistingFileHelper; import thedarkcolour.exdeorum.ExDeorum; import thedarkcolour.exdeorum.material.DefaultMaterials; import thedarkcolour.exdeorum.registry.EItems; @@ -39,21 +39,21 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; import static net.minecraft.advancements.Advancement.Builder.advancement; -import static net.minecraft.advancements.critereon.InventoryChangeTrigger.TriggerInstance.hasItems; -import static net.minecraft.advancements.critereon.ItemPredicate.Builder.item; +import static net.minecraft.advancements.criterion.InventoryChangeTrigger.TriggerInstance.hasItems; +import static net.minecraft.advancements.criterion.ItemPredicate.Builder.item; class Advancements extends AdvancementProvider { - public Advancements(PackOutput output, CompletableFuture registries, ExistingFileHelper existingFileHelper) { - super(output, registries, existingFileHelper, List.of(new CoreAchievements())); + public Advancements(PackOutput output, CompletableFuture registries) { + super(output, registries, List.of(new CoreAchievements())); } - private static ResourceLocation modLoc(String path) { - return ResourceLocation.fromNamespaceAndPath(ExDeorum.ID, path); + private static String modLoc(String path) { + return Identifier.fromNamespaceAndPath(ExDeorum.ID, path).toString(); } - public static class CoreAchievements implements AdvancementGenerator { + public static class CoreAchievements implements AdvancementSubProvider { @Override - public void generate(HolderLookup.Provider registries, Consumer saver, ExistingFileHelper helper) { + public void generate(HolderLookup.Provider registries, Consumer saver) { var root = advancement() .display( Blocks.OAK_SAPLING, @@ -67,7 +67,7 @@ class Advancements extends AdvancementProvider { ) // hardcoded to EventHandler .addCriterion("in_void_world", CriteriaTriggers.IMPOSSIBLE.createCriterion(new ImpossibleTrigger.TriggerInstance())) - .save(saver, modLoc("core/root"), helper); + .save(saver, modLoc("core/root")); var crook = advancement() .parent(root) .display( @@ -81,7 +81,7 @@ class Advancements extends AdvancementProvider { true ) .addCriterion("craft_crook", hasItems(item().of(EItemTags.CROOKS).build())) - .save(saver, modLoc("core/crook"), helper); + .save(saver, modLoc("core/crook")); var barrel = advancement() .parent(root) .display( @@ -95,7 +95,7 @@ class Advancements extends AdvancementProvider { true ) .addCriterion("has_barrel", hasItems(item().of(EItemTags.BARRELS).build())) - .save(saver, modLoc("core/barrel"), helper); + .save(saver, modLoc("core/barrel")); var silkWorm = advancement() .parent(crook) .display( @@ -109,7 +109,7 @@ class Advancements extends AdvancementProvider { false ) .addCriterion("has_silk_worm", hasItems(item().of(EItems.SILKWORM.get()).build())) - .save(saver, modLoc("core/silk_worm"), helper); + .save(saver, modLoc("core/silk_worm")); var stringMesh = advancement() .parent(silkWorm) .display( @@ -123,7 +123,7 @@ class Advancements extends AdvancementProvider { false ) .addCriterion("has_string_mesh", hasItems(item().of(EItems.STRING_MESH.get()).build())) - .save(saver, modLoc("core/string_mesh"), helper); + .save(saver, modLoc("core/string_mesh")); } } } diff --git a/src/main/java/thedarkcolour/exdeorum/data/BlockModels.java b/src/main/java/thedarkcolour/exdeorum/data/BlockModels.java index c1ed90bc..48efa491 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/BlockModels.java +++ b/src/main/java/thedarkcolour/exdeorum/data/BlockModels.java @@ -19,7 +19,7 @@ package thedarkcolour.exdeorum.data; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.neoforged.neoforge.client.model.generators.BlockModelBuilder; @@ -263,9 +263,9 @@ class BlockModels { .texture("side", texture); } - private static ResourceLocation texture(Block block, String prefix, String suffix) { + private static Identifier texture(Block block, String prefix, String suffix) { var key = Objects.requireNonNull(BuiltInRegistries.BLOCK.getKey(block)); - return ResourceLocation.fromNamespaceAndPath(key.getNamespace(), "block/" + prefix + key.getPath() + suffix); + return Identifier.fromNamespaceAndPath(key.getNamespace(), "block/" + prefix + key.getPath() + suffix); } public static void barrel(MKBlockModelProvider models, Block block, Block appearance) { diff --git a/src/main/java/thedarkcolour/exdeorum/data/LootModifiers.java b/src/main/java/thedarkcolour/exdeorum/data/LootModifiers.java index 9a81877f..503fed9e 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/LootModifiers.java +++ b/src/main/java/thedarkcolour/exdeorum/data/LootModifiers.java @@ -1,6 +1,6 @@ package thedarkcolour.exdeorum.data; -import net.minecraft.advancements.critereon.ItemPredicate; +import net.minecraft.advancements.criterion.ItemPredicate; import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; import net.minecraft.tags.TagKey; diff --git a/src/main/java/thedarkcolour/exdeorum/data/ModCompatData.java b/src/main/java/thedarkcolour/exdeorum/data/ModCompatData.java index 8aea9eaf..c65b3785 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/ModCompatData.java +++ b/src/main/java/thedarkcolour/exdeorum/data/ModCompatData.java @@ -18,7 +18,7 @@ package thedarkcolour.exdeorum.data; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockBehaviour; @@ -213,15 +213,15 @@ public class ModCompatData { MAPLE_LOG_ITEM = item(ModIds.BLUE_SKIES, "maple_log"), CRYSTALLIZED_LOG_ITEM = item(ModIds.BLUE_SKIES, "crystallized_log"); - public static final ResourceLocation[] PAMS_CROPS; + public static final Identifier[] PAMS_CROPS; static { // copy and pasted from the GitHub String[] names = { "pamagavecrop", "pamamaranthcrop", "pamarrowrootcrop", "pamartichokecrop", "pamasparaguscrop", "pambarleycrop", "pambeancrop", "pambellpeppercrop", "pamblackberrycrop", "pamblueberrycrop", "pambroccolicrop", "pambrusselsproutcrop", "pamcabbagecrop", "pamcactusfruitcrop", "pamcandleberrycrop", "pamcantaloupecrop", "pamcassavacrop", "pamcauliflowercrop", "pamcelerycrop", "pamchickpeacrop", "pamchilipeppercrop", "pamcoffeebeancrop", "pamcorncrop", "pamcottoncrop", "pamcranberrycrop", "pamcucumbercrop", "pameggplantcrop", "pamelderberrycrop", "pamflaxcrop", "pamgarliccrop", "pamgingercrop", "pamgrapecrop", "pamgreengrapecrop", "pamhuckleberrycrop", "pamjicamacrop", "pamjuniperberrycrop", "pamjutecrop", "pamkalecrop", "pamkenafcrop", "pamkiwicrop", "pamkohlrabicrop", "pamleekcrop", "pamlentilcrop", "pamlettucecrop", "pammilletcrop", "pammulberrycrop", "pammustardseedscrop", "pamoatscrop", "pamokracrop", "pamonioncrop", "pamparsnipcrop", "pampeanutcrop", "pampeascrop", "pampineapplecrop", "pamquinoacrop", "pamradishcrop", "pamraspberrycrop", "pamrhubarbcrop", "pamricecrop", "pamrutabagacrop", "pamryecrop", "pamscallioncrop", "pamsesameseedscrop", "pamsisalcrop", "pamsoybeancrop", "pamspiceleafcrop", "pamspinachcrop", "pamstrawberrycrop", "pamsweetpotatocrop", "pamtarocrop", "pamtealeafcrop", "pamtomatillocrop", "pamtomatocrop", "pamturnipcrop", "pamwaterchestnutcrop", "pamwhitemushroomcrop", "pamwintersquashcrop", "pamzucchinicrop"}; - PAMS_CROPS = new ResourceLocation[names.length]; + PAMS_CROPS = new Identifier[names.length]; for (int i = 0, namesLength = names.length; i < namesLength; i++) { - PAMS_CROPS[i] = ResourceLocation.fromNamespaceAndPath(ModIds.PAMS_HARVESTCRAFT_CROPS, names[i]); + PAMS_CROPS[i] = Identifier.fromNamespaceAndPath(ModIds.PAMS_HARVESTCRAFT_CROPS, names[i]); } } diff --git a/src/main/java/thedarkcolour/exdeorum/data/ModTags.java b/src/main/java/thedarkcolour/exdeorum/data/ModTags.java index 3143e267..35a3df5c 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/ModTags.java +++ b/src/main/java/thedarkcolour/exdeorum/data/ModTags.java @@ -20,7 +20,7 @@ package thedarkcolour.exdeorum.data; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.tags.BlockTags; import net.minecraft.tags.FluidTags; import net.minecraft.tags.ItemTags; @@ -62,7 +62,7 @@ class ModTags { public static void createBlockTags(MKTagsProvider tags) { var wateringCanTickable = tags.tag(EBlockTags.WATERING_CAN_TICKABLE); wateringCanTickable.add(Blocks.GRASS_BLOCK, Blocks.MYCELIUM, Blocks.CRIMSON_FUNGUS, Blocks.WARPED_FUNGUS, Blocks.RED_MUSHROOM, Blocks.BROWN_MUSHROOM, Blocks.CACTUS, Blocks.SUGAR_CANE, Blocks.SWEET_BERRY_BUSH, Blocks.COCOA).addTags(BlockTags.SAPLINGS, BlockTags.NYLIUM, BlockTags.BEE_GROWABLES); - for (ResourceLocation path : ModCompatData.PAMS_CROPS) { + for (Identifier path : ModCompatData.PAMS_CROPS) { wateringCanTickable.addOptional(path); } tags.tag(EBlockTags.MINEABLE_WITH_HAMMER) @@ -124,7 +124,7 @@ class ModTags { ); // Cyclic adds ONE compressed block :) - tags.tag(ECompressedBlocks.COMPRESSED_COBBLESTONE.getTag()).addOptional(ResourceLocation.fromNamespaceAndPath(ModIds.CYCLIC, "compressed_cobblestone")); + tags.tag(ECompressedBlocks.COMPRESSED_COBBLESTONE.getTag()).addOptional(Identifier.fromNamespaceAndPath(ModIds.CYCLIC, "compressed_cobblestone")); for (var variant : ECompressedBlocks.ALL_VARIANTS) { var builder = tags.tag(variant.getTag()).add(variant.getItem()); @@ -150,7 +150,7 @@ class ModTags { } public static void createWorldPresetTags(MKTagsProvider tags) { - tags.tag(net.minecraft.tags.WorldPresetTags.NORMAL).add(ResourceKey.create(Registries.WORLD_PRESET, ResourceLocation.fromNamespaceAndPath(ExDeorum.ID, "void_world"))); + tags.tag(net.minecraft.tags.WorldPresetTags.NORMAL).add(ResourceKey.create(Registries.WORLD_PRESET, Identifier.fromNamespaceAndPath(ExDeorum.ID, "void_world"))); } public static void createFluidTags(MKTagsProvider tags) { diff --git a/src/main/java/thedarkcolour/exdeorum/data/Sounds.java b/src/main/java/thedarkcolour/exdeorum/data/Sounds.java index d4b31fec..8e425525 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/Sounds.java +++ b/src/main/java/thedarkcolour/exdeorum/data/Sounds.java @@ -19,15 +19,14 @@ package thedarkcolour.exdeorum.data; import net.minecraft.data.PackOutput; -import net.neoforged.neoforge.common.data.ExistingFileHelper; import net.neoforged.neoforge.common.data.SoundDefinition; import net.neoforged.neoforge.common.data.SoundDefinitionsProvider; import thedarkcolour.exdeorum.ExDeorum; import thedarkcolour.exdeorum.registry.ESounds; class Sounds extends SoundDefinitionsProvider { - protected Sounds(PackOutput output, ExistingFileHelper helper) { - super(output, ExDeorum.ID, helper); + protected Sounds(PackOutput output) { + super(output, ExDeorum.ID); } @Override diff --git a/src/main/java/thedarkcolour/exdeorum/data/package-info.java b/src/main/java/thedarkcolour/exdeorum/data/package-info.java index fca73e6d..f647f58f 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/data/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.data; diff --git a/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java b/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java index 49773e1e..41c8998a 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java +++ b/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java @@ -18,12 +18,12 @@ package thedarkcolour.exdeorum.data.recipe; -import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.advancements.criterion.StatePropertiesPredicate; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.recipes.RecipeCategory; import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.data.recipes.ShapelessRecipeBuilder; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; @@ -752,7 +752,7 @@ public class Recipes { writer.accept(modLoc("barrel_fluid_transformation/witch_water"), new FluidTransformationRecipe(FluidIngredient.of(Fluids.WATER), EFluids.WITCH_WATER.get(), 0x2B1057, BlockPredicate.singleBlock(Blocks.MYCELIUM), WeightedList.builder().add(50, Blocks.RED_MUSHROOM.defaultBlockState()).add(50, Blocks.BROWN_MUSHROOM.defaultBlockState()).build(), 1700), null); } - static ResourceLocation modLoc(String path) { + static Identifier modLoc(String path) { return ExDeorum.loc(path); } diff --git a/src/main/java/thedarkcolour/exdeorum/data/recipe/package-info.java b/src/main/java/thedarkcolour/exdeorum/data/recipe/package-info.java index 3bd26080..bbbb9de5 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/recipe/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/data/recipe/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.data.recipe; diff --git a/src/main/java/thedarkcolour/exdeorum/event/EventHandler.java b/src/main/java/thedarkcolour/exdeorum/event/EventHandler.java index a43dfe53..9decd2a4 100644 --- a/src/main/java/thedarkcolour/exdeorum/event/EventHandler.java +++ b/src/main/java/thedarkcolour/exdeorum/event/EventHandler.java @@ -18,7 +18,7 @@ package thedarkcolour.exdeorum.event; -import net.minecraft.Util; +import net.minecraft.util.Util; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; @@ -26,14 +26,14 @@ import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.features.TreeFeatures; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; import net.minecraft.util.Unit; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.gamerules.GameRules; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; @@ -49,7 +49,7 @@ import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import net.neoforged.neoforge.client.event.ClientChatEvent; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.common.NeoForgeMod; -import net.neoforged.neoforge.event.AddReloadListenerEvent; +import net.neoforged.neoforge.event.AddServerReloadListenersEvent; import net.neoforged.neoforge.event.entity.player.PlayerEvent; import net.neoforged.neoforge.event.level.LevelEvent; import net.neoforged.neoforge.event.server.ServerStoppingEvent; @@ -125,7 +125,7 @@ public final class EventHandler { // grow tree, has 5% chance to spawn bees based on world seed var configuredFeatureRegistry = level.registryAccess().registryOrThrow(Registries.CONFIGURED_FEATURE); var defaultTreeFeature = TreeFeatures.OAK_BEES_005; - var defaultTreeFeatureLoc = ResourceLocation.tryParse(EConfig.SERVER.defaultSpawnTreeFeature.get()); + var defaultTreeFeatureLoc = Identifier.tryParse(EConfig.SERVER.defaultSpawnTreeFeature.get()); Holder> holder = configuredFeatureRegistry.getHolder(defaultTreeFeature).orElse(null); @@ -193,7 +193,7 @@ public final class EventHandler { // tries to account for other SkyBlock generator mods like SkyBlockBuilder if (generator instanceof VoidChunkGenerator || generator.getClass().getName().toLowerCase(Locale.ROOT).contains("skyblock")) { NetworkHandler.sendVoidWorld(player); - var advancement = player.server.getAdvancements().get(ResourceLocation.fromNamespaceAndPath(ExDeorum.ID, "core/root")); + var advancement = player.server.getAdvancements().get(Identifier.fromNamespaceAndPath(ExDeorum.ID, "core/root")); if (advancement != null) { if (!player.getAdvancements().getOrStartProgress(advancement).isDone()) { @@ -209,10 +209,6 @@ public final class EventHandler { ExDeorum.LOGGER.error("Unable to grant player the Void World advancement. Ex Deorum advancements will not show"); } } - } else { - if (Minecraft.getInstance().getConnection() != null) { - RecipeUtil.reload(Minecraft.getInstance().getConnection().getRecipeManager()); - } } } @@ -227,11 +223,11 @@ public final class EventHandler { } } - private static void addReloadListeners(AddReloadListenerEvent event) { - var recipes = event.getServerResources().getRecipeManager(); - event.addListener((prepBarrier, resourceManager, prepProfiler, reloadProfiler, backgroundExecutor, gameExecutor) -> { + private static void addReloadListeners(AddServerReloadListenersEvent event) { + var recipeMap = event.getServerResources().getRecipeManager().recipeMap(); + event.addListener(ExDeorum.loc("recipes"), (prepBarrier, resourceManager, prepProfiler, reloadProfiler, backgroundExecutor, gameExecutor) -> { return prepBarrier.wait(Unit.INSTANCE).thenRunAsync(() -> { - RecipeUtil.reload(recipes); + RecipeUtil.reload(recipeMap); }, gameExecutor); }); } diff --git a/src/main/java/thedarkcolour/exdeorum/event/package-info.java b/src/main/java/thedarkcolour/exdeorum/event/package-info.java index cf8736c9..90d81362 100644 --- a/src/main/java/thedarkcolour/exdeorum/event/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/event/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.event; diff --git a/src/main/java/thedarkcolour/exdeorum/fluid/WitchWaterFluid.java b/src/main/java/thedarkcolour/exdeorum/fluid/WitchWaterFluid.java index 9967edbd..6af320f1 100644 --- a/src/main/java/thedarkcolour/exdeorum/fluid/WitchWaterFluid.java +++ b/src/main/java/thedarkcolour/exdeorum/fluid/WitchWaterFluid.java @@ -18,27 +18,24 @@ package thedarkcolour.exdeorum.fluid; -import net.minecraft.client.Camera; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.sounds.SoundEvents; -import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions; import net.neoforged.neoforge.common.SoundActions; import net.neoforged.neoforge.fluids.BaseFlowingFluid; import net.neoforged.neoforge.fluids.FluidType; -import org.jetbrains.annotations.NotNull; -import org.joml.Vector3f; +import net.minecraft.client.Camera; +import net.minecraft.client.multiplayer.ClientLevel; +import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions; +import org.joml.Vector4f; import thedarkcolour.exdeorum.ExDeorum; import thedarkcolour.exdeorum.registry.EBlocks; import thedarkcolour.exdeorum.registry.EFluids; import thedarkcolour.exdeorum.registry.EItems; -import java.util.function.Consumer; - public class WitchWaterFluid extends FluidType { - private static final ResourceLocation STILL_TEXTURE = ExDeorum.loc("block/witch_water_still"); - private static final ResourceLocation FLOWING_TEXTURE = ExDeorum.loc("block/witch_water_flowing"); - private static final ResourceLocation OVERLAY_TEXTURE = ResourceLocation.withDefaultNamespace("block/water_overlay"); + public static final Identifier STILL_TEXTURE = ExDeorum.loc("block/witch_water_still"); + public static final Identifier FLOWING_TEXTURE = ExDeorum.loc("block/witch_water_flowing"); + public static final Identifier OVERLAY_TEXTURE = Identifier.withDefaultNamespace("block/water_overlay"); public static BaseFlowingFluid.Properties properties() { return new BaseFlowingFluid.Properties(EFluids.WITCH_WATER_TYPE, EFluids.WITCH_WATER, EFluids.WITCH_WATER_FLOWING).block(EBlocks.WITCH_WATER).bucket(EItems.WITCH_WATER_BUCKET); @@ -55,34 +52,27 @@ public class WitchWaterFluid extends FluidType { ); } - @Override - public void initializeClient(Consumer consumer) { - consumer.accept(new IClientFluidTypeExtensions() { - private static final Vector3f FOG_COLOR = new Vector3f(32f / 255f, 12f / 255f, 64f / 255f); + public static IClientFluidTypeExtensions createClientExtensions() { + return new IClientFluidTypeExtensions() { @Override - public ResourceLocation getStillTexture() { + public Identifier getStillTexture() { return STILL_TEXTURE; } @Override - public ResourceLocation getFlowingTexture() { + public Identifier getFlowingTexture() { return FLOWING_TEXTURE; } @Override - public ResourceLocation getOverlayTexture() { + public Identifier getOverlayTexture() { return OVERLAY_TEXTURE; } @Override - public @NotNull Vector3f modifyFogColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, Vector3f fluidFogColor) { - return FOG_COLOR; + public void modifyFogColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, Vector4f fluidFogColor) { + fluidFogColor.set(32f / 255f, 12f / 255f, 64f / 255f, fluidFogColor.w); } - - @Override - public int getTintColor() { - return 0xffffffff; - } - }); + }; } } diff --git a/src/main/java/thedarkcolour/exdeorum/fluid/package-info.java b/src/main/java/thedarkcolour/exdeorum/fluid/package-info.java index 920d7caf..efd9e7fb 100644 --- a/src/main/java/thedarkcolour/exdeorum/fluid/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/fluid/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.fluid; diff --git a/src/main/java/thedarkcolour/exdeorum/item/GrassSpreaderItem.java b/src/main/java/thedarkcolour/exdeorum/item/GrassSpreaderItem.java index 8f953f60..f82a2ecb 100644 --- a/src/main/java/thedarkcolour/exdeorum/item/GrassSpreaderItem.java +++ b/src/main/java/thedarkcolour/exdeorum/item/GrassSpreaderItem.java @@ -27,7 +27,7 @@ import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.cow.Cow; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; diff --git a/src/main/java/thedarkcolour/exdeorum/item/HammerItem.java b/src/main/java/thedarkcolour/exdeorum/item/HammerItem.java index cdd58d35..8a13a094 100644 --- a/src/main/java/thedarkcolour/exdeorum/item/HammerItem.java +++ b/src/main/java/thedarkcolour/exdeorum/item/HammerItem.java @@ -18,17 +18,17 @@ package thedarkcolour.exdeorum.item; -import net.minecraft.world.item.DiggerItem; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Tier; +import net.minecraft.world.item.ToolMaterial; import net.minecraft.world.item.crafting.RecipeType; import org.jetbrains.annotations.Nullable; import thedarkcolour.exdeorum.registry.EItems; import thedarkcolour.exdeorum.tag.EBlockTags; -public class HammerItem extends DiggerItem { - public HammerItem(Tier tier, Properties properties) { - super(tier, EBlockTags.MINEABLE_WITH_HAMMER, properties); +public class HammerItem extends Item { + public HammerItem(ToolMaterial material, Properties properties) { + super(material.applyToolProperties(properties, EBlockTags.MINEABLE_WITH_HAMMER, 1.5f, -2.8f, 0f)); } @Override diff --git a/src/main/java/thedarkcolour/exdeorum/item/PorcelainBucket.java b/src/main/java/thedarkcolour/exdeorum/item/PorcelainBucket.java index d29a2311..b7a036bd 100644 --- a/src/main/java/thedarkcolour/exdeorum/item/PorcelainBucket.java +++ b/src/main/java/thedarkcolour/exdeorum/item/PorcelainBucket.java @@ -28,9 +28,8 @@ import net.minecraft.stats.Stats; import net.minecraft.tags.FluidTags; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.cow.Cow; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -87,13 +86,13 @@ public class PorcelainBucket extends Item { return InteractionResult.PASS; } - public InteractionResultHolder use(Level level, Player player, InteractionHand pHand) { + public InteractionResult use(Level level, Player player, InteractionHand pHand) { var stack = player.getItemInHand(pHand); var hitResult = getPlayerPOVHitResult(level, player, this.fluid.get() == Fluids.EMPTY ? ClipContext.Fluid.SOURCE_ONLY : ClipContext.Fluid.NONE); if (hitResult.getType() == HitResult.Type.MISS) { - return InteractionResultHolder.pass(stack); + return InteractionResult.PASS; } else if (hitResult.getType() != HitResult.Type.BLOCK) { - return InteractionResultHolder.pass(stack); + return InteractionResult.PASS; } else { var pos = hitResult.getBlockPos(); var face = hitResult.getDirection(); @@ -124,12 +123,13 @@ public class PorcelainBucket extends Item { CriteriaTriggers.FILLED_BUCKET.trigger((ServerPlayer) player, result); } - return InteractionResultHolder.sidedSuccess(filled, level.isClientSide()); + var success = level.isClientSide() ? InteractionResult.SUCCESS : InteractionResult.SUCCESS_SERVER; + return success.heldItemTransformedTo(filled); } } } - return InteractionResultHolder.fail(stack); + return InteractionResult.FAIL; } else { var state = level.getBlockState(pos); var placePos = canBlockContainFluid(player, level, pos, state) ? pos : relative; @@ -140,13 +140,14 @@ public class PorcelainBucket extends Item { } player.awardStat(Stats.ITEM_USED.get(this)); - return InteractionResultHolder.sidedSuccess(getEmptySuccessItem(stack, player), level.isClientSide()); + var success = level.isClientSide() ? InteractionResult.SUCCESS : InteractionResult.SUCCESS_SERVER; + return success.heldItemTransformedTo(getEmptySuccessItem(stack, player)); } else { - return InteractionResultHolder.fail(stack); + return InteractionResult.FAIL; } } } else { - return InteractionResultHolder.fail(stack); + return InteractionResult.FAIL; } } } diff --git a/src/main/java/thedarkcolour/exdeorum/item/PorcelainMilkBucket.java b/src/main/java/thedarkcolour/exdeorum/item/PorcelainMilkBucket.java index 62df96fa..69a8b154 100644 --- a/src/main/java/thedarkcolour/exdeorum/item/PorcelainMilkBucket.java +++ b/src/main/java/thedarkcolour/exdeorum/item/PorcelainMilkBucket.java @@ -19,25 +19,21 @@ package thedarkcolour.exdeorum.item; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.MilkBucketItem; import net.minecraft.world.level.Level; import thedarkcolour.exdeorum.registry.EItems; -public class PorcelainMilkBucket extends MilkBucketItem { +public class PorcelainMilkBucket extends Item { public PorcelainMilkBucket(Properties properties) { super(properties); } @Override public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity living) { - var ret = super.finishUsingItem(new ItemStack(Items.MILK_BUCKET), level, living); - - if (ret.getItem() == Items.BUCKET) { - return new ItemStack(EItems.PORCELAIN_BUCKET.get()); - } else { - return stack; + if (!level.isClientSide) { + living.removeAllEffects(); } + return new ItemStack(EItems.PORCELAIN_BUCKET.get()); } } diff --git a/src/main/java/thedarkcolour/exdeorum/item/RandomResultItem.java b/src/main/java/thedarkcolour/exdeorum/item/RandomResultItem.java index d6130293..19e49639 100644 --- a/src/main/java/thedarkcolour/exdeorum/item/RandomResultItem.java +++ b/src/main/java/thedarkcolour/exdeorum/item/RandomResultItem.java @@ -19,12 +19,12 @@ package thedarkcolour.exdeorum.item; import net.minecraft.ChatFormatting; -import net.minecraft.Util; +import net.minecraft.util.Util; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.tags.TagKey; import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -46,7 +46,7 @@ public class RandomResultItem extends Item { } @Override - public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + public InteractionResult use(Level level, Player player, InteractionHand hand) { var stack = player.getItemInHand(hand); if (!level.isClientSide) { @@ -61,9 +61,9 @@ public class RandomResultItem extends Item { var newItem = new ItemStack(Util.getRandom(possibleResults, level.random)); player.getInventory().placeItemBackInInventory(newItem); - return InteractionResultHolder.consume(stack.isEmpty() ? player.getItemInHand(hand) : stack); + return InteractionResult.CONSUME.heldItemTransformedTo(stack.isEmpty() ? player.getItemInHand(hand) : stack); } - return InteractionResultHolder.success(stack); + return InteractionResult.SUCCESS.heldItemTransformedTo(stack); } @Override diff --git a/src/main/java/thedarkcolour/exdeorum/item/WateringCanItem.java b/src/main/java/thedarkcolour/exdeorum/item/WateringCanItem.java index 948a1d13..0663399b 100644 --- a/src/main/java/thedarkcolour/exdeorum/item/WateringCanItem.java +++ b/src/main/java/thedarkcolour/exdeorum/item/WateringCanItem.java @@ -30,7 +30,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.tags.BlockTags; import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.HumanoidArm; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.attributes.Attributes; @@ -38,12 +38,12 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.item.UseAnim; +import net.minecraft.world.item.ItemUseAnimation; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.BucketPickup; -import net.minecraft.world.level.block.FarmBlock; +import net.minecraft.world.level.block.FarmlandBlock; import net.minecraft.world.level.block.LevelEvent; import net.minecraft.world.level.block.SugarCaneBlock; import net.minecraft.world.level.block.state.BlockState; @@ -132,8 +132,8 @@ public class WateringCanItem extends Item { } @Override - public UseAnim getUseAnimation(ItemStack stack) { - return UseAnim.NONE; + public ItemUseAnimation getUseAnimation(ItemStack stack) { + return ItemUseAnimation.NONE; } @Override @@ -146,7 +146,7 @@ public class WateringCanItem extends Item { } @Override - public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + public InteractionResult use(Level level, Player player, InteractionHand hand) { var itemInHand = player.getItemInHand(hand); var fluidHandler = itemInHand.getCapability(Capabilities.FluidHandler.ITEM); if (fluidHandler != null) { @@ -164,7 +164,7 @@ public class WateringCanItem extends Item { pickup.getPickupSound(state).ifPresent(sound -> player.playSound(sound, 1.0F, 1.0F)); } - return InteractionResultHolder.sidedSuccess(itemInHand, level.isClientSide); + return level.isClientSide ? InteractionResult.SUCCESS : InteractionResult.SUCCESS_SERVER; } } } @@ -178,10 +178,10 @@ public class WateringCanItem extends Item { onUseTick(level, player, itemInHand, 72000); } - return InteractionResultHolder.consume(itemInHand); + return InteractionResult.CONSUME; } } - return InteractionResultHolder.pass(itemInHand); + return InteractionResult.PASS; } @Override @@ -258,7 +258,7 @@ public class WateringCanItem extends Item { } else { if (BarrelBlockEntity.isHotFluid(state.getFluidState().getFluidType())) { level.levelEvent(LevelEvent.LAVA_FIZZ, pos, 0); - } else if (state.getBlock() == Blocks.FARMLAND) { + } else if (state.getBlock() instanceof FarmlandBlock) { hydrateFarmland(level, pos, state); } } @@ -281,8 +281,8 @@ public class WateringCanItem extends Item { } } - if (state.getValue(FarmBlock.MOISTURE) < 7) { - level.setBlockAndUpdate(pos, state.setValue(FarmBlock.MOISTURE, 7)); + if (state.getValue(FarmlandBlock.MOISTURE) < 7) { + level.setBlockAndUpdate(pos, state.setValue(FarmlandBlock.MOISTURE, 7)); } } diff --git a/src/main/java/thedarkcolour/exdeorum/item/package-info.java b/src/main/java/thedarkcolour/exdeorum/item/package-info.java index 64675718..5cc671a8 100644 --- a/src/main/java/thedarkcolour/exdeorum/item/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/item/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.item; diff --git a/src/main/java/thedarkcolour/exdeorum/loot/MachineLootFunction.java b/src/main/java/thedarkcolour/exdeorum/loot/MachineLootFunction.java index ab591563..a8c3be41 100644 --- a/src/main/java/thedarkcolour/exdeorum/loot/MachineLootFunction.java +++ b/src/main/java/thedarkcolour/exdeorum/loot/MachineLootFunction.java @@ -22,12 +22,11 @@ import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; +import com.mojang.serialization.MapCodec; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction; -import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; -import thedarkcolour.exdeorum.registry.ELootFunctions; import java.util.List; @@ -49,8 +48,8 @@ public class MachineLootFunction extends LootItemConditionalFunction { } @Override - public LootItemFunctionType getType() { - return ELootFunctions.MACHINE.get(); + public MapCodec codec() { + return CODEC; } public static LootItemConditionalFunction.Builder machineLoot() { diff --git a/src/main/java/thedarkcolour/exdeorum/loot/SummationGenerator.java b/src/main/java/thedarkcolour/exdeorum/loot/SummationGenerator.java index e9f58f76..92815f3b 100644 --- a/src/main/java/thedarkcolour/exdeorum/loot/SummationGenerator.java +++ b/src/main/java/thedarkcolour/exdeorum/loot/SummationGenerator.java @@ -20,11 +20,10 @@ package thedarkcolour.exdeorum.loot; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; +import com.mojang.serialization.MapCodec; import net.minecraft.world.level.storage.loot.LootContext; -import net.minecraft.world.level.storage.loot.providers.number.LootNumberProviderType; import net.minecraft.world.level.storage.loot.providers.number.NumberProvider; import net.minecraft.world.level.storage.loot.providers.number.NumberProviders; -import thedarkcolour.exdeorum.registry.ENumberProviders; import java.util.List; @@ -41,7 +40,7 @@ public record SummationGenerator(List providers) implements Numb } @Override - public LootNumberProviderType getType() { - return ENumberProviders.SUMMATION.get(); + public MapCodec codec() { + return CODEC; } } diff --git a/src/main/java/thedarkcolour/exdeorum/loot/package-info.java b/src/main/java/thedarkcolour/exdeorum/loot/package-info.java index 811eb6e6..fea6ffae 100644 --- a/src/main/java/thedarkcolour/exdeorum/loot/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/loot/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.loot; diff --git a/src/main/java/thedarkcolour/exdeorum/material/MaterialParser.java b/src/main/java/thedarkcolour/exdeorum/material/MaterialParser.java index e1b72978..52b9b0b4 100644 --- a/src/main/java/thedarkcolour/exdeorum/material/MaterialParser.java +++ b/src/main/java/thedarkcolour/exdeorum/material/MaterialParser.java @@ -21,7 +21,7 @@ package thedarkcolour.exdeorum.material; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.level.block.SoundType; import net.neoforged.neoforge.common.util.DeferredSoundType; import net.neoforged.neoforge.registries.DeferredHolder; @@ -60,11 +60,11 @@ public class MaterialParser { } else if (soundTypeJson instanceof JsonObject soundTypeObj) { if (soundTypeObj.has("break_sound") && soundTypeObj.has("step_sound") && soundTypeObj.has("place_sound") && soundTypeObj.has("hit_sound") && soundTypeObj.has("fall_sound")) { return new DeferredSoundType(1.0f, 1.0f, - DeferredHolder.create(Registries.SOUND_EVENT, ResourceLocation.parse(soundTypeObj.get("break_sound").getAsString())), - DeferredHolder.create(Registries.SOUND_EVENT, ResourceLocation.parse(soundTypeObj.get("step_sound").getAsString())), - DeferredHolder.create(Registries.SOUND_EVENT, ResourceLocation.parse(soundTypeObj.get("place_sound").getAsString())), - DeferredHolder.create(Registries.SOUND_EVENT, ResourceLocation.parse(soundTypeObj.get("hit_sound").getAsString())), - DeferredHolder.create(Registries.SOUND_EVENT, ResourceLocation.parse(soundTypeObj.get("fall_sound").getAsString())) + DeferredHolder.create(Registries.SOUND_EVENT, Identifier.parse(soundTypeObj.get("break_sound").getAsString())), + DeferredHolder.create(Registries.SOUND_EVENT, Identifier.parse(soundTypeObj.get("step_sound").getAsString())), + DeferredHolder.create(Registries.SOUND_EVENT, Identifier.parse(soundTypeObj.get("place_sound").getAsString())), + DeferredHolder.create(Registries.SOUND_EVENT, Identifier.parse(soundTypeObj.get("hit_sound").getAsString())), + DeferredHolder.create(Registries.SOUND_EVENT, Identifier.parse(soundTypeObj.get("fall_sound").getAsString())) ); } } else { diff --git a/src/main/java/thedarkcolour/exdeorum/material/package-info.java b/src/main/java/thedarkcolour/exdeorum/material/package-info.java index 2a0a3095..6d0d505e 100644 --- a/src/main/java/thedarkcolour/exdeorum/material/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/material/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.material; diff --git a/src/main/java/thedarkcolour/exdeorum/menu/MechanicalHammerMenu.java b/src/main/java/thedarkcolour/exdeorum/menu/MechanicalHammerMenu.java index e9c42351..f6bf40be 100644 --- a/src/main/java/thedarkcolour/exdeorum/menu/MechanicalHammerMenu.java +++ b/src/main/java/thedarkcolour/exdeorum/menu/MechanicalHammerMenu.java @@ -19,7 +19,7 @@ package thedarkcolour.exdeorum.menu; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.DataSlot; @@ -31,7 +31,7 @@ import thedarkcolour.exdeorum.registry.EMenus; import thedarkcolour.exdeorum.tag.EItemTags; public class MechanicalHammerMenu extends AbstractMachineMenu { - private static final ResourceLocation EMPTY_SLOT_HAMMER = ExDeorum.loc("item/empty_slot_hammer"); + private static final Identifier EMPTY_SLOT_HAMMER = ExDeorum.loc("item/empty_slot_hammer"); private static final int NUM_SLOTS = 3; public MechanicalHammerMenu(int containerId, Inventory playerInventory, FriendlyByteBuf data) { diff --git a/src/main/java/thedarkcolour/exdeorum/menu/MechanicalSieveMenu.java b/src/main/java/thedarkcolour/exdeorum/menu/MechanicalSieveMenu.java index 7deabbc7..220787ef 100644 --- a/src/main/java/thedarkcolour/exdeorum/menu/MechanicalSieveMenu.java +++ b/src/main/java/thedarkcolour/exdeorum/menu/MechanicalSieveMenu.java @@ -19,7 +19,7 @@ package thedarkcolour.exdeorum.menu; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.InventoryMenu; @@ -29,7 +29,7 @@ import thedarkcolour.exdeorum.blockentity.MechanicalSieveBlockEntity; import thedarkcolour.exdeorum.registry.EMenus; public class MechanicalSieveMenu extends AbstractMachineMenu { - private static final ResourceLocation EMPTY_SLOT_MESH = ExDeorum.loc("item/empty_slot_mesh"); + private static final Identifier EMPTY_SLOT_MESH = ExDeorum.loc("item/empty_slot_mesh"); private static final int NUM_SLOTS = 22; // input + mesh, 20 output slots public MechanicalSieveMenu(int containerId, Inventory playerInventory, FriendlyByteBuf data) { diff --git a/src/main/java/thedarkcolour/exdeorum/menu/package-info.java b/src/main/java/thedarkcolour/exdeorum/menu/package-info.java index 2be60dd5..244a97d4 100644 --- a/src/main/java/thedarkcolour/exdeorum/menu/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/menu/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.menu; diff --git a/src/main/java/thedarkcolour/exdeorum/network/VoidWorldMessage.java b/src/main/java/thedarkcolour/exdeorum/network/VoidWorldMessage.java index c8f2064f..3ce97620 100644 --- a/src/main/java/thedarkcolour/exdeorum/network/VoidWorldMessage.java +++ b/src/main/java/thedarkcolour/exdeorum/network/VoidWorldMessage.java @@ -21,7 +21,7 @@ package thedarkcolour.exdeorum.network; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import thedarkcolour.exdeorum.ExDeorum; // Server -> Client diff --git a/src/main/java/thedarkcolour/exdeorum/network/package-info.java b/src/main/java/thedarkcolour/exdeorum/network/package-info.java index 073bf7df..98d2a922 100644 --- a/src/main/java/thedarkcolour/exdeorum/network/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/network/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.network; diff --git a/src/main/java/thedarkcolour/exdeorum/package-info.java b/src/main/java/thedarkcolour/exdeorum/package-info.java index 76a56f06..589af4de 100644 --- a/src/main/java/thedarkcolour/exdeorum/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum; diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/BlockPredicate.java b/src/main/java/thedarkcolour/exdeorum/recipe/BlockPredicate.java index f8ee6c99..5c189de2 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/BlockPredicate.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/BlockPredicate.java @@ -25,7 +25,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.DataResult; import com.mojang.serialization.DynamicOps; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.advancements.criterion.StatePropertiesPredicate; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.network.RegistryFriendlyByteBuf; diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/CodecUtil.java b/src/main/java/thedarkcolour/exdeorum/recipe/CodecUtil.java index 86fdbdf4..ef0c3af9 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/CodecUtil.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/CodecUtil.java @@ -44,7 +44,7 @@ public class CodecUtil { public static final StreamCodec NUMBER_PROVIDER_CODEC = StreamCodec.of(RecipeUtil::toNetworkNumberProvider, RecipeUtil::fromNetworkNumberProvider); public static App, Ingredient> ingredientField() { - return Ingredient.CODEC_NONEMPTY.fieldOf("ingredient").forGetter(SingleIngredientRecipe::ingredient); + return Ingredient.CODEC.fieldOf("ingredient").forGetter(SingleIngredientRecipe::ingredient); } public static App, Block> blockField(String name, Function getter) { diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/OreChunkRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/OreChunkRecipe.java index 86c4aad4..7e0435ef 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/OreChunkRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/OreChunkRecipe.java @@ -20,7 +20,6 @@ package thedarkcolour.exdeorum.recipe; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; import net.minecraft.core.registries.Registries; import net.minecraft.network.RegistryFriendlyByteBuf; @@ -29,6 +28,7 @@ import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.*; +import net.minecraft.world.item.crafting.PlacementInfo; import net.minecraft.world.level.Level; import net.neoforged.neoforge.common.util.Lazy; import thedarkcolour.exdeorum.compat.PreferredOres; @@ -39,7 +39,7 @@ import java.util.Map; public class OreChunkRecipe implements CraftingRecipe { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( - Ingredient.CODEC_NONEMPTY.fieldOf("ore_chunk").forGetter(OreChunkRecipe::getOreChunk), + Ingredient.CODEC.fieldOf("ore_chunk").forGetter(OreChunkRecipe::getOreChunk), TagKey.codec(Registries.ITEM).fieldOf("ore").forGetter(OreChunkRecipe::getOre) ).apply(instance, OreChunkRecipe::new)); public static final StreamCodec STREAM_CODEC = StreamCodec.of(OreChunkRecipe::toNetwork, OreChunkRecipe::fromNetwork); @@ -72,12 +72,7 @@ public class OreChunkRecipe implements CraftingRecipe { } @Override - public ItemStack getResultItem(HolderLookup.Provider registries) { - return this.resultItem.get(); - } - - @Override - public ItemStack assemble(CraftingInput input, HolderLookup.Provider lookup) { + public ItemStack assemble(CraftingInput input) { return this.resultItem.get().copy(); } @@ -87,8 +82,18 @@ public class OreChunkRecipe implements CraftingRecipe { } @Override - public boolean canCraftInDimensions(int width, int height) { - return width >= 2 && height >= 2; + public String group() { + return ""; + } + + @Override + public boolean showNotification() { + return false; + } + + @Override + public PlacementInfo placementInfo() { + return PlacementInfo.create(getIngredients()); } @Override @@ -110,15 +115,4 @@ public class OreChunkRecipe implements CraftingRecipe { RecipeUtil.writeTag(buffer, recipe.ore); } - public static class Serializer implements RecipeSerializer { - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public StreamCodec streamCodec() { - return STREAM_CODEC; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/ProbabilityRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/ProbabilityRecipe.java index 71062525..1ca09dc5 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/ProbabilityRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/ProbabilityRecipe.java @@ -20,7 +20,6 @@ package thedarkcolour.exdeorum.recipe; import com.mojang.datafixers.Products; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.HolderLookup; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.storage.loot.providers.number.NumberProvider; @@ -44,11 +43,6 @@ public abstract class ProbabilityRecipe extends SingleIngredientRecipe { ); } - @Override - public ItemStack getResultItem(HolderLookup.Provider access) { - return this.result; - } - public ItemStack result() { return this.result; } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/RecipeUtil.java b/src/main/java/thedarkcolour/exdeorum/recipe/RecipeUtil.java index f2729739..8b216a3d 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/RecipeUtil.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/RecipeUtil.java @@ -27,8 +27,7 @@ import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; +import net.minecraft.resources.Identifier; import net.minecraft.server.level.ServerLevel; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; @@ -36,7 +35,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeHolder; -import net.minecraft.world.item.crafting.RecipeManager; +import net.minecraft.world.item.crafting.RecipeMap; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.material.Fluid; @@ -44,13 +43,9 @@ import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.providers.number.*; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.fml.loading.FMLEnvironment; import net.neoforged.neoforge.fluids.FluidStack; -import net.neoforged.neoforge.server.ServerLifecycleHooks; import org.jetbrains.annotations.Nullable; import thedarkcolour.exdeorum.compat.PreferredOres; -import thedarkcolour.exdeorum.client.ClientsideCode; import thedarkcolour.exdeorum.loot.SummationGenerator; import thedarkcolour.exdeorum.recipe.barrel.BarrelCompostRecipe; import thedarkcolour.exdeorum.recipe.barrel.BarrelFluidMixingRecipe; @@ -86,8 +81,12 @@ public final class RecipeUtil { private static FluidTransformationRecipeCache fluidTransformationRecipeCache; private static CrookRecipeCache crookRecipeCache; private static CrucibleHeatRecipeCache crucibleHeatRecipeCache; + private static List barrelMixingRecipes; + private static RecipeMap currentRecipeMap; - public static void reload(RecipeManager recipes) { + public static void reload(RecipeMap recipes) { + currentRecipeMap = recipes; + barrelMixingRecipes = recipes.byType(ERecipeTypes.BARREL_MIXING.get()).stream().map(RecipeHolder::value).toList(); barrelCompostRecipeCache = new SingleIngredientRecipeCache<>(recipes, ERecipeTypes.BARREL_COMPOST); lavaCrucibleRecipeCache = new SingleIngredientRecipeCache<>(recipes, ERecipeTypes.LAVA_CRUCIBLE); waterCrucibleRecipeCache = new SingleIngredientRecipeCache<>(recipes, ERecipeTypes.WATER_CRUCIBLE); @@ -113,6 +112,8 @@ public final class RecipeUtil { fluidTransformationRecipeCache = null; crookRecipeCache = null; crucibleHeatRecipeCache = null; + barrelMixingRecipes = null; + currentRecipeMap = null; } public static List getSieveRecipes(Item mesh, ItemStack item) { @@ -203,97 +204,23 @@ public final class RecipeUtil { }; } - // todo support Forge's ingredient types public static boolean areIngredientsEqual(Ingredient first, Ingredient second) { - // although unlikely, we should check this anyway if (first == second) return true; - - if (!first.isCustom() && !second.isCustom()) { - var firstValues = new ObjectArrayList<>(first.getValues()); - var secondValues = new ObjectArrayList<>(second.getValues()); - - // if arrays are same size, check if their contents are equal (order does not matter) - if (firstValues.size() == secondValues.size()) { - outer: - for (int i = 0; i < firstValues.size(); i++) { - var firstValue = firstValues.get(i); - - for (int j = 0; j < firstValues.size(); j++) { - if (areValuesEqual(firstValue, secondValues.get(j))) { - firstValues.remove(i); - secondValues.remove(j); - i--; - - continue outer; - } - } - - return false; - } - - // return true if everything was equal - return true; - } - } - - return false; - } - - private static boolean areValuesEqual(Ingredient.Value firstValue, Ingredient.Value secondValue) { - Class firstKlass = firstValue.getClass(); - Class secondKlass = secondValue.getClass(); - - // if values are the same type of class - if (firstKlass == secondKlass) { - if (firstKlass == Ingredient.ItemValue.class) { - // if items are different, return false - return ItemStack.matches(((Ingredient.ItemValue) firstValue).item(), ((Ingredient.ItemValue) secondValue).item()); - } else if (firstKlass == Ingredient.TagValue.class) { - // if tags are different, return false - // identity comparison is okay because tags are always interned in vanilla - return ((Ingredient.TagValue) firstValue).tag() == ((Ingredient.TagValue) secondValue).tag(); - } else { - var firstItems = firstValue.getItems(); - var secondItems = secondValue.getItems(); - var len = firstItems.size(); - - if (len == secondItems.size()) { - Iterator firstIter = firstItems.iterator(); - Iterator secondIter = secondItems.iterator(); - - while (firstIter.hasNext()) { - if (!ItemStack.matches(firstIter.next(), secondIter.next())) { - // if one of the items is different, return false - return false; - } - } - } else { - // if values have different amounts of items, return false - return false; - } - - // if all items are the same, return true - return true; - } - } else { - // if the values are different types, return false - return false; - } + return first.equals(second); } public static boolean isCompostable(ItemStack stack) { return barrelCompostRecipeCache != null && barrelCompostRecipeCache.getRecipe(stack) != null; } - // todo stop using the RecipeManager @Nullable - public static BarrelMixingRecipe getBarrelMixingRecipe(RecipeManager recipes, ItemStack stack, FluidStack fluid) { - for (var recipe : recipes.byType(ERecipeTypes.BARREL_MIXING.get())) { - if (recipe.value().matches(stack, fluid)) { - return recipe.value(); + public static BarrelMixingRecipe getBarrelMixingRecipe(ItemStack stack, FluidStack fluid) { + if (barrelMixingRecipes == null) return null; + for (var recipe : barrelMixingRecipes) { + if (recipe.matches(stack, fluid)) { + return recipe; } } - return null; } @@ -399,24 +326,22 @@ public final class RecipeUtil { } public static void writeTag(FriendlyByteBuf buffer, TagKey ore) { - buffer.writeResourceLocation(ore.location()); + buffer.writeIdentifier(ore.location()); } public static TagKey readTag(FriendlyByteBuf buffer, ResourceKey> registry) { - return TagKey.create(registry, buffer.readResourceLocation()); + return TagKey.create(registry, buffer.readIdentifier()); } public static boolean isValidResourceLocation(String string) { - return ResourceLocation.tryParse(string) != null; + return Identifier.tryParse(string) != null; } /** - * From Forestry: Community Edition - * @return The global registry manager. {@code null} on server when there is no server, or when there is no world (on client). + * @return The global recipe map. {@code null} if recipes have not been loaded yet. */ @Nullable - public static RecipeManager getRecipeManager() { - MinecraftServer server = ServerLifecycleHooks.getCurrentServer(); - return server == null ? (FMLEnvironment.dist == Dist.CLIENT ? ClientsideCode.getRecipeManager() : null) : server.getRecipeManager(); + public static RecipeMap getRecipeMap() { + return currentRecipeMap; } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/SingleIngredientRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/SingleIngredientRecipe.java index ff85deaa..83627156 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/SingleIngredientRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/SingleIngredientRecipe.java @@ -18,10 +18,12 @@ package thedarkcolour.exdeorum.recipe; -import net.minecraft.core.HolderLookup; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.PlacementInfo; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeBookCategories; +import net.minecraft.world.item.crafting.RecipeBookCategory; import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.level.Level; @@ -50,17 +52,27 @@ public abstract class SingleIngredientRecipe implements Recipe { } @Override - public ItemStack assemble(RecipeInput pContainer, HolderLookup.Provider pRegistryAccess) { + public ItemStack assemble(RecipeInput pContainer) { return ItemStack.EMPTY; } @Override - public boolean canCraftInDimensions(int width, int height) { + public boolean showNotification() { return false; } @Override - public ItemStack getResultItem(HolderLookup.Provider access) { - return ItemStack.EMPTY; + public String group() { + return ""; + } + + @Override + public PlacementInfo placementInfo() { + return PlacementInfo.NOT_PLACEABLE; + } + + @Override + public RecipeBookCategory recipeBookCategory() { + return RecipeBookCategories.CRAFTING_MISC; } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelCompostRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelCompostRecipe.java index ad0122b2..efa2151c 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelCompostRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelCompostRecipe.java @@ -51,12 +51,12 @@ public class BarrelCompostRecipe extends SingleIngredientRecipe { } @Override - public RecipeSerializer getSerializer() { + public RecipeSerializer getSerializer() { return ERecipeSerializers.BARREL_COMPOST.get(); } @Override - public RecipeType getType() { + public RecipeType getType() { return ERecipeTypes.BARREL_COMPOST.get(); } @@ -72,15 +72,4 @@ public class BarrelCompostRecipe extends SingleIngredientRecipe { return new BarrelCompostRecipe(ingredient, volume); } - public static class Serializer implements RecipeSerializer { - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public StreamCodec streamCodec() { - return STREAM_CODEC; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelFluidMixingRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelFluidMixingRecipe.java index 050e67d2..c70740ca 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelFluidMixingRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelFluidMixingRecipe.java @@ -21,11 +21,13 @@ package thedarkcolour.exdeorum.recipe.barrel; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.HolderLookup; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.PlacementInfo; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeBookCategories; +import net.minecraft.world.item.crafting.RecipeBookCategory; import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; @@ -59,27 +61,37 @@ public record BarrelFluidMixingRecipe( } @Override - public ItemStack assemble(RecipeInput input, HolderLookup.Provider registries) { + public ItemStack assemble(RecipeInput input) { return ItemStack.EMPTY; } @Override - public boolean canCraftInDimensions(int pWidth, int pHeight) { + public boolean showNotification() { return false; } @Override - public ItemStack getResultItem(HolderLookup.Provider registries) { - return this.result; + public String group() { + return ""; } @Override - public RecipeSerializer getSerializer() { + public PlacementInfo placementInfo() { + return PlacementInfo.NOT_PLACEABLE; + } + + @Override + public RecipeBookCategory recipeBookCategory() { + return RecipeBookCategories.CRAFTING_MISC; + } + + @Override + public RecipeSerializer getSerializer() { return ERecipeSerializers.BARREL_FLUID_MIXING.get(); } @Override - public RecipeType getType() { + public RecipeType getType() { return ERecipeTypes.BARREL_FLUID_MIXING.get(); } @@ -99,15 +111,4 @@ public record BarrelFluidMixingRecipe( return new BarrelFluidMixingRecipe(baseFluid, additiveFluid, result, consumesAdditive); } - public static class Serializer implements RecipeSerializer { - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public StreamCodec streamCodec() { - return STREAM_CODEC; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelMixingRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelMixingRecipe.java index 8b99c409..14a1276a 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelMixingRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelMixingRecipe.java @@ -20,7 +20,6 @@ package thedarkcolour.exdeorum.recipe.barrel; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.HolderLookup; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; @@ -73,17 +72,12 @@ public class BarrelMixingRecipe extends SingleIngredientRecipe { } @Override - public ItemStack getResultItem(HolderLookup.Provider access) { - return this.result; - } - - @Override - public RecipeSerializer getSerializer() { + public RecipeSerializer getSerializer() { return ERecipeSerializers.BARREL_MIXING.get(); } @Override - public RecipeType getType() { + public RecipeType getType() { return ERecipeTypes.BARREL_MIXING.get(); } @@ -101,15 +95,4 @@ public class BarrelMixingRecipe extends SingleIngredientRecipe { return new BarrelMixingRecipe(ingredient, fluid, result); } - public static class Serializer implements RecipeSerializer { - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public StreamCodec streamCodec() { - return STREAM_CODEC; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/FluidTransformationRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/FluidTransformationRecipe.java index d16ffe37..6ea47e56 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/FluidTransformationRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/FluidTransformationRecipe.java @@ -21,12 +21,14 @@ package thedarkcolour.exdeorum.recipe.barrel; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.PlacementInfo; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeBookCategories; +import net.minecraft.world.item.crafting.RecipeBookCategory; import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; @@ -68,27 +70,37 @@ public record FluidTransformationRecipe( } @Override - public ItemStack assemble(RecipeInput input, HolderLookup.Provider lookup) { + public ItemStack assemble(RecipeInput input) { return ItemStack.EMPTY; } @Override - public boolean canCraftInDimensions(int pWidth, int pHeight) { + public boolean showNotification() { return false; } @Override - public ItemStack getResultItem(HolderLookup.Provider lookup) { - return ItemStack.EMPTY; + public String group() { + return ""; } @Override - public RecipeSerializer getSerializer() { + public PlacementInfo placementInfo() { + return PlacementInfo.NOT_PLACEABLE; + } + + @Override + public RecipeBookCategory recipeBookCategory() { + return RecipeBookCategories.CRAFTING_MISC; + } + + @Override + public RecipeSerializer getSerializer() { return ERecipeSerializers.BARREL_FLUID_TRANSFORMATION.get(); } @Override - public RecipeType getType() { + public RecipeType getType() { return ERecipeTypes.BARREL_FLUID_TRANSFORMATION.get(); } @@ -111,15 +123,4 @@ public record FluidTransformationRecipe( return new FluidTransformationRecipe(baseFluid, resultFluid, resultColor, catalyst, byproducts, duration); } - public static class Serializer implements RecipeSerializer { - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public StreamCodec streamCodec() { - return STREAM_CODEC; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/package-info.java b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/package-info.java index 6f9d42d2..b78b43e2 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.recipe.barrel; diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/cache/BarrelFluidMixingRecipeCache.java b/src/main/java/thedarkcolour/exdeorum/recipe/cache/BarrelFluidMixingRecipeCache.java index c78ba8aa..b1367abb 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/cache/BarrelFluidMixingRecipeCache.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/cache/BarrelFluidMixingRecipeCache.java @@ -18,7 +18,7 @@ package thedarkcolour.exdeorum.recipe.cache; -import net.minecraft.world.item.crafting.RecipeManager; +import net.minecraft.world.item.crafting.RecipeMap; import net.minecraft.world.level.material.Fluid; import org.jetbrains.annotations.Nullable; import thedarkcolour.exdeorum.recipe.barrel.BarrelFluidMixingRecipe; @@ -29,11 +29,11 @@ import java.util.Map; // for now, only simple recipes public class BarrelFluidMixingRecipeCache { - private RecipeManager recipeManager; + private RecipeMap recipeManager; @Nullable private Map> recipes; - public BarrelFluidMixingRecipeCache(RecipeManager recipeManager) { + public BarrelFluidMixingRecipeCache(RecipeMap recipeManager) { this.recipeManager = recipeManager; } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/cache/CrookRecipeCache.java b/src/main/java/thedarkcolour/exdeorum/recipe/cache/CrookRecipeCache.java index e82a3ebc..bad36d56 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/cache/CrookRecipeCache.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/cache/CrookRecipeCache.java @@ -18,7 +18,7 @@ package thedarkcolour.exdeorum.recipe.cache; -import net.minecraft.world.item.crafting.RecipeManager; +import net.minecraft.world.item.crafting.RecipeMap; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import thedarkcolour.exdeorum.recipe.crook.CrookRecipe; @@ -27,11 +27,11 @@ import thedarkcolour.exdeorum.registry.ERecipeTypes; import java.util.*; public class CrookRecipeCache { - private RecipeManager recipeManager; + private RecipeMap recipeManager; @Nullable private Map> recipes; - public CrookRecipeCache(RecipeManager recipeManager) { + public CrookRecipeCache(RecipeMap recipeManager) { this.recipeManager = recipeManager; } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/cache/CrucibleHeatRecipeCache.java b/src/main/java/thedarkcolour/exdeorum/recipe/cache/CrucibleHeatRecipeCache.java index da15ca46..5a73bb70 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/cache/CrucibleHeatRecipeCache.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/cache/CrucibleHeatRecipeCache.java @@ -21,17 +21,17 @@ package thedarkcolour.exdeorum.recipe.cache; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectSet; -import net.minecraft.world.item.crafting.RecipeManager; +import net.minecraft.world.item.crafting.RecipeMap; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import thedarkcolour.exdeorum.registry.ERecipeTypes; public class CrucibleHeatRecipeCache { - private RecipeManager recipeManager; + private RecipeMap recipeManager; @Nullable private Object2IntMap recipes; - public CrucibleHeatRecipeCache(RecipeManager recipeManager) { + public CrucibleHeatRecipeCache(RecipeMap recipeManager) { this.recipeManager = recipeManager; } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/cache/FluidTransformationRecipeCache.java b/src/main/java/thedarkcolour/exdeorum/recipe/cache/FluidTransformationRecipeCache.java index c67d576f..bd2d59a4 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/cache/FluidTransformationRecipeCache.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/cache/FluidTransformationRecipeCache.java @@ -18,7 +18,7 @@ package thedarkcolour.exdeorum.recipe.cache; -import net.minecraft.world.item.crafting.RecipeManager; +import net.minecraft.world.item.crafting.RecipeMap; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; import org.jetbrains.annotations.Nullable; @@ -29,11 +29,11 @@ import java.util.HashMap; import java.util.Map; public class FluidTransformationRecipeCache { - private RecipeManager recipeManager; + private RecipeMap recipeManager; @Nullable private Map> recipes; - public FluidTransformationRecipeCache(RecipeManager manager) { + public FluidTransformationRecipeCache(RecipeMap manager) { this.recipeManager = manager; } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/cache/SieveRecipeCache.java b/src/main/java/thedarkcolour/exdeorum/recipe/cache/SieveRecipeCache.java index 165715a9..4346b8a7 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/cache/SieveRecipeCache.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/cache/SieveRecipeCache.java @@ -21,7 +21,7 @@ package thedarkcolour.exdeorum.recipe.cache; import com.google.common.collect.ImmutableList; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.RecipeManager; +import net.minecraft.world.item.crafting.RecipeMap; import net.minecraft.world.item.crafting.RecipeType; import org.jetbrains.annotations.Nullable; import thedarkcolour.exdeorum.recipe.sieve.SieveRecipe; @@ -33,12 +33,12 @@ import java.util.Map; import java.util.function.Supplier; public class SieveRecipeCache { - private RecipeManager recipeManager; + private RecipeMap recipeManager; private final Supplier> recipeType; @Nullable private Map> meshCaches; - public SieveRecipeCache(RecipeManager recipeManager, Supplier> recipeType) { + public SieveRecipeCache(RecipeMap recipeManager, Supplier> recipeType) { this.recipeManager = recipeManager; this.recipeType = recipeType; } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/cache/SingleIngredientRecipeCache.java b/src/main/java/thedarkcolour/exdeorum/recipe/cache/SingleIngredientRecipeCache.java index f4ffafb8..5e4b9147 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/cache/SingleIngredientRecipeCache.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/cache/SingleIngredientRecipeCache.java @@ -22,7 +22,7 @@ import com.google.common.collect.ImmutableList; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeHolder; -import net.minecraft.world.item.crafting.RecipeManager; +import net.minecraft.world.item.crafting.RecipeMap; import net.minecraft.world.item.crafting.RecipeType; import org.jetbrains.annotations.Nullable; import thedarkcolour.exdeorum.recipe.SingleIngredientRecipe; @@ -35,7 +35,7 @@ import java.util.function.Supplier; public class SingleIngredientRecipeCache { private final Supplier> recipeType; - private RecipeManager recipeManager; + private RecipeMap recipeManager; @Nullable private Map simpleRecipes; @Nullable @@ -44,7 +44,7 @@ public class SingleIngredientRecipeCache { private Collection> allRecipes; private boolean trackAllRecipes; - public SingleIngredientRecipeCache(RecipeManager recipeManager, Supplier> recipeType) { + public SingleIngredientRecipeCache(RecipeMap recipeManager, Supplier> recipeType) { this.recipeType = recipeType; this.recipeManager = recipeManager; } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/cache/package-info.java b/src/main/java/thedarkcolour/exdeorum/recipe/cache/package-info.java index 81711aae..6b6665cf 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/cache/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/cache/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.recipe.cache; diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/crook/CrookRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/crook/CrookRecipe.java index b4b49687..0b0ff6a0 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/crook/CrookRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/crook/CrookRecipe.java @@ -21,11 +21,13 @@ package thedarkcolour.exdeorum.recipe.crook; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.HolderLookup; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.PlacementInfo; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeBookCategories; +import net.minecraft.world.item.crafting.RecipeBookCategory; import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; @@ -48,27 +50,37 @@ public record CrookRecipe(BlockPredicate blockPredicate, ItemStack result, float } @Override - public ItemStack assemble(RecipeInput input, HolderLookup.Provider registries) { + public ItemStack assemble(RecipeInput input) { return ItemStack.EMPTY; } @Override - public boolean canCraftInDimensions(int pWidth, int pHeight) { + public boolean showNotification() { return false; } @Override - public ItemStack getResultItem(HolderLookup.Provider registries) { - return this.result; + public String group() { + return ""; } @Override - public RecipeSerializer getSerializer() { + public PlacementInfo placementInfo() { + return PlacementInfo.NOT_PLACEABLE; + } + + @Override + public RecipeBookCategory recipeBookCategory() { + return RecipeBookCategories.CRAFTING_MISC; + } + + @Override + public RecipeSerializer getSerializer() { return ERecipeSerializers.CROOK.get(); } @Override - public RecipeType getType() { + public RecipeType getType() { return ERecipeTypes.CROOK.get(); } @@ -86,15 +98,4 @@ public record CrookRecipe(BlockPredicate blockPredicate, ItemStack result, float return new CrookRecipe(blockPredicate, result, chance); } - public static class Serializer implements RecipeSerializer { - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public StreamCodec streamCodec() { - return STREAM_CODEC; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/crook/package-info.java b/src/main/java/thedarkcolour/exdeorum/recipe/crook/package-info.java index 9513bdd4..4c864193 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/crook/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/crook/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.recipe.crook; diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/crucible/CrucibleHeatRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/crucible/CrucibleHeatRecipe.java index 8ffc20f2..27dd43e9 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/crucible/CrucibleHeatRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/crucible/CrucibleHeatRecipe.java @@ -21,11 +21,13 @@ package thedarkcolour.exdeorum.recipe.crucible; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.HolderLookup; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.PlacementInfo; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeBookCategories; +import net.minecraft.world.item.crafting.RecipeBookCategory; import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; @@ -47,27 +49,37 @@ public record CrucibleHeatRecipe(BlockPredicate blockPredicate, int heatValue) i } @Override - public ItemStack assemble(RecipeInput input, HolderLookup.Provider registries) { + public ItemStack assemble(RecipeInput input) { return ItemStack.EMPTY; } @Override - public boolean canCraftInDimensions(int width, int height) { + public boolean showNotification() { return false; } @Override - public ItemStack getResultItem(HolderLookup.Provider registries) { - return ItemStack.EMPTY; + public String group() { + return ""; } @Override - public RecipeSerializer getSerializer() { + public PlacementInfo placementInfo() { + return PlacementInfo.NOT_PLACEABLE; + } + + @Override + public RecipeBookCategory recipeBookCategory() { + return RecipeBookCategories.CRAFTING_MISC; + } + + @Override + public RecipeSerializer getSerializer() { return ERecipeSerializers.CRUCIBLE_HEAT_SOURCE.get(); } @Override - public RecipeType getType() { + public RecipeType getType() { return ERecipeTypes.CRUCIBLE_HEAT_SOURCE.get(); } @@ -82,15 +94,4 @@ public record CrucibleHeatRecipe(BlockPredicate blockPredicate, int heatValue) i return new CrucibleHeatRecipe(blockPredicate, heatValue); } - public static class Serializer implements RecipeSerializer { - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public StreamCodec streamCodec() { - return STREAM_CODEC; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/crucible/CrucibleRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/crucible/CrucibleRecipe.java index 9ca5075c..8da65003 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/crucible/CrucibleRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/crucible/CrucibleRecipe.java @@ -77,12 +77,12 @@ public abstract class CrucibleRecipe extends SingleIngredientRecipe { } @Override - public RecipeSerializer getSerializer() { + public RecipeSerializer getSerializer() { return ERecipeSerializers.LAVA_CRUCIBLE.get(); } @Override - public RecipeType getType() { + public RecipeType getType() { return ERecipeTypes.LAVA_CRUCIBLE.get(); } } @@ -96,25 +96,14 @@ public abstract class CrucibleRecipe extends SingleIngredientRecipe { } @Override - public RecipeSerializer getSerializer() { + public RecipeSerializer getSerializer() { return ERecipeSerializers.WATER_CRUCIBLE.get(); } @Override - public RecipeType getType() { + public RecipeType getType() { return ERecipeTypes.WATER_CRUCIBLE.get(); } } - public record Serializer(MapCodec recipeCodec, StreamCodec streamCodec) implements RecipeSerializer { - @Override - public MapCodec codec() { - return this.recipeCodec; - } - - @Override - public StreamCodec streamCodec() { - return this.streamCodec; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/crucible/package-info.java b/src/main/java/thedarkcolour/exdeorum/recipe/crucible/package-info.java index 256fc0f0..e93dca15 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/crucible/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/crucible/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.recipe.crucible; diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/hammer/CompressedHammerRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/hammer/CompressedHammerRecipe.java index 3378d233..fc176bfe 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/hammer/CompressedHammerRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/hammer/CompressedHammerRecipe.java @@ -33,8 +33,8 @@ import thedarkcolour.exdeorum.registry.ERecipeSerializers; import thedarkcolour.exdeorum.registry.ERecipeTypes; public class CompressedHammerRecipe extends HammerRecipe { - private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> ProbabilityRecipe.commonFields(instance).apply(instance, CompressedHammerRecipe::new)); - private static final StreamCodec STREAM_CODEC = StreamCodec.composite( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> ProbabilityRecipe.commonFields(instance).apply(instance, CompressedHammerRecipe::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( Ingredient.CONTENTS_STREAM_CODEC, CompressedHammerRecipe::ingredient, ItemStack.STREAM_CODEC, CompressedHammerRecipe::result, CodecUtil.NUMBER_PROVIDER_CODEC, CompressedHammerRecipe::resultAmount, @@ -45,24 +45,13 @@ public class CompressedHammerRecipe extends HammerRecipe { } @Override - public RecipeSerializer getSerializer() { + public RecipeSerializer getSerializer() { return ERecipeSerializers.COMPRESSED_HAMMER.get(); } @Override - public RecipeType getType() { + public RecipeType getType() { return ERecipeTypes.COMPRESSED_HAMMER.get(); } - public static class Serializer implements RecipeSerializer { - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public StreamCodec streamCodec() { - return STREAM_CODEC; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/hammer/HammerRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/hammer/HammerRecipe.java index 23e5f267..1f207939 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/hammer/HammerRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/hammer/HammerRecipe.java @@ -33,8 +33,8 @@ import thedarkcolour.exdeorum.registry.ERecipeSerializers; import thedarkcolour.exdeorum.registry.ERecipeTypes; public class HammerRecipe extends ProbabilityRecipe { - private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> ProbabilityRecipe.commonFields(instance).apply(instance, HammerRecipe::new)); - private static final StreamCodec STREAM_CODEC = StreamCodec.composite( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> ProbabilityRecipe.commonFields(instance).apply(instance, HammerRecipe::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( Ingredient.CONTENTS_STREAM_CODEC, HammerRecipe::ingredient, ItemStack.STREAM_CODEC, HammerRecipe::result, CodecUtil.NUMBER_PROVIDER_CODEC, HammerRecipe::resultAmount, @@ -45,24 +45,13 @@ public class HammerRecipe extends ProbabilityRecipe { } @Override - public RecipeSerializer getSerializer() { + public RecipeSerializer getSerializer() { return ERecipeSerializers.HAMMER.get(); } @Override - public RecipeType getType() { + public RecipeType getType() { return ERecipeTypes.HAMMER.get(); } - public static class Serializer implements RecipeSerializer { - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public StreamCodec streamCodec() { - return STREAM_CODEC; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/hammer/package-info.java b/src/main/java/thedarkcolour/exdeorum/recipe/hammer/package-info.java index 1ba32f86..82212f1f 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/hammer/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/hammer/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.recipe.hammer; diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/package-info.java b/src/main/java/thedarkcolour/exdeorum/recipe/package-info.java index 70acc42f..f6236e31 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.recipe; diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/sieve/CompressedSieveRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/sieve/CompressedSieveRecipe.java index ee875c1f..9151d522 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/sieve/CompressedSieveRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/sieve/CompressedSieveRecipe.java @@ -31,32 +31,21 @@ import thedarkcolour.exdeorum.registry.ERecipeSerializers; import thedarkcolour.exdeorum.registry.ERecipeTypes; public class CompressedSieveRecipe extends SieveRecipe { - private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> commonSieveFields(instance).apply(instance, CompressedSieveRecipe::new)); - private static final StreamCodec STREAM_CODEC = sieveStreamCodec(CompressedSieveRecipe::new); + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> commonSieveFields(instance).apply(instance, CompressedSieveRecipe::new)); + public static final StreamCodec STREAM_CODEC = sieveStreamCodec(CompressedSieveRecipe::new); public CompressedSieveRecipe(Ingredient ingredient, ItemStack result, NumberProvider resultAmount, Ingredient mesh, boolean byHandOnly) { super(ingredient, result, resultAmount, mesh, byHandOnly); } @Override - public RecipeSerializer getSerializer() { + public RecipeSerializer getSerializer() { return ERecipeSerializers.COMPRESSED_SIEVE.get(); } @Override - public RecipeType getType() { + public RecipeType getType() { return ERecipeTypes.COMPRESSED_SIEVE.get(); } - public static class Serializer implements RecipeSerializer { - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public StreamCodec streamCodec() { - return STREAM_CODEC; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/sieve/SieveRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/sieve/SieveRecipe.java index 87986945..447b01e0 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/sieve/SieveRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/sieve/SieveRecipe.java @@ -37,8 +37,8 @@ import thedarkcolour.exdeorum.registry.ERecipeSerializers; import thedarkcolour.exdeorum.registry.ERecipeTypes; public class SieveRecipe extends ProbabilityRecipe { - private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> commonSieveFields(instance).apply(instance, SieveRecipe::new)); - private static final StreamCodec STREAM_CODEC = sieveStreamCodec(SieveRecipe::new); + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> commonSieveFields(instance).apply(instance, SieveRecipe::new)); + public static final StreamCodec STREAM_CODEC = sieveStreamCodec(SieveRecipe::new); static StreamCodec sieveStreamCodec(Function5 factory) { return StreamCodec.composite( @@ -54,7 +54,7 @@ public class SieveRecipe extends ProbabilityRecipe { protected static Products.P5, Ingredient, ItemStack, NumberProvider, Ingredient, Boolean> commonSieveFields(RecordCodecBuilder.Instance instance) { return commonFields(instance).and( instance.group( - Ingredient.CODEC_NONEMPTY.fieldOf("mesh").forGetter(SieveRecipe::mesh), + Ingredient.CODEC.fieldOf("mesh").forGetter(SieveRecipe::mesh), Codec.BOOL.optionalFieldOf("by_hand_only", false).forGetter(SieveRecipe::byHandOnly) )); } @@ -78,24 +78,13 @@ public class SieveRecipe extends ProbabilityRecipe { } @Override - public RecipeSerializer getSerializer() { + public RecipeSerializer getSerializer() { return ERecipeSerializers.SIEVE.get(); } @Override - public RecipeType getType() { + public RecipeType getType() { return ERecipeTypes.SIEVE.get(); } - public static class Serializer implements RecipeSerializer { - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public StreamCodec streamCodec() { - return STREAM_CODEC; - } - } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/sieve/package-info.java b/src/main/java/thedarkcolour/exdeorum/recipe/sieve/package-info.java index 6cb1746f..252cc575 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/sieve/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/sieve/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.recipe.sieve; diff --git a/src/main/java/thedarkcolour/exdeorum/registry/EItems.java b/src/main/java/thedarkcolour/exdeorum/registry/EItems.java index 162bea00..4b7d9f5d 100644 --- a/src/main/java/thedarkcolour/exdeorum/registry/EItems.java +++ b/src/main/java/thedarkcolour/exdeorum/registry/EItems.java @@ -63,20 +63,20 @@ public class EItems { public static final DeferredItem NETHERITE_MESH = ITEMS.register("netherite_mesh", () -> new MeshItem(props().stacksTo(16))); // Hammers - public static final DeferredItem WOODEN_HAMMER = ITEMS.register("wooden_hammer", () -> new HammerItem(Tiers.WOOD, props())); - public static final DeferredItem STONE_HAMMER = ITEMS.register("stone_hammer", () -> new HammerItem(Tiers.STONE, props())); - public static final DeferredItem GOLDEN_HAMMER = ITEMS.register("golden_hammer", () -> new HammerItem(Tiers.GOLD, props())); - public static final DeferredItem IRON_HAMMER = ITEMS.register("iron_hammer", () -> new HammerItem(Tiers.IRON, props())); - public static final DeferredItem DIAMOND_HAMMER = ITEMS.register("diamond_hammer", () -> new HammerItem(Tiers.DIAMOND, props())); - public static final DeferredItem NETHERITE_HAMMER = ITEMS.register("netherite_hammer", () -> new HammerItem(Tiers.NETHERITE, props())); + public static final DeferredItem WOODEN_HAMMER = ITEMS.register("wooden_hammer", () -> new HammerItem(ToolMaterial.WOOD, props())); + public static final DeferredItem STONE_HAMMER = ITEMS.register("stone_hammer", () -> new HammerItem(ToolMaterial.STONE, props())); + public static final DeferredItem GOLDEN_HAMMER = ITEMS.register("golden_hammer", () -> new HammerItem(ToolMaterial.GOLD, props())); + public static final DeferredItem IRON_HAMMER = ITEMS.register("iron_hammer", () -> new HammerItem(ToolMaterial.IRON, props())); + public static final DeferredItem DIAMOND_HAMMER = ITEMS.register("diamond_hammer", () -> new HammerItem(ToolMaterial.DIAMOND, props())); + public static final DeferredItem NETHERITE_HAMMER = ITEMS.register("netherite_hammer", () -> new HammerItem(ToolMaterial.NETHERITE, props())); // Compressed Hammers - public static final DeferredItem COMPRESSED_WOODEN_HAMMER = ITEMS.register("compressed_wooden_hammer", () -> new HammerItem(Tiers.WOOD, props())); - public static final DeferredItem COMPRESSED_STONE_HAMMER = ITEMS.register("compressed_stone_hammer", () -> new HammerItem(Tiers.STONE, props())); - public static final DeferredItem COMPRESSED_GOLDEN_HAMMER = ITEMS.register("compressed_golden_hammer", () -> new HammerItem(Tiers.GOLD, props())); - public static final DeferredItem COMPRESSED_IRON_HAMMER = ITEMS.register("compressed_iron_hammer", () -> new HammerItem(Tiers.IRON, props())); - public static final DeferredItem COMPRESSED_DIAMOND_HAMMER = ITEMS.register("compressed_diamond_hammer", () -> new HammerItem(Tiers.DIAMOND, props())); - public static final DeferredItem COMPRESSED_NETHERITE_HAMMER = ITEMS.register("compressed_netherite_hammer", () -> new HammerItem(Tiers.NETHERITE, props())); + public static final DeferredItem COMPRESSED_WOODEN_HAMMER = ITEMS.register("compressed_wooden_hammer", () -> new HammerItem(ToolMaterial.WOOD, props())); + public static final DeferredItem COMPRESSED_STONE_HAMMER = ITEMS.register("compressed_stone_hammer", () -> new HammerItem(ToolMaterial.STONE, props())); + public static final DeferredItem COMPRESSED_GOLDEN_HAMMER = ITEMS.register("compressed_golden_hammer", () -> new HammerItem(ToolMaterial.GOLD, props())); + public static final DeferredItem COMPRESSED_IRON_HAMMER = ITEMS.register("compressed_iron_hammer", () -> new HammerItem(ToolMaterial.IRON, props())); + public static final DeferredItem COMPRESSED_DIAMOND_HAMMER = ITEMS.register("compressed_diamond_hammer", () -> new HammerItem(ToolMaterial.DIAMOND, props())); + public static final DeferredItem COMPRESSED_NETHERITE_HAMMER = ITEMS.register("compressed_netherite_hammer", () -> new HammerItem(ToolMaterial.NETHERITE, props())); // Ore Chunks public static final DeferredItem IRON_ORE_CHUNK = registerSimpleItem("iron_ore_chunk"); diff --git a/src/main/java/thedarkcolour/exdeorum/registry/ELootFunctions.java b/src/main/java/thedarkcolour/exdeorum/registry/ELootFunctions.java index ff969f64..5ea29307 100644 --- a/src/main/java/thedarkcolour/exdeorum/registry/ELootFunctions.java +++ b/src/main/java/thedarkcolour/exdeorum/registry/ELootFunctions.java @@ -18,15 +18,16 @@ package thedarkcolour.exdeorum.registry; +import com.mojang.serialization.MapCodec; import net.minecraft.core.registries.Registries; -import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; +import net.minecraft.world.level.storage.loot.functions.LootItemFunction; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; import thedarkcolour.exdeorum.ExDeorum; import thedarkcolour.exdeorum.loot.MachineLootFunction; public class ELootFunctions { - public static final DeferredRegister> LOOT_FUNCTIONS = DeferredRegister.create(Registries.LOOT_FUNCTION_TYPE, ExDeorum.ID); + public static final DeferredRegister> LOOT_FUNCTIONS = DeferredRegister.create(Registries.LOOT_FUNCTION_TYPE, ExDeorum.ID); - public static final DeferredHolder, LootItemFunctionType> MACHINE = LOOT_FUNCTIONS.register("machine", () -> new LootItemFunctionType<>(MachineLootFunction.CODEC)); + public static final DeferredHolder, MapCodec> MACHINE = LOOT_FUNCTIONS.register("machine", () -> MachineLootFunction.CODEC); } diff --git a/src/main/java/thedarkcolour/exdeorum/registry/ENumberProviders.java b/src/main/java/thedarkcolour/exdeorum/registry/ENumberProviders.java index 3f51ea29..02fb1592 100644 --- a/src/main/java/thedarkcolour/exdeorum/registry/ENumberProviders.java +++ b/src/main/java/thedarkcolour/exdeorum/registry/ENumberProviders.java @@ -18,15 +18,16 @@ package thedarkcolour.exdeorum.registry; +import com.mojang.serialization.MapCodec; import net.minecraft.core.registries.Registries; -import net.minecraft.world.level.storage.loot.providers.number.LootNumberProviderType; +import net.minecraft.world.level.storage.loot.providers.number.NumberProvider; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; import thedarkcolour.exdeorum.ExDeorum; import thedarkcolour.exdeorum.loot.SummationGenerator; public class ENumberProviders { - public static final DeferredRegister NUMBER_PROVIDERS = DeferredRegister.create(Registries.LOOT_NUMBER_PROVIDER_TYPE, ExDeorum.ID); + public static final DeferredRegister> NUMBER_PROVIDERS = DeferredRegister.create(Registries.LOOT_NUMBER_PROVIDER_TYPE, ExDeorum.ID); - public static final DeferredHolder SUMMATION = NUMBER_PROVIDERS.register("summation", () -> new LootNumberProviderType(SummationGenerator.CODEC)); + public static final DeferredHolder, MapCodec> SUMMATION = NUMBER_PROVIDERS.register("summation", () -> SummationGenerator.CODEC); } diff --git a/src/main/java/thedarkcolour/exdeorum/registry/ERecipeSerializers.java b/src/main/java/thedarkcolour/exdeorum/registry/ERecipeSerializers.java index a9c85af9..2d3ddebb 100644 --- a/src/main/java/thedarkcolour/exdeorum/registry/ERecipeSerializers.java +++ b/src/main/java/thedarkcolour/exdeorum/registry/ERecipeSerializers.java @@ -39,21 +39,21 @@ import thedarkcolour.exdeorum.recipe.sieve.SieveRecipe; public class ERecipeSerializers { public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(Registries.RECIPE_SERIALIZER, ExDeorum.ID); - public static final DeferredHolder, RecipeSerializer> BARREL_COMPOST = RECIPE_SERIALIZERS.register("barrel_compost", BarrelCompostRecipe.Serializer::new); - public static final DeferredHolder, RecipeSerializer> BARREL_MIXING = RECIPE_SERIALIZERS.register("barrel_mixing", BarrelMixingRecipe.Serializer::new); - public static final DeferredHolder, RecipeSerializer> BARREL_FLUID_MIXING = RECIPE_SERIALIZERS.register("barrel_fluid_mixing", BarrelFluidMixingRecipe.Serializer::new); - public static final DeferredHolder, RecipeSerializer> BARREL_FLUID_TRANSFORMATION = RECIPE_SERIALIZERS.register("barrel_fluid_transformation", FluidTransformationRecipe.Serializer::new); + public static final DeferredHolder, RecipeSerializer> BARREL_COMPOST = RECIPE_SERIALIZERS.register("barrel_compost", () -> new RecipeSerializer<>(BarrelCompostRecipe.CODEC, BarrelCompostRecipe.STREAM_CODEC)); + public static final DeferredHolder, RecipeSerializer> BARREL_MIXING = RECIPE_SERIALIZERS.register("barrel_mixing", () -> new RecipeSerializer<>(BarrelMixingRecipe.CODEC, BarrelMixingRecipe.STREAM_CODEC)); + public static final DeferredHolder, RecipeSerializer> BARREL_FLUID_MIXING = RECIPE_SERIALIZERS.register("barrel_fluid_mixing", () -> new RecipeSerializer<>(BarrelFluidMixingRecipe.CODEC, BarrelFluidMixingRecipe.STREAM_CODEC)); + public static final DeferredHolder, RecipeSerializer> BARREL_FLUID_TRANSFORMATION = RECIPE_SERIALIZERS.register("barrel_fluid_transformation", () -> new RecipeSerializer<>(FluidTransformationRecipe.CODEC, FluidTransformationRecipe.STREAM_CODEC)); - public static final DeferredHolder, RecipeSerializer> HAMMER = RECIPE_SERIALIZERS.register("hammer", HammerRecipe.Serializer::new); - public static final DeferredHolder, RecipeSerializer> COMPRESSED_HAMMER = RECIPE_SERIALIZERS.register("compressed_hammer", CompressedHammerRecipe.Serializer::new); - public static final DeferredHolder, RecipeSerializer> CROOK = RECIPE_SERIALIZERS.register("crook", CrookRecipe.Serializer::new); - public static final DeferredHolder, RecipeSerializer> CRUCIBLE_HEAT_SOURCE = RECIPE_SERIALIZERS.register("crucible_heat_source", CrucibleHeatRecipe.Serializer::new); + public static final DeferredHolder, RecipeSerializer> HAMMER = RECIPE_SERIALIZERS.register("hammer", () -> new RecipeSerializer<>(HammerRecipe.CODEC, HammerRecipe.STREAM_CODEC)); + public static final DeferredHolder, RecipeSerializer> COMPRESSED_HAMMER = RECIPE_SERIALIZERS.register("compressed_hammer", () -> new RecipeSerializer<>(CompressedHammerRecipe.CODEC, CompressedHammerRecipe.STREAM_CODEC)); + public static final DeferredHolder, RecipeSerializer> CROOK = RECIPE_SERIALIZERS.register("crook", () -> new RecipeSerializer<>(CrookRecipe.CODEC, CrookRecipe.STREAM_CODEC)); + public static final DeferredHolder, RecipeSerializer> CRUCIBLE_HEAT_SOURCE = RECIPE_SERIALIZERS.register("crucible_heat_source", () -> new RecipeSerializer<>(CrucibleHeatRecipe.CODEC, CrucibleHeatRecipe.STREAM_CODEC)); - public static final DeferredHolder, RecipeSerializer> LAVA_CRUCIBLE = RECIPE_SERIALIZERS.register("lava_crucible", () -> new CrucibleRecipe.Serializer<>(CrucibleRecipe.Lava.CODEC, CrucibleRecipe.Lava.STREAM_CODEC)); - public static final DeferredHolder, RecipeSerializer> WATER_CRUCIBLE = RECIPE_SERIALIZERS.register("water_crucible", () -> new CrucibleRecipe.Serializer<>(CrucibleRecipe.Water.CODEC, CrucibleRecipe.Water.STREAM_CODEC)); + public static final DeferredHolder, RecipeSerializer> LAVA_CRUCIBLE = RECIPE_SERIALIZERS.register("lava_crucible", () -> new RecipeSerializer<>(CrucibleRecipe.Lava.CODEC, CrucibleRecipe.Lava.STREAM_CODEC)); + public static final DeferredHolder, RecipeSerializer> WATER_CRUCIBLE = RECIPE_SERIALIZERS.register("water_crucible", () -> new RecipeSerializer<>(CrucibleRecipe.Water.CODEC, CrucibleRecipe.Water.STREAM_CODEC)); - public static final DeferredHolder, RecipeSerializer> SIEVE = RECIPE_SERIALIZERS.register("sieve", SieveRecipe.Serializer::new); - public static final DeferredHolder, RecipeSerializer> COMPRESSED_SIEVE = RECIPE_SERIALIZERS.register("compressed_sieve", CompressedSieveRecipe.Serializer::new); + public static final DeferredHolder, RecipeSerializer> SIEVE = RECIPE_SERIALIZERS.register("sieve", () -> new RecipeSerializer<>(SieveRecipe.CODEC, SieveRecipe.STREAM_CODEC)); + public static final DeferredHolder, RecipeSerializer> COMPRESSED_SIEVE = RECIPE_SERIALIZERS.register("compressed_sieve", () -> new RecipeSerializer<>(CompressedSieveRecipe.CODEC, CompressedSieveRecipe.STREAM_CODEC)); - public static final DeferredHolder, RecipeSerializer> ORE_CHUNK = RECIPE_SERIALIZERS.register("ore_chunk", OreChunkRecipe.Serializer::new); + public static final DeferredHolder, RecipeSerializer> ORE_CHUNK = RECIPE_SERIALIZERS.register("ore_chunk", () -> new RecipeSerializer<>(OreChunkRecipe.CODEC, OreChunkRecipe.STREAM_CODEC)); } diff --git a/src/main/java/thedarkcolour/exdeorum/registry/package-info.java b/src/main/java/thedarkcolour/exdeorum/registry/package-info.java index 45938215..58926f06 100644 --- a/src/main/java/thedarkcolour/exdeorum/registry/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/registry/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.registry; diff --git a/src/main/java/thedarkcolour/exdeorum/tag/EBiomeTags.java b/src/main/java/thedarkcolour/exdeorum/tag/EBiomeTags.java index c961abae..0705b8bd 100644 --- a/src/main/java/thedarkcolour/exdeorum/tag/EBiomeTags.java +++ b/src/main/java/thedarkcolour/exdeorum/tag/EBiomeTags.java @@ -20,7 +20,7 @@ package thedarkcolour.exdeorum.tag; import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.features.TreeFeatures; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.tags.TagKey; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; @@ -45,17 +45,17 @@ public class EBiomeTags { addTreeTag("dark_oak_tree_biomes", TreeFeatures.DARK_OAK.location()); addTreeTag("mangrove_tree_biomes", TreeFeatures.MANGROVE.location()); // Bop tags - addTreeTag("flowering_oak_tree_biomes", ResourceLocation.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "flowering_oak_tree_bees")); - addTreeTag("mahogany_tree_biomes", ResourceLocation.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "mahogany_tree")); - addTreeTag("jacaranda_tree_biomes", ResourceLocation.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "jacaranda_tree_bees")); - addTreeTag("palm_tree_biomes", ResourceLocation.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "palm_tree")); - addTreeTag("willow_tree_biomes", ResourceLocation.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "willow_tree")); - addTreeTag("dead_tree_biomes", ResourceLocation.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "dead_tree_wasteland")); - addTreeTag("magic_tree_biomes", ResourceLocation.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "magic_tree")); - addTreeTag("umbran_tree_biomes", ResourceLocation.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "umbran_tree")); + addTreeTag("flowering_oak_tree_biomes", Identifier.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "flowering_oak_tree_bees")); + addTreeTag("mahogany_tree_biomes", Identifier.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "mahogany_tree")); + addTreeTag("jacaranda_tree_biomes", Identifier.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "jacaranda_tree_bees")); + addTreeTag("palm_tree_biomes", Identifier.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "palm_tree")); + addTreeTag("willow_tree_biomes", Identifier.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "willow_tree")); + addTreeTag("dead_tree_biomes", Identifier.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "dead_tree_wasteland")); + addTreeTag("magic_tree_biomes", Identifier.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "magic_tree")); + addTreeTag("umbran_tree_biomes", Identifier.fromNamespaceAndPath(ModIds.BIOMES_O_PLENTY, "umbran_tree")); } - private static void addTreeTag(String tagName, ResourceLocation id) { + private static void addTreeTag(String tagName, Identifier id) { var tag = tag(tagName); if (TREE_TAGS.put(tag, DeferredHolder.create(Registries.CONFIGURED_FEATURE, id)) != null) { throw new IllegalStateException("Already added a tree tag under " + tag); diff --git a/src/main/java/thedarkcolour/exdeorum/tag/EItemTags.java b/src/main/java/thedarkcolour/exdeorum/tag/EItemTags.java index 408f4309..ac4c32af 100644 --- a/src/main/java/thedarkcolour/exdeorum/tag/EItemTags.java +++ b/src/main/java/thedarkcolour/exdeorum/tag/EItemTags.java @@ -18,7 +18,7 @@ package thedarkcolour.exdeorum.tag; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; @@ -66,6 +66,6 @@ public class EItemTags { } public static TagKey commonTag(String name) { - return ItemTags.create(ResourceLocation.fromNamespaceAndPath("c", name)); + return ItemTags.create(Identifier.fromNamespaceAndPath("c", name)); } } diff --git a/src/main/java/thedarkcolour/exdeorum/tag/EStructureSetTags.java b/src/main/java/thedarkcolour/exdeorum/tag/EStructureSetTags.java index 788eadc6..c4d5e390 100644 --- a/src/main/java/thedarkcolour/exdeorum/tag/EStructureSetTags.java +++ b/src/main/java/thedarkcolour/exdeorum/tag/EStructureSetTags.java @@ -19,7 +19,7 @@ package thedarkcolour.exdeorum.tag; import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.tags.TagKey; import net.minecraft.world.level.levelgen.structure.StructureSet; import thedarkcolour.exdeorum.ExDeorum; diff --git a/src/main/java/thedarkcolour/exdeorum/tag/package-info.java b/src/main/java/thedarkcolour/exdeorum/tag/package-info.java index 55cd9145..37a803ce 100644 --- a/src/main/java/thedarkcolour/exdeorum/tag/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/tag/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.tag; diff --git a/src/main/java/thedarkcolour/exdeorum/voidworld/VoidChunkGenerator.java b/src/main/java/thedarkcolour/exdeorum/voidworld/VoidChunkGenerator.java index 32ca46ac..fbd9b938 100644 --- a/src/main/java/thedarkcolour/exdeorum/voidworld/VoidChunkGenerator.java +++ b/src/main/java/thedarkcolour/exdeorum/voidworld/VoidChunkGenerator.java @@ -23,7 +23,7 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.*; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.level.WorldGenRegion; import net.minecraft.tags.TagKey; import net.minecraft.world.level.LevelHeightAccessor; @@ -62,8 +62,8 @@ public class VoidChunkGenerator extends NoiseBasedChunkGenerator { super(biomeSource, settings); this.settings = settings; this.allowedStructureSets = allowedStructureSets; - this.generateNormal = (settings.is(ResourceLocation.parse("minecraft:end")) && !EConfig.COMMON.voidEndGeneration.get()) || (settings.is(ResourceLocation.parse("minecraft:nether")) && !EConfig.COMMON.voidNetherGeneration.get()); - this.allowBiomeDecoration = !settings.is(ResourceLocation.parse("minecraft:overworld")); + this.generateNormal = (settings.is(Identifier.parse("minecraft:end")) && !EConfig.COMMON.voidEndGeneration.get()) || (settings.is(Identifier.parse("minecraft:nether")) && !EConfig.COMMON.voidNetherGeneration.get()); + this.allowBiomeDecoration = !settings.is(Identifier.parse("minecraft:overworld")); } @Override @@ -72,9 +72,9 @@ public class VoidChunkGenerator extends NoiseBasedChunkGenerator { } @Override - public void applyCarvers(WorldGenRegion pLevel, long pSeed, RandomState pRandom, BiomeManager pBiomeManager, StructureManager pStructureManager, ChunkAccess pChunk, GenerationStep.Carving pStep) { + public void applyCarvers(WorldGenRegion pLevel, long pSeed, RandomState pRandom, BiomeManager pBiomeManager, StructureManager pStructureManager, ChunkAccess pChunk) { if (this.generateNormal) { - super.applyCarvers(pLevel, pSeed, pRandom, pBiomeManager, pStructureManager, pChunk, pStep); + super.applyCarvers(pLevel, pSeed, pRandom, pBiomeManager, pStructureManager, pChunk); } } diff --git a/src/main/java/thedarkcolour/exdeorum/voidworld/package-info.java b/src/main/java/thedarkcolour/exdeorum/voidworld/package-info.java index 70b49a2f..c38a93b8 100644 --- a/src/main/java/thedarkcolour/exdeorum/voidworld/package-info.java +++ b/src/main/java/thedarkcolour/exdeorum/voidworld/package-info.java @@ -16,6 +16,5 @@ * along with this program. If not, see . */ -@net.minecraft.MethodsReturnNonnullByDefault @javax.annotation.ParametersAreNonnullByDefault package thedarkcolour.exdeorum.voidworld;