Skip to content

Commit

Permalink
computercraft
Browse files Browse the repository at this point in the history
  • Loading branch information
Szedann committed Apr 20, 2024
1 parent fdfcfc7 commit 19a909f
Show file tree
Hide file tree
Showing 12 changed files with 215 additions and 1 deletion.
8 changes: 8 additions & 0 deletions common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
*/
public enum Mods {
CARRYON("carryon"),
SODIUM("sodium")
SODIUM("sodium"),
COMPUTERCRAFT("computercraft")
;

public final boolean isLoaded;
Expand Down
Original file line number Diff line number Diff line change
@@ -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<SmartBlockEntity, ? extends AbstractComputerBehaviour> fallbackFactory;
private static Function<SmartBlockEntity, ? extends AbstractComputerBehaviour> computerFactory;

@ExpectPlatform
public static AbstractComputerBehaviour behaviour(SmartBlockEntity sbe) {
throw new AssertionError();
}

}
Original file line number Diff line number Diff line change
@@ -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> T getPeripheral() {
//noinspection unchecked
return (T) peripheral;
}
}
Original file line number Diff line number Diff line change
@@ -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<BrassDepositorBlockEntity> {

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";
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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);
Expand All @@ -37,6 +40,7 @@ public BrassDepositorBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockSta
@Override
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
price = new SliderStylePriceBehaviour(this, this::addCoin, this::getCoinCount);
behaviours.add(computerBehaviour = ComputerCraftProxy.behaviour(this));
behaviours.add(price);
}

Expand Down
10 changes: 10 additions & 0 deletions fabric/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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<SmartBlockEntity, ? extends AbstractComputerBehaviour> 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);
}
}
12 changes: 12 additions & 0 deletions forge/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ repositories {
includeGroup("com.simibubi.create")
}
}
maven("https://squiddev.cc/maven/") { // CC Tweaked
content {
includeGroup("cc.tweaked")
}
}
}

dependencies {
Expand All @@ -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()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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<SmartBlockEntity, ? extends AbstractComputerBehaviour> 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);
}
}
3 changes: 3 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 19a909f

Please sign in to comment.