diff --git a/AUTHORS b/AUTHORS index 70ab864b2..48411a59c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -7,3 +7,4 @@ Benjamin Plain (bplainia) Jacob Hayes (tigerbird1) Milan Damen (milandamen) Daniel Schmidt (Danielxs01) +Anthony/Angelina Michalek (Codetoil) \ No newline at end of file diff --git a/build.gradle b/build.gradle index 55ee450de..a21a58ad3 100644 --- a/build.gradle +++ b/build.gradle @@ -1,29 +1,10 @@ -buildscript { - repositories { - maven { url "https://maven.neoforged.net/releases" } - maven { url "https://plugins.gradle.org/m2/" } - maven { url 'https://repo.spongepowered.org/maven' } - mavenCentral() - } - dependencies { - classpath group: 'net.neoforged.gradle', name: 'userdev', version: '7.1.11' - classpath group: 'net.neoforged.gradle', name: 'common', version: '7.1.11' - classpath "com.gradleup.shadow:shadow-gradle-plugin:9.2.2" - } -} - -apply plugin: 'net.neoforged.gradle.userdev' -apply plugin: 'net.neoforged.gradle.common' -//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. -apply plugin: 'eclipse' -apply plugin: 'maven-publish' -apply plugin: 'com.gradleup.shadow' - -configurations { - shade - implementation.extendsFrom shade - minecraftLibrary - implementation.extendsFrom minecraftLibrary +plugins { + id 'java' + id 'idea' + id 'eclipse' + id 'maven-publish' + id 'net.minecraftforge.gradle' version '[7.0.23,8.0)' + id 'net.minecraftforge.jarjar' version '0.2.3' } java { @@ -32,97 +13,112 @@ java { repositories { maven { - url "https://cursemaven.com" + url = uri("https://cursemaven.com") } } -String umcVersion = "1.2.3" +String umcVersion = "1.3.0" if (!"release".equalsIgnoreCase(System.getProperty("target"))) { try { - umcVersion += "-" + 'git rev-parse --verify --short=7 HEAD'.execute().text.trim() - } catch (Exception ex) { + umcVersion += "-${(providers.exec { commandLine("git", "rev-parse", "--verify", "--short=7", "HEAD") }.standardOutput.asText.get() as String).substring(0, 7)}" + } catch (Exception ignored) { umcVersion += "-unknown" } } -version = "1.21.1-neoforge-" + umcVersion +version = "1.21.1-forge-" + umcVersion group = "cam72cam.universalmodcore" // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = "UniversalModCore" +base.archivesName = "UniversalModCore" + +println("version: ${version}") java.toolchain.languageVersion = JavaLanguageVersion.of(21) -println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) - -// Default run configurations. -// These can be tweaked, removed, or duplicated as needed. -runs { - // applies to all the run configs below - configureEach { - //Enable mixin-ed dependency in deobfuscated environment - systemProperty "mixin.env.remapRefMap", "true" - systemProperty "mixin.env.refMapRemappingFile", "${projectDir}/build/createSrgToMcp/output.srg" - - systemProperty "mixin.debug.verbose", "true" - systemProperty "mixin.debug.export", "true" - // Recommended logging data for a userdev environment - // The markers can be added/remove as needed separated by commas. - // "SCAN": For mods scan. - // "REGISTRIES": For firing of registry events. - // "REGISTRYDUMP": For getting the contents of all registries. - systemProperty 'forge.logging.markers', 'REGISTRIES' - - // Recommended logging level for the console - // You can set various levels here. - // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels - systemProperty 'forge.logging.console.level', 'debug' - - dependencies { - runtime project.configurations.minecraftLibrary +println("Java: ${providers.systemProperty("java.version").get()}, " + + "JVM: ${providers.systemProperty("java.vm.version").get()} (${providers.systemProperty("java.vendor").get()}), " + + "Arch: ${providers.systemProperty("os.arch").get()}") + +minecraft { + mappings channel: "official", version: "1.21.1" + accessTransformer = true + + runs { + // applies to all the run configs below + configureEach { + workingDir.convention layout.projectDirectory.dir('runs') + // Mixin requires either specifying the config via command line, or in the Manifest + args "--mixin.config=mixins.feat.universalmodcore.json", "--mixin.config=mixins.fix.universalmodcore.json" + + systemProperty "mixin.debug.verbose", "true" + systemProperty "mixin.debug.export", "true" + // Recommended logging data for a userdev environment + // The markers can be added/remove as needed separated by commas. + // "SCAN": For mods scan. + // "REGISTRIES": For firing of registry events. + // "REGISTRYDUMP": For getting the contents of all registries. + systemProperty 'forge.logging.markers', 'REGISTRIES' + + // Recommended logging level for the console + // You can set various levels here. + // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels + systemProperty 'forge.logging.console.level', 'debug' } - modSource project.sourceSets.main - } - - client { - // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. - systemProperty 'neoforge.enabledGameTestNamespaces', 'universalmodcore' - } + register('client') { + // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. + systemProperty 'forge.enabledGameTestNamespaces', 'universalmodcore' + } - server { - systemProperty 'neoforge.enabledGameTestNamespaces', 'universalmodcore' - argument '--nogui' - } + register('server') { + systemProperty 'forge.enabledGameTestNamespaces', 'universalmodcore' + args '--nogui' + } - // This run config launches GameTestServer and runs all registered gametests, then exits. - // By default, the server will crash when no gametests are provided. - // The gametest system is also enabled by default for other run configs under the /test command. - gameTestServer { - systemProperty 'neoforge.enabledGameTestNamespaces', 'universalmodcore' - } + // This run config launches GameTestServer and runs all registered gametests, then exits. + // By default, the server will crash when no gametests are provided. + // The gametest system is also enabled by default for other run configs under the /test command. + register('gameTestServer') { + systemProperty 'forge.enabledGameTestNamespaces', 'universalmodcore' + } - data { - // example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it - // workingDirectory project.file('run-data') + register('data') { + // example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it + // workingDirectory project.file('run-data') - // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. - arguments.addAll '--mod', 'universalmodcore', '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() + // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. + args '--mod', 'universalmodcore', '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() + } } } -accessTransformers { - file 'src/main/resources/META-INF/accesstransformer.cfg' -} +sourceSets.main.resources { srcDir layout.projectDirectory.dir('src/generated/resources') } -repositories { - mavenCentral() +// This methods registers jarJar for the default jar task. +// The closure allows you to configure the task, instead of needing to do this: +// tasks.named('jarJar', net.minecraftforge.jarjar.gradle.JarJar) +jarJar.register() { + archiveClassifier = null } -sourceSets.main.resources { srcDir 'src/generated/resources' } - repositories { - maven { url = "https://repo.spongepowered.org/maven" } + minecraft.mavenizer(it) + maven fg.forgeMaven + maven fg.minecraftLibsMaven + exclusiveContent { + forRepository { + maven { + name = 'Sponge' + url = 'https://repo.spongepowered.org/repository/maven-public' + } + } + filter { + includeGroupAndSubgroups('org.spongepowered') + } + } + mavenCentral() + mavenLocal() } dependencies { - implementation "net.neoforged:neoforge:21.1.216" + implementation minecraft.dependency("net.minecraftforge:forge:1.21.1-52.1.14") // you may put jars on which you depend on in ./libs // or you may define them like so.. //compile "some.group:artifact:version:classifier" @@ -143,14 +139,28 @@ dependencies { // for more info... // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html // http://www.gradle.org/docs/current/userguide/dependency_management.html -// annotationProcessor('org.spongepowered:mixin:0.8.3:processor') -// annotationProcessor('io.github.llamalad7:mixinextras-common:0.5.0') + compileOnly(annotationProcessor('io.github.llamalad7:mixinextras-common:0.5.0')) + implementation(jarJar('io.github.llamalad7:mixinextras-forge:0.5.0')) { + jarJar.configure(it) { + module { + group = 'io.github.llamalad7' + name = 'mixinextras' + } + range = "[0.5.0,)" + } + } - //testImplementation ('junit:junit:4.13') - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.2' - minecraftLibrary(shade group: 'javax.vecmath', name: 'vecmath', version: '1.5.2') -// implementation(shade group: 'at.yawk.lz4', name: 'lz4-java', version: '1.10.2') + implementation(jarJar('javax.vecmath:vecmath:1.5.2')) { + jarJar.configure(it) { + module { + group = 'javax.vecmath' + name = 'vecmath' + } + range = "[1.5.2,)" + } + } } repositories { @@ -167,31 +177,8 @@ dependencies { attributesSchema { attribute(mappingsAttribute) } - - //Iris - implementation "curse.maven:sodium-394468:6382651" - implementation "curse.maven:irisshaders-455508:6661598" - - //Lamb Dynamic Lights - compileOnly("dev.lambdaurora.lambdynamiclights:lambdynamiclights-api:4.8.7+1.21.1") { - attributes { - attribute(mappingsAttribute, "mojmap") - } - } - runtimeOnly "curse.maven:lambdynamiclights-393442:7306458" } -//mixin { -// add sourceSets.main, 'mixins.universalmodcore.refmap.json' -// -// config 'mixins.universalmodcore.json' -// -// //Dev environment setup -// debug.verbose = true -// debug.export = true -// dumpTargetOnFailure = true -//} - jar { archiveClassifier = 'slim' manifest { @@ -202,48 +189,25 @@ jar { "Implementation-Title": project.name, "Implementation-Version": umcVersion, "Implementation-Vendor" :"", - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") + "MixinConfigs" : "mixins.feat.universalmodcore.json,mixins.fix.universalmodcore.json" ]) } } -//No need in Neoforge -//jar.finalizedBy('reobfJar') - -shadowJar { - archiveClassifier = '' - configurations = [project.configurations.shade] - relocate 'javax.vecmath', "${project.group}.shade.javax.vecmath" - //Don't do this -// relocate 'org.spongepowered', "${project.group}.shade.org.spongepowered" - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - mergeServiceFiles() -// finalizedBy 'reobfShadowJar' -} - -assemble.dependsOn shadowJar - -//reobf { -// shadowJar {} -//} - test { useJUnit() maxHeapSize = '1G' } publishing { - publications { - mavenJava(MavenPublication) { - artifact jar - artifact shadowJar - artifact sourcesJar - artifactId archivesBaseName - } + publications.register('mavenJava', MavenPublication) { + artifact tasks.named("jar") + artifact tasks.named("jarJar") + artifact tasks.named("sourcesJar") } repositories { maven { - url "sftp://teamopenindustry.cc:22/var/www/html/maven/" + url = uri("sftp://teamopenindustry.cc:22/var/www/html/maven/") credentials { username = "mavenci" password = System.getenv("MAVENCI_PASS") @@ -264,3 +228,19 @@ tasks.register('showBuildInfo') { } publish.finalizedBy showBuildInfo + +// IntelliJ no longer downloads javadocs and sources by default, this tells Gradle to force IntelliJ to do it. +idea.module { downloadJavadoc = downloadSources = true } + +eclipse { + // Eclipse no longer downloads javadocs and sources by default, this tells Gradle to force Eclipse to do it. + classpath { downloadJavadoc = downloadSources = true } + + // NOTE: ForgeGradle 7 does not yet support Eclipse run configurations + // Run everytime eclipse builds the code + //autoBuildTasks genEclipseRuns + // Run when importing the project + //synchronizationTasks 'genEclipseRuns' +} + +// NOTE: Merging of source sets is now controlled by the property 'net.minecraftforge.gradle.merge-source-sets' diff --git a/gradle.properties b/gradle.properties index 7d9694b67..b1828365f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,9 @@ -# Sets default memory used for gradle commands. Can be overridden by user or command line properties. -# This is required to provide enough memory for the Minecraft decompilation process. -org.gradle.jvmargs=-Xmx3G -# Forge why you so broken??? -org.gradle.daemon=false +org.gradle.caching=true +org.gradle.parallel=true +org.gradle.configureondemand=true + +org.gradle.configuration-cache=true +org.gradle.configuration-cache.parallel=true +org.gradle.configuration-cache.problems=warn + +net.minecraftforge.gradle.merge-source-sets=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1132f38a5..b13bd40f4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip diff --git a/settings.gradle b/settings.gradle index e69de29bb..3e187fe5a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -0,0 +1,3 @@ +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' +} \ No newline at end of file diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index 5ccbdf1db..9a5ff7803 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -16,21 +16,22 @@ import java.util.*; import net.minecraft.util.Unit; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; -import net.neoforged.fml.event.lifecycle.FMLLoadCompleteEvent; -import net.neoforged.fml.event.lifecycle.InterModEnqueueEvent; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.fml.loading.FMLLoader; -import net.neoforged.fml.loading.FMLPaths; -import net.neoforged.neoforge.common.CreativeModeTabRegistry; -import net.neoforged.neoforge.common.NeoForge; -import net.neoforged.neoforge.data.loading.DatagenModLoader; -import net.neoforged.neoforge.event.RegisterCommandsEvent; -import net.neoforged.neoforge.event.server.ServerStartedEvent; -import net.neoforged.neoforge.event.server.ServerStartingEvent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.fml.loading.FMLLoader; +import net.minecraftforge.fml.loading.FMLPaths; +import net.minecraftforge.common.CreativeModeTabRegistry; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.data.loading.DatagenModLoader; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.server.ServerStartedEvent; +import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraft.resources.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -58,11 +59,11 @@ import java.io.IOException; /** UMC Mod, do not touch... */ -@net.neoforged.fml.common.Mod(ModCore.MODID) +@net.minecraftforge.fml.common.Mod(ModCore.MODID) public class ModCore { public static final String MODID = "universalmodcore"; public static final String NAME = "UniversalModCore"; - public static final String VERSION = "1.2.3"; + public static final String VERSION = "1.3.0"; public static ModCore instance; public static boolean hasResources; private static boolean isInReload; @@ -78,9 +79,10 @@ public static void register(Mod ctr) { } /** Called during Mod Construction phase */ - public ModCore(IEventBus modEventBus, Dist dist) { + public ModCore(FMLJavaModLoadingContext context) { System.out.println("Welcome to UniversalModCore!"); instance = this; + IEventBus modEventBus = context.getModEventBus(); ModCore.register(new Internal()); proxy.setup(); @@ -92,7 +94,7 @@ public ModCore(IEventBus modEventBus, Dist dist) { //FMLJavaModLoadingContext.get().getModEventBus().addListener(this::serverStarted); CommonEvents.Item.CREATIVE_TAB.register(modEventBus); - NeoForge.EVENT_BUS.register(this); + MinecraftForge.EVENT_BUS.register(this); } /** INIT Phase (Forge) */ @@ -449,6 +451,10 @@ public static int mcVersion() { return 12101; } + public static String semanticVersion() { + return "1.20.1-forge"; + } + public static boolean isDevelopmentEnvironment() { return !FMLLoader.isProduction(); } diff --git a/src/main/java/cam72cam/mod/block/BlockEntity.java b/src/main/java/cam72cam/mod/block/BlockEntity.java index 8c3f0232f..d4786a4af 100644 --- a/src/main/java/cam72cam/mod/block/BlockEntity.java +++ b/src/main/java/cam72cam/mod/block/BlockEntity.java @@ -11,8 +11,8 @@ import cam72cam.mod.math.Vec3i; import cam72cam.mod.resource.Identifier; import cam72cam.mod.serialization.SerializationException; -import cam72cam.mod.serialization.TagCompound; import cam72cam.mod.util.Facing; +import cam72cam.mod.serialization.TagCompound; import cam72cam.mod.world.World; /** diff --git a/src/main/java/cam72cam/mod/block/BlockType.java b/src/main/java/cam72cam/mod/block/BlockType.java index cd464d430..b103dd8ed 100644 --- a/src/main/java/cam72cam/mod/block/BlockType.java +++ b/src/main/java/cam72cam/mod/block/BlockType.java @@ -33,7 +33,6 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.neoforge.capabilities.Capabilities; import javax.annotation.Nullable; @@ -69,33 +68,6 @@ public BlockType(String modID, String name) { internal = getBlock(); helper.register(id.internal, internal); }); - - CommonEvents.Block.REGISTER_CAPABILITY.subscribe(event -> { - event.registerBlock(Capabilities.ItemHandler.BLOCK, - (level, pos, state, be, side) -> { - if (be instanceof TileEntity tile) { - return tile.getItemHandler(side); - } - return null; - }, - internal); - event.registerBlock(Capabilities.FluidHandler.BLOCK, - (level, pos, state, be, side) -> { - if (be instanceof TileEntity tile) { - return tile.getFluidHandler(side); - } - return null; - }, - internal); - event.registerBlock(Capabilities.EnergyStorage.BLOCK, - (level, pos, state, be, side) -> { - if (be instanceof TileEntity tile) { - return tile.getEnergyStorage(side); - } - return null; - }, - internal); - }); } /** Override to provide a custom Minecraft Block implementation (ex: support tile entities) */ diff --git a/src/main/java/cam72cam/mod/block/tile/TileEntity.java b/src/main/java/cam72cam/mod/block/tile/TileEntity.java index 950f9633f..e68355ee1 100644 --- a/src/main/java/cam72cam/mod/block/tile/TileEntity.java +++ b/src/main/java/cam72cam/mod/block/tile/TileEntity.java @@ -20,13 +20,11 @@ import cam72cam.mod.world.World; import com.google.common.collect.HashBiMap; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.Connection; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -35,16 +33,16 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.phys.AABB; +import net.minecraftforge.client.model.data.ModelData; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.neoforge.capabilities.BlockCapability; -import net.neoforged.neoforge.client.model.data.ModelData; -import net.neoforged.neoforge.client.model.data.ModelProperty; -import net.neoforged.neoforge.energy.IEnergyStorage; -import net.neoforged.neoforge.fluids.FluidStack; -import net.neoforged.neoforge.fluids.capability.IFluidHandler; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.IItemHandlerModifiable; +import net.minecraftforge.client.model.data.ModelProperty; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.IItemHandlerModifiable; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -64,8 +62,6 @@ * @see BlockEntity */ public class TileEntity extends net.minecraft.world.level.block.entity.BlockEntity { - public static final AABB INFINITE_EXTENT_AABB = new net.minecraft.world.phys.AABB(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY); - private static final Map> types = HashBiMap.create(); // InstanceId -> Supplier mapping private static final Map> registry = HashBiMap.create(); @@ -166,7 +162,7 @@ public static void register(Supplier instance, Identifier id, Block BlockEntity example = instance.get(); // Force legacy registration -// example.supplier(id); + example.supplier(id); CommonEvents.Tile.REGISTER.subscribe(helper -> { BlockEntityType type = new BlockEntityType<>((pos, state) -> { @@ -328,16 +324,17 @@ public void setChanged() { public final SingleCache bbCache = new SingleCache<>(internal -> BoundingBox.from(internal).move(getBlockPos().getX(), getBlockPos().getY(), getBlockPos().getZ())); - - /* Moved to cam72cam.mod.render.BlockRender - @Override - public net.minecraft.world.phys.AABB getRenderBoundingBox() { - if (instance() != null) { - return bbCache.get(instance().getRenderBoundingBox()); - } - return INFINITE_EXTENT_AABB; - } - */ + /** + * @return Instance's bounding box + * @see BlockEntity + */ + @Override + public net.minecraft.world.phys.AABB getRenderBoundingBox() { + if (instance() != null) { + return bbCache.get(instance().getRenderBoundingBox()); + } + return INFINITE_EXTENT_AABB; + } /** * @return Instance's render distance @@ -349,160 +346,141 @@ public double getViewDistance() { return instance() != null ? instance().getRenderDistance() * instance().getRenderDistance() : Integer.MAX_VALUE; }*/ - public static final BlockCapability ITEM_HANDLER_BLOCK = - BlockCapability.create(ResourceLocation.tryBuild(ModCore.MODID, "item_handler"), - IItemHandler.class, Direction.class); - - public static final BlockCapability FLUID_HANDLER_BLOCK = - BlockCapability.create(ResourceLocation.tryBuild(ModCore.MODID, "fluid_handler"), - IFluidHandler.class, Direction.class); - - public static final BlockCapability ENERGY_HANDLER_BLOCK = - BlockCapability.create(ResourceLocation.tryBuild(ModCore.MODID, "energy_handler"), - IEnergyStorage.class, Direction.class); - - public IItemHandler getItemHandler(@Nullable Direction side) { - IInventory target = getInventory(Facing.from(side)); - if (target == null) { - return null; - } - return new IItemHandlerModifiable() { - @Override - public int getSlots() { - return target.getSlotCount(); + @Override + @Nullable + public LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.core.Direction facing) { + if (capability == ForgeCapabilities.FLUID_HANDLER) { + ITank target = getTank(Facing.from(facing)); + if (target == null) { + return LazyOptional.empty(); } - @Override - public void setStackInSlot(int slot, @Nonnull ItemStack stack) { - target.set(slot, new cam72cam.mod.item.ItemStack(stack)); - } + return LazyOptional.of(() -> new IFluidHandler() { + @Override + public int getTanks() { + return 1; + } - @Nonnull - @Override - public ItemStack getStackInSlot(int slot) { - return target.get(slot).internal(); - } + @Nonnull + @Override + public FluidStack getFluidInTank(int tank) { + return target.getContents().internal; + } - @Nonnull - @Override - public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { - return target.insert(slot, new cam72cam.mod.item.ItemStack(stack), simulate).internal(); - } + @Override + public int getTankCapacity(int tank) { + return target.getCapacity(); + } - @Nonnull - @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { - return target.extract(slot, amount, simulate).internal(); - } + @Override + public boolean isFluidValid(int tank, @Nonnull FluidStack stack) { + return target.allows(Fluid.getFluid(stack.getFluid())); + } - @Override - public int getSlotLimit(int slot) { - return target.getLimit(slot); - } + @Override + public int fill(FluidStack resource, FluidAction action) { + return target.fill(new cam72cam.mod.fluid.FluidStack(resource), action.simulate()); + } - @Override - public boolean isItemValid(int slot, @Nonnull ItemStack stack) { - return true; //TODO 1.14.4 - } - }; - } + @Nonnull + @Override + public FluidStack drain(FluidStack resource, FluidAction action) { + return target.drain(new cam72cam.mod.fluid.FluidStack(resource), action.simulate()).internal; + } - public IFluidHandler getFluidHandler(@Nullable Direction side) { - ITank target = getTank(Facing.from(side)); - if (target == null) { - return null; + @Nonnull + @Override + public FluidStack drain(int maxDrain, FluidAction action) { + if (target.getContents().internal.isEmpty()) { + return FluidStack.EMPTY; + } + return target.drain(new cam72cam.mod.fluid.FluidStack(new FluidStack(target.getContents().internal, maxDrain)), action.simulate()).internal; + } + }).cast(); } - return new IFluidHandler() { - @Override - public int getTanks() { - return 1; - } - - @Nonnull - @Override - public FluidStack getFluidInTank(int tank) { - return target.getContents().internal; + if (capability == ForgeCapabilities.ITEM_HANDLER) { + IInventory target = getInventory(Facing.from(facing)); + if (target == null) { + return LazyOptional.empty(); } + return LazyOptional.of(() -> new IItemHandlerModifiable() { + @Override + public int getSlots() { + return target.getSlotCount(); + } - @Override - public int getTankCapacity(int tank) { - return target.getCapacity(); - } + @Override + public void setStackInSlot(int slot, @Nonnull ItemStack stack) { + target.set(slot, new cam72cam.mod.item.ItemStack(stack)); + } - @Override - public boolean isFluidValid(int tank, @Nonnull FluidStack stack) { - return target.allows(Fluid.getFluid(stack.getFluid())); - } + @Nonnull + @Override + public ItemStack getStackInSlot(int slot) { + return target.get(slot).internal(); + } - @Override - public int fill(FluidStack resource, FluidAction action) { - return target.fill(new cam72cam.mod.fluid.FluidStack(resource), action.simulate()); - } + @Nonnull + @Override + public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { + return target.insert(slot, new cam72cam.mod.item.ItemStack(stack), simulate).internal(); + } - @Nonnull - @Override - public FluidStack drain(FluidStack resource, FluidAction action) { - return target.drain(new cam72cam.mod.fluid.FluidStack(resource), action.simulate()).internal; - } + @Nonnull + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + return target.extract(slot, amount, simulate).internal(); + } - @Nonnull - @Override - public FluidStack drain(int maxDrain, FluidAction action) { - if (target.getContents().internal.isEmpty()) { - return FluidStack.EMPTY; + @Override + public int getSlotLimit(int slot) { + return target.getLimit(slot); } - return target.drain(new cam72cam.mod.fluid.FluidStack(new FluidStack(target.getContents().internal.getFluid(), maxDrain)), action.simulate()).internal; - } - }; - } - public IEnergyStorage getEnergyStorage(@Nullable Direction side) { - IEnergy target = getEnergy(Facing.from(side)); - if (target == null) { - return null; + @Override + public boolean isItemValid(int slot, @Nonnull ItemStack stack) { + return true; //TODO 1.14.4 + } + }).cast(); } - return new IEnergyStorage() { - @Override - public int receiveEnergy(int maxReceive, boolean simulate) { - return target.receive(maxReceive, simulate); - } - - @Override - public int extractEnergy(int maxExtract, boolean simulate) { - return target.extract(maxExtract, simulate); + if (capability == ForgeCapabilities.ENERGY) { + IEnergy target = getEnergy(Facing.from(facing)); + if (target == null) { + return LazyOptional.empty(); } + return LazyOptional.of(() -> new IEnergyStorage() { + @Override + public int receiveEnergy(int maxReceive, boolean simulate) { + return target.receive(maxReceive, simulate); + } - @Override - public int getEnergyStored() { - return target.getCurrent(); - } + @Override + public int extractEnergy(int maxExtract, boolean simulate) { + return target.extract(maxExtract, simulate); + } - @Override - public int getMaxEnergyStored() { - return target.getMax(); - } + @Override + public int getEnergyStored() { + return target.getCurrent(); + } - @Override - public boolean canExtract() { - return true; - } + @Override + public int getMaxEnergyStored() { + return target.getMax(); + } - @Override - public boolean canReceive() { - return true; - } - }; - } + @Override + public boolean canExtract() { + return true; + } - public boolean hasCapacity(BlockCapability capability, Direction side) { - if (capability == ITEM_HANDLER_BLOCK) { - return getInventory(Facing.from(side)) != null; - } else if (capability == FLUID_HANDLER_BLOCK) { - return getTank(Facing.from(side)) != null; - } else if (capability == ENERGY_HANDLER_BLOCK) { - return getEnergy(Facing.from(side)) != null; + @Override + public boolean canReceive() { + return true; + } + }).cast(); } - return false; + return LazyOptional.empty(); } /* diff --git a/src/main/java/cam72cam/mod/config/ConfigFile.java b/src/main/java/cam72cam/mod/config/ConfigFile.java index 8471bd14b..ff1f8199c 100644 --- a/src/main/java/cam72cam/mod/config/ConfigFile.java +++ b/src/main/java/cam72cam/mod/config/ConfigFile.java @@ -1,7 +1,7 @@ package cam72cam.mod.config; import cam72cam.mod.ModCore; -import net.neoforged.fml.loading.FMLPaths; +import net.minecraftforge.fml.loading.FMLPaths; import org.apache.commons.lang3.StringUtils; import java.lang.annotation.Annotation; diff --git a/src/main/java/cam72cam/mod/energy/IEnergy.java b/src/main/java/cam72cam/mod/energy/IEnergy.java index ece965c44..c65e476fb 100644 --- a/src/main/java/cam72cam/mod/energy/IEnergy.java +++ b/src/main/java/cam72cam/mod/energy/IEnergy.java @@ -1,6 +1,6 @@ package cam72cam.mod.energy; -import net.neoforged.neoforge.energy.IEnergyStorage; +import net.minecraftforge.energy.IEnergyStorage; public interface IEnergy { static IEnergy from(IEnergyStorage internal) { diff --git a/src/main/java/cam72cam/mod/entity/CustomEntity.java b/src/main/java/cam72cam/mod/entity/CustomEntity.java index 616b9446c..1465355f0 100644 --- a/src/main/java/cam72cam/mod/entity/CustomEntity.java +++ b/src/main/java/cam72cam/mod/entity/CustomEntity.java @@ -1,7 +1,8 @@ package cam72cam.mod.entity; import cam72cam.mod.entity.sync.EntitySync; -import cam72cam.mod.world.World; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.util.Mth; import java.util.List; @@ -89,4 +90,33 @@ public List getPassengers() { return internal.getActualPassengers(); } + @Override + public float getRotationRoll() { + return internal.getEntityData().get(ModdedEntity.ROLL); + } + + @Override + public float getRotationRoll(float partialTicks) { + return Mth.clampedLerp(getPrevRotationRoll(), getRotationRoll(), partialTicks); + } + + @Override + public void setRotationRoll(float roll) { + SynchedEntityData dataManager = internal.getEntityData(); + float prevRoll = dataManager.get(ModdedEntity.PREV_ROLL); + while (roll - prevRoll < -180.0F) + { + prevRoll -= 360.0F; + } + while (roll - prevRoll >= 180.0F) + { + prevRoll += 360.0F; + } + dataManager.set(ModdedEntity.PREV_ROLL, prevRoll); + dataManager.set(ModdedEntity.ROLL, roll); + } + + public float getPrevRotationRoll() { + return internal.getEntityData().get(ModdedEntity.PREV_ROLL); + } } diff --git a/src/main/java/cam72cam/mod/entity/Entity.java b/src/main/java/cam72cam/mod/entity/Entity.java index f61eade67..68a2908c9 100644 --- a/src/main/java/cam72cam/mod/entity/Entity.java +++ b/src/main/java/cam72cam/mod/entity/Entity.java @@ -5,11 +5,12 @@ import cam72cam.mod.math.Vec3i; import cam72cam.mod.util.SingleCache; import cam72cam.mod.world.World; +import net.minecraft.util.Mth; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.npc.AbstractVillager; import net.minecraft.world.level.Explosion; import net.minecraft.world.phys.AABB; -import net.neoforged.neoforge.event.EventHooks; +import net.minecraftforge.event.ForgeEventFactory; import java.util.List; import java.util.UUID; @@ -17,7 +18,7 @@ /** * The base entity abstraction that wraps MC entities. - * + *

