Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rework targeted modules #258

Merged
merged 10 commits into from
Nov 24, 2024
Merged
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
4 changes: 2 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: "Build applicable branches on push or pull request"
name: "Build applicable branches on push"

# Controls when the action will run. Triggers the workflow on push or pull request
# events for the branches listed
Expand Down Expand Up @@ -53,4 +53,4 @@ jobs:
if:
env.DISCORD_WEBHOOK != null
with:
args: 'Build complete for project {{ EVENT_PAYLOAD.repository.full_name }} (Minecraft ${{ steps.mod_meta.outputs.mc_version}}): ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}.'
args: 'Build complete for project {{ EVENT_PAYLOAD.repository.full_name }} (Minecraft ${{ steps.mod_meta.outputs.mc_version}}): ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}.'
28 changes: 28 additions & 0 deletions .github/workflows/prs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Build PRs

on: [push, pull_request]

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true

- name: Setup JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Build with Gradle
run: ./gradlew build

- name: Run gametests
run: ./gradlew runGameTestServer
25 changes: 25 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@ repositories {
}
}

sourceSets {
test {
runs {
modIdentifier 'modularrouterstest'
}
}
}

group = project.mod_group_id

base {
Expand All @@ -62,6 +70,15 @@ base {
java {
toolchain.languageVersion = JavaLanguageVersion.of(21)
withSourcesJar()

registerFeature('testUtils') {
usingSourceSet(sourceSets.test)
withSourcesJar()
}
}

minecraft {
accessTransformers.file(project.file('src/main/resources/META-INF/accesstransformer.cfg'))
}

runs {
Expand All @@ -81,10 +98,12 @@ runs {

jvmArguments.addAll '-Xmx4G'

modSource project.sourceSets.test
modSource project.sourceSets.main
}

client {
systemProperty 'neoforge.enableGameTest', 'true'
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
systemProperty 'forge.enabledGameTestNamespaces', project.mod_id
}
Expand Down Expand Up @@ -112,6 +131,7 @@ sourceSets.main.resources { srcDir 'src/generated/resources' }

dependencies {
implementation "net.neoforged:neoforge:${neo_version}"
localRuntime(testImplementation("net.neoforged:testframework:${neo_version}"))

implementation("mcjty.theoneprobe:theoneprobe:${top_version}") {
transitive = false
Expand Down Expand Up @@ -169,6 +189,7 @@ publishing {
}
repositories {
maven {
name 'local'
url "file://${project.projectDir}/repo"
}
if (System.getenv("MODMAVEN_USER") != null) {
Expand All @@ -188,6 +209,10 @@ tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
}

test {
enabled = false
}

Closure<ReleaseType> getReleaseType = { type ->
switch(type) {
case "alpha": return ReleaseType.ALPHA
Expand Down
3 changes: 3 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,6 @@ jade_curse_id=5639932
jei_version=19.16.4.161
patchouli_version=1.21-87-NEOFORGE
ffs_version=21.0.0

# Prevent NG attempting to make the test sourceset a junit one
neogradle.subsystems.conventions.sourcesets.automatic-inclusion=false
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package me.desht.modularrouters.api.event;

import me.desht.modularrouters.item.module.TargetedModule;
import me.desht.modularrouters.item.module.ModuleItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.UseOnContext;
import net.neoforged.bus.api.Event;
Expand All @@ -12,12 +12,12 @@
* This event can be used to allow a module to target blocks it otherwise couldn't in conjunction with {@link ExecuteModuleEvent}.
*/
public final class AddModuleTargetEvent extends Event {
private final TargetedModule item;
private final ModuleItem item;
private final UseOnContext context;
private boolean valid;

@ApiStatus.Internal
public AddModuleTargetEvent(TargetedModule item, UseOnContext context, boolean valid) {
public AddModuleTargetEvent(ModuleItem item, UseOnContext context, boolean valid) {
this.item = item;
this.context = context;
this.valid = valid;
Expand All @@ -26,7 +26,7 @@ public AddModuleTargetEvent(TargetedModule item, UseOnContext context, boolean v
/**
* {@return the module type}
*/
public TargetedModule getModuleType() {
public ModuleItem getModuleType() {
return item;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ private boolean runAllModules(boolean powered, boolean pulsed) {

for (CompiledIndexedModule cim : compiledModules) {
CompiledModule cm = cim.compiledModule;
if (cm != null && cm.hasTarget() && cm.getEnergyCost() <= getEnergyStorage().getEnergyStored() && cm.shouldRun(powered, pulsed)) {
if (cm != null && cm.shouldExecute() && cm.getEnergyCost() <= getEnergyStorage().getEnergyStored() && cm.checkRedstone(powered, pulsed)) {
var event = cm.getEvent();
if (event != null) {
event.setExecuted(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import me.desht.modularrouters.container.ModuleMenu;
import me.desht.modularrouters.core.ModBlocks;
import me.desht.modularrouters.core.ModDataComponents;
import me.desht.modularrouters.logic.compiled.CompiledFluidModule1;
import me.desht.modularrouters.logic.compiled.CompiledFluidModule;
import me.desht.modularrouters.logic.settings.TransferDirection;
import net.minecraft.Util;
import net.minecraft.client.gui.GuiGraphics;
Expand Down Expand Up @@ -47,7 +47,7 @@ public FluidModuleScreen(ModuleMenu container, Inventory inv, Component displayN
public void init() {
super.init();

CompiledFluidModule1 cfm = new CompiledFluidModule1(null, moduleItemStack);
CompiledFluidModule cfm = new CompiledFluidModule(null, moduleItemStack);

int max = ConfigHolder.common.router.baseTickRate.get() * ConfigHolder.common.router.fluidMaxTransferRate.get();
maxTransferField = new IntegerTextField(font, leftPos + 152, topPos + 23, 34, 12,
Expand Down Expand Up @@ -113,7 +113,7 @@ public void containerTick() {
@Override
protected ItemStack buildModifiedItemStack() {
return Util.make(super.buildModifiedItemStack(), stack ->
stack.set(ModDataComponents.FLUID_SETTINGS, new CompiledFluidModule1.FluidModuleSettings(
stack.set(ModDataComponents.FLUID_SETTINGS, new CompiledFluidModule.FluidModuleSettings(
maxTransferField.getIntValue(),
fluidDirButton.getState(),
forceEmptyButton.isToggled(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package me.desht.modularrouters.client.render.area;

import me.desht.modularrouters.item.module.TargetedModule;
import me.desht.modularrouters.item.module.ITargetedModule;
import me.desht.modularrouters.logic.ModuleTarget;
import net.minecraft.world.item.ItemStack;

Expand All @@ -19,8 +19,10 @@ public interface IPositionProvider {
* @return a list of block positions that has been retrieved from the itemstack
*/
default List<ModuleTarget> getStoredPositions(@Nonnull ItemStack stack) {
ModuleTarget target = TargetedModule.getTarget(stack);
return target == null ? List.of() : List.of(target);
if (stack.getItem() instanceof ITargetedModule) {
return List.copyOf(ITargetedModule.getTargets(stack, false));
}
return List.of();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,10 @@ public class ModDataComponents {
.persistent(CompiledFlingerModule.FlingerSettings.CODEC)
.networkSynchronized(CompiledFlingerModule.FlingerSettings.STREAM_CODEC)
);
public static final Supplier<DataComponentType<CompiledFluidModule1.FluidModuleSettings>> FLUID_SETTINGS
public static final Supplier<DataComponentType<CompiledFluidModule.FluidModuleSettings>> FLUID_SETTINGS
= COMPONENTS.registerComponentType("fluid_settings", builder -> builder
.persistent(CompiledFluidModule1.FluidModuleSettings.CODEC)
.networkSynchronized(CompiledFluidModule1.FluidModuleSettings.STREAM_CODEC)
.persistent(CompiledFluidModule.FluidModuleSettings.CODEC)
.networkSynchronized(CompiledFluidModule.FluidModuleSettings.STREAM_CODEC)
);
public static final Supplier<DataComponentType<CompiledPlayerModule.PlayerSettings>> PLAYER_SETTINGS
= COMPONENTS.registerComponentType("player_settings", builder -> builder
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
package me.desht.modularrouters.item.module;

import com.google.common.collect.ImmutableList;
import me.desht.modularrouters.client.util.ClientUtil;
import me.desht.modularrouters.client.util.TintColor;
import me.desht.modularrouters.config.ConfigHolder;
import me.desht.modularrouters.container.ModuleMenu;
import me.desht.modularrouters.core.ModDataComponents;
import me.desht.modularrouters.core.ModItems;
import me.desht.modularrouters.core.ModMenuTypes;
import me.desht.modularrouters.logic.ModuleTarget;
import me.desht.modularrouters.logic.compiled.CompiledDistributorModule;
import me.desht.modularrouters.logic.compiled.CompiledDistributorModule.DistributorSettings;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.item.ItemStack;

import javax.annotation.Nonnull;
import java.util.List;

public class DistributorModule extends SenderModule2 {
Expand Down Expand Up @@ -44,18 +41,13 @@ public MenuType<? extends ModuleMenu> getMenuType() {
return ModMenuTypes.DISTRIBUTOR_MENU.get();
}

@Override
public List<ModuleTarget> getStoredPositions(@Nonnull ItemStack stack) {
return ImmutableList.copyOf(TargetedModule.getTargets(stack, false));
}

@Override
public TintColor getItemTint() {
return TINT_COLOR;
}

@Override
protected int getMaxTargets() {
public int getMaxTargets() {
return 8;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
package me.desht.modularrouters.item.module;

import com.google.common.collect.ImmutableList;
import me.desht.modularrouters.client.render.area.IPositionProvider;
import me.desht.modularrouters.client.util.TintColor;
import me.desht.modularrouters.config.ConfigHolder;
import me.desht.modularrouters.core.ModItems;
import me.desht.modularrouters.logic.ModuleTarget;
import me.desht.modularrouters.logic.compiled.CompiledEnergyDistributorModule;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.UseOnContext;
import net.neoforged.neoforge.capabilities.Capabilities;

import javax.annotation.Nonnull;
import java.util.List;

public class EnergyDistributorModule extends TargetedModule implements IRangedModule, IPositionProvider {
public class EnergyDistributorModule extends ModuleItem implements IRangedModule, IPositionProvider, ITargetedModule {
private static final TintColor TINT_COLOR = new TintColor(79, 9, 90);

public EnergyDistributorModule() {
Expand Down Expand Up @@ -43,17 +38,12 @@ public int getHardMaxRange() {
}

@Override
public List<ModuleTarget> getStoredPositions(@Nonnull ItemStack stack) {
return ImmutableList.copyOf(TargetedModule.getTargets(stack, false));
}

@Override
protected boolean isValidTarget(UseOnContext ctx) {
public boolean isValidTarget(UseOnContext ctx) {
return ctx.getLevel().getCapability(Capabilities.EnergyStorage.BLOCK, ctx.getClickedPos(), ctx.getClickedFace()) != null;
}

@Override
protected int getMaxTargets() {
public int getMaxTargets() {
return 8;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package me.desht.modularrouters.item.module;

import me.desht.modularrouters.api.matching.IItemMatcher;
import me.desht.modularrouters.client.util.TintColor;
import me.desht.modularrouters.config.ConfigHolder;
import me.desht.modularrouters.container.ModuleMenu;
import me.desht.modularrouters.core.ModDataComponents;
import me.desht.modularrouters.core.ModItems;
import me.desht.modularrouters.core.ModMenuTypes;
import me.desht.modularrouters.item.smartfilter.SmartFilterItem;
import me.desht.modularrouters.logic.compiled.CompiledFluidModule1;
import me.desht.modularrouters.logic.compiled.CompiledFluidModule1.FluidModuleSettings;
import me.desht.modularrouters.logic.compiled.CompiledFluidModule;
import me.desht.modularrouters.logic.compiled.CompiledFluidModule.FluidModuleSettings;
import me.desht.modularrouters.logic.filter.matchers.FluidMatcher;
import me.desht.modularrouters.api.matching.IItemMatcher;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.world.inventory.MenuType;
Expand All @@ -27,7 +27,7 @@ public class FluidModule1 extends ModuleItem {
private static final TintColor TINT_COLOR = new TintColor(79, 191, 255);

public FluidModule1() {
super(ModItems.defaultProps(), CompiledFluidModule1::new);
super(ModItems.defaultProps(), CompiledFluidModule::new);
}

@Override
Expand All @@ -50,7 +50,11 @@ protected Component getFilterItemDisplayName(ItemStack stack) {
protected void addExtraInformation(ItemStack stack, List<Component> list) {
super.addExtraInformation(stack, list);

addFluidModuleInformation(stack, list);
FluidModuleSettings settings = stack.getOrDefault(ModDataComponents.FLUID_SETTINGS.get(), FluidModuleSettings.DEFAULT);
list.add(xlate("modularrouters.itemText.transfer_direction",
xlate(settings.direction().getTranslationKey()).withStyle(ChatFormatting.AQUA)).withStyle(ChatFormatting.YELLOW));
list.add(xlate("modularrouters.itemText.fluid.maxTransfer",
colorText(settings.maxTransfer(), ChatFormatting.AQUA)).withStyle(ChatFormatting.YELLOW));
}

@Override
Expand Down Expand Up @@ -81,14 +85,4 @@ public boolean isFluidModule() {
public TintColor getItemTint() {
return TINT_COLOR;
}

static void addFluidModuleInformation(ItemStack stack, List<Component> list) {
// CompiledFluidModule1 cfm = new CompiledFluidModule1(null, stack);
FluidModuleSettings settings = stack.getOrDefault(ModDataComponents.FLUID_SETTINGS.get(), FluidModuleSettings.DEFAULT);
list.add(xlate("modularrouters.itemText.transfer_direction",
xlate(settings.direction().getTranslationKey()).withStyle(ChatFormatting.AQUA)).withStyle(ChatFormatting.YELLOW));
list.add(xlate("modularrouters.itemText.fluid.maxTransfer",
colorText(settings.maxTransfer(), ChatFormatting.AQUA)).withStyle(ChatFormatting.YELLOW));
}

}
Loading