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

[RFC]: Hideable/Toggleable Components #113

Draft
wants to merge 3 commits into
base: 1.19
Choose a base branch
from
Draft
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
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ public abstract class PoweredTile<T extends PoweredTile<T>> extends ActiveTile<T
private final EnergyStorageComponent<T> energyStorage;
private final LazyOptional<IEnergyStorage> lazyEnergyStorage = LazyOptional.of(this::getEnergyStorage);

private boolean showEnergy = true;

public PoweredTile(BasicTileBlock<T> base, BlockEntityType<?> blockEntityType, BlockPos pos, BlockState state) {
super(base, blockEntityType, pos, state);
this.energyStorage = this.createEnergyStorage();
Expand All @@ -59,7 +57,7 @@ public Set<Direction> getValidEnergyFaces() {
@Nonnull
public List<IFactory<? extends IScreenAddon>> getScreenAddons() {
List<IFactory<? extends IScreenAddon>> screenAddons = super.getScreenAddons();
if (showEnergy) {
if (this.getEnergyStorage().isEnabled()) {
screenAddons.addAll(this.getEnergyStorage().getScreenAddons());
}
return screenAddons;
Expand All @@ -69,7 +67,7 @@ public List<IFactory<? extends IScreenAddon>> getScreenAddons() {
@Nonnull
public List<IFactory<? extends IContainerAddon>> getContainerAddons() {
List<IFactory<? extends IContainerAddon>> containerAddons = super.getContainerAddons();
if (showEnergy) {
if (this.getEnergyStorage().isEnabled()) {
containerAddons.addAll(this.getEnergyStorage().getContainerAddons());
}
return containerAddons;
Expand All @@ -84,8 +82,12 @@ public <U> LazyOptional<U> getCapability(@Nonnull Capability<U> cap, @Nullable D
return super.getCapability(cap, side);
}

public void setShowEnergy(boolean showEnergy) {
this.showEnergy = showEnergy;
public void showEnergyStorage() {
this.getEnergyStorage().enable();
}

public void hideEnergyStorage() {
this.getEnergyStorage().disable();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public List<Component> getTooltipLines() {

@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (!this.button.isVisible()) return false;
Screen screen = Minecraft.getInstance().screen;
if (screen instanceof AbstractContainerScreen && ((AbstractContainerScreen) screen).getMenu() instanceof ILocatable) {
if (!isMouseOver(mouseX - ((AbstractContainerScreen<?>) screen).getGuiLeft(), mouseY - ((AbstractContainerScreen<?>) screen).getGuiTop()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,34 @@
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ArrowButtonComponent extends ButtonComponent {

public final FacingUtil.Sideness direction;
private boolean isVisible = true;

public ArrowButtonComponent(int posX, int posY, int sizeX, int sizeY, FacingUtil.Sideness direction) {
super(posX, posY, sizeX, sizeY);
this.direction = direction;
}

public void show() {
this.isVisible = true;
}

public void hide() {
this.isVisible = false;
}

@Override
@OnlyIn(Dist.CLIENT)
public List<IFactory<? extends IScreenAddon>> getScreenAddons() {
return Collections.singletonList(() -> new ArrowButtonScreenAddon(this));
List<IFactory<? extends IScreenAddon>> addons = new ArrayList<>();
if (isVisible) addons.add(() -> new ArrowButtonScreenAddon(this));
return addons;
}

public FacingUtil.Sideness getDirection() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.BiConsumer;
Expand All @@ -29,6 +30,8 @@ public class ButtonComponent implements IScreenAddonProvider {
private int id;
private BiConsumer<Player, CompoundTag> serverPredicate;

private boolean isVisible = true;

public ButtonComponent(int posX, int posY, int sizeX, int sizeY) {
this.posX = posX;
this.posY = posY;
Expand Down Expand Up @@ -79,9 +82,23 @@ public ButtonComponent setId(int id) {
return this;
}

public boolean isVisible() {
return isVisible;
}

public void show() {
this.isVisible = true;
}

public void hide() {
this.isVisible = false;
}

@Override
@OnlyIn(Dist.CLIENT)
public List<IFactory<? extends IScreenAddon>> getScreenAddons() {
return Collections.singletonList(() -> new BasicButtonAddon(this));
List<IFactory<? extends IScreenAddon>> addons = new ArrayList<>();
if (isVisible) addons.add(() -> new BasicButtonAddon(this));
return addons;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Supplier;
Expand All @@ -27,6 +28,7 @@ public class RedstoneControlButtonComponent<T extends IEnumValues<T> & IRedstone

private final Supplier<RedstoneManager<T>> redstoneManager;
private final Supplier<BasicTile> componentHarness;
private boolean isVisible = true;

public RedstoneControlButtonComponent(int posX, int posY, int sizeX, int sizeY, Supplier<RedstoneManager<T>> redstoneManagerSupplier, Supplier<BasicTile> componentHarness) {
super(posX, posY, sizeX, sizeY);
Expand All @@ -39,15 +41,25 @@ public RedstoneControlButtonComponent(int posX, int posY, int sizeX, int sizeY,
});
}

public void show() {
this.isVisible = true;
}

public void hide() {
this.isVisible = false;
}

@Override
@OnlyIn(Dist.CLIENT)
public List<IFactory<? extends IScreenAddon>> getScreenAddons() {
return Collections.singletonList(() -> new StateButtonAddon(this, new StateButtonInfo(0, AssetTypes.BUTTON_REDSTONE_IGNORED, "tooltip.titanium.redstone.ignored"), new StateButtonInfo(1, AssetTypes.BUTTON_REDSTONE_NO_REDSTONE, "tooltip.titanium.redstone.no_redstone"), new StateButtonInfo(2, AssetTypes.BUTTON_REDSTONE_REDSTONE, "tooltip.titanium.redstone.redstone"), new StateButtonInfo(3, AssetTypes.BUTTON_REDSTONE_ONCE, "tooltip.titanium.redstone.once")) {
List<IFactory<? extends IScreenAddon>> addons = new ArrayList<>();
if (isVisible) addons.add(() -> new StateButtonAddon(this) {
@Override
public int getState() {
return redstoneManager.get().getAction().getValues().indexOf(redstoneManager.get().getAction());
}
});
return addons;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import net.minecraftforge.energy.EnergyStorage;

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

public class EnergyStorageComponent<T extends IComponentHarness> extends EnergyStorage implements
Expand All @@ -30,6 +31,8 @@ public class EnergyStorageComponent<T extends IComponentHarness> extends EnergyS
private final int xPos;
private final int yPos;

private boolean isEnabled = true;

protected T componentHarness;

public EnergyStorageComponent(int maxCapacity, int xPos, int yPos) {
Expand Down Expand Up @@ -73,21 +76,33 @@ public void setEnergyStored(int energy) {
this.update();
}

public boolean isEnabled() {
return isEnabled;
}

public void enable() {
this.isEnabled = true;
}

public void disable() {
this.isEnabled = false;
}

@Override
@Nonnull
@OnlyIn(Dist.CLIENT)
public List<IFactory<? extends IScreenAddon>> getScreenAddons() {
return Lists.newArrayList(
() -> new EnergyBarScreenAddon(xPos, yPos, this)
);
List<IFactory<? extends IScreenAddon>> addons = new ArrayList<>();
if (isEnabled) addons.add(() -> new EnergyBarScreenAddon(xPos, yPos, this));
return addons;
}

@Override
@Nonnull
public List<IFactory<? extends IContainerAddon>> getContainerAddons() {
return Lists.newArrayList(
() -> new IntReferenceHolderAddon(new FunctionReferenceHolder(this::setEnergyStored, this::getEnergyStored))
);
List<IFactory<? extends IContainerAddon>> addons = new ArrayList<>();
if (isEnabled) addons.add(() -> new IntReferenceHolderAddon(new FunctionReferenceHolder(this::setEnergyStored, this::getEnergyStored)));
return addons;
}

public void setComponentHarness(T componentHarness) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

package com.hrznstudio.titanium.component.fluid;

import com.google.common.collect.Lists;
import com.hrznstudio.titanium.api.IFactory;
import com.hrznstudio.titanium.api.client.AssetTypes;
import com.hrznstudio.titanium.api.client.IAssetType;
Expand Down Expand Up @@ -42,6 +41,8 @@ public class FluidTankComponent<T extends IComponentHarness> extends FluidTank i
private Action tankAction;
private Runnable onContentChange;

private boolean isEnabled = true;

public FluidTankComponent(String name, int amount, int posX, int posY) {
super(amount);
this.posX = posX;
Expand Down Expand Up @@ -171,19 +172,31 @@ public void setFluidStack(FluidStack fluidStack) {
this.fluid = fluidStack;
}

public boolean isEnabled() {
return isEnabled;
}

public void enable() {
this.isEnabled = true;
}

public void disable() {
this.isEnabled = false;
}

@Override
@OnlyIn(Dist.CLIENT)
public List<IFactory<? extends IScreenAddon>> getScreenAddons() {
List<IFactory<? extends IScreenAddon>> addons = new ArrayList<>();
addons.add(() -> new TankScreenAddon(posX, posY, this, tankType));
if (isEnabled) addons.add(() -> new TankScreenAddon(posX, posY, this, tankType));
return addons;
}

@Override
public List<IFactory<? extends IContainerAddon>> getContainerAddons() {
return Lists.newArrayList(
() -> new IntArrayReferenceHolderAddon(new FluidTankReferenceHolder(this))
);
List<IFactory<? extends IContainerAddon>> addons = new ArrayList<>();
if (isEnabled) addons.add(() -> new IntArrayReferenceHolderAddon(new FluidTankReferenceHolder(this)));
return addons;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ private boolean transfer(IFluidHandler from, IFluidHandler to, int workAmount) {
@OnlyIn(Dist.CLIENT)
public List<IFactory<? extends IScreenAddon>> getScreenAddons() {
List<IFactory<? extends IScreenAddon>> addons = super.getScreenAddons();
if (hasFacingAddon)
if (isEnabled() && hasFacingAddon)
addons.add(() -> new FacingHandlerScreenAddon(SidedComponentManager.ofRight(getFacingHandlerX(), getFacingHandlerY(), pos, AssetTypes.BUTTON_SIDENESS_MANAGER, 4), this, getTankType().getAssetType(), this.getComponentHarness() instanceof ActiveTile ? ((ActiveTile) this.getComponentHarness()).getFacingDirection() : Direction.NORTH));
return addons;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

package com.hrznstudio.titanium.component.progress;

import com.google.common.collect.Lists;
import com.hrznstudio.titanium.api.IFactory;
import com.hrznstudio.titanium.api.client.AssetTypes;
import com.hrznstudio.titanium.api.client.IAsset;
Expand All @@ -31,7 +30,7 @@
import net.minecraftforge.common.util.INBTSerializable;

import java.awt.*;
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

Expand All @@ -52,6 +51,7 @@ public class ProgressBarComponent<T extends IComponentHarness> implements INBTSe
private BarDirection barDirection;
private DyeColor color;
private boolean increaseType;
private boolean isEnabled = true;

public ProgressBarComponent(int posX, int posY, int maxProgress) {
this.posX = posX;
Expand Down Expand Up @@ -166,6 +166,18 @@ public ProgressBarComponent<T> setIncreaseType(boolean increaseType) {
return this;
}

public boolean isEnabled() {
return isEnabled;
}

public void enable() {
this.isEnabled = true;
}

public void disable() {
this.isEnabled = false;
}

/**
* Ticks the bar so it can increase if possible, managed by {@link MultiProgressBarHandler#update()}
*/
Expand Down Expand Up @@ -355,7 +367,9 @@ public ProgressBarComponent<T> setColor(DyeColor color) {
@Override
@OnlyIn(Dist.CLIENT)
public List<IFactory<? extends IScreenAddon>> getScreenAddons() {
return Collections.singletonList(() -> new ProgressBarScreenAddon<>(posX, posY, this));
List<IFactory<? extends IScreenAddon>> addons = new ArrayList<>();
if (isEnabled) addons.add(() -> new ProgressBarScreenAddon<>(posX, posY, this));
return addons;
}

@Override
Expand All @@ -378,9 +392,9 @@ public void onStart() {

@Override
public List<IFactory<? extends IContainerAddon>> getContainerAddons() {
return Lists.newArrayList(
() -> new IntArrayReferenceHolderAddon(new ProgressBarReferenceHolder(this))
);
List<IFactory<? extends IContainerAddon>> addons = new ArrayList<>();
if (isEnabled) addons.add(() -> new IntArrayReferenceHolderAddon(new ProgressBarReferenceHolder(this)));
return addons;
}

public enum BarDirection {
Expand Down