* TODO: Make sure we are setting prevRot/Loc stuff correctly. Should it only be changed on a tick processing the movement? */ public class Entity { @@ -77,29 +78,64 @@ public float getRotationYaw() { return internal.getYRot(); } + public float getRotationPitch() { + return internal.getXRot(); + } + + /** + * @see CustomEntity#getRotationRoll() + */ + public float getRotationRoll() { + return 0f; + } + + public float getRotationYaw(float partialTicks) { + return Mth.clampedLerp(internal.yRotO, internal.getYRot(), partialTicks); + } + + public float getRotationPitch(float partialTicks) { + return Mth.clampedLerp(internal.xRotO, internal.getXRot(), partialTicks); + } + + /** + * @see CustomEntity#getRotationRoll(float) + */ + public float getRotationRoll(float partialTicks) { + return 0; + } + public void setRotationYaw(float yaw) { internal.yRotO = internal.getYRot(); internal.setYRot(yaw); - double d0 = internal.yRotO - yaw; - if (d0 < -180.0D) - { - internal.yRotO += 360.0F; - } - if (d0 >= 180.0D) + while (internal.getYRot() - internal.yRotO < -180.0F) { internal.yRotO -= 360.0F; } - - } - - public float getRotationPitch() { - return internal.getXRot(); + while (internal.getYRot() - internal.yRotO >= 180.0F) + { + internal.yRotO += 360.0F; + } } public void setRotationPitch(float pitch) { internal.xRotO = internal.getXRot(); internal.setXRot(pitch); + + while (internal.getXRot() - internal.xRotO < -180.0F) + { + internal.xRotO -= 360.0F; + } + while (internal.getXRot() - internal.xRotO >= 180.0F) + { + internal.xRotO += 360.0F; + } + } + + /** + * @see CustomEntity#setRotationRoll(float) + */ + public void setRotationRoll(float roll) { } public float getPrevRotationYaw() { @@ -110,6 +146,13 @@ public float getPrevRotationPitch() { return internal.xRotO; } + /** + * @see CustomEntity#getPrevRotationRoll() + */ + public float getPrevRotationRoll() { + return 0f; + } + Vec3d eyeCache; public Vec3d getPositionEyes() { Vec3d pos = checkRidingPosition(); @@ -247,7 +290,7 @@ public void directDamage(DamageType type, double damage) { protected void createExplosion(Vec3d pos, float size, boolean damageTerrain) { Explosion explosion = new Explosion(getWorld().internal, this.internal, pos.x, pos.y, pos.z, size, false, damageTerrain ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP); - if (EventHooks.onExplosionStart(getWorld().internal, explosion)) return; + if (ForgeEventFactory.onExplosionStart(getWorld().internal, explosion)) return; explosion.explode(); explosion.finalizeExplosion(true); } diff --git a/src/main/java/cam72cam/mod/entity/EntityRegistry.java b/src/main/java/cam72cam/mod/entity/EntityRegistry.java index 322a1fca9..153915efc 100644 --- a/src/main/java/cam72cam/mod/entity/EntityRegistry.java +++ b/src/main/java/cam72cam/mod/entity/EntityRegistry.java @@ -16,8 +16,8 @@ import net.minecraft.network.chat.Component; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobCategory; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import org.apache.commons.lang3.tuple.Pair; import java.util.HashMap; diff --git a/src/main/java/cam72cam/mod/entity/ModdedEntity.java b/src/main/java/cam72cam/mod/entity/ModdedEntity.java index c30b280b4..7b7c6b754 100644 --- a/src/main/java/cam72cam/mod/entity/ModdedEntity.java +++ b/src/main/java/cam72cam/mod/entity/ModdedEntity.java @@ -9,12 +9,12 @@ import cam72cam.mod.net.Packet; import cam72cam.mod.serialization.*; import cam72cam.mod.util.SingleCache; -import net.minecraft.core.registries.BuiltInRegistries; -import it.unimi.dsi.fastutil.objects.ObjectArraySet; import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; @@ -24,9 +24,10 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; -import net.neoforged.neoforge.entity.IEntityWithComplexSpawn; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.entity.IEntityAdditionalSpawnData; +import net.minecraftforge.registries.ForgeRegistries; import org.apache.commons.lang3.tuple.Pair; import java.util.*; @@ -34,7 +35,7 @@ import java.util.stream.Collectors; /** Internal class which extends MC's Entity. Do not use directly */ -public class ModdedEntity extends Entity implements IEntityWithComplexSpawn { +public class ModdedEntity extends Entity implements IEntityAdditionalSpawnData { // Reference to the entity that this is representing private CustomEntity self; @@ -42,6 +43,15 @@ public class ModdedEntity extends Entity implements IEntityWithComplexSpawn { @TagField(value = "passengers", mapper = PassengerMapper.class) private Map passengerPositions = new HashMap<>(); + //Data synchronization + static final EntityDataAccessor PREV_ROLL = SynchedEntityData.defineId(ModdedEntity.class, EntityDataSerializers.FLOAT); + static final EntityDataAccessor ROLL = SynchedEntityData.defineId(ModdedEntity.class, EntityDataSerializers.FLOAT); + //Data storage + @TagField + private float roll = 0; + @TagField + private float prevRoll = 0; + // All of the known seats attached to this entity private final List seats = new ArrayList<>(); @@ -111,6 +121,11 @@ private void load(TagCompound data) { ModCore.catching(e, "Error during entity load: %s - %s", this, data); } + if (!this.level().isClientSide()) { + getEntityData().set(ROLL, this.roll); + getEntityData().set(PREV_ROLL, this.prevRoll); + } + TagCompound selfData = data.get("selfData"); if (selfData == null) { // Old style used to save everything in one giant NBT blob. New versions save self in a sub tag. @@ -165,6 +180,9 @@ public void addAdditionalSaveData(CompoundTag compound) { * @see #load */ private void save(TagCompound data) { + this.roll = getEntityData().get(ROLL); + this.prevRoll = getEntityData().get(PREV_ROLL); + try { TagSerializer.serialize(data, this); } catch (SerializationException e) { @@ -192,7 +210,7 @@ private void save(TagCompound data) { /** @see #load */ @Override - public final void readSpawnData(RegistryFriendlyByteBuf additionalData) { + public final void readSpawnData(FriendlyByteBuf additionalData) { TagCompound data = new TagCompound(additionalData.readNbt()); if (cam72cam.mod.world.World.get(level()) == null) { // This can happen during a sudden disconnect... @@ -207,7 +225,7 @@ public final void readSpawnData(RegistryFriendlyByteBuf additionalData) { } @Override - public final void writeSpawnData(RegistryFriendlyByteBuf buffer) { + public final void writeSpawnData(FriendlyByteBuf buffer) { TagCompound data = new TagCompound(); data.set("sync", self.sync); save(data); @@ -216,7 +234,7 @@ public final void writeSpawnData(RegistryFriendlyByteBuf buffer) { @Override public EntityType getType() { - return legacyId == null ? super.getType() : BuiltInRegistries.ENTITY_TYPE.get(ResourceLocation.tryParse(legacyId)); + return legacyId == null ? super.getType() : ForgeRegistries.ENTITY_TYPES.getValue(ResourceLocation.parse(legacyId)); } /* ITickable */ @@ -228,6 +246,9 @@ public EntityType getType() { */ @Override public final void tick() { + if (!level().isClientSide()) { + this.getEntityData().set(PREV_ROLL, getEntityData().get(ROLL)); + } iTickable.onTick(); try { self.sync.send(); @@ -277,7 +298,8 @@ public final boolean hurt(DamageSource damagesource, float amount) { /** @see IKillable */ @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { - //TODO 1.21.1 + builder.define(PREV_ROLL, 0F); + builder.define(ROLL, 0F); } @Override @@ -306,6 +328,7 @@ public boolean canAddPassenger(Entity passenger) { /** Since 1.14 we can't get rider's world position simply as it returns their riding entity's position */ public Vec3d calculateRiderWorldPosition(cam72cam.mod.entity.Entity entity) { //This should work without pitch applied now + //TODO Pitch and roll if (passengerPositions.containsKey(entity.getUUID())) { return calculatePassengerPosition(passengerPositions.get(entity.getUUID())); } diff --git a/src/main/java/cam72cam/mod/entity/Player.java b/src/main/java/cam72cam/mod/entity/Player.java index 41f7aec13..72ca3a8bd 100644 --- a/src/main/java/cam72cam/mod/entity/Player.java +++ b/src/main/java/cam72cam/mod/entity/Player.java @@ -12,9 +12,9 @@ import net.minecraft.world.InteractionHand; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.phys.BlockHitResult; -import net.neoforged.neoforge.server.permission.PermissionAPI; -import net.neoforged.neoforge.server.permission.nodes.PermissionNode; -import net.neoforged.neoforge.server.permission.nodes.PermissionTypes; +import net.minecraftforge.server.permission.PermissionAPI; +import net.minecraftforge.server.permission.nodes.PermissionNode; +import net.minecraftforge.server.permission.nodes.PermissionTypes; import static net.minecraft.world.InteractionHand.MAIN_HAND; import static net.minecraft.world.InteractionHand.OFF_HAND; diff --git a/src/main/java/cam72cam/mod/entity/SeatEntity.java b/src/main/java/cam72cam/mod/entity/SeatEntity.java index 1ded1c631..bf65a6e73 100644 --- a/src/main/java/cam72cam/mod/entity/SeatEntity.java +++ b/src/main/java/cam72cam/mod/entity/SeatEntity.java @@ -6,6 +6,7 @@ import cam72cam.mod.serialization.TagCompound; import cam72cam.mod.world.World; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.syncher.SynchedEntityData; @@ -16,14 +17,14 @@ import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.neoforge.entity.IEntityWithComplexSpawn; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.entity.IEntityAdditionalSpawnData; import java.util.List; import java.util.UUID; /** Seat construct to make multiple riders actually work */ -public class SeatEntity extends Entity implements IEntityWithComplexSpawn { +public class SeatEntity extends Entity implements IEntityAdditionalSpawnData { static final ResourceLocation ID = ResourceLocation.tryBuild(ModCore.MODID, "seat"); public static final EntityType TYPE = makeType(); @@ -213,7 +214,7 @@ public cam72cam.mod.entity.Entity getEntityPassenger() { } @Override - public void writeSpawnData(RegistryFriendlyByteBuf buffer) { + public void writeSpawnData(FriendlyByteBuf buffer) { TagCompound data = new TagCompound(); data.setUUID("parent", parent); data.setUUID("passenger", passenger); @@ -221,7 +222,7 @@ public void writeSpawnData(RegistryFriendlyByteBuf buffer) { } @Override - public void readSpawnData(RegistryFriendlyByteBuf additionalData) { + public void readSpawnData(FriendlyByteBuf additionalData) { TagCompound data = new TagCompound(additionalData.readNbt()); parent = data.getUUID("parent"); passenger = data.getUUID("passenger"); diff --git a/src/main/java/cam72cam/mod/entity/sync/EntitySync.java b/src/main/java/cam72cam/mod/entity/sync/EntitySync.java index a2e9b0496..ba7fedb22 100644 --- a/src/main/java/cam72cam/mod/entity/sync/EntitySync.java +++ b/src/main/java/cam72cam/mod/entity/sync/EntitySync.java @@ -63,13 +63,16 @@ public void send() throws SerializationException { .collect(Object2IntOpenHashMap::new, (m, f) -> { TagSync tag = f.getAnnotation(TagSync.class); - TagField tagField = f.getAnnotation(TagField.class); + String name = f.getAnnotation(TagField.class).value(); + if("".equals(name)) { + name = f.getName(); + } Class type = f.getType(); if (type == float.class || type == Float.class) { - m.put(tagField.value(), Math.max(0, Math.min(tag.floatPrecision(), 8))); + m.put(name, Math.max(0, Math.min(tag.floatPrecision(), 8))); } else if (type == double.class || type == Double.class) { - m.put(tagField.value(), Math.max(0, Math.min(tag.doublePrecision(), 8))); + m.put(name, Math.max(0, Math.min(tag.doublePrecision(), 8))); } }, Object2IntOpenHashMap::putAll); diff --git a/src/main/java/cam72cam/mod/event/ClientEvents.java b/src/main/java/cam72cam/mod/event/ClientEvents.java index 1d86d881b..1e540c36c 100644 --- a/src/main/java/cam72cam/mod/event/ClientEvents.java +++ b/src/main/java/cam72cam/mod/event/ClientEvents.java @@ -17,13 +17,12 @@ import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.RenderType; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.ICancellableEvent; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.client.event.*; -import net.neoforged.neoforge.client.event.sound.SoundEngineLoadEvent; -import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.client.event.*; +import net.minecraftforge.client.event.sound.SoundEngineLoadEvent; import java.util.function.Consumer; import java.util.function.Function; @@ -96,14 +95,11 @@ public MouseGuiEvent(MouseAction action, int x, int y, int button, double scroll public static final Event REGISTER_ENTITY = new Event<>(); public static final Event> REGISTER_SHADER = new Event<>(); public static final Event> RENDER_DEBUG = new Event<>(); - public static final Event> RENDER_OVERLAY = new Event<>(); public static final Event> RENDER_MOUSEOVER = new Event<>(); public static final Event> SOUND_LOAD = new Event<>(); public static final Event RELOAD = new Event<>(); // public static final Event> OPTIFINE_SUCKS = new Event<>(); public static final Event> KEY_MAPPING_REGISTER = new Event<>(); - public static final Event> CLIENT_EXTENSIONS_REGISTER = new Event<>(); - public static final Event> MENU_SCREENS_REGISTER = new Event<>(); @EventBusSubscriber(modid = ModCore.MODID, value = Dist.CLIENT) public static class ClientEventBus { @@ -115,20 +111,20 @@ public static class ClientEventBus { } @SubscribeEvent - public static void onClientTick(ClientTickEvent.Pre event) { + public static void onClientTick(TickEvent.ClientTickEvent.Pre event) { TICK.execute(Runnable::run); } @SubscribeEvent - public static void onClientTick(ClientTickEvent.Post event) { + public static void onClientTick(TickEvent.ClientTickEvent.Post event) { TICK_POST.execute(Runnable::run); } private static void onGuiMouse(ScreenEvent event, int x, int y, int btn, MouseAction action) { - MouseGuiEvent mevt = new MouseGuiEvent(action, x, y, btn, action == MouseAction.SCROLL ? (int) ((ScreenEvent.MouseScrolled) event).getScrollDeltaY() : 0); + MouseGuiEvent mevt = new MouseGuiEvent(action, x, y, btn, action == MouseAction.SCROLL ? (int) ((ScreenEvent.MouseScrolled) event).getDeltaY() : 0); if (!MOUSE_GUI.executeCancellable(h -> h.apply(mevt))) { - ((ICancellableEvent)event).setCanceled(true); + event.setCanceled(true); if (action != MouseAction.SCROLL) { // Apparently cancelling this input event only cancels it for the *GUI* handlers, not all input handlers // Therefore we need to track that ourselves. Thanks for changing that from 1.12.2-forge @@ -169,7 +165,7 @@ private static void hackInputState(int event) { @SubscribeEvent public static void onScroll(InputEvent.MouseScrollingEvent event) { - if (!SCROLL.executeCancellable(x -> x.apply(event.getScrollDeltaY()))) { + if (!SCROLL.executeCancellable(x -> x.apply(event.getDeltaY()))) { event.setCanceled(true); } } @@ -205,7 +201,7 @@ public static void onClick(InputEvent.MouseButton.Pre event) { } @SubscribeEvent - public static void onFrame(RenderFrameEvent.Pre event) { + public static void onFrame(TickEvent.RenderTickEvent.Pre event) { if (dragPos != null) { //Minecraft.getMinecraft().mouseHelper.mouseXYChange(); dragPos = dragPos.add(Minecraft.getInstance().mouseHandler.getXVelocity(), Minecraft.getInstance().mouseHandler.getYVelocity(), 0); @@ -222,11 +218,6 @@ public static void onDebugRender(CustomizeGuiOverlayEvent.DebugText event) { RENDER_DEBUG.execute(x -> x.accept(event)); } - @SubscribeEvent - public static void onOverlayEvent(RenderGuiLayerEvent.Pre event) { - RENDER_OVERLAY.execute(x -> x.accept(event)); - } - @SubscribeEvent public static void onRenderMouseover(RenderHighlightEvent.Block event) { RenderType.cutout().setupRenderState(); @@ -250,7 +241,7 @@ public static void onRenderMouseover(RenderHighlightEvent.Block event) { static boolean hasHacked = false; @SubscribeEvent - public static void onHackShaders(RenderFrameEvent.Pre event) { + public static void onHackShaders(TickEvent.RenderTickEvent.Pre event) { if (!hasHacked/* && event.phase == TickEvent.Phase.START*/) { if (GameRenderer.getRendertypeCutoutShader() != null) { hasHacked = true; @@ -301,7 +292,7 @@ public static void registerVanillaShader(RegisterShadersEvent event) { REGISTER_SHADER.execute(x -> x.accept(event)); } - @SubscribeEvent + /*@SubscribeEvent public static void registerClientExtensions(RegisterClientExtensionsEvent event) { CLIENT_EXTENSIONS_REGISTER.execute(x -> x.accept(event)); } @@ -309,7 +300,7 @@ public static void registerClientExtensions(RegisterClientExtensionsEvent event) @SubscribeEvent public static void registerMenuScreen(RegisterMenuScreensEvent event) { MENU_SCREENS_REGISTER.execute(x -> x.accept(event)); - } + }*/ @SubscribeEvent public static void onSoundLoad(SoundEngineLoadEvent event) { diff --git a/src/main/java/cam72cam/mod/event/CommonEvents.java b/src/main/java/cam72cam/mod/event/CommonEvents.java index 9ec451205..8f04a4d38 100644 --- a/src/main/java/cam72cam/mod/event/CommonEvents.java +++ b/src/main/java/cam72cam/mod/event/CommonEvents.java @@ -18,21 +18,18 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.chunk.ChunkAccess; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; -import net.neoforged.neoforge.event.entity.EntityEvent; -import net.neoforged.neoforge.event.entity.EntityJoinLevelEvent; -import net.neoforged.neoforge.event.level.BlockEvent; -import net.neoforged.neoforge.event.level.ChunkEvent; -import net.neoforged.neoforge.event.level.LevelEvent; -import net.neoforged.neoforge.event.tick.LevelTickEvent; -import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; -import net.neoforged.neoforge.network.registration.PayloadRegistrar; -import net.neoforged.neoforge.registries.DeferredRegister; -import net.neoforged.neoforge.registries.RegisterEvent; -import net.neoforged.neoforge.registries.RegisterEvent.RegisterHelper; -import net.neoforged.neoforge.server.permission.events.PermissionGatherEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.event.entity.EntityEvent; +import net.minecraftforge.event.entity.EntityJoinLevelEvent; +import net.minecraftforge.event.level.BlockEvent; +import net.minecraftforge.event.level.ChunkEvent; +import net.minecraftforge.event.level.LevelEvent; +import net.minecraftforge.event.TickEvent.LevelTickEvent; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegisterEvent; +import net.minecraftforge.registries.RegisterEvent.RegisterHelper; +import net.minecraftforge.server.permission.events.PermissionGatherEvent; import java.util.function.Consumer; @@ -54,7 +51,6 @@ public static final class World { public static final class Block { public static final Event>> REGISTER = new Event<>(); - public static final Event> REGISTER_CAPABILITY = new Event<>(); public static final Event BROKEN = new Event<>(); public static final Event> TAGS = new Event<>(); } @@ -85,10 +81,6 @@ public static final class Permissions { public static final Event> NODES = new Event<>(); } - public static final class Networking { - public static final Event> REGISTER_PACKET = new Event<>(); - } - @EventBusSubscriber(modid = ModCore.MODID) public static final class EventBusForge { // World @@ -116,8 +108,8 @@ public static void onWorldUnload(LevelEvent.Unload event) { public static void onWorldTick(LevelTickEvent.Pre event) { //Since 1.18.2 this is called both server and client //We only want server side - if (!event.getLevel().isClientSide()) { - World.TICK.execute(x -> x.accept(event.getLevel())); + if (!event.level.isClientSide()) { + World.TICK.execute(x -> x.accept(event.level)); } } @@ -176,7 +168,7 @@ public static void registerBlocks(RegisterEvent event) { event.register(BuiltInRegistries.MENU.key(), helper -> CONTAINER_REGISTRY.execute(x -> x.accept(helper))); } - @SubscribeEvent + /*@SubscribeEvent public static void registerCapability(RegisterCapabilitiesEvent event) { Block.REGISTER_CAPABILITY.execute(x -> x.accept(event)); } @@ -187,7 +179,7 @@ public static void registerPacket(RegisterPayloadHandlersEvent event) { .versioned(Packet.VERSION) .optional(); Networking.REGISTER_PACKET.execute(x -> x.accept(registrar)); - } + }*/ @SubscribeEvent public static void registerBlockTags(RegisterBlockTagEvent event) { diff --git a/src/main/java/cam72cam/mod/event/platform/LoadDatapackEvent.java b/src/main/java/cam72cam/mod/event/platform/LoadDatapackEvent.java index 01f659b66..163056af3 100644 --- a/src/main/java/cam72cam/mod/event/platform/LoadDatapackEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/LoadDatapackEvent.java @@ -9,8 +9,8 @@ import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.server.packs.repository.PackSource; import net.minecraft.world.flag.FeatureFlagSet; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; import java.util.List; import java.util.Optional; diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterAdvancementEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterAdvancementEvent.java index f6fe9e0cf..7200429f6 100644 --- a/src/main/java/cam72cam/mod/event/platform/RegisterAdvancementEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/RegisterAdvancementEvent.java @@ -5,8 +5,8 @@ import net.minecraft.advancements.*; import net.minecraft.advancements.critereon.*; import net.minecraft.resources.ResourceLocation; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterBlockTagEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterBlockTagEvent.java index 2fc8bc31a..586271e1f 100644 --- a/src/main/java/cam72cam/mod/event/platform/RegisterBlockTagEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/RegisterBlockTagEvent.java @@ -6,8 +6,8 @@ import net.minecraft.tags.TagKey; import net.minecraft.tags.TagLoader; import net.minecraft.world.level.block.Block; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterDamageTypeEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterDamageTypeEvent.java index 64183458d..05b711b5f 100644 --- a/src/main/java/cam72cam/mod/event/platform/RegisterDamageTypeEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/RegisterDamageTypeEvent.java @@ -2,8 +2,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.Resource; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; import java.util.Map; diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterItemTagEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterItemTagEvent.java index dec256b10..ca6823e5b 100644 --- a/src/main/java/cam72cam/mod/event/platform/RegisterItemTagEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/RegisterItemTagEvent.java @@ -7,8 +7,8 @@ import net.minecraft.tags.TagKey; import net.minecraft.tags.TagLoader; import net.minecraft.world.item.Item; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterRecipeEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterRecipeEvent.java index 251aa3af4..9bffd17d9 100644 --- a/src/main/java/cam72cam/mod/event/platform/RegisterRecipeEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/RegisterRecipeEvent.java @@ -8,8 +8,8 @@ import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.item.crafting.ShapedRecipe; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; /** * Fired when recipe datapacks are reloaded diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterTextureSpriteEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterTextureSpriteEvent.java index 3bc55d193..e1ab01303 100644 --- a/src/main/java/cam72cam/mod/event/platform/RegisterTextureSpriteEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/RegisterTextureSpriteEvent.java @@ -3,8 +3,8 @@ import net.minecraft.client.renderer.texture.atlas.SpriteSource; import net.minecraft.client.renderer.texture.atlas.sources.SingleFile; import net.minecraft.resources.ResourceLocation; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; import java.util.List; import java.util.Optional; diff --git a/src/main/java/cam72cam/mod/fluid/FluidStack.java b/src/main/java/cam72cam/mod/fluid/FluidStack.java index b150056e0..f3c3045e4 100644 --- a/src/main/java/cam72cam/mod/fluid/FluidStack.java +++ b/src/main/java/cam72cam/mod/fluid/FluidStack.java @@ -2,15 +2,15 @@ /** Wrapper around forge FluidStack */ public class FluidStack { - public final net.neoforged.neoforge.fluids.FluidStack internal; + public final net.minecraftforge.fluids.FluidStack internal; /** Wrapper, don't use directly */ - public FluidStack(net.neoforged.neoforge.fluids.FluidStack stack) { + public FluidStack(net.minecraftforge.fluids.FluidStack stack) { this.internal = stack; } public FluidStack(Fluid fluid, int amount) { - this.internal = fluid != null && fluid.internal != null ? new net.neoforged.neoforge.fluids.FluidStack(fluid.internal.get(0), amount) : null; + this.internal = fluid != null && fluid.internal != null ? new net.minecraftforge.fluids.FluidStack(fluid.internal.get(0), amount) : null; } public Fluid getFluid() { diff --git a/src/main/java/cam72cam/mod/fluid/FluidTank.java b/src/main/java/cam72cam/mod/fluid/FluidTank.java index 8b1a6f8d4..3ef34c2aa 100644 --- a/src/main/java/cam72cam/mod/fluid/FluidTank.java +++ b/src/main/java/cam72cam/mod/fluid/FluidTank.java @@ -5,7 +5,7 @@ import cam72cam.mod.serialization.TagMapped; import cam72cam.mod.serialization.TagMapper; import cam72cam.mod.util.RegistryUtil; -import net.neoforged.neoforge.fluids.capability.IFluidHandler.FluidAction; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; import java.util.HashSet; import java.util.List; @@ -15,7 +15,7 @@ @TagMapped(FluidTank.Mapper.class) public class FluidTank implements ITank { // TODO clean up capacity crap. Probably just want to implement my own fluid handler from scratch TBH - public final net.neoforged.neoforge.fluids.capability.templates.FluidTank internal; + public final net.minecraftforge.fluids.capability.templates.FluidTank internal; private Supplier> filter; private final Set onChange = new HashSet<>(); @@ -26,7 +26,7 @@ private FluidTank() { } public FluidTank(FluidStack fluidStack, int capacity) { - internal = new net.neoforged.neoforge.fluids.capability.templates.FluidTank(capacity) { + internal = new net.minecraftforge.fluids.capability.templates.FluidTank(capacity) { public void onContentsChanged() { FluidTank.this.onChange(); } @@ -73,7 +73,7 @@ public void setFilter(Supplier> filter) { @Override public boolean allows(Fluid fluid) { return (filter == null || filter.get() == null || filter.get().contains(fluid)) && - fluid.internal.stream().anyMatch(f -> internal.isFluidValid(new net.neoforged.neoforge.fluids.FluidStack(f, 1))); + fluid.internal.stream().anyMatch(f -> internal.isFluidValid(new net.minecraftforge.fluids.FluidStack(f, 1))); } @Override @@ -87,17 +87,17 @@ public int fill(FluidStack fluidStack, boolean simulate) { @Override public FluidStack drain(FluidStack fluidStack, boolean simulate) { if (!allows(fluidStack.getFluid())) { - return new FluidStack(net.neoforged.neoforge.fluids.FluidStack.EMPTY); + return new FluidStack(net.minecraftforge.fluids.FluidStack.EMPTY); } return new FluidStack(internal.drain(fluidStack.internal, simulate ? FluidAction.SIMULATE : FluidAction.EXECUTE)); } public TagCompound write(TagCompound tag) { - return new TagCompound(internal.writeToNBT(RegistryUtil.getRegistry(), tag.internal)); + return new TagCompound(internal.writeToNBT(tag.internal)); } public void read(TagCompound tag) { - internal.readFromNBT(RegistryUtil.getRegistry(), tag.internal); + internal.readFromNBT(tag.internal); } static class Mapper implements TagMapper { diff --git a/src/main/java/cam72cam/mod/fluid/ITank.java b/src/main/java/cam72cam/mod/fluid/ITank.java index af2d98550..1fa4d4c0e 100644 --- a/src/main/java/cam72cam/mod/fluid/ITank.java +++ b/src/main/java/cam72cam/mod/fluid/ITank.java @@ -2,9 +2,9 @@ import cam72cam.mod.ModCore; import cam72cam.mod.item.ItemStack; -import net.neoforged.neoforge.fluids.FluidUtil; -import net.neoforged.neoforge.fluids.capability.IFluidHandler; -import net.neoforged.neoforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; import java.util.List; import java.util.Optional; @@ -21,7 +21,7 @@ public interface ITank { * See ImmersiveRailroading's FreightTank for an example. */ static ITank getTank(ItemStack inputCopy, Consumer onUpdate) { - Optional handler = FluidUtil.getFluidHandler(inputCopy.internal()); + Optional handler = FluidUtil.getFluidHandler(inputCopy.internal()).resolve(); if (handler.isEmpty()) { return null; } @@ -39,7 +39,7 @@ public int getCapacity() { @Override public boolean allows(Fluid fluid) { - return fluid.internal.stream().anyMatch(f -> internal.isFluidValid(0, new net.neoforged.neoforge.fluids.FluidStack(f, 1))); + return fluid.internal.stream().anyMatch(f -> internal.isFluidValid(0, new net.minecraftforge.fluids.FluidStack(f, 1))); } @Override @@ -77,7 +77,7 @@ public int getCapacity() { @Override public boolean allows(Fluid fluid) { - return fluid.internal.stream().anyMatch(f -> internal.isFluidValid(i, new net.neoforged.neoforge.fluids.FluidStack(f, 1))); + return fluid.internal.stream().anyMatch(f -> internal.isFluidValid(i, new net.minecraftforge.fluids.FluidStack(f, 1))); } @Override diff --git a/src/main/java/cam72cam/mod/gui/GuiRegistry.java b/src/main/java/cam72cam/mod/gui/GuiRegistry.java index f3b2f78bb..19a2310fe 100644 --- a/src/main/java/cam72cam/mod/gui/GuiRegistry.java +++ b/src/main/java/cam72cam/mod/gui/GuiRegistry.java @@ -15,6 +15,7 @@ import cam72cam.mod.resource.Identifier; import cam72cam.mod.world.World; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; @@ -23,10 +24,10 @@ import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.neoforge.network.IContainerFactory; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.network.IContainerFactory; import javax.annotation.Nullable; import java.util.HashMap; @@ -54,7 +55,7 @@ public static void registerEvents() { /** Internal event registration, do not use */ @OnlyIn(Dist.CLIENT) public static void registerClientEvents() { - ClientEvents.MENU_SCREENS_REGISTER.subscribe(e -> e.register(TYPE, ClientContainerBuilder::new)); + ClientEvents.REGISTER_ENTITY.subscribe(() -> MenuScreens.register(TYPE, ClientContainerBuilder::new)); } public GuiRegistry() { diff --git a/src/main/java/cam72cam/mod/gui/Progress.java b/src/main/java/cam72cam/mod/gui/Progress.java index eee6d1f71..57d280b74 100644 --- a/src/main/java/cam72cam/mod/gui/Progress.java +++ b/src/main/java/cam72cam/mod/gui/Progress.java @@ -1,7 +1,7 @@ package cam72cam.mod.gui; import cam72cam.mod.ModCore; -import net.neoforged.fml.loading.progress.StartupNotificationManager; +import net.minecraftforge.fml.loading.progress.StartupNotificationManager; /** Wrapper around game loading bar, only functional on certain MC versions / loaders */ public class Progress { diff --git a/src/main/java/cam72cam/mod/gui/container/ServerContainerBuilder.java b/src/main/java/cam72cam/mod/gui/container/ServerContainerBuilder.java index 0c1876616..112548dbc 100644 --- a/src/main/java/cam72cam/mod/gui/container/ServerContainerBuilder.java +++ b/src/main/java/cam72cam/mod/gui/container/ServerContainerBuilder.java @@ -9,7 +9,7 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.Slot; -import net.neoforged.neoforge.items.SlotItemHandler; +import net.minecraftforge.items.SlotItemHandler; import java.util.function.Consumer; import java.util.function.Supplier; diff --git a/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java b/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java index 9c430df4e..cf966b658 100644 --- a/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java +++ b/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java @@ -28,7 +28,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.inventory.InventoryMenu; -import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions; +import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; import org.joml.Matrix4f; import org.lwjgl.opengl.GL32; import util.Matrix4; diff --git a/src/main/java/cam72cam/mod/gui/helpers/GuiScrollBar.java b/src/main/java/cam72cam/mod/gui/helpers/GuiScrollBar.java index 161d224eb..c5a1e8629 100644 --- a/src/main/java/cam72cam/mod/gui/helpers/GuiScrollBar.java +++ b/src/main/java/cam72cam/mod/gui/helpers/GuiScrollBar.java @@ -2,13 +2,13 @@ import net.minecraft.client.gui.components.AbstractSliderButton; import net.minecraft.network.chat.Component; -import net.neoforged.neoforge.client.gui.widget.ExtendedSlider; +import net.minecraftforge.client.gui.widget.ForgeSlider; import java.util.function.Consumer; /** Internal scrollbar class */ -class GuiScrollBar extends ExtendedSlider { +class GuiScrollBar extends ForgeSlider { private final Consumer onPress; public GuiScrollBar(int id, int xPos, int yPos, int width, int height, String displayStr, diff --git a/src/main/java/cam72cam/mod/gui/screen/ScreenBuilder.java b/src/main/java/cam72cam/mod/gui/screen/ScreenBuilder.java index ab57d3a97..18efbd16b 100644 --- a/src/main/java/cam72cam/mod/gui/screen/ScreenBuilder.java +++ b/src/main/java/cam72cam/mod/gui/screen/ScreenBuilder.java @@ -11,7 +11,7 @@ import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; -import net.neoforged.neoforge.client.gui.widget.ExtendedSlider; +import net.minecraftforge.client.gui.widget.ForgeSlider; import java.util.*; import java.util.function.Supplier; @@ -23,7 +23,7 @@ public class ScreenBuilder extends Screen implements IScreenBuilder { private TextField active = null; private final Supplier valid; private GuiGraphics graphics; - private ExtendedSlider dragging; + private ForgeSlider dragging; public ScreenBuilder(IScreen screen, Supplier valid) { super(Component.literal("")); @@ -167,7 +167,7 @@ public boolean mouseClicked(double x, double y, int button) { for (AbstractWidget btn : this.buttonMap.keySet()) { if (btn.mouseClicked(x, y, button)) { - if (btn instanceof ExtendedSlider slider) { + if (btn instanceof ForgeSlider slider) { dragging = slider; } return true; diff --git a/src/main/java/cam72cam/mod/gui/screen/Slider.java b/src/main/java/cam72cam/mod/gui/screen/Slider.java index 6dfb9a50f..8a57a91fc 100644 --- a/src/main/java/cam72cam/mod/gui/screen/Slider.java +++ b/src/main/java/cam72cam/mod/gui/screen/Slider.java @@ -2,7 +2,7 @@ import cam72cam.mod.entity.Player; import net.minecraft.network.chat.Component; -import net.neoforged.neoforge.client.gui.widget.ExtendedSlider; +import net.minecraftforge.client.gui.widget.ForgeSlider; import java.util.function.Supplier; import java.util.function.Consumer; @@ -10,7 +10,7 @@ /** Standard slider */ public class Slider extends Button { /** Internal wrapper to add onSlider Hook */ - private static class InternalForgeSlider extends ExtendedSlider { + private static class InternalForgeSlider extends ForgeSlider { private Runnable clicker = () -> {}; private Supplier setter = () -> ""; @@ -69,11 +69,11 @@ public void setValue(double value) { } public int getValueInt() { - return ((ExtendedSlider) button).getValueInt(); + return ((ForgeSlider) button).getValueInt(); } public double getValue() { - return ((ExtendedSlider) button).getValue(); + return ((ForgeSlider) button).getValue(); } @Override diff --git a/src/main/java/cam72cam/mod/input/Keyboard.java b/src/main/java/cam72cam/mod/input/Keyboard.java index cfbd2957b..db70922d4 100644 --- a/src/main/java/cam72cam/mod/input/Keyboard.java +++ b/src/main/java/cam72cam/mod/input/Keyboard.java @@ -5,9 +5,9 @@ import net.minecraft.client.KeyMapping; import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; import net.minecraft.client.Minecraft; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; -import net.neoforged.neoforge.client.settings.KeyConflictContext; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.settings.KeyConflictContext; import org.lwjgl.glfw.GLFW; import javax.annotation.Nullable; diff --git a/src/main/java/cam72cam/mod/input/Mouse.java b/src/main/java/cam72cam/mod/input/Mouse.java index 608702601..affadaf48 100644 --- a/src/main/java/cam72cam/mod/input/Mouse.java +++ b/src/main/java/cam72cam/mod/input/Mouse.java @@ -11,8 +11,8 @@ import cam72cam.mod.net.Packet; import cam72cam.mod.serialization.TagField; import net.minecraft.client.Minecraft; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import java.util.function.Function; diff --git a/src/main/java/cam72cam/mod/item/CreativeTab.java b/src/main/java/cam72cam/mod/item/CreativeTab.java index a173af9d2..20a5b194c 100644 --- a/src/main/java/cam72cam/mod/item/CreativeTab.java +++ b/src/main/java/cam72cam/mod/item/CreativeTab.java @@ -6,7 +6,7 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTabs; -import net.neoforged.neoforge.registries.DeferredHolder; +import net.minecraftforge.registries.RegistryObject; import java.util.ArrayList; import java.util.List; @@ -25,7 +25,7 @@ public class CreativeTab { /** */ public CreativeTab(String label, Supplier stack) { ResourceKey key = lastTab; - DeferredHolder register = CommonEvents.Item.CREATIVE_TAB.register(label, () -> { + RegistryObject register = CommonEvents.Item.CREATIVE_TAB.register(label, () -> { CreativeModeTab.Builder builder = CreativeModeTab.builder(); builder.title(Component.translatable("itemGroup." + label)); builder.icon(() -> stack.get().internal()); diff --git a/src/main/java/cam72cam/mod/item/CustomItem.java b/src/main/java/cam72cam/mod/item/CustomItem.java index 25d2e3781..16f201620 100644 --- a/src/main/java/cam72cam/mod/item/CustomItem.java +++ b/src/main/java/cam72cam/mod/item/CustomItem.java @@ -23,13 +23,14 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.UseOnContext; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; -import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.extensions.common.IClientItemExtensions; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.function.Consumer; /** Implement to create/register a custom item */ public abstract class CustomItem { @@ -103,14 +104,14 @@ private class ItemInternal extends Item { public ItemInternal(Properties p_i48487_1_) { super(p_i48487_1_); - ClientEvents.CLIENT_EXTENSIONS_REGISTER.subscribe(e -> { + /*ClientEvents.CLIENT_EXTENSIONS_REGISTER.subscribe(e -> { e.registerItem(new IClientItemExtensions() { @Override public BlockEntityWithoutLevelRenderer getCustomRenderer() { return ItemRender.ISTER(); } }, this); - }); + });*/ } @Override @@ -162,16 +163,16 @@ public InteractionResultHolder use(net.minec ItemStack stack = umcPlayer.getHeldItem(umcHand).copy(); return InteractionResultHolder.consume(stack.internal()); } -//See constructor -// @Override -// public void initializeClient(Consumer consumer) { -// consumer.accept(new IClientItemExtensions() { -// @Override -// public BlockEntityWithoutLevelRenderer getCustomRenderer() { -// return ItemRender.ISTER(); -// } -// }); -// } + + @Override + public void initializeClient(Consumer consumer) { + consumer.accept(new IClientItemExtensions() { + @Override + public BlockEntityWithoutLevelRenderer getCustomRenderer() { + return ItemRender.ISTER(); + } + }); + } } /** * Helper for serializing / deserializing data on a stack diff --git a/src/main/java/cam72cam/mod/item/Fuzzy.java b/src/main/java/cam72cam/mod/item/Fuzzy.java index 91486b7be..2617d7498 100644 --- a/src/main/java/cam72cam/mod/item/Fuzzy.java +++ b/src/main/java/cam72cam/mod/item/Fuzzy.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; -import net.neoforged.neoforge.common.Tags; +import net.minecraftforge.common.Tags; import java.nio.charset.StandardCharsets; import java.util.*; @@ -30,7 +30,7 @@ public class Fuzzy { public static final Fuzzy STONE_SLAB = new Fuzzy("slabStone").add(Items.STONE_SLAB); public static final Fuzzy STONE_BRICK = new Fuzzy(ItemTags.STONE_BRICKS, "brickStone").add(Blocks.STONE_BRICKS); - public static final Fuzzy SAND = new Fuzzy(Tags.Items.SANDS, "sand").add(Blocks.SAND); + public static final Fuzzy SAND = new Fuzzy(Tags.Items.SAND, "sand").add(Blocks.SAND); public static final Fuzzy PISTON = new Fuzzy("piston").add(Items.PISTON); public static final Fuzzy GOLD_INGOT = new Fuzzy(Tags.Items.INGOTS_GOLD, "ingotGold").add(Items.GOLD_INGOT); @@ -41,7 +41,7 @@ public class Fuzzy { public static final Fuzzy IRON_BARS = new Fuzzy("barsIron").add(Blocks.IRON_BARS); public static final Fuzzy NETHER_BRICK = new Fuzzy("brickNether").add(Blocks.NETHER_BRICKS); - public static final Fuzzy GRAVEL_BLOCK = new Fuzzy(Tags.Items.GRAVELS, "gravel").add(Blocks.GRAVEL); + public static final Fuzzy GRAVEL_BLOCK = new Fuzzy(Tags.Items.GRAVEL, "gravel").add(Blocks.GRAVEL); public static final Fuzzy BRICK_BLOCK = new Fuzzy("brickBlock").add(Blocks.BRICKS); public static final Fuzzy COBBLESTONE = new Fuzzy(Tags.Items.COBBLESTONES, "cobblestone").add(Blocks.COBBLESTONE); public static final Fuzzy CONCRETE = new Fuzzy("concrete") diff --git a/src/main/java/cam72cam/mod/item/IInventory.java b/src/main/java/cam72cam/mod/item/IInventory.java index 0faf4a944..9842022a3 100644 --- a/src/main/java/cam72cam/mod/item/IInventory.java +++ b/src/main/java/cam72cam/mod/item/IInventory.java @@ -1,7 +1,7 @@ package cam72cam.mod.item; import net.minecraft.world.entity.player.Inventory; -import net.neoforged.neoforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.IItemHandlerModifiable; public interface IInventory { /** Wraps MC construct. Do not use */ diff --git a/src/main/java/cam72cam/mod/item/ItemStack.java b/src/main/java/cam72cam/mod/item/ItemStack.java index cc0e8bd08..4f46cd2de 100644 --- a/src/main/java/cam72cam/mod/item/ItemStack.java +++ b/src/main/java/cam72cam/mod/item/ItemStack.java @@ -8,9 +8,10 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.component.CustomData; import net.minecraft.world.item.crafting.RecipeType; -import net.neoforged.neoforge.fluids.FluidUtil; +import net.minecraftforge.fluids.FluidUtil; import java.util.function.Supplier; @@ -159,7 +160,7 @@ public String toString() { /** Increase the damage counter on the item by the player */ public void damageItem(int i, Player player) { - internal().hurtAndBreak(i, (ServerLevel) player.internal.level(), player.internal, (s) -> {}); + internal().hurtAndBreak(i, (ServerLevel) player.internal.level(), (ServerPlayer) player.internal, (s) -> {}); } /** Completely null out the tag compound */ diff --git a/src/main/java/cam72cam/mod/item/ItemStackHandler.java b/src/main/java/cam72cam/mod/item/ItemStackHandler.java index 5e3e8c225..a2a7a11db 100644 --- a/src/main/java/cam72cam/mod/item/ItemStackHandler.java +++ b/src/main/java/cam72cam/mod/item/ItemStackHandler.java @@ -19,14 +19,14 @@ /** Standard IInventory implementation */ @TagMapped(ItemStackHandler.TagMapper.class) public class ItemStackHandler implements IInventory { - public final net.neoforged.neoforge.items.ItemStackHandler internal; + public final net.minecraftforge.items.ItemStackHandler internal; protected BiPredicate checkSlot = (integer, itemStack) -> true; private final List> onChanged = new ArrayList<>(); private Function slotLimit = null; public ItemStackHandler(int size) { - this.internal = new net.neoforged.neoforge.items.ItemStackHandler(size) { + this.internal = new net.minecraftforge.items.ItemStackHandler(size) { @Override public void setStackInSlot(int slot, @Nonnull net.minecraft.world.item.ItemStack stack) { if (checkSlot.test(slot, new ItemStack(stack))) { diff --git a/src/main/java/cam72cam/mod/item/ToolType.java b/src/main/java/cam72cam/mod/item/ToolType.java index 6de94987e..d27d85aa1 100644 --- a/src/main/java/cam72cam/mod/item/ToolType.java +++ b/src/main/java/cam72cam/mod/item/ToolType.java @@ -1,17 +1,17 @@ package cam72cam.mod.item; -import net.neoforged.neoforge.common.ItemAbilities; -import net.neoforged.neoforge.common.ItemAbility; +import net.minecraftforge.common.ToolActions; +import net.minecraftforge.common.ToolAction; /** What class a tool fits into */ public enum ToolType { - PICKAXE(ItemAbilities.PICKAXE_DIG), - AXE(ItemAbilities.AXE_DIG), - SHOVEL(ItemAbilities.SHOVEL_DIG), + PICKAXE(ToolActions.PICKAXE_DIG), + AXE(ToolActions.AXE_DIG), + SHOVEL(ToolActions.SHOVEL_DIG), ; - public final net.neoforged.neoforge.common.ItemAbility internal; + public final ToolAction internal; - ToolType(ItemAbility internal) { + ToolType(ToolAction internal) { this.internal = internal; } diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinAdvancement.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinAdvancement.java index 1d57cd79e..7f9328a4e 100644 --- a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinAdvancement.java +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinAdvancement.java @@ -9,7 +9,7 @@ import net.minecraft.server.ServerAdvancementManager; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.util.profiling.ProfilerFiller; -import net.neoforged.fml.ModLoader; +import net.minecraftforge.fml.ModLoader; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -28,6 +28,6 @@ public class MixinAdvancement { public void postAdvancementReload(Map p_136034_, ResourceManager p_136035_, ProfilerFiller p_136036_, CallbackInfo ci, @Local ImmutableMap.Builder map) { RegisterAdvancementEvent event = new RegisterAdvancementEvent(map); - ModLoader.postEvent(event); + ModLoader.get().postEvent(event); } } diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinMinecraftServer.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinMinecraftServer.java index bacf4c899..7e45fa444 100644 --- a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinMinecraftServer.java +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinMinecraftServer.java @@ -4,7 +4,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.world.level.WorldDataConfiguration; -import net.neoforged.fml.ModLoader; +import net.minecraftforge.fml.ModLoader; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -18,6 +18,6 @@ public class MixinMinecraftServer { @Inject(method = "configurePackRepository", at = @At("HEAD")) private static void callback(PackRepository repo, WorldDataConfiguration config, boolean forceModData, boolean flags, CallbackInfoReturnable cir) { LoadDatapackEvent event = new LoadDatapackEvent(repo); - ModLoader.postEvent(event); + ModLoader.get().postEvent(event); } } diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java index 2f97adef7..b9fc0736e 100644 --- a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java @@ -7,7 +7,6 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; @@ -15,8 +14,11 @@ import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.item.crafting.RecipeType; -import net.neoforged.fml.ModLoader; +import net.minecraftforge.common.crafting.conditions.ICondition; +import net.minecraftforge.fml.ModLoader; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -29,19 +31,22 @@ */ @Mixin(RecipeManager.class) public abstract class MixinRecipeManager extends SimpleJsonResourceReloadListener { + @Shadow + @Final + private ICondition.IContext context; + private MixinRecipeManager(Gson p_10768_, String p_10769_) { super(p_10768_, p_10769_); } @Inject(method = "apply(Ljava/util/Map;Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;)V", - at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/item/crafting/RecipeManager;makeConditionalOps()Lnet/neoforged/neoforge/common/conditions/ConditionalOps;")) + at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/resources/RegistryOps;withContext(Lnet/minecraft/resources/ResourceLocation;Ljava/lang/Object;)Ljava/lang/Object;")) public void captureBuilder(Map p_44037_, ResourceManager p_44038_, ProfilerFiller p_44039_, CallbackInfo ci, - @Local ImmutableMultimap.Builder, RecipeHolder> builder, - @Local ImmutableMap.Builder> builder1, - @Local RegistryOps ops) { - RegistryUtil.recipeBuildingContext(this.makeConditionalOps().context); + @Local(name = "builder") ImmutableMultimap.Builder, RecipeHolder> builder, + @Local(name = "builder1") ImmutableMap.Builder> builder1) { + RegistryUtil.recipeBuildingContext(context); RegisterRecipeEvent event = new RegisterRecipeEvent(builder, builder1); - ModLoader.postEvent(event); + ModLoader.get().postEvent(event); RegistryUtil.recipeBuildingContext(null); } } diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinSpriteResourceLoader.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinSpriteResourceLoader.java index 2e92a7dc7..f4b9128c5 100644 --- a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinSpriteResourceLoader.java +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinSpriteResourceLoader.java @@ -7,6 +7,7 @@ import net.minecraft.client.renderer.texture.atlas.SpriteSourceList; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraftforge.fml.ModLoader; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -25,7 +26,7 @@ private static void inject(ResourceManager manager, ResourceLocation p_261709_, if(p_261709_.getPath().equals("blocks")) { //Only hack into main sprite RegisterTextureSpriteEvent event = new RegisterTextureSpriteEvent(list); - net.neoforged.fml.ModLoader.postEvent(event); + ModLoader.get().postEvent(event); } } } diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinTagCollection.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinTagCollection.java index 752b09280..01d6df04a 100644 --- a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinTagCollection.java +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinTagCollection.java @@ -7,7 +7,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.tags.TagLoader; -import net.neoforged.fml.ModLoader; +import net.minecraftforge.fml.ModLoader; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -33,11 +33,11 @@ public Map> onRegisterTag(Reso //Change me when minecraft version changes case "tags/block": RegisterBlockTagEvent blockTagEvent = new RegisterBlockTagEvent(map); - ModLoader.postEvent(blockTagEvent); + ModLoader.get().postEvent(blockTagEvent); break; case "tags/item": RegisterItemTagEvent itemTagEvent = new RegisterItemTagEvent(map); - ModLoader.postEvent(itemTagEvent); + ModLoader.get().postEvent(itemTagEvent); break; default: //Waiting for more... diff --git a/src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinDeferredWorldRenderingPipeline.java b/src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinDeferredWorldRenderingPipeline.java deleted file mode 100644 index c9e93b8c9..000000000 --- a/src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinDeferredWorldRenderingPipeline.java +++ /dev/null @@ -1,20 +0,0 @@ -package cam72cam.mod.mixin.feat.iris_pbr; - -import net.irisshaders.iris.pipeline.VanillaRenderingPipeline; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -/** - * PBR handler for RenderContext (optional) - */ -@Pseudo -@Mixin(value = VanillaRenderingPipeline.class, remap = false) -public class MixinDeferredWorldRenderingPipeline { - @Inject(method = "onSetShaderTexture", at = @At(value = "HEAD")) - public void onSetPBRTex(int id, CallbackInfo ci) { - //Nothing to do with vanilla - } -} diff --git a/src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinNewWorldRenderingPipeline.java b/src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinNewWorldRenderingPipeline.java deleted file mode 100644 index e1dc0d668..000000000 --- a/src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinNewWorldRenderingPipeline.java +++ /dev/null @@ -1,51 +0,0 @@ -package cam72cam.mod.mixin.feat.iris_pbr; - -import cam72cam.mod.render.opengl.RenderContext; -import cam72cam.mod.render.opengl.RenderState; -import cam72cam.mod.render.opengl.Texture; -import net.irisshaders.iris.pbr.texture.PBRTextureManager; -import net.irisshaders.iris.pipeline.IrisRenderingPipeline; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - - -/** - * PBR handler for RenderContext (optional) - */ -@Pseudo -@Mixin(value = IrisRenderingPipeline.class, remap = false) -public class MixinNewWorldRenderingPipeline { - @Shadow - private int currentNormalTexture; - - @Shadow - private int currentSpecularTexture; - - @Shadow - private boolean shouldBindPBR; - - @Shadow - private boolean isRenderingWorld; - - @Inject(method = "onSetShaderTexture", at = @At("HEAD"), cancellable = true) - public void onSetPBRTex(int id, CallbackInfo ci) { - if (this.shouldBindPBR && this.isRenderingWorld) { - if (RenderContext.currentState.get() != null) { - RenderState state = RenderContext.currentState.get(); - if (state.getNormals() != Texture.NO_TEXTURE && state.getNormals() != null && state.getNormals().getId() != -1) { - currentNormalTexture = state.getNormals().getId(); - } - if (state.getSpecular() != Texture.NO_TEXTURE && state.getSpecular() != null && state.getSpecular().getId() != -1) { - currentSpecularTexture = state.getSpecular().getId(); - } - - PBRTextureManager.notifyPBRTexturesChanged(); - ci.cancel(); - } - } - } -} diff --git a/src/main/java/cam72cam/mod/model/obj/OBJModel.java b/src/main/java/cam72cam/mod/model/obj/OBJModel.java index 9b6a252d2..1e8da6a06 100644 --- a/src/main/java/cam72cam/mod/model/obj/OBJModel.java +++ b/src/main/java/cam72cam/mod/model/obj/OBJModel.java @@ -30,8 +30,8 @@ public class OBJModel { public final int textureHeight; public final int defaultLodSize; public final Map> textures = new HashMap<>(); - public final Map normals = new HashMap<>(); - public final Map speculars = new HashMap<>(); + public final Map> normals = new HashMap<>(); + public final Map> speculars = new HashMap<>(); public final LinkedHashMap groups; //Order by vertex start/stop public final boolean isSmoothShading; @@ -112,7 +112,7 @@ public OBJModel(Identifier modelLoc, float darken, double scale, Collection k.getString("variant"))) { ModCore.debug("%s : tex %s", modelLoc, variant); - Map lodMap = new HashMap<>(); + Map baseTexLodMap = new HashMap<>(); int texSize = Math.max(textureWidth, textureHeight); Supplier texData = cache.getResource(variant + ".rgba", builder -> { @@ -128,7 +128,7 @@ public OBJModel(Identifier modelLoc, float darken, double scale, Collection lodData = cache.getResource(variant + String.format("_%s.rgba", lodValue), builder -> new GenericByteBuffer(toRGBA(scaleImage(builder.getTextures().get(variant).get(), lodValue))) ); - lodMap.put(lodValue, new OBJTextureSheet(size.getLeft(), size.getRight(), lodData, cacheSeconds)); + baseTexLodMap.put(lodValue, new OBJTextureSheet(size.getLeft(), size.getRight(), lodData, cacheSeconds)); } } - this.textures.put(variant, lodMap); + this.textures.put(variant, baseTexLodMap); if (hasNormals) { + Map normalTexLodMap = new HashMap<>(); try { - Supplier normData = cache.getResource(variant + ".norm", builder -> new GenericByteBuffer(toRGBA(builder.getNormals().get(variant).get()))); - this.normals.put(variant, new OBJTextureSheet(textureWidth, textureHeight, normData, cacheSeconds)); + Supplier normData = cache.getResource(variant + ".norm", builder -> { + BufferedImage img = builder.getNormals().get(variant).get(); + if (Config.DebugTextureSheets) { + try { + File cacheFile = ModCore.cacheFile(new Identifier(modelLoc.getDomain() + "debug", modelLoc.getPath() + "_" + variant + "_norm.png")); + ModCore.info("Writing debug normal to " + cacheFile); + ImageIO.write(img, "png", cacheFile); + } catch (IOException e) { + ModCore.catching(e); + } + } + return new GenericByteBuffer(toRGBA(img)); + }); + normalTexLodMap.put(texSize, new OBJTextureSheet(textureWidth, textureHeight, normData, cacheSeconds)); + + for (Integer lodValue : lodValues) { + if (lodValue < texSize) { + Pair size = scaleSize(textureWidth, textureHeight, lodValue); + Supplier lodNormData = cache.getResource(variant + "_" + lodValue + ".norm", + builder -> new GenericByteBuffer(toRGBA(scaleImage(builder.getNormals().get(variant).get(), lodValue)))); + normalTexLodMap.put(lodValue, new OBJTextureSheet(size.getLeft(), size.getRight(), lodNormData, cacheSeconds)); + } + } + this.normals.put(variant, normalTexLodMap); } catch (Exception ex) { ModCore.warn("Unable to load normal map for %s, %s", modelLoc, ex); } } if (hasSpeculars) { + Map specularTexLodMap = new HashMap<>(); try { - Supplier specData = cache.getResource(variant + ".spec", builder -> new GenericByteBuffer(toRGBA(builder.getSpeculars().get(variant).get()))); - this.speculars.put(variant, new OBJTextureSheet(textureWidth, textureHeight, specData, cacheSeconds)); + Supplier specData = cache.getResource(variant + ".spec", builder -> { + BufferedImage img = builder.getSpeculars().get(variant).get(); + if (Config.DebugTextureSheets) { + try { + File cacheFile = ModCore.cacheFile(new Identifier(modelLoc.getDomain() + "debug", modelLoc.getPath() + "_" + variant + "_spec.png")); + ModCore.info("Writing debug specular to " + cacheFile); + ImageIO.write(img, "png", cacheFile); + } catch (IOException e) { + ModCore.catching(e); + } + } + return new GenericByteBuffer(toRGBA(img)); + }); + specularTexLodMap.put(texSize, new OBJTextureSheet(textureWidth, textureHeight, specData, cacheSeconds)); + + for (Integer lodValue : lodValues) { + if (lodValue < texSize) { + Pair size = scaleSize(textureWidth, textureHeight, lodValue); + Supplier lodSpecData = cache.getResource(variant + "_" + lodValue + ".spec", + builder -> new GenericByteBuffer(toRGBA(scaleImage(builder.getSpeculars().get(variant).get(), lodValue)))); + specularTexLodMap.put(lodValue, new OBJTextureSheet(size.getLeft(), size.getRight(), lodSpecData, cacheSeconds)); + } + } + this.speculars.put(variant, specularTexLodMap); } catch (Exception ex) { ModCore.warn("Unable to load specular map for %s, %s", modelLoc, ex); } @@ -302,22 +348,67 @@ public void apply(RenderState state) { } } - if (lodSize == -1) { //A fallback for auto detect lodSize = defaultLodSize; } - if (lodSize == defaultLodSize && OBJModel.this.normals.containsKey(texName)) { - state.normals(OBJModel.this.normals.get(texName).synchronous(wait)); + OBJTextureSheet normTex = null; + if (OBJModel.this.normals.containsKey(texName)) { + Map normLodMap = OBJModel.this.normals.get(texName); + normTex = normLodMap.get(lodSize); + if (normTex == null) { + normTex = normLodMap.get(defaultLodSize); + } + } + if (normTex != null) { + if (wait) { + state.normals(normTex.synchronous(true)); + } else { + normTex.getId(); + if (!normTex.isLoaded()) { + normTex = OBJModel.this.normals.get(texName).values().stream() + .filter(CustomTexture::isLoaded) + .findAny().orElse(null); + } + if (normTex != null) { + state.normals(normTex); + } else { + state.normals(defTex); + } + } } else { state.normals(defTex); } - if (lodSize == defaultLodSize && OBJModel.this.speculars.containsKey(texName)) { - state.specular(OBJModel.this.speculars.get(texName).synchronous(wait)); + + OBJTextureSheet specTex = null; + if (OBJModel.this.speculars.containsKey(texName)) { + Map specLodMap = OBJModel.this.speculars.get(texName); + specTex = specLodMap.get(lodSize); + if (specTex == null) { + specTex = specLodMap.get(defaultLodSize); + } + } + if (specTex != null) { + if (wait) { + state.specular(specTex.synchronous(true)); + } else { + specTex.getId(); + if (!specTex.isLoaded()) { + specTex = OBJModel.this.speculars.get(texName).values().stream() + .filter(CustomTexture::isLoaded) + .findAny().orElse(null); + } + if (specTex != null) { + state.specular(specTex); + } else { + state.specular(defTex); + } + } } else { state.specular(defTex); } + state.smooth_shading(OBJModel.this.isSmoothShading); } diff --git a/src/main/java/cam72cam/mod/net/Packet.java b/src/main/java/cam72cam/mod/net/Packet.java index 9e57eaaa0..d5cbd5920 100644 --- a/src/main/java/cam72cam/mod/net/Packet.java +++ b/src/main/java/cam72cam/mod/net/Packet.java @@ -11,29 +11,37 @@ import cam72cam.mod.serialization.TagField; import cam72cam.mod.serialization.TagSerializer; import cam72cam.mod.world.World; +import io.netty.util.AttributeKey; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.PacketFlow; +import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; +import net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.neoforged.neoforge.network.PacketDistributor; -import net.neoforged.neoforge.network.handling.IPayloadContext; +import net.minecraftforge.event.network.CustomPayloadEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.network.*; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Locale; import java.util.Map; +import java.util.function.BiConsumer; import java.util.function.Supplier; /** * Packet abstraction and registration * @see TagSerializer */ +@Mod.EventBusSubscriber(modid = ModCore.MODID) public abstract class Packet { public static final String VERSION = "1.0"; // Packet class name -> Packet Constructor @@ -61,82 +69,32 @@ public static void register(Supplier sup, PacketDirection dir) { return; } types.put(pktClass, sup); - ResourceLocation name = ResourceLocation.tryBuild(ModCore.MODID, sup.get().getClass().getName().toLowerCase(Locale.ROOT).replace("$", ".")); - CustomPacketPayload.Type type = new CustomPacketPayload.Type<>(name); - CommonEvents.Networking.REGISTER_PACKET.subscribe(reg -> { - reg.commonBidirectional(type, Message.codec, (msg, context) -> { - context.enqueueWork(() -> { - msg.packet.ctx = context; - Packet newPacket = copyFreshPacket(msg); - World world = (context.protocol().isPlay() && context.flow() == PacketFlow.CLIENTBOUND) - ? MinecraftClient.getPlayer().getWorld() : World.get(context.player().level()); - try { - TagSerializer.deserialize(msg.packet.data, newPacket, world); - } catch (SerializationException e) { - ModCore.catching(e); - return; - } - newPacket.ctx = context; - if (newPacket.getPlayer() == null) { - try { - throw new Exception( - String.format("Invalid Packet %s: missing player", newPacket.getClass())); - } catch (Exception e) { - ModCore.catching(e); - return; - } - } - newPacket.handle(); - }); - }); - }); } - //Since 1.20.4 NeoForge will use the identical packet object for networking in singleplayer - //Good optimization but bad for UMC - //Create a new copy to avoid modifying original packet object - private static Packet copyFreshPacket(Message msg) { - Packet newPacket; - try { - Constructor constructor = - msg.packet.getClass().getDeclaredConstructor(); - constructor.setAccessible(true); - newPacket = constructor.newInstance(); - } catch (InstantiationException | IllegalAccessException | - InvocationTargetException | NoSuchMethodException e) { - throw new RuntimeException(e); - } - return newPacket; - } - - IPayloadContext ctx; + CustomPayloadEvent.Context ctx; /** Called after deserialization */ protected abstract void handle(); /** Only valid during handle */ protected final World getWorld() { - if (ctx.protocol().isPlay() && ctx.flow() == PacketFlow.CLIENTBOUND) { - return getPlayer().getWorld(); - } return world; } /** Only valid during handle */ protected final Player getPlayer() { - return (ctx.protocol().isPlay() && ctx.flow() == PacketFlow.CLIENTBOUND) - ? MinecraftClient.getPlayer() - : player; + return player; } /** Send from server to all players around this pos */ public void sendToAllAround(World world, Vec3d pos, double distance) { - PacketDistributor.sendToPlayersNear((ServerLevel) world.internal, null, pos.x, pos.y, pos.z, distance, new Message(this)); + PacketDistributor.NEAR + .with(new PacketDistributor.TargetPoint(pos.x, pos.y, pos.z, distance, world.internal.dimension())) + .send(new ClientboundCustomPayloadPacket(new Message(this))); } /** Send from server to any player who is within viewing (entity tracker update) distance of the entity */ public void sendToObserving(Entity entity) { - net.minecraft.world.entity.Entity internal = entity.internal; int syncDist = entity.internal.getType().clientTrackingRange(); this.sendToAllAround(entity.getWorld(), entity.getPosition(), syncDist); } @@ -145,17 +103,20 @@ public void sendToObserving(Entity entity) { public void sendToServer() { this.player = MinecraftClient.getPlayer(); this.world = MinecraftClient.getPlayer().getWorld(); - PacketDistributor.sendToServer(new Message(this)); + PacketDistributor.SERVER.noArg() + .send(new ServerboundCustomPayloadPacket(new Message(this))); } /** Broadcast to all players from server */ public void sendToAll() { - PacketDistributor.sendToAllPlayers(new Message(this)); + PacketDistributor.ALL.noArg() + .send(new ClientboundCustomPayloadPacket(new Message(this))); } /** Send from server to player */ public void sendToPlayer(Player player) { - PacketDistributor.sendToPlayer((ServerPlayer) player.internal, new Message(this)); + PacketDistributor.PLAYER.with((ServerPlayer) player.internal) + .send(new ClientboundCustomPayloadPacket(new Message(this))); } /** Forge message construct. Do not use directly */ @@ -209,4 +170,32 @@ public CustomPacketPayload.Type type() { return type; } } + + /** + * Internal + */ + @SubscribeEvent + public static void onCustomPacket(CustomPayloadEvent event) { + if (event.getPayloadObject() instanceof Message message) { + event.getSource().enqueueWork(() -> { + World world = World.get(event.getSource().getSender().level()); + try { + TagSerializer.deserialize(message.packet.data, message.packet, world); + } catch (SerializationException e) { + ModCore.catching(e); + return; + } + if (message.packet.getPlayer() == null) { + try { + throw new Exception( + String.format("Invalid Packet %s: missing player", message.packet.getClass())); + } catch (Exception e) { + ModCore.catching(e); + return; + } + } + message.packet.handle(); + }); + } + } } diff --git a/src/main/java/cam72cam/mod/render/BakedScaledModel.java b/src/main/java/cam72cam/mod/render/BakedScaledModel.java index 99b7ba400..ebccab937 100644 --- a/src/main/java/cam72cam/mod/render/BakedScaledModel.java +++ b/src/main/java/cam72cam/mod/render/BakedScaledModel.java @@ -9,8 +9,8 @@ import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.client.model.IQuadTransformer; -import net.neoforged.neoforge.client.model.QuadTransformers; +import net.minecraftforge.client.model.IQuadTransformer; +import net.minecraftforge.client.model.QuadTransformers; import org.joml.Matrix4f; import util.Matrix4; diff --git a/src/main/java/cam72cam/mod/render/BlockRender.java b/src/main/java/cam72cam/mod/render/BlockRender.java index 80c1f14ad..577622f33 100644 --- a/src/main/java/cam72cam/mod/render/BlockRender.java +++ b/src/main/java/cam72cam/mod/render/BlockRender.java @@ -32,7 +32,7 @@ import net.minecraft.world.level.material.MapColor; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.neoforged.neoforge.client.model.data.ModelData; +import net.minecraftforge.client.model.data.ModelData; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -123,14 +123,6 @@ public void render(TileEntity te, float partialTicks, PoseStack var3, MultiBuffe public boolean shouldRenderOffScreen(TileEntity te) { return true; } - - @Override - public AABB getRenderBoundingBox(TileEntity blockEntity) { - if (blockEntity.instance() != null) { - return blockEntity.bbCache.get(blockEntity.instance().getRenderBoundingBox()); - } - return TileEntity.INFINITE_EXTENT_AABB; - } }); }); } diff --git a/src/main/java/cam72cam/mod/render/EntityRenderer.java b/src/main/java/cam72cam/mod/render/EntityRenderer.java index 957249053..9c70e13bd 100644 --- a/src/main/java/cam72cam/mod/render/EntityRenderer.java +++ b/src/main/java/cam72cam/mod/render/EntityRenderer.java @@ -136,7 +136,8 @@ public void render(T stock, float entityYaw, float partialTicks, PoseStack p_225 int k = (i >> 20) & 0xF; RenderState state = new RenderState(p_225623_4_).lightmap(j / 15f, k / 15f); state.rotate(180 - entityYaw, 0, 1, 0); - state.rotate(self.getRotationPitch(), 1, 0, 0); + state.rotate(self.getRotationPitch(partialTicks), 1, 0, 0); + state.rotate(self.getRotationRoll(partialTicks), 0, 0, 1); state.rotate(-90, 0, 1, 0); state.stage(RenderContext.Stage.ENTITY); //Set up our own light state diff --git a/src/main/java/cam72cam/mod/render/GlobalRender.java b/src/main/java/cam72cam/mod/render/GlobalRender.java index 7e36c2c98..c75bd7fa6 100644 --- a/src/main/java/cam72cam/mod/render/GlobalRender.java +++ b/src/main/java/cam72cam/mod/render/GlobalRender.java @@ -15,7 +15,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.neoforged.neoforge.client.gui.VanillaGuiLayers; +import net.minecraftforge.client.event.CustomizeGuiOverlayEvent; import org.joml.Matrix4f; import java.util.ArrayList; @@ -30,15 +30,16 @@ public class GlobalRender { public static void registerClientEvents() { // Nice to have GPU info in F3 ClientEvents.RENDER_DEBUG.subscribe(event -> { - if (Minecraft.getInstance().getDebugOverlay().showDebugScreen() && GPUInfo.hasGPUInfo()) { + if (Minecraft.getInstance().getDebugOverlay().showDebugScreen() + && event.getSide() == CustomizeGuiOverlayEvent.DebugText.Side.Right && GPUInfo.hasGPUInfo()) { int i; - for (i = 0; i < event.getRight().size(); i++) { - if (event.getRight().get(i).startsWith("Display: ")) { + for (i = 0; i < event.getText().size(); i++) { + if (event.getText().get(i).startsWith("Display: ")) { i++; break; } } - event.getRight().add(i, GPUInfo.debug()); + event.getText().add(i, GPUInfo.debug()); } }); } @@ -49,12 +50,12 @@ public static void registerRender(RenderFunction func) { } /** Register a function that is called (with partial ticks) during the UI render phase */ - public static void registerOverlay(RenderFunction func) { - ClientEvents.RENDER_OVERLAY.subscribe(event -> { - if (event.getName().equals(VanillaGuiLayers.HOTBAR) && !Minecraft.getInstance().options.hideGui) { - func.render(new RenderState(event.getGuiGraphics().pose()).stage(RenderContext.Stage.GUI), event.getPartialTick().getRealtimeDeltaTicks()); - } - }); + public static void registerOverlay(RenderFunction func) { // TODO + //ClientEvents.RENDER_OVERLAY.subscribe(event -> { + // if (event.getName().equals(VanillaGuiLayers.HOTBAR) && !Minecraft.getInstance().options.hideGui) { + // func.render(new RenderState(event.getGuiGraphics().pose()).stage(RenderContext.Stage.GUI), event.getPartialTick().getRealtimeDeltaTicks()); + // } + //}); } /** Register a function that is called to render during the mouse over phase (only if a block is moused over) */ @@ -64,7 +65,7 @@ public static void registerItemMouseover(CustomItem item, MouseoverEvent fn) { Player player = MinecraftClient.getPlayer(); if (item.internal == player.getHeldItem(Player.Hand.PRIMARY).internal().getItem()) { fn.render(player, player.getHeldItem(Player.Hand.PRIMARY), MinecraftClient.getBlockMouseOver().down(), - MinecraftClient.getPosMouseOver(), new RenderState(event.getPoseStack()).stage(RenderContext.Stage.OVERLAY), event.getDeltaTracker().getRealtimeDeltaTicks()); + MinecraftClient.getPosMouseOver(), new RenderState(event.getPoseStack()).stage(RenderContext.Stage.OVERLAY), event.getPartialTick()); } } }); diff --git a/src/main/java/cam72cam/mod/render/ItemRender.java b/src/main/java/cam72cam/mod/render/ItemRender.java index fccba1b2b..2d7971ce2 100644 --- a/src/main/java/cam72cam/mod/render/ItemRender.java +++ b/src/main/java/cam72cam/mod/render/ItemRender.java @@ -34,10 +34,9 @@ import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.client.model.ExtraFaceData; -import net.neoforged.neoforge.client.model.ItemLayerModel; -import net.neoforged.neoforge.client.model.SimpleModelState; -import net.neoforged.neoforge.client.model.geometry.IGeometryBakingContext; +import net.minecraftforge.client.model.ItemLayerModel; +import net.minecraftforge.client.model.SimpleModelState; +import net.minecraftforge.client.model.geometry.IGeometryBakingContext; import org.apache.commons.lang3.tuple.Pair; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; diff --git a/src/main/java/cam72cam/mod/render/Light.java b/src/main/java/cam72cam/mod/render/Light.java index eeca5e129..ff29e2016 100644 --- a/src/main/java/cam72cam/mod/render/Light.java +++ b/src/main/java/cam72cam/mod/render/Light.java @@ -5,9 +5,6 @@ import cam72cam.mod.event.CommonEvents; import cam72cam.mod.math.Vec3d; import cam72cam.mod.world.World; -import dev.lambdaurora.lambdynlights.api.DynamicLightsContext; -import dev.lambdaurora.lambdynlights.api.DynamicLightsInitializer; -import dev.lambdaurora.lambdynlights.api.item.ItemLightSourceManager; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.SynchedEntityData; @@ -144,29 +141,6 @@ public static boolean enabled() { } private static boolean isLDLInstalled() { - try { - Class cls = Class.forName("dev.lambdaurora.lambdynlights.LambDynLights"); - return true; - } catch (ClassNotFoundException ignored) { - return false; - } - } - - public static class UMCDynLightInitializer implements DynamicLightsInitializer { - @Override - public void onInitializeDynamicLights(DynamicLightsContext lightCtx) { - lightCtx.entityLightSourceManager().onRegisterEvent().register(context -> { - for (int i = 1; i <= 15; i++) { - EntityType et = types[i]; - context.register(et, i); - } - }); - } - - @Deprecated(forRemoval = true) - @Override - public void onInitializeDynamicLights(ItemLightSourceManager itemLightSourceManager) { - //Deprecated - } + return false; // Cannot be installed on MinecraftForge >1.20.1 } } diff --git a/src/main/java/cam72cam/mod/render/SpriteSheet.java b/src/main/java/cam72cam/mod/render/SpriteSheet.java index 960aeef37..dc5b57a3e 100644 --- a/src/main/java/cam72cam/mod/render/SpriteSheet.java +++ b/src/main/java/cam72cam/mod/render/SpriteSheet.java @@ -60,7 +60,7 @@ private void allocateSheet() { */ public void setSprite(Identifier id, ByteBuffer pixels) { if (!sprites.containsKey(id)) { - if (unallocated.size() == 0) { + if (unallocated.isEmpty()) { allocateSheet(); } sprites.put(id, unallocated.remove(0)); @@ -90,17 +90,11 @@ public void renderSprite(Identifier id, RenderState state) { .rotate(180, 1, 0, 0) .translate(0, -1, 0); DirectDraw buffer = new DirectDraw(); - - try (With ctx = RenderContext.apply(state)) { - buffer.vertex(0, 0, 0).color(1, 1, 1, 1).uv(sprite.uMin, sprite.vMin); - buffer.vertex(0, 1, 0).color(1, 1, 1, 1).uv(sprite.uMin, sprite.vMax); - buffer.vertex(1, 1, 0).color(1, 1, 1, 1).uv(sprite.uMax, sprite.vMax); - buffer.vertex(1, 0, 0).color(1, 1, 1, 1).uv(sprite.uMax, sprite.vMin); - } - ; + buffer.vertex(0, 0, 0).color(1, 1, 1, 1).uv(sprite.uMin, sprite.vMin); + buffer.vertex(0, 1, 0).color(1, 1, 1, 1).uv(sprite.uMin, sprite.vMax); + buffer.vertex(1, 1, 0).color(1, 1, 1, 1).uv(sprite.uMax, sprite.vMax); + buffer.vertex(1, 0, 0).color(1, 1, 1, 1).uv(sprite.uMax, sprite.vMin); buffer.draw(state); - - } /** diff --git a/src/main/java/cam72cam/mod/render/opengl/RenderContext.java b/src/main/java/cam72cam/mod/render/opengl/RenderContext.java index 24174ea3c..c379ee9ac 100644 --- a/src/main/java/cam72cam/mod/render/opengl/RenderContext.java +++ b/src/main/java/cam72cam/mod/render/opengl/RenderContext.java @@ -16,9 +16,13 @@ import org.joml.Vector3f; import org.joml.Vector4f; import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL20; import org.lwjgl.opengl.GL32; import util.Matrix4; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.IntBuffer; import java.util.*; import static cam72cam.mod.render.opengl.Texture.NO_TEXTURE; @@ -31,6 +35,8 @@ public class RenderContext { //Modified from rendertype_entity_cutout, fix model normal public static ShaderInstance UMC_CORE; + private static IntBuffer fourIntBuffer; + public static float lastLightX; public static float lastLightY; @@ -139,19 +145,31 @@ public static With applyBaseState(RenderState state) { restore.add(state.blend.apply()); } - //Always assume scissor test is disabled - if (state.scissor_test != null && state.scissor_test && state.scissor_range != null) { - int scaleFactor = (int) Minecraft.getInstance().getWindow().getGuiScale(); - int screenHeight = GUIHelpers.getScreenHeight() * scaleFactor; - - int x = (int) state.scissor_range.getMinX() * scaleFactor; - int y = (int) state.scissor_range.getMinY() * scaleFactor; - int width = (int) state.scissor_range.getWidth() * scaleFactor; - int height = (int) state.scissor_range.getHeight() * scaleFactor; + if (state.scissor_test != null) { + boolean oldValue = GL11.glGetBoolean(GL11.GL_SCISSOR_TEST); + applyBool(GL11.GL_SCISSOR_TEST, state.scissor_test); + if (state.scissor_test && state.scissor_range != null) { + int scaleFactor = (int) Minecraft.getInstance().getWindow().getGuiScale(); + int screenHeight = GUIHelpers.getScreenHeight() * scaleFactor; + + int x = (int) state.scissor_range.getMinX() * scaleFactor; + int y = (int) state.scissor_range.getMinY() * scaleFactor; + int width = (int) state.scissor_range.getWidth() * scaleFactor; + int height = (int) state.scissor_range.getHeight() * scaleFactor; + + if (fourIntBuffer == null) { + //16 ints in case it overflows... + fourIntBuffer = ByteBuffer.allocateDirect(64).order(ByteOrder.nativeOrder()).asIntBuffer(); + } + fourIntBuffer.position(0); + GL11.glGetIntegerv(GL11.GL_SCISSOR_BOX, fourIntBuffer); + int[] oldScissor = new int[]{fourIntBuffer.get(0), fourIntBuffer.get(1), fourIntBuffer.get(2), fourIntBuffer.get(3)}; + restore.add(() -> GL11.glScissor(oldScissor[0], oldScissor[1], oldScissor[2], oldScissor[3])); - //We set origin point at Top-Left corner but OpenGL takes Bottom-Left corner, so wraps y - RenderSystem.enableScissor(x, screenHeight - y - height, width, height); - restore.add(RenderSystem::disableScissor); + //We set origin point at Top-Left corner but OpenGL takes Bottom-Left corner, so wraps y + GL11.glScissor(x, screenHeight - y - height, width, height); + } + restore.add(() -> applyBool(GL11.GL_SCISSOR_TEST, oldValue)); } RenderContext.checkError(); diff --git a/src/main/java/cam72cam/mod/render/opengl/RenderState.java b/src/main/java/cam72cam/mod/render/opengl/RenderState.java index 63f149d6e..fcec26cd3 100644 --- a/src/main/java/cam72cam/mod/render/opengl/RenderState.java +++ b/src/main/java/cam72cam/mod/render/opengl/RenderState.java @@ -4,8 +4,8 @@ import cam72cam.mod.render.OptiFine; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.neoforge.common.util.Lazy; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.common.util.Lazy; import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; diff --git a/src/main/java/cam72cam/mod/resource/BuiltinPack.java b/src/main/java/cam72cam/mod/resource/BuiltinPack.java index 16a88ae8e..cbb9ebe1d 100644 --- a/src/main/java/cam72cam/mod/resource/BuiltinPack.java +++ b/src/main/java/cam72cam/mod/resource/BuiltinPack.java @@ -14,10 +14,10 @@ import net.minecraft.server.packs.repository.PackSource; import net.minecraft.server.packs.resources.IoSupplier; import net.minecraft.world.flag.FeatureFlagSet; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.ModList; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.fml.loading.FMLPaths; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.loading.FMLPaths; import javax.annotation.Nullable; import java.io.ByteArrayInputStream; diff --git a/src/main/java/cam72cam/mod/resource/Data.java b/src/main/java/cam72cam/mod/resource/Data.java index bb913df8f..362052a5c 100644 --- a/src/main/java/cam72cam/mod/resource/Data.java +++ b/src/main/java/cam72cam/mod/resource/Data.java @@ -2,8 +2,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.server.packs.resources.Resource; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.fml.loading.FMLPaths; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.fml.loading.FMLPaths; import org.apache.commons.io.IOUtils; import java.io.*; diff --git a/src/main/java/cam72cam/mod/text/PlayerMessage.java b/src/main/java/cam72cam/mod/text/PlayerMessage.java index 46b24d740..1a402e311 100644 --- a/src/main/java/cam72cam/mod/text/PlayerMessage.java +++ b/src/main/java/cam72cam/mod/text/PlayerMessage.java @@ -1,7 +1,7 @@ package cam72cam.mod.text; import net.minecraft.network.chat.Component; -import net.neoforged.neoforge.common.CommonHooks; +import net.minecraftforge.common.ForgeHooks; import java.util.Arrays; @@ -26,6 +26,6 @@ public static PlayerMessage translate(String msg, Object... objects) { /** URL Formatted (clickable) */ public static PlayerMessage url(String url) { - return new PlayerMessage(CommonHooks.newChatWithLinks(url)); + return new PlayerMessage(ForgeHooks.newChatWithLinks(url)); } } diff --git a/src/main/java/cam72cam/mod/util/MinecraftFiles.java b/src/main/java/cam72cam/mod/util/MinecraftFiles.java index 6444f4947..60bdc0042 100644 --- a/src/main/java/cam72cam/mod/util/MinecraftFiles.java +++ b/src/main/java/cam72cam/mod/util/MinecraftFiles.java @@ -1,7 +1,7 @@ package cam72cam.mod.util; import cam72cam.mod.world.World; -import net.neoforged.fml.loading.FMLPaths; +import net.minecraftforge.fml.loading.FMLPaths; import java.io.File; import java.nio.file.Path; diff --git a/src/main/java/cam72cam/mod/util/RegistryUtil.java b/src/main/java/cam72cam/mod/util/RegistryUtil.java index 511892a17..a18908496 100644 --- a/src/main/java/cam72cam/mod/util/RegistryUtil.java +++ b/src/main/java/cam72cam/mod/util/RegistryUtil.java @@ -5,9 +5,9 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.Holder; import net.minecraft.core.RegistryAccess; -import net.neoforged.fml.util.thread.EffectiveSide; -import net.neoforged.neoforge.common.conditions.ICondition; -import net.neoforged.neoforge.server.ServerLifecycleHooks; +import net.minecraftforge.common.crafting.conditions.ICondition; +import net.minecraftforge.fml.util.thread.EffectiveSide; +import net.minecraftforge.server.ServerLifecycleHooks; import javax.annotation.Nonnull; import java.util.ArrayList; diff --git a/src/main/java/cam72cam/mod/world/World.java b/src/main/java/cam72cam/mod/world/World.java index 13772fb43..43bab3f70 100644 --- a/src/main/java/cam72cam/mod/world/World.java +++ b/src/main/java/cam72cam/mod/world/World.java @@ -43,13 +43,14 @@ import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.neoforge.common.SpecialPlantable; -import net.neoforged.neoforge.fluids.capability.IFluidHandler; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.IItemHandlerModifiable; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; import org.apache.commons.lang3.NotImplementedException; import java.util.*; @@ -639,7 +640,7 @@ public boolean isReplaceable(Vec3i pos) { if (block instanceof BushBlock) { return true; } - if (block.asItem() instanceof SpecialPlantable) { + if (block.asItem() instanceof IPlantable) { return true; } if (block instanceof LiquidBlock) { @@ -672,17 +673,12 @@ public IInventory getInventory(Vec3i offset) { /** Get the inventory at this block (accessed from given side) */ public IInventory getInventory(Vec3i offset, Facing dir) { - if (dir != null) { - IItemHandler capability = internal.getCapability(TileEntity.ITEM_HANDLER_BLOCK, offset.internal(), dir.internal); - if (capability instanceof IItemHandlerModifiable) { - return IInventory.from((IItemHandlerModifiable) capability); - } - } else { - for(Facing facing : Facing.values()){ - IItemHandler capability = internal.getCapability(TileEntity.ITEM_HANDLER_BLOCK, offset.internal(), facing.internal); - if (capability instanceof IItemHandlerModifiable) { - return IInventory.from((IItemHandlerModifiable) capability); - } + net.minecraft.world.level.block.entity.BlockEntity te = internal.getBlockEntity(offset.internal()); + Direction face = dir != null ? dir.internal : null; + if (te != null && te.getCapability(ForgeCapabilities.ITEM_HANDLER, face).isPresent()) { + IItemHandler inv = te.getCapability(ForgeCapabilities.ITEM_HANDLER, face).orElse(null); + if (inv instanceof IItemHandlerModifiable) { + return IInventory.from((IItemHandlerModifiable) inv); } } return null; @@ -701,17 +697,12 @@ public List getTank(Vec3i offset) { /** Get the tank at this block (accessed from given side) */ public List getTank(Vec3i offset, Facing dir) { - if (dir != null) { - IFluidHandler capability = internal.getCapability(TileEntity.FLUID_HANDLER_BLOCK, offset.internal(), dir.internal); - if (capability != null) { - return ITank.getTank(capability); - } - } else { - for(Facing facing : Facing.values()){ - IFluidHandler capability = internal.getCapability(TileEntity.FLUID_HANDLER_BLOCK, offset.internal(), facing.internal); - if (capability != null) { - return ITank.getTank(capability); - } + net.minecraft.world.level.block.entity.BlockEntity te = internal.getBlockEntity(offset.internal()); + Direction face = dir != null ? dir.internal : null; + if (te != null && te.getCapability(ForgeCapabilities.FLUID_HANDLER, face).isPresent()) { + IFluidHandler tank = te.getCapability(ForgeCapabilities.FLUID_HANDLER, face).orElse(null); + if (tank != null) { + return ITank.getTank(tank); } } return null; diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 4e70798ef..e3a47e231 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,6 +1,9 @@ public net.minecraft.server.level.ServerChunkCache distanceManager # distanceManager public net.minecraft.server.level.DistanceManager tickets # tickets public net.minecraft.server.MinecraftServer storageSource # storageSource +public net.minecraft.server.packs.FilePackResources (Lnet/minecraft/server/packs/PackLocationInfo;Lnet/minecraft/server/packs/FilePackResources$SharedZipFileAccess;Ljava/lang/String;)V +public net.minecraft.server.packs.FilePackResources$SharedZipFileAccess +public net.minecraft.server.packs.FilePackResources$SharedZipFileAccess (Ljava/io/File;)V public net.minecraft.server.packs.FolderPackResources getFile(Ljava/lang/String;)Ljava/io/File; # getFile public net.minecraft.server.level.ChunkMap getChunks()Ljava/lang/Iterable; # getChunks public-f net.minecraft.world.entity.Entity getBoundingBox()Lnet/minecraft/world/phys/AABB; # net/minecraft/world/entity/Entity/getBoundingBox ()Lnet/minecraft/world/phys/AABB @@ -8,10 +11,10 @@ public net.minecraft.client.multiplayer.ClientLevel connection #connection public net.minecraft.client.renderer.GameRenderer renderBuffers #renderBuffers public net.minecraft.client.gui.components.Checkbox (IILnet/minecraft/network/chat/Component;Lnet/minecraft/client/gui/Font;ZLnet/minecraft/client/gui/components/Checkbox$OnValueChange;)V public-f net.minecraft.client.gui.components.AbstractWidget render(Lnet/minecraft/client/gui/GuiGraphics;IIF)V -public net.neoforged.neoforge.common.CreativeModeTabRegistry recalculateItemCreativeModeTabs()V +public net.minecraftforge.common.CreativeModeTabRegistry recalculateItemCreativeModeTabs()V public net.minecraft.client.gui.components.Checkbox (IIILnet/minecraft/network/chat/Component;Lnet/minecraft/client/gui/Font;ZLnet/minecraft/client/gui/components/Checkbox$OnValueChange;)V public net.minecraft.client.renderer.MultiBufferSource$BufferSource startedBuilders -public net.neoforged.neoforge.client.model.ItemLayerModel (Lcom/google/common/collect/ImmutableList;Lit/unimi/dsi/fastutil/ints/Int2ObjectMap;Lit/unimi/dsi/fastutil/ints/Int2ObjectMap;)V +public net.minecraftforge.client.model.ItemLayerModel (Lcom/google/common/collect/ImmutableList;Lit/unimi/dsi/fastutil/ints/Int2ObjectMap;Lit/unimi/dsi/fastutil/ints/Int2ObjectMap;)V public net.minecraft.client.resources.model.ModelManager atlases # atlases public net.minecraft.client.resources.model.ModelManager maxMipmapLevels # maxMipmapLevels public net.minecraft.client.multiplayer.prediction.BlockStatePredictionHandler$ServerVerifiedState @@ -24,6 +27,6 @@ public net.minecraft.world.entity.item.ItemEntity target # target public net.minecraft.world.phys.shapes.VoxelShape (Lnet/minecraft/world/phys/shapes/DiscreteVoxelShape;)V public net.minecraft.world.phys.shapes.VoxelShape shape # shape public net.minecraft.util.math.shapes.VoxelShapeCube (Lnet/minecraft/world/phys/shapes/DiscreteVoxelShape;)V -public net.neoforged.neoforge.common.conditions.ConditionalOps context +public net.minecraftforge.common.conditions.ConditionalOps context public com.mojang.blaze3d.platform.Lighting DIFFUSE_LIGHT_0 public com.mojang.blaze3d.platform.Lighting DIFFUSE_LIGHT_1 \ No newline at end of file diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml new file mode 100644 index 000000000..4cb4bd9b6 --- /dev/null +++ b/src/main/resources/META-INF/mods.toml @@ -0,0 +1,28 @@ +modLoader="javafml" +loaderVersion="[52,)" +issueTrackerURL="https://github.com/TeamOpenIndustry/UniversalModCore/issues" +license="LGPL" + +[[mods]] +modId="universalmodcore" +version="1.3.0" +displayName="Universal Mod Core" +displayURL="https://github.com/TeamOpenIndustry/UniversalModCore" +authors="cam72cam" +description=''' +Universal Mod API (Minecraft version agnostic) +''' + +[[dependencies.universalmodcore]] +modId="forge" +mandatory=true +versionRange="[52.1.14,)" +ordering="NONE" +side="BOTH" + +[[dependencies.universalmodcore]] +modId="minecraft" +mandatory=true +versionRange="[1.21.1]" +ordering="NONE" +side="BOTH" diff --git a/src/main/resources/META-INF/neoforge.mods.toml b/src/main/resources/META-INF/neoforge.mods.toml deleted file mode 100644 index 7bed328e9..000000000 --- a/src/main/resources/META-INF/neoforge.mods.toml +++ /dev/null @@ -1,36 +0,0 @@ -modLoader="javafml" -loaderVersion="[2,)" -issueTrackerURL="https://github.com/TeamOpenIndustry/UniversalModCore/issues" -license="LGPL" - -[[mods]] -modId="universalmodcore" -version="1.2.3" -displayName="Universal Mod Core" -displayURL="https://github.com/TeamOpenIndustry/UniversalModCore" -authors="cam72cam" -description=''' -Universal Mod API (Minecraft version agnostic) -''' - -[[mixins]] -config="mixins.feat.universalmodcore.json" -[[mixins]] -config="mixins.fix.universalmodcore.json" - -[modproperties.universalmodcore."yumi:entrypoints"] -"lambdynlights:initializer" = "cam72cam.mod.render.Light$UMCDynLightInitializer" - -[[dependencies.universalmodcore]] - modId="neoforge" - type='required' - versionRange="[21.1.216,)" - ordering="NONE" - side="BOTH" - -[[dependencies.universalmodcore]] - modId="minecraft" - type='required' - versionRange="[1.21.1]" - ordering="NONE" - side="BOTH" diff --git a/src/main/resources/mixins.feat.universalmodcore.json b/src/main/resources/mixins.feat.universalmodcore.json index c58697fda..76eeb9d36 100644 --- a/src/main/resources/mixins.feat.universalmodcore.json +++ b/src/main/resources/mixins.feat.universalmodcore.json @@ -6,6 +6,9 @@ "minVersion": "0.8.2", "compatibilityLevel": "JAVA_17", "mixinPriority": 1300, + "mixinextras": { + "minVersion": "0.5.0" + }, "mixins": [ "data_registry.MixinAdvancement", "data_registry.MixinMinecraftServer", @@ -15,8 +18,6 @@ ], "client": [ "data_registry.MixinSpriteResourceLoader", - "global_renderer.MixinRenderGlobal", - "iris_pbr.MixinDeferredWorldRenderingPipeline", - "iris_pbr.MixinNewWorldRenderingPipeline" + "global_renderer.MixinRenderGlobal" ] } diff --git a/src/main/resources/mixins.fix.universalmodcore.json b/src/main/resources/mixins.fix.universalmodcore.json index 73af28171..0a12048b6 100644 --- a/src/main/resources/mixins.fix.universalmodcore.json +++ b/src/main/resources/mixins.fix.universalmodcore.json @@ -6,6 +6,9 @@ "minVersion": "0.8.2", "compatibilityLevel": "JAVA_8", "mixinPriority": 1301, + "mixinextras": { + "minVersion": "0.5.0" + }, "mixins": [ "always_shown_tab.MixinCreativeModeTab", "custom_bb_collision.MixinVoxelShapes", diff --git a/src/main/resources/template/UMC.md b/src/main/resources/template/UMC.md index d60e3afd5..b0c28ce55 100644 --- a/src/main/resources/template/UMC.md +++ b/src/main/resources/template/UMC.md @@ -1 +1 @@ -You don't need to run anything manually, NeoGradle has done them for you \ No newline at end of file +You don't need to run anything manually, ForgeGradle 7 has done them for you \ No newline at end of file diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index 77c5816d3..ece594936 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -1,86 +1,112 @@ //BUILDSCRIPT// -buildscript { - repositories { - maven { - name "neoforgedReleases" - url "https://maven.neoforged.net/releases" - } - maven { url "https://plugins.gradle.org/m2/" } - mavenCentral() - } - dependencies { - classpath group: 'net.neoforged.gradle', name: 'userdev', version: '7.1.11' - classpath group: 'net.neoforged.gradle', name: 'common', version: '7.1.11' - } +plugins { + id 'java' + id 'eclipse' + //A customized fork for better support on Cleanroom + id 'xyz.wagyourtail.unimined' version "1.4.18-kappa" + id 'com.gradleup.shadow' version "9.4.1" + id "maven-publish" + id 'xyz.wagyourtail.jvmdowngrader' version '1.3.6' +} +configurations { + umcShade + modImplementation.extendsFrom umcShade } //PLUGINS// -apply plugin: 'net.neoforged.gradle.userdev' -apply plugin: 'net.neoforged.gradle.common' -apply plugin: 'eclipse' //MINECRAFT// -sourceSets { - main { - resources { - srcDirs = [ - "$rootDir/src/main/resources", - "$rootDir/src/generated/resources" - ] - } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(25) } + + withSourcesJar() } -java.toolchain.languageVersion = JavaLanguageVersion.of(21) -runs { - configureEach { - systemProperty 'forge.logging.markers', 'REGISTRIES' - systemProperty 'forge.logging.console.level', 'debug' +tasks.withType(JavaCompile).configureEach { + options.release = 25 + options.encoding = 'UTF-8' +} - modSource project.sourceSets.main - } +jvmdg { + quiet = false + downgradeTo = JavaVersion.VERSION_1_8 + multiReleaseOriginal = true + shadeInlining = false + dg(configurations.umcShade, false) + //MR-JAR uses a Incremental Update-like strategy, so add versions here won't cause too much waste + multiReleaseVersions = [ + JavaVersion.VERSION_1_8, // 1.16 and below + JavaVersion.VERSION_16, // 1.17 + JavaVersion.VERSION_17, // 1.18 - 1.20 + JavaVersion.VERSION_21, // 1.21 + JavaVersion.VERSION_25 // 26.1 and beyond as well as modern 1.7.10/1.12.2 + ].toSet() +} - client { - systemProperty 'neoforge.enabledGameTestNamespaces', '#ID#' - } +unimined.minecraft { + version "1.21.1" - server { - systemProperty 'neoforge.enabledGameTestNamespaces', '#ID#' - argument '--nogui' + mappings { + intermediary() + mojmap() + parchment("1.21.1", "2024.11.17") } - gameTestServer { - systemProperty 'neoforge.enabledGameTestNamespaces', '#ID#' + mods { + modImplementation { + //In case something uses named mapping in AW + catchAWNamespaceAssertion() + } } - data {arguments.addAll '--mod', '#ID#', '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() + minecraftForge { + loader("52.1.14") } + + defaultRemapJar = true } //DEPENDENCIES// #UMC_REPO# dependencies { - implementation "net.neoforged:neoforge:21.1.216" implementation group: 'javax.vecmath', name: 'vecmath', version: '1.5.2' - implementation #UMC_DEPENDENCY# + modImplementation #UMC_DEPENDENCY# } //JAR// jar { - manifest { - attributes([ - "Specification-Title": "#ID#", - "Specification-Vendor": "#ID#", - "Specification-Version": "1", // We are version 1 of ourselves - "Implementation-Title": project.name, - "Implementation-Version": "${version}", - "Implementation-Vendor" :"#ID#", - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") - ]) - } + enabled = false } -tasks.withType(JavaCompile).configureEach { - options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation +shadowJar { + configurations = [project.configurations.umcShade] + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + mergeServiceFiles() + archiveClassifier = 'shadow' +} + +remapJar { + inputFile = tasks.shadeDowngradedApi.archiveFile + dependsOn(tasks.named("shadowJar")) + archiveClassifier = '' +} + +tasks.named("assemble") { + dependsOn(tasks.named("remapJar")) +} + +processResources { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + inputs.property "version", project.version + inputs.property "mcversion", "#MINECRAFT#" + from(sourceSets.main.resources.srcDirs) { + include 'mcmod.info' + expand 'version':project.version, 'mcversion':"#MINECRAFT#" + } + from(sourceSets.main.resources.srcDirs) { + exclude 'mcmod.info' + } } diff --git a/src/main/resources/template/gradle/wrapper/gradle-wrapper.properties b/src/main/resources/template/gradle/wrapper/gradle-wrapper.properties index 7471fbebb..23a74e6e7 100644 --- a/src/main/resources/template/gradle/wrapper/gradle-wrapper.properties +++ b/src/main/resources/template/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip diff --git a/src/main/resources/template/settings.gradle b/src/main/resources/template/settings.gradle new file mode 100644 index 000000000..f130cc7b7 --- /dev/null +++ b/src/main/resources/template/settings.gradle @@ -0,0 +1,19 @@ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + maven {url = "https://plugins.gradle.org/"} + maven {url = "https://maven.neoforged.net/releases"} + maven {url = "https://maven.minecraftforge.net/"} + maven {url = "https://maven.fabricmc.net/"} + maven {url = "https://maven.wagyourtail.xyz/releases"} + maven {url = "https://maven.wagyourtail.xyz/snapshots"} + maven {url = 'https://maven.arcseekers.com/releases'} + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" +} + +rootProject.name = '#NAME#' \ No newline at end of file diff --git a/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java b/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java index c52a693c5..c0bc5bc09 100644 --- a/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java +++ b/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java @@ -1,9 +1,9 @@ package #PACKAGE#; import cam72cam.mod.ModCore; -import net.neoforged.bus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; -@net.neoforged.fml.common.Mod(Mod.MODID) +@net.minecraftforge.fml.common.Mod(Mod.MODID) public class Mod { public static final String MODID = "#ID#"; diff --git a/src/main/resources/template/src/main/resources/META-INF/mods.toml b/src/main/resources/template/src/main/resources/META-INF/mods.toml new file mode 100644 index 000000000..09c0e4510 --- /dev/null +++ b/src/main/resources/template/src/main/resources/META-INF/mods.toml @@ -0,0 +1,24 @@ +modLoader="javafml" +loaderVersion="[52,)" +license="TODO" + +[[mods]] +modId="#ID#" +version="${file.jarVersion}" +displayName="#NAME#" + +[[dependencies.#ID#]] +modId="forge" +mandatory=true +versionRange="[52.1.14,)" +ordering="NONE" +side="BOTH" + +[[dependencies.#ID#]] +modId="minecraft" +mandatory=true +versionRange="[1.21.1]" +ordering="NONE" +side="BOTH" + +#FORGE_TOML_DEPENDENCIES# diff --git a/src/main/resources/template/src/main/resources/META-INF/neoforge.mods.toml b/src/main/resources/template/src/main/resources/META-INF/neoforge.mods.toml deleted file mode 100644 index c864ff75a..000000000 --- a/src/main/resources/template/src/main/resources/META-INF/neoforge.mods.toml +++ /dev/null @@ -1,24 +0,0 @@ -modLoader="javafml" -loaderVersion="[2,)" -license="TODO" - -[[mods]] -modId="#ID#" -version="${file.jarVersion}" -displayName="#NAME#" - -[[dependencies.#ID#]] - modId="neoforge" - type='required' - versionRange="[21.1.1,)" - ordering="NONE" - side="BOTH" - -[[dependencies.#ID#]] - modId="minecraft" - type='required' - versionRange="[1.21.1]" - ordering="NONE" - side="BOTH" - -#FORGE_TOML_DEPENDENCIES# diff --git a/src/test/java/cam72cam/mod/model/obj/OBJModelTest.java b/src/test/java/cam72cam/mod/model/obj/OBJModelTest.java index b9baba6c6..ed2f22449 100644 --- a/src/test/java/cam72cam/mod/model/obj/OBJModelTest.java +++ b/src/test/java/cam72cam/mod/model/obj/OBJModelTest.java @@ -2,8 +2,8 @@ import cam72cam.mod.resource.Identifier; import cpw.mods.modlauncher.Launcher; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.fml.loading.FMLLoader; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.loading.FMLLoader; import org.codehaus.plexus.util.FileUtils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll;