Skip to content

Commit

Permalink
Merge remote-tracking branch 'mak8427/pipe-switch' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
Dream-Master committed Jan 31, 2025
2 parents fac57f3 + 567ca28 commit 56d12d9
Show file tree
Hide file tree
Showing 2 changed files with 135 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
import gregtech.api.util.ISerializableObject;
import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder;
import gregtech.common.GTClient;
import gregtech.common.blocks.ItemMachines;
import gregtech.common.config.Other;
import gregtech.common.covers.CoverDrain;
import gregtech.common.covers.CoverFluidRegulator;
Expand Down Expand Up @@ -111,6 +112,7 @@ public class MTEFluid extends MetaPipeEntity {
public final boolean mGasProof;
public final FluidStack[] mFluids;
public byte mLastReceivedFrom = 0, oLastReceivedFrom = 0;
public static final byte KEY_CTRL = 1;
/**
* Bitmask for whether disable fluid input form each side.
*/
Expand Down Expand Up @@ -473,6 +475,138 @@ public void blockPipeOnSide(ForgeDirection side, EntityPlayer entityPlayer, byte
}
}

@Override
public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
// Only trigger if the player is sneaking
if (!aPlayer.isSneaking()) {
return;
}

// Retrieve the item's MetaTileEntity
final ItemStack handItem = aPlayer.inventory.getCurrentItem();
if (handItem == null) return;

IMetaTileEntity meta = ItemMachines.getMetaTileEntity(handItem);
if (!(meta instanceof MTEFluid handFluid)) return;

// Preserve old connections and meta ID
byte oldConnections = this.mConnections;
short oldMetaID = (short) aBaseMetaTileEntity.getMetaTileID();

// Create the new fluid pipe
MTEFluid newPipe = (MTEFluid) handFluid.newMetaEntity(aBaseMetaTileEntity);
if (newPipe == null) return;

// Preserve old connections
newPipe.mConnections = oldConnections;
newPipe.mDisableInput = this.mDisableInput;

// Record old pipe parameters
long oldCapacity = this.mCapacity;
boolean oldGasProof = this.mGasProof;
int oldHeatResistance = this.mHeatResistance;

// Add fluid to the new pipe
if (this.mPipeAmount <= newPipe.mPipeAmount) {
for (int i = 0; i < mPipeAmount; i++) {
if (this.mFluids[i] != null) {
newPipe.mFluids[i] = this.mFluids[i].copy();
newPipe.mFluids[i].amount = Math.min(this.mFluids[i].amount, newPipe.mCapacity);
}
}
}

// Update to the new pipe
aBaseMetaTileEntity.setMetaTileID((short) handItem.getItemDamage());
aBaseMetaTileEntity.setMetaTileEntity(newPipe);

// Construct a change message if needed
StringBuilder message = new StringBuilder();

// Compare capacity changes
if (oldCapacity != newPipe.mCapacity) {
message.append(oldCapacity * 20)
.append("L/seconds → ");
message.append(newPipe.mCapacity > oldCapacity ? EnumChatFormatting.GREEN : EnumChatFormatting.RED)
.append(newPipe.mCapacity * 20)
.append("L/secs")
.append(EnumChatFormatting.RESET);
}

// Compare heat resistance
if (oldHeatResistance != newPipe.mHeatResistance) {
if (message.length() > 0) message.append(" | ");
message.append(oldHeatResistance)
.append("K → ");
message
.append(newPipe.mHeatResistance > oldHeatResistance ? EnumChatFormatting.GREEN : EnumChatFormatting.RED)
.append(newPipe.mHeatResistance)
.append("K")
.append(EnumChatFormatting.RESET);
}

// Compare gas handling
if (oldGasProof != newPipe.mGasProof) {
if (message.length() > 0) message.append(" | ");
if (newPipe.mGasProof) {
message.append(EnumChatFormatting.GREEN)
.append("Now Gas-Proof");
} else {
message.append(EnumChatFormatting.RED)
.append("No Longer Gas-Proof");
}
message.append(EnumChatFormatting.RESET);
}

// Send a chat message if anything changed
if (message.length() > 0) {
GTUtility.sendChatToPlayer(
aPlayer,
StatCollector.translateToLocal("GT5U.item.pipe.swap") + " " + message.toString());
}

// Force updates to sync changes
aBaseMetaTileEntity.markDirty();
aBaseMetaTileEntity.issueTextureUpdate();
aBaseMetaTileEntity.issueBlockUpdate();
aBaseMetaTileEntity.issueClientUpdate();

// Handle inventory operations unless in creative mode
if (!aPlayer.capabilities.isCreativeMode) {
ItemStack oldPipe = new ItemStack(handItem.getItem(), 1, oldMetaID);
boolean addedToInventory = false;

// Attempt to stack with existing items
if (oldPipe != null) {
for (int i = 0; i < aPlayer.inventory.mainInventory.length; i++) {
ItemStack slot = aPlayer.inventory.mainInventory[i];
if (slot != null && slot.getItem() == oldPipe.getItem()
&& slot.getItemDamage() == oldPipe.getItemDamage()
&& slot.stackSize < slot.getMaxStackSize()) {
slot.stackSize++;
addedToInventory = true;
break;
}
}
// Add new stack if stacking failed
if (!addedToInventory) {
addedToInventory = aPlayer.inventory.addItemStackToInventory(oldPipe);
}
// If still unsuccessful, drop the item
if (!addedToInventory) {
aPlayer.dropPlayerItemWithRandomChoice(oldPipe, false);
}
}

// Decrement the placed pipe from the player's hand
handItem.stackSize--;
if (handItem.stackSize <= 0) {
aPlayer.inventory.setInventorySlotContents(aPlayer.inventory.currentItem, null);
}
}
return;
}

@Override
public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer,
float aX, float aY, float aZ, ItemStack aTool) {
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/assets/gregtech/lang/en_US.lang
Original file line number Diff line number Diff line change
Expand Up @@ -693,6 +693,7 @@ GT5U.item.pipe.gas_proof.yes=Yes
GT5U.item.pipe.gas_proof.no=No
GT5U.item.pipe.amount=Pipe Amount
GT5U.item.pipe.empty=Empty
GT5U.item.pipe.swap=Pipe Swapped:

gt.behaviour.paintspray.infinite.gui.header=Select a Color
gt.behaviour.paintspray.infinite.gui.lock_error=§eSpray can is §clocked§e! §bSneak middle-click to unlock.
Expand Down

0 comments on commit 56d12d9

Please sign in to comment.