Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ repositories {
url = uri("http://jenkins.usrv.eu:8081/nexus/content/groups/public/")
isAllowInsecureProtocol = true
}
//mavenLocal()
}

dependencies {
Expand Down Expand Up @@ -194,9 +195,13 @@ dependencies {
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:2.2.0")
compileOnly("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1")

compileOnlyApi("org.jetbrains:annotations:24.1.0")
annotationProcessor("org.jetbrains:annotations:24.1.0")
implementation("com.cleanroommc:groovyscript:1.2.5") { isTransitive = false }
implementation("CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.+")

implementation(rfg.deobf("curse.maven:had-enough-items-557549:4810661"))
implementation(rfg.deobf("curse.maven:zenutil-401178:5056679"))
compileOnly(rfg.deobf("curse.maven:zenutil-401178:5056679"))
implementation(rfg.deobf("curse.maven:RedstoneFlux-270789:2920436"))
implementation(rfg.deobf("curse.maven:CodeChickenLib-242818:2779848"))
implementation(rfg.deobf("curse.maven:brandonscore-231382:3051539"))
Expand Down Expand Up @@ -344,4 +349,4 @@ idea {

tasks.processIdeaSettings.configure {
dependsOn(tasks.injectTags)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package github.kasuminova.mmce.common.event.machine;

import groovy.lang.Closure;
import net.minecraftforge.fml.common.Optional;

public interface IEventHandler<T> {

void invoke(T event);

@Optional.Method(modid = "groovyscript")
static <T> IEventHandler<T> of(Closure<?> listener) {
return listener::call;
}

@Optional.Method(modid = "crafttweaker")
static <T> IEventHandler<T> of(crafttweaker.util.IEventHandler<T> eventHandler) {
return eventHandler::handle;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package github.kasuminova.mmce.common.event.machine;

import crafttweaker.annotations.ZenRegister;
import crafttweaker.util.IEventHandler;
import github.kasuminova.mmce.common.handler.UpgradeMachineEventHandler;
import github.kasuminova.mmce.common.helper.IMachineController;
import hellfirepvp.modularmachinery.ModularMachinery;
Expand Down Expand Up @@ -69,7 +68,7 @@ public void postCrTEvent() {
}

for (IEventHandler<MachineEvent> handler : handlers) {
handler.handle(this);
handler.invoke(this);
if (isCanceled()) {
break;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package github.kasuminova.mmce.common.event.recipe;

import crafttweaker.annotations.ZenRegister;
import crafttweaker.util.IEventHandler;
import github.kasuminova.mmce.common.event.machine.IEventHandler;
import github.kasuminova.mmce.common.event.machine.MachineEvent;
import hellfirepvp.modularmachinery.common.crafting.ActiveMachineRecipe;
import hellfirepvp.modularmachinery.common.crafting.helper.RecipeCraftingContext;
Expand Down Expand Up @@ -54,7 +54,7 @@ public void postCrTEvent() {
return;
}
for (IEventHandler<RecipeEvent> handler : handlers) {
handler.handle(this);
handler.invoke(this);
if (isCanceled()) {
break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,19 @@
import hellfirepvp.modularmachinery.common.modifier.RecipeModifier;
import hellfirepvp.modularmachinery.common.tiles.base.TileMultiblockMachineController;
import hellfirepvp.modularmachinery.common.util.SmartInterfaceData;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.Optional;
import stanhebben.zenscript.annotations.ZenClass;
import stanhebben.zenscript.annotations.ZenGetter;
import stanhebben.zenscript.annotations.ZenMethod;
import stanhebben.zenscript.annotations.ZenSetter;

import javax.annotation.Nullable;
import java.util.function.Predicate;

@ZenRegister
@ZenClass("mods.modularmachinery.IMachineController")
Expand All @@ -32,33 +39,45 @@ public interface IMachineController {
*
* @return 世界
*/
@Optional.Method(modid = "crafttweaker")
@ZenGetter("world")
IWorld getIWorld();

World getWorld();

/**
* 获取控制器方块。
*
* @return IBlockState
*/
@Optional.Method(modid = "crafttweaker")
@ZenGetter("blockState")
IBlockState getIBlockState();

net.minecraft.block.state.IBlockState getBlockState();

/**
* 获取控制器处于世界中的朝向。
*
* @return IFacing
*/
@Optional.Method(modid = "crafttweaker")
@ZenGetter("facing")
IFacing getFacing();

EnumFacing getEnumFacing();

/**
* 获取控制器所在的坐标
*
* @return 坐标
*/
@Optional.Method(modid = "crafttweaker")
@ZenGetter("pos")
IBlockPos getIPos();

BlockPos getPos();

/**
* 根据控制器的朝向,将给定的坐标旋转到控制器朝向。
*
Expand Down Expand Up @@ -137,6 +156,7 @@ public interface IMachineController {
*
* @return IData
*/
@Optional.Method(modid = "crafttweaker")
@ZenGetter("customData")
IData getCustomData();

Expand All @@ -145,9 +165,14 @@ public interface IMachineController {
*
* @param data IData
*/
@Optional.Method(modid = "crafttweaker")
@ZenSetter("customData")
void setCustomData(IData data);

NBTTagCompound getCustomNbt();

void setCustomNbt(NBTTagCompound nbt);

/**
* 添加一个半永久 RecipeModifier,会在配方完成的时候自动删除。
*
Expand Down Expand Up @@ -272,9 +297,12 @@ public interface IMachineController {
* @param blockStack 要判断的方块对应的物品,会被自动转换成对应的 IBlockState,如果转换出现问题会输出错误日志。
* @return 存在数量。
*/
@net.minecraftforge.fml.common.Optional.Method(modid = "crafttweaker")
@ZenMethod
int getBlocksInPattern(final IItemStack blockStack);

int getBlocksInPattern(ItemStack itemStack);

/**
* 获取控制器的结构中指定方块的存在数量,只能在控制器成型时使用。<br/>
* 会过滤空气方块。<br/>
Expand All @@ -283,6 +311,7 @@ public interface IMachineController {
* @param blockStateMatcher 要判断的方块对应的 IBlockStateMatcher
* @return 存在数量。
*/
@net.minecraftforge.fml.common.Optional.Method(modid = "crafttweaker")
@ZenMethod
int getBlocksInPattern(final IBlockStateMatcher blockStateMatcher);

Expand All @@ -305,9 +334,12 @@ public interface IMachineController {
* @param predicate 自定义判断逻辑。
* @return 存在数量。
*/
@net.minecraftforge.fml.common.Optional.Method(modid = "crafttweaker")
@ZenMethod
int getBlocksInPattern(final IBlockStatePredicate predicate);

int getBlocksInPattern(Predicate<net.minecraft.block.state.IBlockState> predicate);

/**
* 获取控制器的拥有者,如果玩家不在线则返回 null。
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package github.kasuminova.mmce.common.integration;

import com.cleanroommc.groovyscript.GroovyScript;
import com.cleanroommc.groovyscript.api.GroovyLog;
import crafttweaker.CraftTweakerAPI;
import hellfirepvp.modularmachinery.ModularMachinery;
import hellfirepvp.modularmachinery.common.base.Mods;
import org.apache.logging.log4j.message.ParameterizedMessage;

/**
* A logger which logs to CraftTweaker, GroovyScript and this mods log, depending on if the mods are loaded.
*/
public class Logger {

private static final String CT_PREFIX = "[ModularMachinery] ";
private static final Object[] NO_ARGS = new Object[0];

private static boolean isGroovyScriptRunning() {
return Mods.GROOVYSCRIPT.isPresent() && GroovyScript.getSandbox().isRunning();
}

private static String formatMsg(String msg, Object... args) {
return args == null || args.length == 0 ? msg : new ParameterizedMessage(msg, args).getFormattedMessage();
}

public static void error(String msg) {
error(msg, NO_ARGS);
}

public static void warn(String msg) {
warn(msg, NO_ARGS);
}

public static void info(String msg) {
info(msg, NO_ARGS);
}

public static void error(String msg, Object... args) {
if (isGroovyScriptRunning()) {
GroovyLog.get().error(msg, args);
}
if (Mods.CRAFTTWEAKER.isPresent()) {
CraftTweakerAPI.logError(CT_PREFIX + formatMsg(msg, args));
}
ModularMachinery.log.error(msg, args);
}

public static void warn(String msg, Object... args) {
if (isGroovyScriptRunning()) {
GroovyLog.get().warn(msg, args);
}
if (Mods.CRAFTTWEAKER.isPresent()) {
CraftTweakerAPI.logWarning(formatMsg(msg, args));
}
ModularMachinery.log.warn(msg, args);
}

public static void info(String msg, Object... args) {
if (isGroovyScriptRunning()) {
GroovyLog.get().info(msg, args);
}
if (Mods.CRAFTTWEAKER.isPresent()) {
CraftTweakerAPI.logInfo(formatMsg(msg, args));
}
ModularMachinery.log.info(msg, args);
}
}
Loading