From 19a909fef664c52a8cba2c369297417b9f2a32d9 Mon Sep 17 00:00:00 2001 From: Szedann <65607498+Szedann@users.noreply.github.com> Date: Sat, 20 Apr 2024 19:04:50 +0200 Subject: [PATCH 1/7] computercraft --- common/build.gradle.kts | 8 ++++ .../ithundxr/createnumismatics/ModSetup.java | 3 ++ .../createnumismatics/compat/Mods.java | 3 +- .../computercraft/ComputerCraftProxy.java | 31 ++++++++++++ .../implementation/ComputerBehaviour.java | 41 ++++++++++++++++ .../peripherals/BrassDepositorPeripheral.java | 47 +++++++++++++++++++ .../depositor/BrassDepositorBlockEntity.java | 4 ++ fabric/build.gradle.kts | 10 ++++ .../fabric/ComputerCraftProxyImpl.java | 29 ++++++++++++ forge/build.gradle.kts | 12 +++++ .../forge/ComputerCraftProxyImpl.java | 25 ++++++++++ gradle.properties | 3 ++ 12 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/ComputerCraftProxy.java create mode 100644 common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/ComputerBehaviour.java create mode 100644 common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java create mode 100644 fabric/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/fabric/ComputerCraftProxyImpl.java create mode 100644 forge/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/forge/ComputerCraftProxyImpl.java diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 0a9618bc..71bf72f1 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -25,6 +25,11 @@ repositories { maven("https://maven.siphalor.de/") { // Amecs API (required by Carry On) name = "Siphalor's Maven" } + maven("https://squiddev.cc/maven/") {// CC Tweaked + content { + includeGroup("cc.tweaked") + } + } } dependencies { @@ -45,6 +50,9 @@ dependencies { modCompileOnly("tschipp.carryon:carryon-fabric-${"minecraft_version"()}:${"carryon_fabric_version"()}") implementation(annotationProcessor("io.github.llamalad7:mixinextras-common:${"mixin_extras_version"()}")!!) + + + compileOnly("cc.tweaked:cc-tweaked-${"minecraft_version"()}-common-api:${"cc_version"()}") } tasks.processResources { diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/ModSetup.java b/common/src/main/java/dev/ithundxr/createnumismatics/ModSetup.java index d780537b..bc4c0a8e 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/ModSetup.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/ModSetup.java @@ -1,6 +1,7 @@ package dev.ithundxr.createnumismatics; import com.simibubi.create.content.equipment.goggles.GogglesItem; +import dev.ithundxr.createnumismatics.compat.computercraft.ComputerCraftProxy; import dev.ithundxr.createnumismatics.multiloader.Env; import dev.ithundxr.createnumismatics.registry.*; import dev.ithundxr.createnumismatics.util.ClientUtils; @@ -15,6 +16,8 @@ public static void register() { NumismaticsMenuTypes.register(); NumismaticsTags.register(); + ComputerCraftProxy.register(); + GogglesItem.addIsWearingPredicate((player) -> { if (!new Exception().getStackTrace()[2].getClassName().equals("com.simibubi.create.content.equipment.goggles.GoggleOverlayRenderer")) // fixme getting stacktrace is slow, use mixin to improve this return false; diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/Mods.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/Mods.java index a2533a16..ab5ed3d3 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/compat/Mods.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/Mods.java @@ -12,7 +12,8 @@ */ public enum Mods { CARRYON("carryon"), - SODIUM("sodium") + SODIUM("sodium"), + COMPUTERCRAFT("computercraft") ; public final boolean isLoaded; diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/ComputerCraftProxy.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/ComputerCraftProxy.java new file mode 100644 index 00000000..14ffb557 --- /dev/null +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/ComputerCraftProxy.java @@ -0,0 +1,31 @@ +package dev.ithundxr.createnumismatics.compat.computercraft; + +import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; +import com.simibubi.create.compat.computercraft.FallbackComputerBehaviour; +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; +import dev.architectury.injectables.annotations.ExpectPlatform; +import dev.ithundxr.createnumismatics.compat.Mods; + +import java.util.function.Function; + +public class ComputerCraftProxy { + + public static void register() { + fallbackFactory = FallbackComputerBehaviour::new; + Mods.COMPUTERCRAFT.executeIfInstalled(() -> ComputerCraftProxy::registerWithDependency); + } + + @ExpectPlatform + static void registerWithDependency() { + throw new AssertionError(); + } + + public static Function fallbackFactory; + private static Function computerFactory; + + @ExpectPlatform + public static AbstractComputerBehaviour behaviour(SmartBlockEntity sbe) { + throw new AssertionError(); + } + +} \ No newline at end of file diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/ComputerBehaviour.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/ComputerBehaviour.java new file mode 100644 index 00000000..7e2f7840 --- /dev/null +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/ComputerBehaviour.java @@ -0,0 +1,41 @@ +package dev.ithundxr.createnumismatics.compat.computercraft.implementation; + +import com.jozufozu.flywheel.util.NonNullSupplier; +import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; +import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; +import dan200.computercraft.api.peripheral.IPeripheral; +import dev.ithundxr.createnumismatics.compat.computercraft.implementation.peripherals.BrassDepositorPeripheral; +import dev.ithundxr.createnumismatics.content.depositor.BrassDepositorBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; + +public class ComputerBehaviour extends AbstractComputerBehaviour { + + public static IPeripheral peripheralProvider(Level level, BlockPos blockPos) { + AbstractComputerBehaviour behavior = BlockEntityBehaviour.get(level, blockPos, AbstractComputerBehaviour.TYPE); + if (behavior instanceof ComputerBehaviour real) + return real.getPeripheral(); + return null; + } + + IPeripheral peripheral; + public ComputerBehaviour(SmartBlockEntity te) { + super(te); + this.peripheral = getPeripheralFor(te); + } + + public static IPeripheral getPeripheralFor(SmartBlockEntity be) { + if (be instanceof BrassDepositorBlockEntity scbe) + return new BrassDepositorPeripheral(scbe); + + + throw new IllegalArgumentException("No peripheral available for " + be.getType()); + } + + @Override + public T getPeripheral() { + //noinspection unchecked + return (T) peripheral; + } +} diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java new file mode 100644 index 00000000..5ee55961 --- /dev/null +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java @@ -0,0 +1,47 @@ +package dev.ithundxr.createnumismatics.compat.computercraft.implementation.peripherals; + +import com.simibubi.create.compat.computercraft.implementation.peripherals.SyncedPeripheral; +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.api.lua.LuaFunction; +import dev.ithundxr.createnumismatics.content.backend.Coin; +import dev.ithundxr.createnumismatics.content.depositor.BrassDepositorBlockEntity; + +public class BrassDepositorPeripheral extends SyncedPeripheral { + + public BrassDepositorPeripheral(BrassDepositorBlockEntity blockEntity) { + super(blockEntity); + } + + @LuaFunction(mainThread = true) + public final void setPrice(String coin, int amount) throws LuaException { + blockEntity.setPrice(getCoinFromString(coin), amount); + + } + + @LuaFunction + public final int getPrice(){ + return blockEntity.getTotalPrice(); + } + + @LuaFunction + public final int getTotalPrice(String coin) throws LuaException { + return blockEntity.getPrice(getCoinFromString(coin)); + } + + Coin getCoinFromString(String coin) throws LuaException { + return switch (coin){ + case "spur" -> Coin.SPUR; + case "bevel" -> Coin.BEVEL; + case "sprocket" -> Coin.SPROCKET; + case "cog" -> Coin.COG; + case "crown" -> Coin.CROWN; + case "sun" -> Coin.SUN; + default -> throw new LuaException("incorrect coin name"); + }; + } + + @Override + public String getType() { + return "Numismatics_Depositor"; + } +} diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/content/depositor/BrassDepositorBlockEntity.java b/common/src/main/java/dev/ithundxr/createnumismatics/content/depositor/BrassDepositorBlockEntity.java index d4680f8e..71181ce1 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/content/depositor/BrassDepositorBlockEntity.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/content/depositor/BrassDepositorBlockEntity.java @@ -1,9 +1,11 @@ package dev.ithundxr.createnumismatics.content.depositor; +import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.utility.Components; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Lang; +import dev.ithundxr.createnumismatics.compat.computercraft.ComputerCraftProxy; import dev.ithundxr.createnumismatics.content.backend.Coin; import dev.ithundxr.createnumismatics.content.backend.behaviours.SliderStylePriceBehaviour; import dev.ithundxr.createnumismatics.content.backend.trust_list.TrustListMenu; @@ -29,6 +31,7 @@ public class BrassDepositorBlockEntity extends AbstractDepositorBlockEntity implements MenuProvider { private SliderStylePriceBehaviour price; + public AbstractComputerBehaviour computerBehaviour; public BrassDepositorBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); @@ -37,6 +40,7 @@ public BrassDepositorBlockEntity(BlockEntityType type, BlockPos pos, BlockSta @Override public void addBehaviours(List behaviours) { price = new SliderStylePriceBehaviour(this, this::addCoin, this::getCoinCount); + behaviours.add(computerBehaviour = ComputerCraftProxy.behaviour(this)); behaviours.add(price); } diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 5ddc18fa..5cdbd6fe 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -38,6 +38,11 @@ repositories { maven("https://maven.siphalor.de/") { // Amecs API (required by Carry On) name = "Siphalor's Maven" } + maven("https://squiddev.cc/maven/") {// CC Tweaked + content { + includeGroup("cc.tweaked") + } + } } dependencies { @@ -63,6 +68,11 @@ dependencies { modLocalRuntime("dev.emi:emi-fabric:${"emi_version"()}") + modCompileOnly("cc.tweaked:cc-tweaked-${"minecraft_version"()}-fabric-api:${"cc_version"()}") + if ("enable_cc"().toBoolean()) { + modLocalRuntime("cc.tweaked:cc-tweaked-${"minecraft_version"()}-fabric:${"cc_version"()}") + } + // Carry On modCompileOnly("tschipp.carryon:carryon-fabric-${"minecraft_version"()}:${"carryon_forge_version"()}") if ("enable_carryon"().toBoolean()) { diff --git a/fabric/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/fabric/ComputerCraftProxyImpl.java b/fabric/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/fabric/ComputerCraftProxyImpl.java new file mode 100644 index 00000000..5ea2f07e --- /dev/null +++ b/fabric/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/fabric/ComputerCraftProxyImpl.java @@ -0,0 +1,29 @@ +package dev.ithundxr.createnumismatics.compat.computercraft.fabric; + +import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; +import dan200.computercraft.api.peripheral.PeripheralLookup; +import dev.ithundxr.createnumismatics.compat.computercraft.implementation.ComputerBehaviour; + +import java.util.function.Function; + +import static dev.ithundxr.createnumismatics.compat.computercraft.ComputerCraftProxy.fallbackFactory; +import static dev.ithundxr.createnumismatics.compat.computercraft.implementation.ComputerBehaviour.peripheralProvider; + +public class ComputerCraftProxyImpl { + + public static Function computerFactory; + + public static void registerWithDependency() { + /* Comment if computercraft.implementation is not in the source set */ + computerFactory = ComputerBehaviour::new; + + PeripheralLookup.get().registerFallback((level, blockPos, blockState, blockEntity, direction) -> peripheralProvider(level, blockPos)); + } + + public static AbstractComputerBehaviour behaviour(SmartBlockEntity sbe) { + if (computerFactory == null) + return fallbackFactory.apply(sbe); + return computerFactory.apply(sbe); + } +} diff --git a/forge/build.gradle.kts b/forge/build.gradle.kts index b962ba7e..06c61d87 100644 --- a/forge/build.gradle.kts +++ b/forge/build.gradle.kts @@ -25,6 +25,11 @@ repositories { includeGroup("com.simibubi.create") } } + maven("https://squiddev.cc/maven/") { // CC Tweaked + content { + includeGroup("cc.tweaked") + } + } } dependencies { @@ -39,6 +44,13 @@ dependencies { modLocalRuntime("dev.emi:emi-forge:${"emi_version"()}") + modCompileOnly("cc.tweaked:cc-tweaked-${"minecraft_version"()}-forge-api:${"cc_version"()}") + modCompileOnly("cc.tweaked:cc-tweaked-${"minecraft_version"()}-core-api:${"cc_version"()}") + if ("enable_cc"().toBoolean()) { + modLocalRuntime("cc.tweaked:cc-tweaked-${"minecraft_version"()}-forge:${"cc_version"()}") + } + + // Carry On modCompileOnly("tschipp.carryon:carryon-forge-${"minecraft_version"()}:${"carryon_forge_version"()}") if ("enable_carryon"().toBoolean()) { diff --git a/forge/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/forge/ComputerCraftProxyImpl.java b/forge/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/forge/ComputerCraftProxyImpl.java new file mode 100644 index 00000000..467a071d --- /dev/null +++ b/forge/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/forge/ComputerCraftProxyImpl.java @@ -0,0 +1,25 @@ +package dev.ithundxr.createnumismatics.compat.computercraft.forge; + +import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; +import dev.ithundxr.createnumismatics.compat.computercraft.implementation.ComputerBehaviour; + +import java.util.function.Function; + +import static dev.ithundxr.createnumismatics.compat.computercraft.ComputerCraftProxy.fallbackFactory; +import static dev.ithundxr.createnumismatics.compat.computercraft.implementation.ComputerBehaviour.peripheralProvider; + +public class ComputerCraftProxyImpl { + + public static Function computerFactory; + + public static void registerWithDependency() { + /* Comment if computercraft.implementation is not in the source set */ + computerFactory = ComputerBehaviour::new; + } + public static AbstractComputerBehaviour behaviour(SmartBlockEntity sbe) { + if (computerFactory == null) + return fallbackFactory.apply(sbe); + return computerFactory.apply(sbe); + } +} diff --git a/gradle.properties b/gradle.properties index 05821225..415ba516 100644 --- a/gradle.properties +++ b/gradle.properties @@ -59,6 +59,9 @@ carryon_forge_version = 2.1.2.7 carryon_fabric_version = 2.1.2.7 enable_carryon = false +cc_version = 1.110.2 +enable_cc = true + # Publishing # Modrinth modrinth_id = Jdbbtt0i From 16f17d2e1bfe1b0803773a422ee36ac9256bbcf2 Mon Sep 17 00:00:00 2001 From: Szedann <65607498+Szedann@users.noreply.github.com> Date: Sun, 21 Apr 2024 17:36:13 +0200 Subject: [PATCH 2/7] fix forge dependencies --- forge/build.gradle.kts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/forge/build.gradle.kts b/forge/build.gradle.kts index 06c61d87..4ce7af84 100644 --- a/forge/build.gradle.kts +++ b/forge/build.gradle.kts @@ -46,6 +46,13 @@ dependencies { modCompileOnly("cc.tweaked:cc-tweaked-${"minecraft_version"()}-forge-api:${"cc_version"()}") modCompileOnly("cc.tweaked:cc-tweaked-${"minecraft_version"()}-core-api:${"cc_version"()}") + + forgeRuntimeLibrary("cc.tweaked:cobalt:0.9.3") + forgeRuntimeLibrary("com.jcraft:jzlib:1.1.3") + forgeRuntimeLibrary("io.netty:netty-codec-http:4.1.82.Final") + forgeRuntimeLibrary("io.netty:netty-codec-socks:4.1.82.Final") + forgeRuntimeLibrary("io.netty:netty-handler-proxy:4.1.82.Final") + if ("enable_cc"().toBoolean()) { modLocalRuntime("cc.tweaked:cc-tweaked-${"minecraft_version"()}-forge:${"cc_version"()}") } From 8253dac04a2cae4fba0a62e1a479d0e1c3f04d01 Mon Sep 17 00:00:00 2001 From: Szedann <65607498+Szedann@users.noreply.github.com> Date: Mon, 22 Apr 2024 00:41:51 +0200 Subject: [PATCH 3/7] vendor cc --- .../implementation/ComputerBehaviour.java | 4 ++ .../peripherals/BrassDepositorPeripheral.java | 42 +++++++------ .../peripherals/VendorPeripheral.java | 60 +++++++++++++++++++ .../content/backend/Coin.java | 25 +++++++- .../content/vendor/VendorBlockEntity.java | 8 +++ 5 files changed, 119 insertions(+), 20 deletions(-) create mode 100644 common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/VendorPeripheral.java diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/ComputerBehaviour.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/ComputerBehaviour.java index 7e2f7840..aac88f9b 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/ComputerBehaviour.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/ComputerBehaviour.java @@ -6,7 +6,9 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import dan200.computercraft.api.peripheral.IPeripheral; import dev.ithundxr.createnumismatics.compat.computercraft.implementation.peripherals.BrassDepositorPeripheral; +import dev.ithundxr.createnumismatics.compat.computercraft.implementation.peripherals.VendorPeripheral; import dev.ithundxr.createnumismatics.content.depositor.BrassDepositorBlockEntity; +import dev.ithundxr.createnumismatics.content.vendor.VendorBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; @@ -28,6 +30,8 @@ public ComputerBehaviour(SmartBlockEntity te) { public static IPeripheral getPeripheralFor(SmartBlockEntity be) { if (be instanceof BrassDepositorBlockEntity scbe) return new BrassDepositorPeripheral(scbe); + if (be instanceof VendorBlockEntity scbe) + return new VendorPeripheral(scbe); throw new IllegalArgumentException("No peripheral available for " + be.getType()); diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java index 5ee55961..a9176406 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java @@ -6,6 +6,12 @@ import dev.ithundxr.createnumismatics.content.backend.Coin; import dev.ithundxr.createnumismatics.content.depositor.BrassDepositorBlockEntity; +import java.util.List; +import java.util.Map; + +import static dev.ithundxr.createnumismatics.content.backend.Coin.getCoinFromName; +import static dev.ithundxr.createnumismatics.content.backend.Coin.getCoinsFromSpurAmount; + public class BrassDepositorPeripheral extends SyncedPeripheral { public BrassDepositorPeripheral(BrassDepositorBlockEntity blockEntity) { @@ -13,31 +19,31 @@ public BrassDepositorPeripheral(BrassDepositorBlockEntity blockEntity) { } @LuaFunction(mainThread = true) - public final void setPrice(String coin, int amount) throws LuaException { - blockEntity.setPrice(getCoinFromString(coin), amount); - + public final void setCoinAmount(String coinName, int amount) throws LuaException { + Coin coin = getCoinFromName(coinName); + if(coin == null) throw new LuaException("incorrect coin name"); + blockEntity.setPrice(coin, amount); + blockEntity.notifyUpdate(); + } + @LuaFunction(mainThread = true) + public final void setTotalPrice(int spurAmount){ + List> coins = getCoinsFromSpurAmount(spurAmount); + for (Map.Entry coin : coins) { + blockEntity.setPrice(coin.getKey(), coin.getValue()); + } + blockEntity.notifyUpdate(); } @LuaFunction - public final int getPrice(){ + public final int getTotalPrice(){ return blockEntity.getTotalPrice(); } @LuaFunction - public final int getTotalPrice(String coin) throws LuaException { - return blockEntity.getPrice(getCoinFromString(coin)); - } - - Coin getCoinFromString(String coin) throws LuaException { - return switch (coin){ - case "spur" -> Coin.SPUR; - case "bevel" -> Coin.BEVEL; - case "sprocket" -> Coin.SPROCKET; - case "cog" -> Coin.COG; - case "crown" -> Coin.CROWN; - case "sun" -> Coin.SUN; - default -> throw new LuaException("incorrect coin name"); - }; + public final int getPrice(String coinName) throws LuaException { + Coin coin = getCoinFromName(coinName); + if(coin == null) throw new LuaException("incorrect coin name"); + return blockEntity.getPrice(coin); } @Override diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/VendorPeripheral.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/VendorPeripheral.java new file mode 100644 index 00000000..cf271689 --- /dev/null +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/VendorPeripheral.java @@ -0,0 +1,60 @@ +package dev.ithundxr.createnumismatics.compat.computercraft.implementation.peripherals; + +import com.simibubi.create.compat.computercraft.implementation.peripherals.SyncedPeripheral; +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.api.lua.LuaFunction; +import dev.ithundxr.createnumismatics.content.backend.Coin; +import dev.ithundxr.createnumismatics.content.vendor.VendorBlockEntity; +import net.minecraft.core.registries.Registries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; + +import java.util.List; +import java.util.Map; + +import static dev.ithundxr.createnumismatics.content.backend.Coin.getCoinFromName; +import static dev.ithundxr.createnumismatics.content.backend.Coin.getCoinsFromSpurAmount; + +public class VendorPeripheral extends SyncedPeripheral { + + public VendorPeripheral(VendorBlockEntity blockEntity) { + super(blockEntity); + } + + + + @LuaFunction(mainThread = true) + public final void setCoinAmount(String coinName, int amount) throws LuaException { + Coin coin = getCoinFromName(coinName); + if(coin == null) throw new LuaException("incorrect coin name"); + blockEntity.setPrice(coin, amount); + blockEntity.notifyUpdate(); + } + @LuaFunction(mainThread = true) + public final void setTotalPrice(int spurAmount){ + List> coins = getCoinsFromSpurAmount(spurAmount); + for (Map.Entry coin : coins) { + blockEntity.setPrice(coin.getKey(), coin.getValue()); + } + blockEntity.notifyUpdate(); + } + + @LuaFunction + public final int getTotalPrice(){ + return blockEntity.getTotalPrice(); + } + + @LuaFunction + public final int getPrice(String coinName) throws LuaException { + Coin coin = getCoinFromName(coinName); + if(coin == null) throw new LuaException("incorrect coin name"); + return blockEntity.getPrice(coin); + } + + @Override + public String getType() { + return "Numismatics_Vendor"; + } +} diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/content/backend/Coin.java b/common/src/main/java/dev/ithundxr/createnumismatics/content/backend/Coin.java index 828c0171..c7d73421 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/content/backend/Coin.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/content/backend/Coin.java @@ -5,6 +5,7 @@ import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.utility.Components; import com.simibubi.create.foundation.utility.Couple; +import com.simibubi.create.foundation.utility.Pair; import dev.ithundxr.createnumismatics.registry.NumismaticsIcons; import dev.ithundxr.createnumismatics.registry.NumismaticsItems; import dev.ithundxr.createnumismatics.util.TextUtils; @@ -12,8 +13,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; -import java.util.List; -import java.util.Locale; +import java.util.*; import static dev.ithundxr.createnumismatics.registry.NumismaticsIcons.*; @@ -126,4 +126,25 @@ public static Coin closest(int value) { } return closest; } + + public static List> getCoinsFromSpurAmount(int spurAmount){ + List> coins = new ArrayList<>(); + for(Coin coin : Arrays.stream(Coin.values()).sorted(Comparator.comparingInt(c -> -c.value)).toList()){ + Couple coinAmount = coin.convert(spurAmount); + coins.add(new AbstractMap.SimpleEntry<>(coin, coinAmount.getFirst())); + spurAmount = coinAmount.getSecond(); + } + return coins; + } + + public static Coin getCoinFromName(String name){ + Coin selectedCoin = null; + for (Coin coin : Coin.values()){ + if(coin.getName().equals(name)){ + selectedCoin = coin; + break; + } + } + return selectedCoin; + } } diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/content/vendor/VendorBlockEntity.java b/common/src/main/java/dev/ithundxr/createnumismatics/content/vendor/VendorBlockEntity.java index 9fa324da..e8e4ccc2 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/content/vendor/VendorBlockEntity.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/content/vendor/VendorBlockEntity.java @@ -2,13 +2,17 @@ import com.google.common.collect.ImmutableList; import com.simibubi.create.AllSoundEvents; +import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.utility.Components; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Lang; +import dan200.computercraft.api.ComputerCraftAPI; +import dan200.computercraft.api.ComputerCraftTags; import dev.ithundxr.createnumismatics.Numismatics; +import dev.ithundxr.createnumismatics.compat.computercraft.ComputerCraftProxy; import dev.ithundxr.createnumismatics.content.backend.BankAccount; import dev.ithundxr.createnumismatics.content.backend.Coin; import dev.ithundxr.createnumismatics.content.backend.Trusted; @@ -87,6 +91,9 @@ public void setChanged() { private Mode mode = Mode.SELL; public final NonNullList items = NonNullList.withSize(9, ItemStack.EMPTY); + AbstractComputerBehaviour computerBehaviour; + + public VendorBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); @@ -96,6 +103,7 @@ public VendorBlockEntity(BlockEntityType type, BlockPos pos, BlockState state @Override public void addBehaviours(List behaviours) { price = new SliderStylePriceBehaviour(this, this::addCoin, this::getCoinCount); + behaviours.add(computerBehaviour = ComputerCraftProxy.behaviour(this)); behaviours.add(price); } From 423fa94574cbc2eb76e3e58b71d38a431a222c1a Mon Sep 17 00:00:00 2001 From: IThundxr Date: Wed, 5 Jun 2024 17:02:32 -0400 Subject: [PATCH 4/7] post merge fixes --- .../src/main/java/dev/ithundxr/createnumismatics/ModSetup.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/ModSetup.java b/common/src/main/java/dev/ithundxr/createnumismatics/ModSetup.java index 10eb7284..db964861 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/ModSetup.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/ModSetup.java @@ -18,6 +18,7 @@ package dev.ithundxr.createnumismatics; +import dev.ithundxr.createnumismatics.compat.computercraft.ComputerCraftProxy; import dev.ithundxr.createnumismatics.registry.*; public class ModSetup { From 97b7dcc6708917add2113f05fe1441a33bb51ab4 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Wed, 5 Jun 2024 17:28:55 -0400 Subject: [PATCH 5/7] Fix CC compat on forge --- .../computercraft/ComputerCraftProxy.java | 19 ++++++- .../content/vendor/VendorBlockEntity.java | 3 - ...BrassDepositorBlockEntityCapabilities.java | 57 +++++++++++++++++++ .../self/VendorBlockEntityCapabilities.java | 9 +++ .../main/resources/numismatics.mixins.json | 1 + 5 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 forge/src/main/java/dev/ithundxr/createnumismatics/forge/mixin/self/BrassDepositorBlockEntityCapabilities.java diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/ComputerCraftProxy.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/ComputerCraftProxy.java index 14ffb557..4a5ac465 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/ComputerCraftProxy.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/ComputerCraftProxy.java @@ -1,3 +1,21 @@ +/* + * Numismatics + * Copyright (c) 2024 The Railways Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package dev.ithundxr.createnumismatics.compat.computercraft; import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; @@ -21,7 +39,6 @@ static void registerWithDependency() { } public static Function fallbackFactory; - private static Function computerFactory; @ExpectPlatform public static AbstractComputerBehaviour behaviour(SmartBlockEntity sbe) { diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/content/vendor/VendorBlockEntity.java b/common/src/main/java/dev/ithundxr/createnumismatics/content/vendor/VendorBlockEntity.java index 82aba81a..e8a81ac1 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/content/vendor/VendorBlockEntity.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/content/vendor/VendorBlockEntity.java @@ -112,13 +112,10 @@ public void setChanged() { AbstractComputerBehaviour computerBehaviour; - - public VendorBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); } - @Override public void addBehaviours(List behaviours) { price = new SliderStylePriceBehaviour(this, this::addCoin, this::getCoinCount); diff --git a/forge/src/main/java/dev/ithundxr/createnumismatics/forge/mixin/self/BrassDepositorBlockEntityCapabilities.java b/forge/src/main/java/dev/ithundxr/createnumismatics/forge/mixin/self/BrassDepositorBlockEntityCapabilities.java new file mode 100644 index 00000000..20a74aff --- /dev/null +++ b/forge/src/main/java/dev/ithundxr/createnumismatics/forge/mixin/self/BrassDepositorBlockEntityCapabilities.java @@ -0,0 +1,57 @@ +/* + * Numismatics + * Copyright (c) 2024 The Railways Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package dev.ithundxr.createnumismatics.forge.mixin.self; + +import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; +import dev.ithundxr.createnumismatics.content.depositor.AbstractDepositorBlockEntity; +import dev.ithundxr.createnumismatics.content.depositor.BrassDepositorBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.common.util.LazyOptional; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(BrassDepositorBlockEntity.class) +public abstract class BrassDepositorBlockEntityCapabilities extends AbstractDepositorBlockEntity implements ICapabilityProvider { + public BrassDepositorBlockEntityCapabilities(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + + @Shadow AbstractComputerBehaviour computerBehaviour; + + @Override + public @NotNull LazyOptional getCapability(@NotNull Capability capability, @Nullable Direction direction) { + if (computerBehaviour.isPeripheralCap(capability)) + return computerBehaviour.getPeripheralCapability(); + + return super.getCapability(capability, direction); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + computerBehaviour.removePeripheral(); + } +} diff --git a/forge/src/main/java/dev/ithundxr/createnumismatics/forge/mixin/self/VendorBlockEntityCapabilities.java b/forge/src/main/java/dev/ithundxr/createnumismatics/forge/mixin/self/VendorBlockEntityCapabilities.java index d4efffb6..5645342e 100644 --- a/forge/src/main/java/dev/ithundxr/createnumismatics/forge/mixin/self/VendorBlockEntityCapabilities.java +++ b/forge/src/main/java/dev/ithundxr/createnumismatics/forge/mixin/self/VendorBlockEntityCapabilities.java @@ -18,6 +18,7 @@ package dev.ithundxr.createnumismatics.forge.mixin.self; +import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import dev.ithundxr.createnumismatics.content.vendor.VendorBlockEntity; import net.minecraft.core.BlockPos; @@ -32,6 +33,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @Mixin(VendorBlockEntity.class) @@ -40,6 +42,8 @@ public VendorBlockEntityCapabilities(BlockEntityType type, BlockPos pos, Bloc super(type, pos, state); } + @Shadow AbstractComputerBehaviour computerBehaviour; + // This is actually just down + all the 5 other sides @Unique private static final Direction[] numismatics$DIRECTIONS = {Direction.DOWN, Direction.NORTH}; @Unique LazyOptional[] numismatics$handlers = SidedInvWrapper.create((WorldlyContainer) this, numismatics$DIRECTIONS); @@ -50,6 +54,10 @@ public VendorBlockEntityCapabilities(BlockEntityType type, BlockPos pos, Bloc // If down return the down handler otherwise return the one for all other sides return facing == Direction.DOWN ? numismatics$handlers[0].cast() : numismatics$handlers[1].cast(); } + + if (computerBehaviour.isPeripheralCap(capability)) + return computerBehaviour.getPeripheralCapability(); + return super.getCapability(capability, facing); } @@ -62,6 +70,7 @@ public void reviveCaps() { @Override public void invalidateCaps() { super.invalidateCaps(); + computerBehaviour.removePeripheral(); for (LazyOptional createNumismatics$handler : numismatics$handlers) { createNumismatics$handler.invalidate(); diff --git a/forge/src/main/resources/numismatics.mixins.json b/forge/src/main/resources/numismatics.mixins.json index 6d08f0fe..5da27406 100644 --- a/forge/src/main/resources/numismatics.mixins.json +++ b/forge/src/main/resources/numismatics.mixins.json @@ -10,6 +10,7 @@ ], "mixins": [ "ServerGamePacketListenerImplMixin", + "self.BrassDepositorBlockEntityCapabilities", "self.VendorBlockEntityCapabilities" ], "injectors": { From 463405f8e42e3a5a438ca62b914c3ddad606e158 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Wed, 5 Jun 2024 18:09:20 -0400 Subject: [PATCH 6/7] Fix CC compat on forge 2: Electric Boogaloo --- .../computercraft/ComputerCraftProxy.java | 3 +- .../implementation/ComputerBehaviour.java | 33 +++++++--- .../peripherals/BrassDepositorPeripheral.java | 20 ++++++- .../peripherals/VendorPeripheral.java | 27 ++++++--- .../fabric/ComputerCraftProxyImpl.java | 37 ++++++++---- .../forge/ComputerCraftProxyImpl.java | 35 +++++++---- .../self/ComputerBehaviourCapabilities.java | 60 +++++++++++++++++++ .../main/resources/numismatics.mixins.json | 1 + 8 files changed, 172 insertions(+), 44 deletions(-) create mode 100644 forge/src/main/java/dev/ithundxr/createnumismatics/forge/mixin/self/ComputerBehaviourCapabilities.java diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/ComputerCraftProxy.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/ComputerCraftProxy.java index 4a5ac465..fdc9410c 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/ComputerCraftProxy.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/ComputerCraftProxy.java @@ -27,7 +27,6 @@ import java.util.function.Function; public class ComputerCraftProxy { - public static void register() { fallbackFactory = FallbackComputerBehaviour::new; Mods.COMPUTERCRAFT.executeIfInstalled(() -> ComputerCraftProxy::registerWithDependency); @@ -39,10 +38,10 @@ static void registerWithDependency() { } public static Function fallbackFactory; + public static Function computerFactory; @ExpectPlatform public static AbstractComputerBehaviour behaviour(SmartBlockEntity sbe) { throw new AssertionError(); } - } \ No newline at end of file diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/ComputerBehaviour.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/ComputerBehaviour.java index aac88f9b..c75cf912 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/ComputerBehaviour.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/ComputerBehaviour.java @@ -1,9 +1,27 @@ +/* + * Numismatics + * Copyright (c) 2024 The Railways Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package dev.ithundxr.createnumismatics.compat.computercraft.implementation; -import com.jozufozu.flywheel.util.NonNullSupplier; import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; +import com.tterrag.registrate.util.nullness.NonNullSupplier; import dan200.computercraft.api.peripheral.IPeripheral; import dev.ithundxr.createnumismatics.compat.computercraft.implementation.peripherals.BrassDepositorPeripheral; import dev.ithundxr.createnumismatics.compat.computercraft.implementation.peripherals.VendorPeripheral; @@ -13,6 +31,7 @@ import net.minecraft.world.level.Level; public class ComputerBehaviour extends AbstractComputerBehaviour { + NonNullSupplier peripheralSupplier; public static IPeripheral peripheralProvider(Level level, BlockPos blockPos) { AbstractComputerBehaviour behavior = BlockEntityBehaviour.get(level, blockPos, AbstractComputerBehaviour.TYPE); @@ -21,18 +40,16 @@ public static IPeripheral peripheralProvider(Level level, BlockPos blockPos) { return null; } - IPeripheral peripheral; public ComputerBehaviour(SmartBlockEntity te) { super(te); - this.peripheral = getPeripheralFor(te); + this.peripheralSupplier = getPeripheralFor(te); } - public static IPeripheral getPeripheralFor(SmartBlockEntity be) { + public static NonNullSupplier getPeripheralFor(SmartBlockEntity be) { if (be instanceof BrassDepositorBlockEntity scbe) - return new BrassDepositorPeripheral(scbe); + return () -> new BrassDepositorPeripheral(scbe); if (be instanceof VendorBlockEntity scbe) - return new VendorPeripheral(scbe); - + return () -> new VendorPeripheral(scbe); throw new IllegalArgumentException("No peripheral available for " + be.getType()); } @@ -40,6 +57,6 @@ public static IPeripheral getPeripheralFor(SmartBlockEntity be) { @Override public T getPeripheral() { //noinspection unchecked - return (T) peripheral; + return (T) peripheralSupplier.get(); } } diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java index a9176406..2b88fd86 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java @@ -1,3 +1,21 @@ +/* + * Numismatics + * Copyright (c) 2024 The Railways Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package dev.ithundxr.createnumismatics.compat.computercraft.implementation.peripherals; import com.simibubi.create.compat.computercraft.implementation.peripherals.SyncedPeripheral; @@ -13,7 +31,6 @@ import static dev.ithundxr.createnumismatics.content.backend.Coin.getCoinsFromSpurAmount; public class BrassDepositorPeripheral extends SyncedPeripheral { - public BrassDepositorPeripheral(BrassDepositorBlockEntity blockEntity) { super(blockEntity); } @@ -25,6 +42,7 @@ public final void setCoinAmount(String coinName, int amount) throws LuaException blockEntity.setPrice(coin, amount); blockEntity.notifyUpdate(); } + @LuaFunction(mainThread = true) public final void setTotalPrice(int spurAmount){ List> coins = getCoinsFromSpurAmount(spurAmount); diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/VendorPeripheral.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/VendorPeripheral.java index cf271689..9d7b81bc 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/VendorPeripheral.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/VendorPeripheral.java @@ -1,3 +1,21 @@ +/* + * Numismatics + * Copyright (c) 2024 The Railways Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package dev.ithundxr.createnumismatics.compat.computercraft.implementation.peripherals; import com.simibubi.create.compat.computercraft.implementation.peripherals.SyncedPeripheral; @@ -5,11 +23,6 @@ import dan200.computercraft.api.lua.LuaFunction; import dev.ithundxr.createnumismatics.content.backend.Coin; import dev.ithundxr.createnumismatics.content.vendor.VendorBlockEntity; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; import java.util.List; import java.util.Map; @@ -18,13 +31,10 @@ import static dev.ithundxr.createnumismatics.content.backend.Coin.getCoinsFromSpurAmount; public class VendorPeripheral extends SyncedPeripheral { - public VendorPeripheral(VendorBlockEntity blockEntity) { super(blockEntity); } - - @LuaFunction(mainThread = true) public final void setCoinAmount(String coinName, int amount) throws LuaException { Coin coin = getCoinFromName(coinName); @@ -32,6 +42,7 @@ public final void setCoinAmount(String coinName, int amount) throws LuaException blockEntity.setPrice(coin, amount); blockEntity.notifyUpdate(); } + @LuaFunction(mainThread = true) public final void setTotalPrice(int spurAmount){ List> coins = getCoinsFromSpurAmount(spurAmount); diff --git a/fabric/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/fabric/ComputerCraftProxyImpl.java b/fabric/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/fabric/ComputerCraftProxyImpl.java index 5ea2f07e..80d9cc2c 100644 --- a/fabric/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/fabric/ComputerCraftProxyImpl.java +++ b/fabric/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/fabric/ComputerCraftProxyImpl.java @@ -1,29 +1,40 @@ +/* + * Numismatics + * Copyright (c) 2024 The Railways Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package dev.ithundxr.createnumismatics.compat.computercraft.fabric; import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import dan200.computercraft.api.peripheral.PeripheralLookup; +import dev.ithundxr.createnumismatics.compat.computercraft.ComputerCraftProxy; import dev.ithundxr.createnumismatics.compat.computercraft.implementation.ComputerBehaviour; -import java.util.function.Function; - -import static dev.ithundxr.createnumismatics.compat.computercraft.ComputerCraftProxy.fallbackFactory; -import static dev.ithundxr.createnumismatics.compat.computercraft.implementation.ComputerBehaviour.peripheralProvider; - public class ComputerCraftProxyImpl { - - public static Function computerFactory; - public static void registerWithDependency() { /* Comment if computercraft.implementation is not in the source set */ - computerFactory = ComputerBehaviour::new; + ComputerCraftProxy.computerFactory = ComputerBehaviour::new; - PeripheralLookup.get().registerFallback((level, blockPos, blockState, blockEntity, direction) -> peripheralProvider(level, blockPos)); + PeripheralLookup.get().registerFallback((level, blockPos, blockState, blockEntity, direction) -> ComputerBehaviour.peripheralProvider(level, blockPos)); } public static AbstractComputerBehaviour behaviour(SmartBlockEntity sbe) { - if (computerFactory == null) - return fallbackFactory.apply(sbe); - return computerFactory.apply(sbe); + if (ComputerCraftProxy.computerFactory == null) + return ComputerCraftProxy.fallbackFactory.apply(sbe); + return ComputerCraftProxy.computerFactory.apply(sbe); } } diff --git a/forge/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/forge/ComputerCraftProxyImpl.java b/forge/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/forge/ComputerCraftProxyImpl.java index 467a071d..fe83abe5 100644 --- a/forge/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/forge/ComputerCraftProxyImpl.java +++ b/forge/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/forge/ComputerCraftProxyImpl.java @@ -1,25 +1,36 @@ +/* + * Numismatics + * Copyright (c) 2024 The Railways Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package dev.ithundxr.createnumismatics.compat.computercraft.forge; import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; +import dev.ithundxr.createnumismatics.compat.computercraft.ComputerCraftProxy; import dev.ithundxr.createnumismatics.compat.computercraft.implementation.ComputerBehaviour; -import java.util.function.Function; - -import static dev.ithundxr.createnumismatics.compat.computercraft.ComputerCraftProxy.fallbackFactory; -import static dev.ithundxr.createnumismatics.compat.computercraft.implementation.ComputerBehaviour.peripheralProvider; - public class ComputerCraftProxyImpl { - - public static Function computerFactory; - public static void registerWithDependency() { /* Comment if computercraft.implementation is not in the source set */ - computerFactory = ComputerBehaviour::new; + ComputerCraftProxy.computerFactory = ComputerBehaviour::new; } public static AbstractComputerBehaviour behaviour(SmartBlockEntity sbe) { - if (computerFactory == null) - return fallbackFactory.apply(sbe); - return computerFactory.apply(sbe); + if (ComputerCraftProxy.computerFactory == null) + return ComputerCraftProxy.fallbackFactory.apply(sbe); + return ComputerCraftProxy.computerFactory.apply(sbe); } } diff --git a/forge/src/main/java/dev/ithundxr/createnumismatics/forge/mixin/self/ComputerBehaviourCapabilities.java b/forge/src/main/java/dev/ithundxr/createnumismatics/forge/mixin/self/ComputerBehaviourCapabilities.java new file mode 100644 index 00000000..48d724f6 --- /dev/null +++ b/forge/src/main/java/dev/ithundxr/createnumismatics/forge/mixin/self/ComputerBehaviourCapabilities.java @@ -0,0 +1,60 @@ +/* + * Numismatics + * Copyright (c) 2024 The Railways Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package dev.ithundxr.createnumismatics.forge.mixin.self; + +import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; +import com.tterrag.registrate.util.nullness.NonNullSupplier; +import dan200.computercraft.api.peripheral.IPeripheral; +import dev.ithundxr.createnumismatics.compat.computercraft.implementation.ComputerBehaviour; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityManager; +import net.minecraftforge.common.capabilities.CapabilityToken; +import net.minecraftforge.common.util.LazyOptional; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(ComputerBehaviour.class) +public class ComputerBehaviourCapabilities extends AbstractComputerBehaviour { + public ComputerBehaviourCapabilities(SmartBlockEntity te) { + super(te); + } + + private static final Capability RAILWAYS$PERIPHERAL_CAPABILITY = CapabilityManager.get(new CapabilityToken<>() {}); + LazyOptional railways$peripheral; + @Shadow NonNullSupplier peripheralSupplier; + + @Override + public boolean isPeripheralCap(Capability cap) { + return cap == RAILWAYS$PERIPHERAL_CAPABILITY; + } + + @Override + public LazyOptional getPeripheralCapability() { + if (railways$peripheral == null || !railways$peripheral.isPresent()) + railways$peripheral = LazyOptional.of(() -> peripheralSupplier.get()); + return railways$peripheral.cast(); + } + + @Override + public void removePeripheral() { + if (railways$peripheral != null) + railways$peripheral.invalidate(); + } +} diff --git a/forge/src/main/resources/numismatics.mixins.json b/forge/src/main/resources/numismatics.mixins.json index 5da27406..698ea854 100644 --- a/forge/src/main/resources/numismatics.mixins.json +++ b/forge/src/main/resources/numismatics.mixins.json @@ -11,6 +11,7 @@ "mixins": [ "ServerGamePacketListenerImplMixin", "self.BrassDepositorBlockEntityCapabilities", + "self.ComputerBehaviourCapabilities", "self.VendorBlockEntityCapabilities" ], "injectors": { From 4611b9557cc936b96b732480bee1bc89e10c0258 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Wed, 5 Jun 2024 18:49:24 -0400 Subject: [PATCH 7/7] fix formatting --- .../implementation/peripherals/BrassDepositorPeripheral.java | 4 ++-- .../implementation/peripherals/VendorPeripheral.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java index 2b88fd86..de378a97 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/BrassDepositorPeripheral.java @@ -44,7 +44,7 @@ public final void setCoinAmount(String coinName, int amount) throws LuaException } @LuaFunction(mainThread = true) - public final void setTotalPrice(int spurAmount){ + public final void setTotalPrice(int spurAmount) { List> coins = getCoinsFromSpurAmount(spurAmount); for (Map.Entry coin : coins) { blockEntity.setPrice(coin.getKey(), coin.getValue()); @@ -53,7 +53,7 @@ public final void setTotalPrice(int spurAmount){ } @LuaFunction - public final int getTotalPrice(){ + public final int getTotalPrice() { return blockEntity.getTotalPrice(); } diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/VendorPeripheral.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/VendorPeripheral.java index 9d7b81bc..31951e93 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/VendorPeripheral.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/computercraft/implementation/peripherals/VendorPeripheral.java @@ -44,7 +44,7 @@ public final void setCoinAmount(String coinName, int amount) throws LuaException } @LuaFunction(mainThread = true) - public final void setTotalPrice(int spurAmount){ + public final void setTotalPrice(int spurAmount) { List> coins = getCoinsFromSpurAmount(spurAmount); for (Map.Entry coin : coins) { blockEntity.setPrice(coin.getKey(), coin.getValue()); @@ -53,7 +53,7 @@ public final void setTotalPrice(int spurAmount){ } @LuaFunction - public final int getTotalPrice(){ + public final int getTotalPrice() { return blockEntity.getTotalPrice(); }