Skip to content

Commit

Permalink
fix: IO Config with wrench + GUI not implemented after machine rewrite
Browse files Browse the repository at this point in the history
Fixes: GH-944
  • Loading branch information
Rover656 committed Dec 30, 2024
1 parent 9e961ae commit 657209e
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.enderio.machines.client.gui.widget.ioconfig;

import com.enderio.EnderIOBase;
import com.enderio.base.api.io.IOConfigurable;
import com.enderio.base.common.lang.EIOLang;
import com.enderio.core.client.gui.screen.BaseOverlay;
import com.enderio.machines.client.rendering.model.ModelRenderUtil;
import com.enderio.machines.common.blockentity.base.LegacyMachineBlockEntity;
import com.enderio.machines.common.config.MachinesConfig;
import com.enderio.machines.common.network.CycleIOConfigPacket;
import com.mojang.blaze3d.platform.Lighting;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.BufferBuilder;
Expand Down Expand Up @@ -54,6 +56,7 @@
import net.minecraft.world.phys.shapes.VoxelShape;
import net.neoforged.neoforge.client.RenderTypeHelper;
import net.neoforged.neoforge.client.model.data.ModelData;
import net.neoforged.neoforge.network.PacketDistributor;
import org.jetbrains.annotations.Nullable;
import org.joml.Matrix4f;
import org.joml.Quaternionf;
Expand Down Expand Up @@ -223,6 +226,11 @@ public boolean mouseClicked(double pMouseX, double pMouseY, int pButton) {
machine.cycleIOMode(selectedFace.side);
this.playDownSound(MINECRAFT.getSoundManager());
return true;
} else if (entity instanceof IOConfigurable) {
PacketDistributor
.sendToServer(new CycleIOConfigPacket(selectedFace.blockPos, selectedFace.side));
this.playDownSound(MINECRAFT.getSoundManager());
return true;
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.enderio.machines.common.MachineNBTKeys;
import com.enderio.machines.common.block.LegacyMachineBlock;
import com.enderio.machines.common.block.LegacyProgressMachineBlock;
import com.enderio.machines.common.blockentity.base.LegacyMachineBlockEntity;
import com.enderio.machines.common.blocks.base.inventory.MachineInventory;
import com.enderio.machines.common.blocks.base.inventory.MachineInventoryLayout;
import com.enderio.machines.common.blocks.base.state.MachineState;
Expand All @@ -18,6 +19,7 @@
import com.enderio.machines.common.io.IOConfig;
import com.enderio.machines.common.io.SidedIOConfigurable;
import com.enderio.machines.common.io.TransferUtil;
import com.enderio.machines.common.network.CycleIOConfigPacket;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
Expand Down Expand Up @@ -45,8 +47,11 @@
import net.neoforged.fml.LogicalSide;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.capabilities.ICapabilityProvider;
import net.neoforged.neoforge.client.model.data.ModelData;
import net.neoforged.neoforge.client.model.data.ModelProperty;
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
import net.neoforged.neoforge.items.IItemHandler;
import net.neoforged.neoforge.network.PacketDistributor;
import org.jetbrains.annotations.Nullable;

/**
Expand All @@ -62,6 +67,8 @@ public abstract class MachineBlockEntity extends EIOBlockEntity
public static final ICapabilityProvider<MachineBlockEntity, Direction, IItemHandler> ITEM_HANDLER_PROVIDER = (be,
side) -> be.inventory != null ? be.inventory.getForSide(side) : null;

private static final ModelProperty<IOConfigurable> IO_CONFIG_PROPERTY = LegacyMachineBlockEntity.IO_CONFIG_PROPERTY;

@Nullable
private final MachineInventory inventory;

Expand Down Expand Up @@ -254,6 +261,28 @@ public void setIOMode(Direction side, IOMode mode) {

Direction localSide = translateIOSide(side);
setIOConfig(ioConfig.withMode(localSide, mode));

// Invalidate caps
level.invalidateCapabilities(worldPosition);
level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), Block.UPDATE_ALL);
}

@Override
public ModelData getModelData() {
if (!shouldRenderIOConfigOverlay()) {
return ModelData.EMPTY;
}

return ModelData.builder().with(IO_CONFIG_PROPERTY, this).build();
}

@UseOnly(LogicalSide.CLIENT)
private void clientIOConfigChanged() {
if (shouldRenderIOConfigOverlay()) {
requestModelDataUpdate();
}

level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), Block.UPDATE_ALL);
}

@Override
Expand Down Expand Up @@ -457,11 +486,15 @@ public ItemInteractionResult onWrenched(@Nullable Player player, @Nullable Direc
// TODO: custom sound when sound manager is up and running??

return ItemInteractionResult.sidedSuccess(level.isClientSide());
}

// TODO: IOConfig packet.
} else {
if (level.isClientSide()) {
if (side != null && isIOConfigMutable()) {
PacketDistributor.sendToServer(new CycleIOConfigPacket(worldPosition, side));
}
}

return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION;
return ItemInteractionResult.sidedSuccess(level.isClientSide());
}
}

// endregion
Expand Down Expand Up @@ -527,6 +560,10 @@ protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries)
removeData(MachineAttachments.IO_CONFIG);
} else if (tag.contains(MachineNBTKeys.IO_CONFIG)) {
ioConfig = IOConfig.parseOptional(registries, tag.getCompound(MachineNBTKeys.IO_CONFIG));

if (level != null && level.isClientSide) {
clientIOConfigChanged();
}
}

if (supportsRedstoneControl()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.enderio.core.EnderCore;
import com.enderio.machines.EnderIOMachines;
import com.enderio.machines.common.network.CycleIOConfigPacket;
import com.enderio.machines.common.network.MachinePayloadHandler;
import com.enderio.machines.common.network.PoweredSpawnerSoulPacket;
import com.enderio.machines.common.network.SolarSoulPacket;
Expand Down Expand Up @@ -39,5 +40,8 @@ public static void register(final RegisterPayloadHandlersEvent event) {

registrar.playToServer(UpdateCrafterTemplatePacket.TYPE, UpdateCrafterTemplatePacket.STREAM_CODEC,
MachinePayloadHandler.Server.getInstance()::updateCrafterTemplate);

registrar.playToServer(CycleIOConfigPacket.TYPE, CycleIOConfigPacket.STREAM_CODEC,
MachinePayloadHandler.Server.getInstance()::handleCycleIOConfigPacket);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.enderio.machines.common.network;

import com.enderio.base.api.EnderIO;
import io.netty.buffer.ByteBuf;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;

public record CycleIOConfigPacket(BlockPos pos, Direction side) implements CustomPacketPayload {

public static final Type<CycleIOConfigPacket> TYPE = new Type<>(EnderIO.loc("cycle_io_config"));

public static StreamCodec<ByteBuf, CycleIOConfigPacket> STREAM_CODEC = StreamCodec.composite(BlockPos.STREAM_CODEC,
CycleIOConfigPacket::pos, Direction.STREAM_CODEC, CycleIOConfigPacket::side, CycleIOConfigPacket::new);

@Override
public Type<? extends CustomPacketPayload> type() {
return TYPE;
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.enderio.machines.common.network;

import com.enderio.machines.common.blocks.base.blockentity.MachineBlockEntity;
import com.enderio.machines.common.blocks.crafter.CrafterMenu;
import com.enderio.machines.common.souldata.EngineSoul;
import com.enderio.machines.common.souldata.SolarSoul;
import com.enderio.machines.common.souldata.SpawnerSoul;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.neoforged.neoforge.network.handling.IPayloadContext;

public class MachinePayloadHandler {
Expand Down Expand Up @@ -43,5 +45,16 @@ public void updateCrafterTemplate(UpdateCrafterTemplatePacket packet, IPayloadCo
}
});
}

public void handleCycleIOConfigPacket(CycleIOConfigPacket packet, IPayloadContext context) {
context.enqueueWork(() -> {
var level = context.player().level();
BlockEntity be = level.getBlockEntity(packet.pos());

if (be instanceof MachineBlockEntity machineBlockEntity) {
machineBlockEntity.cycleIOMode(packet.side());
}
});
}
}
}

0 comments on commit 657209e

Please sign in to comment.