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

Add a warning for redstone conditions not being met #8262

Open
wants to merge 2 commits into
base: 1.21.x
Choose a base branch
from
Open
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

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_PREVENTS_ACTIVATION, " - Redstone conditions not met");
//Laser Amplifier
add(MekanismLang.ENTITY_DETECTION, "Entity Detection");
add(MekanismLang.ENERGY_CONTENTS, "Energy Contents");
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/mekanism/client/gui/GuiMekanismTile.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
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 +40,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_PREVENTS_ACTIVATION, () -> !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
34 changes: 33 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 com.mojang.blaze3d.platform.GlStateManager.DestFactor;
import com.mojang.blaze3d.platform.GlStateManager.SourceFactor;
import com.mojang.blaze3d.systems.RenderSystem;
import mekanism.client.gui.IGuiWrapper;
import mekanism.common.inventory.warning.ISupportsWarning;
import mekanism.common.inventory.warning.WarningTracker.WarningType;
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>> {

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,21 @@ protected ResourceLocation getOverlay() {
return overlay;
}

@Override
protected void drawHolder(@NotNull GuiGraphics guiGraphics) {
boolean warning = warningSupplier != null && warningSupplier.getAsBoolean();
if (warning) {
drawHolderUncolored(guiGraphics);
//Draw the warning overlay (multiply-blended)
RenderSystem.enableBlend();
RenderSystem.blendFunc(SourceFactor.DST_COLOR, DestFactor.ZERO);
guiGraphics.blit(WARNING_TEXTURE, relativeX, relativeY, 0, 0, width, height, 256, 256);
RenderSystem.disableBlend();
} else {
super.drawHolder(guiGraphics);
}
}

@Override
public void drawBackground(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
super.drawBackground(guiGraphics, mouseX, mouseY, partialTicks);
Expand Down
12 changes: 8 additions & 4 deletions src/main/java/mekanism/client/gui/element/GuiSideHolder.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,21 +51,25 @@ public void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mouse
super.renderWidget(guiGraphics, mouseX, mouseY, partialTicks);
if (this.slotHolder) {
//Slot holders need to draw here to render behind the slots instead of in front of them
draw(guiGraphics);
drawHolder(guiGraphics);
}
}

@Override
public void drawBackground(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
super.drawBackground(guiGraphics, mouseX, mouseY, partialTicks);
if (!this.slotHolder) {
draw(guiGraphics);
drawHolder(guiGraphics);
}
}

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

protected void drawHolderUncolored(@NotNull GuiGraphics guiGraphics) {
GuiUtils.blitNineSlicedSized(guiGraphics, getResource(), 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_PREVENTS_ACTIVATION("gui", "issues.redstone_prevents_activation"),
//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_PREVENTS_ACTIVATION(MekanismLang.ISSUE_REDSTONE_PREVENTS_ACTIVATION),
;

private final ILangEntry langEntry;
Expand Down
14 changes: 9 additions & 5 deletions src/main/java/mekanism/common/tile/base/TileEntityMekanism.java
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@
import mekanism.common.integration.computer.annotation.ComputerMethod;
import mekanism.common.inventory.container.ITrackableContainer;
import mekanism.common.inventory.container.MekanismContainer;
import mekanism.common.inventory.container.sync.SyncableBoolean;
import mekanism.common.inventory.container.sync.SyncableDouble;
import mekanism.common.inventory.container.sync.SyncableEnum;
import mekanism.common.inventory.container.sync.SyncableFluidStack;
Expand Down Expand Up @@ -901,6 +902,7 @@ public void addContainerTrackers(MekanismContainer container) {
}
if (supportsRedstone()) {
container.track(SyncableEnum.create(RedstoneControl.BY_ID, RedstoneControl.DISABLED, () -> controlType, value -> controlType = value));
container.track(SyncableBoolean.create(this::isPowered, value -> redstone = value));
}
boolean isClient = isRemote();
if (canHandleChemicals() && syncs(ContainerType.CHEMICAL)) {
Expand Down Expand Up @@ -1087,16 +1089,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.