Skip to content

Commit

Permalink
Add a warning for machine inactivity due to redstone control
Browse files Browse the repository at this point in the history
- Make GuiInsetElement able to track warnings by means of a supplier
- Use a separate texture for GuiInsetElement on a warning condition
- Track the (un)activation warning for GuiRedstoneControlTab
- Add the corresponding lang entry to MekanismLangProvider
  • Loading branch information
bukowski912 committed Nov 22, 2024
1 parent e7febd3 commit 94ea6a1
Show file tree
Hide file tree
Showing 12 changed files with 52 additions and 12 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -1182,6 +1182,7 @@ private void addMisc() {
add(MekanismLang.ISSUE_INPUT_DOESNT_PRODUCE_OUTPUT, " - Input does not produce output");
add(MekanismLang.ISSUE_INVALID_OREDICTIONIFICATOR_FILTER, " - Filter is no longer valid or supported");
add(MekanismLang.ISSUE_FILTER_HAS_BLACKLISTED_ELEMENT, " - Filter contains at least one element that is blacklisted");
add(MekanismLang.ISSUE_REDSTONE_UNACTIVATED, " - Inactive because of the redstone control setting");
//Laser Amplifier
add(MekanismLang.ENTITY_DETECTION, "Entity Detection");
add(MekanismLang.ENERGY_CONTENTS, "Energy Contents");
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/mekanism/client/gui/GuiMekanismTile.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package mekanism.client.gui;

import java.util.function.BooleanSupplier;
import mekanism.api.security.IBlockSecurityUtils;
import mekanism.client.gui.element.tab.GuiRedstoneControlTab;
import mekanism.client.gui.element.tab.GuiSecurityTab;
import mekanism.client.gui.element.tab.window.GuiUpgradeWindowTab;
import mekanism.common.inventory.container.tile.MekanismTileContainer;
import mekanism.common.inventory.warning.WarningTracker.WarningType;
import mekanism.common.tile.base.TileEntityMekanism;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
Expand Down Expand Up @@ -39,7 +41,7 @@ protected void addGenericTabs() {
upgradeWindowTab = addRenderableWidget(new GuiUpgradeWindowTab(this, tile, () -> upgradeWindowTab));
}
if (tile.supportsRedstone()) {
addRenderableWidget(new GuiRedstoneControlTab(this, tile));
addRenderableWidget(new GuiRedstoneControlTab(this, tile).warning(WarningType.REDSTONE_UNACTIVATED, () -> !tile.isRedstoneActivated()));
}
//Note: We check if the capability is present rather than calling hasSecurity so that we don't add the tab to the security desk
if (tile.getLevel() != null && IBlockSecurityUtils.INSTANCE.securityCapability(tile.getLevel(), tile.getBlockPos(), tile) != null) {
Expand Down
29 changes: 28 additions & 1 deletion src/main/java/mekanism/client/gui/element/GuiInsetElement.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,29 @@
package mekanism.client.gui.element;

import java.util.function.BooleanSupplier;
import mekanism.client.gui.IGuiWrapper;
import mekanism.common.inventory.warning.ISupportsWarning;
import mekanism.common.inventory.warning.WarningTracker.WarningType;
import mekanism.common.util.MekanismUtils;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public abstract class GuiInsetElement<DATA_SOURCE> extends GuiSideHolder {
public abstract class GuiInsetElement<DATA_SOURCE> extends GuiSideHolder implements ISupportsWarning<GuiInsetElement<DATA_SOURCE>> {

private static final ResourceLocation WARNING_LEFT = MekanismUtils.getResource(MekanismUtils.ResourceType.GUI, "warning_left.png");
private static final ResourceLocation WARNING_RIGHT = MekanismUtils.getResource(MekanismUtils.ResourceType.GUI, "warning_right.png");

protected final int border;
protected final int innerWidth;
protected final int innerHeight;
protected final DATA_SOURCE dataSource;
protected final ResourceLocation overlay;

@Nullable
protected BooleanSupplier warningSupplier;

public GuiInsetElement(ResourceLocation overlay, IGuiWrapper gui, DATA_SOURCE dataSource, int x, int y, int height, int innerSize, boolean left) {
super(gui, x, y, height, left, false);
this.overlay = overlay;
Expand All @@ -25,6 +36,12 @@ public GuiInsetElement(ResourceLocation overlay, IGuiWrapper gui, DATA_SOURCE da
active = true;
}

@Override
public GuiInsetElement<DATA_SOURCE> warning(@NotNull WarningType type, @NotNull BooleanSupplier warningSupplier) {
this.warningSupplier = ISupportsWarning.compound(this.warningSupplier, gui().trackWarning(type, warningSupplier));
return this;
}

@Override
public boolean isMouseOver(double xAxis, double yAxis) {
//TODO: override isHovered
Expand Down Expand Up @@ -55,6 +72,16 @@ protected ResourceLocation getOverlay() {
return overlay;
}

@Override
protected void draw(@NotNull GuiGraphics guiGraphics) {
boolean warning = warningSupplier != null && warningSupplier.getAsBoolean();
if (warning) {
innerDraw(guiGraphics, left ? WARNING_LEFT : WARNING_RIGHT);
} else {
super.draw(guiGraphics);
}
}

@Override
public void drawBackground(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
super.drawBackground(guiGraphics, mouseX, mouseY, partialTicks);
Expand Down
8 changes: 6 additions & 2 deletions src/main/java/mekanism/client/gui/element/GuiSideHolder.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,13 @@ public void drawBackground(@NotNull GuiGraphics guiGraphics, int mouseX, int mou
}
}

private void draw(@NotNull GuiGraphics guiGraphics) {
protected void draw(@NotNull GuiGraphics guiGraphics) {
colorTab(guiGraphics);
GuiUtils.blitNineSlicedSized(guiGraphics, getResource(), relativeX, relativeY, width, height, 4, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0, 0, TEXTURE_WIDTH, TEXTURE_HEIGHT);
innerDraw(guiGraphics, getResource());
MekanismRenderer.resetColor(guiGraphics);
}

protected void innerDraw(@NotNull GuiGraphics guiGraphics, ResourceLocation texture) {
GuiUtils.blitNineSlicedSized(guiGraphics, texture, relativeX, relativeY, width, height, 4, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0, 0, TEXTURE_WIDTH, TEXTURE_HEIGHT);
}
}
1 change: 1 addition & 0 deletions src/main/java/mekanism/common/MekanismLang.java
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,7 @@ public enum MekanismLang implements ILangEntry {
ISSUE_INPUT_DOESNT_PRODUCE_OUTPUT("gui", "issues.input_doesnt_produce_output"),
ISSUE_INVALID_OREDICTIONIFICATOR_FILTER("gui", "issues.invalid_oredictionificator_filter"),
ISSUE_FILTER_HAS_BLACKLISTED_ELEMENT("gui", "issues.filter_has_blacklisted_element"),
ISSUE_REDSTONE_UNACTIVATED("gui", "issues.redstone_unactivated"),
//Laser Amplifier
ENTITY_DETECTION("laser_amplifier", "entity_detection"),
ENERGY_CONTENTS("laser_amplifier", "energy_contents"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ public enum WarningType {
NOT_ENOUGH_ENERGY_REDUCED_RATE(MekanismLang.ISSUE_NOT_ENOUGH_ENERGY_REDUCED_RATE),
INVALID_OREDICTIONIFICATOR_FILTER(MekanismLang.ISSUE_INVALID_OREDICTIONIFICATOR_FILTER, 4),
FILTER_HAS_BLACKLISTED_ELEMENT(MekanismLang.ISSUE_FILTER_HAS_BLACKLISTED_ELEMENT, 5),
REDSTONE_UNACTIVATED(MekanismLang.ISSUE_REDSTONE_UNACTIVATED),
;

private final ILangEntry langEntry;
Expand Down
12 changes: 7 additions & 5 deletions src/main/java/mekanism/common/tile/base/TileEntityMekanism.java
Original file line number Diff line number Diff line change
Expand Up @@ -1087,16 +1087,18 @@ public final void updatePower() {
}
}

public boolean canFunction() {
if (supportsRedstone()) {
return switch (controlType) {
public final boolean isRedstoneActivated() {
return !supportsRedstone() ||
switch (controlType) {
case DISABLED -> true;
case HIGH -> isPowered();
case LOW -> !isPowered();
case PULSE -> isPowered() && !redstoneLastTick;
};
}
return true;
}

public boolean canFunction() {
return isRedstoneActivated();
}
//End methods ITileRedstone

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 94ea6a1

Please sign in to comment.