From f23993dff33b4584ebafa2754308b6a9fe4f867a Mon Sep 17 00:00:00 2001 From: Burkino <24849979+Burkino@users.noreply.github.com> Date: Thu, 22 Aug 2024 19:46:24 -0400 Subject: [PATCH 1/3] Add Ars Nouveau to build.gradle --- build.gradle | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/build.gradle b/build.gradle index ddbf498d1..a982282c4 100644 --- a/build.gradle +++ b/build.gradle @@ -264,6 +264,14 @@ repositories { url 'https://maven.covers1624.net/' // https://nexus.covers1624.net/#browse/browse:cofh-releases } + + maven { + name = 'BlameJared' + url = 'https://maven.blamejared.com' + content { + includeGroup 'com.hollingsworth' + } + } } dependencies { @@ -380,6 +388,8 @@ dependencies { implementation fg.deobf("curse.maven:flux-networks-248020:4620438") // Flux-Networks-1.19.2-7.1.4 implementation fg.deobf("curse.maven:project-e-226410:4860858") // ProjectE-1.19.2-PE1.1.0.jar + + implementation fg.deobf("com.hollingsworth.ars_nouveau:ars_nouveau-1.19.2:3.23.0.711") } // This block of code expands all declared replace properties in the specified resource tar+gets. From 504ef7f8b2d36632b9954b851c77ad114c73a24d Mon Sep 17 00:00:00 2001 From: Burkino <24849979+Burkino@users.noreply.github.com> Date: Thu, 22 Aug 2024 19:58:10 -0400 Subject: [PATCH 2/3] Add Ars Nouveau (doesn't work because Ars doesn't add capabilities) --- build.gradle | 10 -- .../teamdman/sfm/common/compat/SFMCompat.java | 34 ++-- .../sfm/common/registry/SFMResourceTypes.java | 10 +- .../resourcetype/SourceResourceType.java | 155 ++++++++++++++++++ 4 files changed, 179 insertions(+), 30 deletions(-) create mode 100644 src/main/java/ca/teamdman/sfm/common/resourcetype/SourceResourceType.java diff --git a/build.gradle b/build.gradle index a982282c4..ddbf498d1 100644 --- a/build.gradle +++ b/build.gradle @@ -264,14 +264,6 @@ repositories { url 'https://maven.covers1624.net/' // https://nexus.covers1624.net/#browse/browse:cofh-releases } - - maven { - name = 'BlameJared' - url = 'https://maven.blamejared.com' - content { - includeGroup 'com.hollingsworth' - } - } } dependencies { @@ -388,8 +380,6 @@ dependencies { implementation fg.deobf("curse.maven:flux-networks-248020:4620438") // Flux-Networks-1.19.2-7.1.4 implementation fg.deobf("curse.maven:project-e-226410:4860858") // ProjectE-1.19.2-PE1.1.0.jar - - implementation fg.deobf("com.hollingsworth.ars_nouveau:ars_nouveau-1.19.2:3.23.0.711") } // This block of code expands all declared replace properties in the specified resource tar+gets. diff --git a/src/main/java/ca/teamdman/sfm/common/compat/SFMCompat.java b/src/main/java/ca/teamdman/sfm/common/compat/SFMCompat.java index 6c8130166..c2588a941 100644 --- a/src/main/java/ca/teamdman/sfm/common/compat/SFMCompat.java +++ b/src/main/java/ca/teamdman/sfm/common/compat/SFMCompat.java @@ -1,9 +1,6 @@ package ca.teamdman.sfm.common.compat; -import ca.teamdman.sfm.common.resourcetype.GasResourceType; -import ca.teamdman.sfm.common.resourcetype.InfuseResourceType; -import ca.teamdman.sfm.common.resourcetype.PigmentResourceType; -import ca.teamdman.sfm.common.resourcetype.SlurryResourceType; +import ca.teamdman.sfm.common.resourcetype.*; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.fml.ModList; @@ -15,23 +12,30 @@ public static boolean isMekanismLoaded() { return ModList.get().getModContainerById("mekanism").isPresent(); } + public static boolean isArsLoaded() { + return ModList.get().getModContainerById("ars_nouveau").isPresent(); + } + public static List> getCapabilities() { + List> capabilities = List.of( + ForgeCapabilities.ITEM_HANDLER, + ForgeCapabilities.FLUID_HANDLER, + ForgeCapabilities.ENERGY + ); + if (isMekanismLoaded()) { - return List.of( - ForgeCapabilities.ITEM_HANDLER, - ForgeCapabilities.FLUID_HANDLER, - ForgeCapabilities.ENERGY, + capabilities.addAll(List.of( GasResourceType.CAP, InfuseResourceType.CAP, PigmentResourceType.CAP, SlurryResourceType.CAP - ); - } else { - return List.of( - ForgeCapabilities.ITEM_HANDLER, - ForgeCapabilities.FLUID_HANDLER, - ForgeCapabilities.ENERGY - ); + )); } + + if (isArsLoaded()) { + capabilities.add(SourceResourceType.CAP); + } + + return capabilities; } } diff --git a/src/main/java/ca/teamdman/sfm/common/registry/SFMResourceTypes.java b/src/main/java/ca/teamdman/sfm/common/registry/SFMResourceTypes.java index 2f9b13784..6acc7ea39 100644 --- a/src/main/java/ca/teamdman/sfm/common/registry/SFMResourceTypes.java +++ b/src/main/java/ca/teamdman/sfm/common/registry/SFMResourceTypes.java @@ -3,10 +3,7 @@ import ca.teamdman.sfm.SFM; import ca.teamdman.sfm.common.compat.SFMCompat; import ca.teamdman.sfm.common.compat.SFMMekanismCompat; -import ca.teamdman.sfm.common.resourcetype.FluidResourceType; -import ca.teamdman.sfm.common.resourcetype.ForgeEnergyResourceType; -import ca.teamdman.sfm.common.resourcetype.ItemResourceType; -import ca.teamdman.sfm.common.resourcetype.ResourceType; +import ca.teamdman.sfm.common.resourcetype.*; import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; @@ -23,7 +20,6 @@ import net.minecraftforge.registries.RegistryObject; import org.jetbrains.annotations.Nullable; -import java.util.Objects; import java.util.function.Supplier; public class SFMResourceTypes { @@ -62,6 +58,10 @@ public class SFMResourceTypes { if (SFMCompat.isMekanismLoaded()) { SFMMekanismCompat.register(TYPES); } + + if (SFMCompat.isArsLoaded()) { + TYPES.register("source", SourceResourceType::new); + } } public static void register(IEventBus bus) { diff --git a/src/main/java/ca/teamdman/sfm/common/resourcetype/SourceResourceType.java b/src/main/java/ca/teamdman/sfm/common/resourcetype/SourceResourceType.java new file mode 100644 index 000000000..656f1fd78 --- /dev/null +++ b/src/main/java/ca/teamdman/sfm/common/resourcetype/SourceResourceType.java @@ -0,0 +1,155 @@ +package ca.teamdman.sfm.common.resourcetype; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityToken; +import net.minecraftforge.registries.IForgeRegistry; +import org.apache.commons.lang3.NotImplementedException; +import com.hollingsworth.arsnouveau.api.source.ISourceTile; + +import java.util.stream.Stream; + +import static net.minecraftforge.common.capabilities.CapabilityManager.get; + +public class SourceResourceType extends ResourceType, ISourceTile> { + public static final Capability CAP = get(new CapabilityToken<>() { + }); + + public SourceResourceType() { + super(CAP); + } + + @Override + public long getAmount(Integer integer) { + return integer; + } + + @Override + public Integer getStackInSlot( + ISourceTile sourceTile, + int slot + ) { + return sourceTile.getSource(); + } + + @Override + public Integer extract( + ISourceTile sourceTile, + int slot, + long amount, + boolean simulate + ) { + int finalAmount = amount > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) amount; + + int source = sourceTile.getSource(); + int extractAmount = Math.min(finalAmount, source); + /// WARNING: This sucks and is only done because Ars doesn't let you simulate actions + if (!simulate) { + sourceTile.removeSource(extractAmount); + } + return extractAmount; + } + + @Override + public Stream getTagsForStack(Integer integer) { + return Stream.empty(); + } + + @Override + public int getSlots(ISourceTile handler) { + return 1; + } + + @Override + public long getMaxStackSize(Integer integer) { + return Long.MAX_VALUE; + } + + @Override + public long getMaxStackSizeForSlot( + ISourceTile sourceTile, + int slot + ) { + return sourceTile.getMaxSource(); + } + + @Override + public Integer insert( + ISourceTile sourceTile, + int slot, + Integer stack, + boolean simulate + ) { + int space = Mth.clamp(sourceTile.getMaxSource() - sourceTile.getSource(), 0, sourceTile.getMaxSource()); + + int accepted = Math.min(stack, space); + + /// WARNING: This sucks and is only done because Ars doesn't let you simulate actions + if (!simulate) { + int oldSource = sourceTile.getSource(); + + sourceTile.addSource(accepted); + + int newSource = sourceTile.getSource(); + int difference = newSource - oldSource; + accepted -= difference; + } + return stack - accepted; + } + + @Override + public boolean isEmpty(Integer stack) { + return stack == 0; + } + + @Override + public boolean matchesStackType(Object o) { + return o instanceof Integer; + } + + @Override + public boolean matchesCapabilityType(Object o) { + return o instanceof ISourceTile; + } + + @Override + public Integer getEmptyStack() { + return 0; + } + + public static final ResourceLocation REGISTRY_KEY = new ResourceLocation("ars_nouveau", "source"); + + @Override + public ResourceLocation getRegistryKey(Integer stack) { + return REGISTRY_KEY; + } + + @Override + public IForgeRegistry> getRegistry() { + throw new NotImplementedException(); + } + + @Override + public boolean registryKeyExists(ResourceLocation location) { + return location.equals(REGISTRY_KEY); + } + + @Override + public Class getItem(Integer stack) { + return Integer.class; + } + + @Override + public Integer copy(Integer stack) { + return stack; + } + + @Override + protected Integer setCount( + Integer stack, + long amount + ) { + return amount > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) amount; + } +} From 1da481e96a598ba692463d500843ca3b30e5301c Mon Sep 17 00:00:00 2001 From: Burkino <24849979+Burkino@users.noreply.github.com> Date: Fri, 10 Jul 2026 18:03:14 -0400 Subject: [PATCH 3/3] Add Ars Nouveau source support --- .../dependencies/1.21.1/dependencies.gradle | 6 +- platform/minecraft/gradle/repositories.gradle | 11 ++++ .../sfm/common/compat/SFMArsCompat.java | 11 ++++ .../sfm/common/compat/SFMModCompat.java | 2 + .../registration/SFMResourceTypes.java | 5 ++ .../resourcetype/SourceResourceType.java | 55 +++++++++++++++++++ .../resources/META-INF/neoforge.mods.toml | 5 ++ 7 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 platform/minecraft/src/main/java/ca/teamdman/sfm/common/compat/SFMArsCompat.java create mode 100644 platform/minecraft/src/main/java/ca/teamdman/sfm/common/resourcetype/SourceResourceType.java diff --git a/platform/minecraft/gradle/dependencies/1.21.1/dependencies.gradle b/platform/minecraft/gradle/dependencies/1.21.1/dependencies.gradle index 82a6cf937..094a6f8c4 100644 --- a/platform/minecraft/gradle/dependencies/1.21.1/dependencies.gradle +++ b/platform/minecraft/gradle/dependencies/1.21.1/dependencies.gradle @@ -31,8 +31,8 @@ dependencies { // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html // http://www.gradle.org/docs/current/userguide/dependency_management.html - antlr 'org.antlr:antlr4:4.13.1' - testImplementation 'com.github.javaparser:javaparser-symbol-solver-core:3.26.4' + antlr 'org.antlr:antlr4:4.13.1' + testImplementation 'com.github.javaparser:javaparser-symbol-solver-core:3.26.4' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' @@ -66,4 +66,6 @@ dependencies { compileOnly "org.appliedenergistics:appliedenergistics2:19.2.15:api" implementation "curse.maven:building-gadgets-298187:6850515" + + implementation "com.hollingsworth.ars_nouveau:ars_nouveau-1.21.1:5.12.1.1381" } diff --git a/platform/minecraft/gradle/repositories.gradle b/platform/minecraft/gradle/repositories.gradle index c1e83bdfe..7252e858f 100644 --- a/platform/minecraft/gradle/repositories.gradle +++ b/platform/minecraft/gradle/repositories.gradle @@ -44,4 +44,15 @@ repositories { url 'https://maven.covers1624.net/' // https://nexus.covers1624.net/#browse/browse:cofh-releases } + + maven { + name = 'GeckoLib' + url 'https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/' + content { + includeGroup("software.bernie.geckolib") + } + } + repositories { + maven { url = 'https://maven.minecraftforge.net/' } + } } diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/compat/SFMArsCompat.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/compat/SFMArsCompat.java new file mode 100644 index 000000000..03025b47a --- /dev/null +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/compat/SFMArsCompat.java @@ -0,0 +1,11 @@ +package ca.teamdman.sfm.common.compat; + +import ca.teamdman.sfm.common.registry.SFMDeferredRegister; +import ca.teamdman.sfm.common.resourcetype.ResourceType; +import ca.teamdman.sfm.common.resourcetype.SourceResourceType; + +public class SFMArsCompat { + public static void registerResourceTypes(SFMDeferredRegister> types) { + types.register("source", SourceResourceType::new); + } +} \ No newline at end of file diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/compat/SFMModCompat.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/compat/SFMModCompat.java index 2ed488a5d..a74b6e762 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/compat/SFMModCompat.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/compat/SFMModCompat.java @@ -16,6 +16,8 @@ public static boolean isAE2Loaded() { return isModLoaded("ae2"); } + public static boolean isArsLoaded() {return isModLoaded("ars_nouveau");} + public static boolean isModLoaded(String modid) { return ModList.get().getModContainerById(modid).isPresent(); } diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/registry/registration/SFMResourceTypes.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/registry/registration/SFMResourceTypes.java index 1fa91aec9..e57cc3f33 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/registry/registration/SFMResourceTypes.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/registry/registration/SFMResourceTypes.java @@ -2,6 +2,7 @@ import ca.teamdman.sfm.SFM; import ca.teamdman.sfm.common.capability.SFMBlockCapabilityKind; +import ca.teamdman.sfm.common.compat.SFMArsCompat; import ca.teamdman.sfm.common.compat.SFMMekanismCompat; import ca.teamdman.sfm.common.compat.SFMModCompat; import ca.teamdman.sfm.common.registry.SFMDeferredRegister; @@ -49,6 +50,10 @@ public class SFMResourceTypes { if (SFMModCompat.isMekanismLoaded()) { SFMMekanismCompat.registerResourceTypes(REGISTERER); } + + if (SFMModCompat.isArsLoaded()) { + SFMArsCompat.registerResourceTypes(REGISTERER); + } } public static int getResourceTypeCount() { diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/resourcetype/SourceResourceType.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/resourcetype/SourceResourceType.java new file mode 100644 index 000000000..d1441576b --- /dev/null +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/resourcetype/SourceResourceType.java @@ -0,0 +1,55 @@ +package ca.teamdman.sfm.common.resourcetype; + +import ca.teamdman.sfm.common.blockentity.BufferBlockEntityContents; +import ca.teamdman.sfm.common.capability.SFMBlockCapabilityKind; +import ca.teamdman.sfm.common.util.SFMResourceLocation; +import com.hollingsworth.arsnouveau.api.source.ISourceCap; +import com.hollingsworth.arsnouveau.setup.registry.CapabilityRegistry; + +public class SourceResourceType extends IntegerResourceType { + public static final SFMBlockCapabilityKind CAP = new SFMBlockCapabilityKind<>( + CapabilityRegistry.SOURCE_CAPABILITY + ); + + public SourceResourceType() { + super(CAP, SFMResourceLocation.fromNamespaceAndPath("ars_nouveau", "source")); + } + + @Override + public ISourceCap createHandlerForBufferBlock(BufferBlockEntityContents contents) { + return null; + } + + @Override + public Integer getStackInSlot(ISourceCap iSourceCap, int slot) { + return iSourceCap.getSource(); + } + + @Override + public Integer extract(ISourceCap iSourceCap, int slot, long amount, boolean simulate) { + int finalAmount = amount > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) amount; + + return iSourceCap.extractSource(finalAmount, simulate); + } + + @Override + public int getSlots(ISourceCap handler) { + return 1; + } + + @Override + public long getMaxStackSizeForSlot(ISourceCap iSourceCap, int slot) { + return iSourceCap.getSourceCapacity(); + } + + @Override + public Integer insert(ISourceCap iSourceCap, int slot, Integer stack, boolean simulate) { + int accepted = iSourceCap.receiveSource(stack, simulate); + return stack - accepted; + } + + @Override + public boolean matchesCapabilityHandler(Object o) { + return o instanceof ISourceCap; + } +} diff --git a/platform/minecraft/src/main/resources/META-INF/neoforge.mods.toml b/platform/minecraft/src/main/resources/META-INF/neoforge.mods.toml index c7aee3c06..5924e66e7 100644 --- a/platform/minecraft/src/main/resources/META-INF/neoforge.mods.toml +++ b/platform/minecraft/src/main/resources/META-INF/neoforge.mods.toml @@ -96,3 +96,8 @@ side="BOTH" modId = "mekanism" type="optional" versionRange = "[10.3.2,)" + +[[dependencies.${ mod_id }]] +modId = "ars_nouveau" +type="optional" +versionRange = "[5.10.0,)" \ No newline at end of file