Skip to content

Commit

Permalink
feat: Allow conduits to opt-out of having a menu
Browse files Browse the repository at this point in the history
  • Loading branch information
Rover656 committed Jan 13, 2025
1 parent cc5fbad commit dc8de3c
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ default int graphTickRate() {
* @implNote if a conduit has a menu, you must also register a {@link com.enderio.conduits.api.screen.ConduitScreenType} for it.
* @return whether this conduit has a menu.
*/
// boolean hasMenu();
boolean hasMenu();

// region Conduit Checks

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -360,8 +360,7 @@ protected InteractionResult useWithoutItem(BlockState state, Level level, BlockP
var conduitConnection = conduitBundle.getShape().getConnectionFromHit(pos, hitResult);

if (conduitConnection != null) {
if (conduitBundle.getConnectionStatus(conduitConnection.getFirst(),
conduitConnection.getSecond()) == ConnectionStatus.CONNECTED_BLOCK) {
if (conduitBundle.canOpenScreen(conduitConnection.getFirst(), conduitConnection.getSecond())) {
if (player instanceof ServerPlayer serverPlayer) {
ConduitMenu.openConduitMenu(serverPlayer, conduitBundle, conduitConnection.getFirst(),
conduitConnection.getSecond());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -254,15 +254,19 @@ public boolean stillValid(Player player) {
}

@Override
public List<Holder<Conduit<?, ?>>> getAllPossibleConnectedCondutis(Direction side) {
return conduits.stream().filter(c -> canBeOrIsConnection(side, c)).toList();
public List<Holder<Conduit<?, ?>>> getAllOpenableConduits(Direction side) {
return conduits.stream().filter(c -> canOpenScreen(side, c)).toList();
}

public boolean canBeOrIsConnection(Direction side, Holder<Conduit<?, ?>> conduit) {
public boolean canOpenScreen(Direction side, Holder<Conduit<?, ?>> conduit) {
if (level == null) {
return false;
}

if (!conduit.value().hasMenu()) {
return false;
}

// If we've lost the conduit
if (!hasConduitStrict(conduit)) {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public Direction getSide() {
}

public List<Holder<Conduit<?, ?>>> getConnectedConduits() {
return connectionAccessor.getAllPossibleConnectedCondutis(side);
return connectionAccessor.getAllOpenableConduits(side);
}

@EnsureSide(EnsureSide.Side.CLIENT)
Expand Down Expand Up @@ -157,7 +157,7 @@ public void setExtraGuiData(CompoundTag extraGuiData) {

@Override
public boolean stillValid(Player player) {
return connectionAccessor.stillValid(player) && connectionAccessor.canBeOrIsConnection(side, selectedConduit);
return connectionAccessor.stillValid(player) && connectionAccessor.canOpenScreen(side, selectedConduit);
}

@Override
Expand Down Expand Up @@ -209,7 +209,7 @@ public void broadcastChanges() {
this.remoteExtraGuiData = extraGuiData;
}

var conduitList = connectionAccessor.getAllPossibleConnectedCondutis(side);
var conduitList = connectionAccessor.getAllOpenableConduits(side);
if (conduitListHashCode != conduitList.hashCode()) {
PacketDistributor.sendToPlayer(serverPlayer, new S2CConduitListPacket(containerId, conduitList));
conduitListHashCode = conduitList.hashCode();
Expand All @@ -218,13 +218,13 @@ public void broadcastChanges() {
}

public interface ConnectionAccessor {
List<Holder<Conduit<?, ?>>> getAllPossibleConnectedCondutis(Direction side);
List<Holder<Conduit<?, ?>>> getAllOpenableConduits(Direction side);

ConnectionConfig getConnectionConfig(Direction side, Holder<Conduit<?, ?>> conduit);

void setConnectionConfig(Direction side, Holder<Conduit<?, ?>> conduit, ConnectionConfig config);

boolean canBeOrIsConnection(Direction side, Holder<Conduit<?, ?>> conduit);
boolean canOpenScreen(Direction side, Holder<Conduit<?, ?>> conduit);

@Nullable
CompoundTag getConduitExtraGuiData(Direction side, Holder<Conduit<?, ?>> conduit);
Expand Down Expand Up @@ -256,7 +256,7 @@ public ClientConnectionAccessor(RegistryFriendlyByteBuf buf) {
private static void writeStartingSyncData(ConduitBundleBlockEntity conduitBundle, Direction side,
Holder<Conduit<?, ?>> conduit, RegistryFriendlyByteBuf buf) {
Conduit.STREAM_CODEC.apply(ByteBufCodecs.list(ConduitBundleBlockEntity.MAX_CONDUITS))
.encode(buf, conduitBundle.getAllPossibleConnectedCondutis(side));
.encode(buf, conduitBundle.getAllOpenableConduits(side));

ConnectionConfig.STREAM_CODEC.encode(buf, conduitBundle.getConnectionConfig(side, conduit));

Expand All @@ -267,7 +267,7 @@ private static void writeStartingSyncData(ConduitBundleBlockEntity conduitBundle
}

@Override
public List<Holder<Conduit<?, ?>>> getAllPossibleConnectedCondutis(Direction side) {
public List<Holder<Conduit<?, ?>>> getAllOpenableConduits(Direction side) {
return connectedConduits;
}

Expand All @@ -282,7 +282,7 @@ public void setConnectionConfig(Direction side, Holder<Conduit<?, ?>> conduit, C
}

@Override
public boolean canBeOrIsConnection(Direction side, Holder<Conduit<?, ?>> conduit) {
public boolean canOpenScreen(Direction side, Holder<Conduit<?, ?>> conduit) {
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,11 @@ public EnergyConduitTicker getTicker() {
return TICKER;
}

@Override
public boolean hasMenu() {
return true;
}

@Override
public boolean canBeInSameBundle(Holder<Conduit<?, ?>> otherConduit) {
return !(otherConduit.value() instanceof EnergyConduit);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,11 @@ public FluidConduitTicker getTicker() {
return TICKER;
}

@Override
public boolean hasMenu() {
return true;
}

@Override
public boolean canBeInSameBundle(Holder<Conduit<?, ?>> otherConduit) {
return !(otherConduit.value() instanceof FluidConduit);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ public ItemConduitTicker getTicker() {
return TICKER;
}

@Override
public boolean hasMenu() {
return true;
}

@Override
public boolean canApplyFilter(SlotType slotType, ResourceFilter resourceFilter) {
return resourceFilter instanceof ItemStackFilter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ public RedstoneConduitTicker getTicker() {
return TICKER;
}

@Override
public boolean hasMenu() {
return true;
}

@Override
public boolean canApplyFilter(SlotType slotType, ResourceFilter resourceFilter) {
return switch (slotType) {
Expand Down

0 comments on commit dc8de3c

Please sign in to comment.