Skip to content

Commit 716d356

Browse files
committed
Added pull mode for Energy Distributor module
1 parent a2f8d0b commit 716d356

File tree

12 files changed

+191
-46
lines changed

12 files changed

+191
-46
lines changed

src/generated/resources/assets/modularrouters/models/item/energy_distributor_module.json

+8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
{
22
"parent": "minecraft:item/generated",
3+
"overrides": [
4+
{
5+
"model": "modularrouters:item/energy_distributor_module_pull",
6+
"predicate": {
7+
"modularrouters:mode": 0.5
8+
}
9+
}
10+
],
311
"textures": {
412
"layer0": "modularrouters:item/module/module_layer0",
513
"layer1": "modularrouters:item/module/module_layer1",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"parent": "minecraft:item/generated",
3+
"textures": {
4+
"layer0": "modularrouters:item/module/module_layer0",
5+
"layer1": "modularrouters:item/module/module_layer1",
6+
"layer2": "modularrouters:item/module/energy_distributor_module_pull"
7+
}
8+
}

src/main/java/me/desht/modularrouters/client/ClientSetup.java

+11-6
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import net.neoforged.neoforge.common.NeoForge;
3232
import org.lwjgl.glfw.GLFW;
3333

34+
import java.util.List;
35+
3436
import static me.desht.modularrouters.util.MiscUtil.RL;
3537

3638
@EventBusSubscriber(modid = ModularRouters.MODID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
@@ -81,6 +83,7 @@ public static void registerScreens(RegisterMenuScreensEvent event) {
8183
event.register(ModMenuTypes.ACTIVATOR_MENU.get(), ActivatorModuleScreen::new);
8284
event.register(ModMenuTypes.BREAKER_MENU.get(), BreakerModuleScreen::new);
8385
event.register(ModMenuTypes.DETECTOR_MENU.get(), DetectorModuleScreen::new);
86+
event.register(ModMenuTypes.ENERGY_DISTRIBUTOR_MENU.get(), EnergyDistributorModuleScreen::new);
8487
event.register(ModMenuTypes.DISTRIBUTOR_MENU.get(), DistributorModuleScreen::new);
8588
event.register(ModMenuTypes.EXTRUDER2_MENU.get(), ExtruderModule2Screen::new);
8689
event.register(ModMenuTypes.FLINGER_MENU.get(), FlingerModuleScreen::new);
@@ -94,11 +97,13 @@ public static void registerScreens(RegisterMenuScreensEvent event) {
9497
}
9598

9699
private static void registerItemModelOverrides() {
97-
ItemProperties.register(ModItems.DISTRIBUTOR_MODULE.get(), RL("mode"), (stack, world, entity, n) -> {
98-
if (entity != null) {
99-
return stack.getOrDefault(ModDataComponents.DISTRIBUTOR_SETTINGS, DistributorSettings.DEFAULT).isPulling() ? 1f : 0f;
100-
}
101-
return 0f;
102-
});
100+
for (var ro : List.of(ModItems.DISTRIBUTOR_MODULE, ModItems.ENERGY_DISTRIBUTOR_MODULE)) {
101+
ItemProperties.register(ro.get(), RL("mode"), (stack, world, entity, n) -> {
102+
if (entity != null) {
103+
return stack.getOrDefault(ModDataComponents.DISTRIBUTOR_SETTINGS, DistributorSettings.DEFAULT).isPulling() ? 1f : 0f;
104+
}
105+
return 0f;
106+
});
107+
}
103108
}
104109
}

src/main/java/me/desht/modularrouters/client/gui/module/DistributorModuleScreen.java

+13-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package me.desht.modularrouters.client.gui.module;
22

3+
import me.desht.modularrouters.client.gui.ISendToServer;
34
import me.desht.modularrouters.client.gui.widgets.button.ItemStackButton;
45
import me.desht.modularrouters.client.gui.widgets.button.TexturedCyclerButton;
56
import me.desht.modularrouters.client.gui.widgets.button.TexturedToggleButton;
@@ -38,9 +39,9 @@ public void init() {
3839

3940
CompiledDistributorModule cdm = new CompiledDistributorModule(null, moduleItemStack);
4041

41-
addRenderableWidget(new TooltipButton(leftPos + 127, topPos + 23));
42-
addRenderableWidget(sb = new StrategyButton(leftPos + 147, topPos + 23, 16, 16, cdm.getDistributionStrategy()));
43-
addRenderableWidget(db = new DirectionButton(leftPos + 147, topPos + 43, cdm.isPulling()));
42+
addRenderableWidget(new TooltipButton(leftPos + 127, topPos + 23, ModItems.DISTRIBUTOR_MODULE.toStack()));
43+
addRenderableWidget(sb = new StrategyButton(leftPos + 147, topPos + 23, 16, 16, cdm.getDistributionStrategy(), this));
44+
addRenderableWidget(db = new DirectionButton(leftPos + 147, topPos + 43, cdm.isPulling(), this));
4445

4546
getMouseOverHelp().addHelpRegion(leftPos + 125, topPos + 21, leftPos + 165, topPos + 41,
4647
xlate("modularrouters.guiText.popup.distributor.strategy").withStyle(ChatFormatting.YELLOW));
@@ -65,9 +66,9 @@ protected void renderBg(GuiGraphics graphics, float partialTicks, int mouseX, in
6566
graphics.renderItem(ROUTER_STACK, leftPos + 127, topPos + 43);
6667
}
6768

68-
private class StrategyButton extends TexturedCyclerButton<DistributionStrategy> {
69-
StrategyButton(int x, int y, int width, int height, DistributionStrategy initialVal) {
70-
super(x, y, width, height, initialVal, DistributorModuleScreen.this);
69+
static class StrategyButton extends TexturedCyclerButton<DistributionStrategy> {
70+
StrategyButton(int x, int y, int width, int height, DistributionStrategy initialVal, ISendToServer sendToServer) {
71+
super(x, y, width, height, initialVal, sendToServer);
7172
}
7273

7374
@Override
@@ -76,12 +77,12 @@ protected XYPoint getTextureXY() {
7677
}
7778
}
7879

79-
private class DirectionButton extends TexturedToggleButton {
80+
static class DirectionButton extends TexturedToggleButton {
8081
private static final XYPoint TEXTURE_XY = new XYPoint(176, 16);
8182
private static final XYPoint TEXTURE_XY_TOGGLED = new XYPoint(160, 16);
8283

83-
public DirectionButton(int x, int y, boolean initialVal) {
84-
super(x, y, 16, 16, initialVal, DistributorModuleScreen.this);
84+
public DirectionButton(int x, int y, boolean initialVal, ISendToServer sender) {
85+
super(x, y, 16, 16, initialVal, sender);
8586

8687
setTooltips(xlate("modularrouters.itemText.transfer_direction.from_router"),xlate("modularrouters.itemText.transfer_direction.to_router"));
8788
}
@@ -92,11 +93,11 @@ protected XYPoint getTextureXY() {
9293
}
9394
}
9495

95-
private static class TooltipButton extends ItemStackButton {
96+
static class TooltipButton extends ItemStackButton {
9697
private static final XYPoint TEXTURE_XY = new XYPoint(176, 16);
9798

98-
TooltipButton(int x, int y) {
99-
super(x, y, 16, 16, new ItemStack(ModItems.DISTRIBUTOR_MODULE.get()), true, p -> {});
99+
TooltipButton(int x, int y, ItemStack stack) {
100+
super(x, y, 16, 16, stack, true, p -> {});
100101
setTooltip(Tooltip.create(xlate("modularrouters.guiText.tooltip.distributor.strategy")));
101102
}
102103

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package me.desht.modularrouters.client.gui.module;
2+
3+
import me.desht.modularrouters.container.ModuleMenu;
4+
import me.desht.modularrouters.core.ModBlocks;
5+
import me.desht.modularrouters.core.ModDataComponents;
6+
import me.desht.modularrouters.logic.compiled.CompiledDistributorModule;
7+
import me.desht.modularrouters.logic.compiled.CompiledDistributorModule.DistributionStrategy;
8+
import me.desht.modularrouters.logic.compiled.CompiledEnergyDistributorModule;
9+
import me.desht.modularrouters.logic.settings.TransferDirection;
10+
import net.minecraft.ChatFormatting;
11+
import net.minecraft.Util;
12+
import net.minecraft.client.gui.GuiGraphics;
13+
import net.minecraft.network.chat.Component;
14+
import net.minecraft.world.entity.player.Inventory;
15+
import net.minecraft.world.item.ItemStack;
16+
17+
import static me.desht.modularrouters.client.util.ClientUtil.xlate;
18+
19+
public class EnergyDistributorModuleScreen extends ModuleScreen {
20+
private static final ItemStack ROUTER_STACK = new ItemStack(ModBlocks.MODULAR_ROUTER.get());
21+
22+
private DistributorModuleScreen.DirectionButton db;
23+
24+
public EnergyDistributorModuleScreen(ModuleMenu container, Inventory inv, Component displayText) {
25+
super(container, inv, displayText);
26+
}
27+
28+
@Override
29+
public void init() {
30+
super.init();
31+
32+
CompiledEnergyDistributorModule cdm = new CompiledEnergyDistributorModule(null, moduleItemStack);
33+
34+
addRenderableWidget(db = new DistributorModuleScreen.DirectionButton(leftPos + 147, topPos + 43, cdm.isPulling(), this));
35+
36+
getMouseOverHelp().addHelpRegion(leftPos + 125, topPos + 41, leftPos + 165, topPos + 61,
37+
xlate("modularrouters.guiText.popup.distributor.direction").withStyle(ChatFormatting.YELLOW));
38+
}
39+
40+
@Override
41+
protected ItemStack buildModifiedItemStack() {
42+
return Util.make(super.buildModifiedItemStack(), stack ->
43+
stack.set(ModDataComponents.DISTRIBUTOR_SETTINGS, new CompiledDistributorModule.DistributorSettings(
44+
DistributionStrategy.ROUND_ROBIN,
45+
db.isToggled() ? TransferDirection.TO_ROUTER : TransferDirection.FROM_ROUTER
46+
))
47+
);
48+
}
49+
50+
@Override
51+
protected void renderBg(GuiGraphics graphics, float partialTicks, int mouseX, int mouseY) {
52+
super.renderBg(graphics, partialTicks, mouseX, mouseY);
53+
54+
graphics.renderItem(ROUTER_STACK, leftPos + 127, topPos + 43);
55+
}
56+
}

src/main/java/me/desht/modularrouters/container/ModuleMenuFactories.java

+4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ public static ModuleMenu createDistributorMenu(int windowId, Inventory inv, Frie
2121
return new ModuleMenu(ModMenuTypes.DISTRIBUTOR_MENU.get(), windowId, inv, extra);
2222
}
2323

24+
public static ModuleMenu createEnergyDistributorMenu(int windowId, Inventory inv, FriendlyByteBuf extra) {
25+
return new ModuleMenu(ModMenuTypes.ENERGY_DISTRIBUTOR_MENU.get(), windowId, inv, extra);
26+
}
27+
2428
public static Extruder2ModuleMenu createExtruder2Menu(int windowId, Inventory inv, FriendlyByteBuf extra) {
2529
return new Extruder2ModuleMenu(windowId, inv, extra);
2630
}

src/main/java/me/desht/modularrouters/core/ModMenuTypes.java

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ public class ModMenuTypes {
2727
= register("module_detector", ModuleMenuFactories::createDetectorMenu);
2828
public static final Supplier<MenuType<ModuleMenu>> DISTRIBUTOR_MENU
2929
= register("module_distributor", ModuleMenuFactories::createDistributorMenu);
30+
public static final Supplier<MenuType<ModuleMenu>> ENERGY_DISTRIBUTOR_MENU
31+
= register("moduleenergy_distributor", ModuleMenuFactories::createEnergyDistributorMenu);
3032
public static final Supplier<MenuType<Extruder2ModuleMenu>> EXTRUDER2_MENU
3133
= register("module_extruder_2", ModuleMenuFactories::createExtruder2Menu);
3234
public static final Supplier<MenuType<ModuleMenu>> FLINGER_MENU

src/main/java/me/desht/modularrouters/datagen/ModItemModelProvider.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ protected void registerModels() {
3838
String name = registryObject.getId().getPath();
3939
switch (registryObject.get()) {
4040
case ModuleItem moduleItem -> {
41-
if (moduleItem == ModItems.DISTRIBUTOR_MODULE.get()) {
41+
if (moduleItem == ModItems.DISTRIBUTOR_MODULE.get() || moduleItem == ModItems.ENERGY_DISTRIBUTOR_MODULE.get()) {
4242
// special case; distributor module has a model override based on its mode
43-
ModelFile distributorPull = simpleItemVariant(ModItems.DISTRIBUTOR_MODULE, "_pull",
43+
ModelFile pullVariant = simpleItemVariant(registryObject, "_pull",
4444
modid("item/module/module_layer0"),
4545
modid("item/module/module_layer1"),
46-
modid("item/module/distributor_module_pull"));
47-
simpleItem(ModItems.DISTRIBUTOR_MODULE,
46+
modid("item/module/%s_pull", name));
47+
simpleItem(registryObject,
4848
modid("item/module/module_layer0"),
4949
modid("item/module/module_layer1"),
50-
modid("item/module/distributor_module"))
51-
.override().predicate(modLoc("mode"), 0.5f).model(distributorPull);
50+
modid("item/module/" + name))
51+
.override().predicate(modLoc("mode"), 0.5f).model(pullVariant);
5252
} else {
5353
simpleItem(registryObject,
5454
modid("item/module/module_layer0"),

src/main/java/me/desht/modularrouters/item/module/EnergyDistributorModule.java

+26-1
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,52 @@
11
package me.desht.modularrouters.item.module;
22

33
import me.desht.modularrouters.client.render.area.IPositionProvider;
4+
import me.desht.modularrouters.client.util.ClientUtil;
45
import me.desht.modularrouters.client.util.TintColor;
56
import me.desht.modularrouters.config.ConfigHolder;
7+
import me.desht.modularrouters.container.ModuleMenu;
8+
import me.desht.modularrouters.core.ModDataComponents;
69
import me.desht.modularrouters.core.ModItems;
10+
import me.desht.modularrouters.core.ModMenuTypes;
711
import me.desht.modularrouters.logic.compiled.CompiledEnergyDistributorModule;
12+
import net.minecraft.ChatFormatting;
13+
import net.minecraft.network.chat.Component;
14+
import net.minecraft.world.inventory.MenuType;
815
import net.minecraft.world.item.ItemStack;
916
import net.minecraft.world.item.context.UseOnContext;
1017
import net.neoforged.neoforge.capabilities.Capabilities;
1118

19+
import java.util.List;
20+
21+
import static me.desht.modularrouters.logic.compiled.CompiledDistributorModule.DistributorSettings;
22+
1223
public class EnergyDistributorModule extends ModuleItem implements IRangedModule, IPositionProvider, ITargetedModule {
1324
private static final TintColor TINT_COLOR = new TintColor(79, 9, 90);
1425

1526
public EnergyDistributorModule() {
16-
super(ModItems.moduleProps(),
27+
super(ModItems.moduleProps()
28+
.component(ModDataComponents.DISTRIBUTOR_SETTINGS, DistributorSettings.DEFAULT),
1729
CompiledEnergyDistributorModule::new);
1830
}
1931

32+
@Override
33+
protected void addSettingsInformation(ItemStack stack, List<Component> list) {
34+
super.addSettingsInformation(stack, list);
35+
36+
DistributorSettings settings = stack.getOrDefault(ModDataComponents.DISTRIBUTOR_SETTINGS, DistributorSettings.DEFAULT);
37+
list.add(ClientUtil.xlate(settings.direction().getTranslationKey()).withStyle(ChatFormatting.YELLOW));
38+
}
39+
2040
@Override
2141
public TintColor getItemTint() {
2242
return TINT_COLOR;
2343
}
2444

45+
@Override
46+
public MenuType<? extends ModuleMenu> getMenuType() {
47+
return ModMenuTypes.ENERGY_DISTRIBUTOR_MENU.get();
48+
}
49+
2550
@Override
2651
public int getEnergyCost(ItemStack stack) {
2752
return ConfigHolder.common.energyCosts.energydistributorModuleEnergyCost.get();

src/main/java/me/desht/modularrouters/logic/compiled/CompiledDistributorModule.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
import java.util.Set;
2828

2929
public class CompiledDistributorModule extends CompiledSenderModule2 {
30-
private final DistributorSettings settings;
31-
private int nextTarget;
30+
protected final DistributorSettings settings;
31+
protected int nextTarget;
3232

3333
public CompiledDistributorModule(ModularRouterBlockEntity router, ItemStack stack) {
3434
super(router, stack);
@@ -42,7 +42,7 @@ public boolean execute(@Nonnull ModularRouterBlockEntity router) {
4242
return isPulling() ? executePull(router) : super.execute(router);
4343
}
4444

45-
private boolean executePull(ModularRouterBlockEntity router) {
45+
protected boolean executePull(ModularRouterBlockEntity router) {
4646
if (router.isBufferFull()) return false;
4747

4848
ModuleTarget tgt = getEffectiveTarget(router);
@@ -59,6 +59,10 @@ private boolean executePull(ModularRouterBlockEntity router) {
5959
}).orElse(false);
6060
}
6161

62+
protected boolean executePush(ModularRouterBlockEntity router) {
63+
return super.execute(router);
64+
}
65+
6266
public boolean isPulling() {
6367
return settings.direction == TransferDirection.TO_ROUTER;
6468
}

0 commit comments

Comments
 (0)