Skip to content

Commit

Permalink
Rework targeted modules (#258)
Browse files Browse the repository at this point in the history
* Rework targeted modules

* Add some game tests

* Fix a couple of bugs discovered by game tests 😛
  • Loading branch information
Matyrobbrt authored and desht committed Nov 25, 2024
1 parent c243634 commit 75cb4b1
Show file tree
Hide file tree
Showing 46 changed files with 1,119 additions and 635 deletions.
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}"))

compileOnly("mcjty.theoneprobe:theoneprobe:${top_version}") {
transitive = false
Expand Down Expand Up @@ -167,6 +187,7 @@ publishing {
}
repositories {
maven {
name 'local'
url "file://${project.projectDir}/repo"
}
if (System.getenv("MODMAVEN_USER") != null) {
Expand All @@ -186,6 +207,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=5846076
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 @@ -434,7 +434,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 @@ -48,7 +48,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 @@ -114,7 +114,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 @@ -66,10 +66,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,21 +1,18 @@
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.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 All @@ -42,18 +39,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,19 +1,14 @@
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.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(Properties properties) {
Expand Down Expand Up @@ -41,17 +36,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
Expand Up @@ -7,8 +7,8 @@
import me.desht.modularrouters.core.ModDataComponents;
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 net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
Expand All @@ -26,7 +26,7 @@ public class FluidModule1 extends ModuleItem {
private static final TintColor TINT_COLOR = new TintColor(79, 191, 255);

public FluidModule1(Properties properties) {
super(properties, CompiledFluidModule1::new);
super(properties, CompiledFluidModule::new);
}

@Override
Expand All @@ -49,7 +49,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 @@ -80,14 +84,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

0 comments on commit 75cb4b1

Please sign in to comment.