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 Pipe Swapping functionality #3836

Merged
merged 35 commits into from
Feb 1, 2025
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
116b341
Add Pipe Swapping functionality
mak8427 Jan 20, 2025
46cad99
Merge branch 'master' into pipe-switch
mak8427 Jan 20, 2025
30578f8
Merge branch 'master' into pipe-switch
Dream-Master Jan 21, 2025
0a28bf7
Merge branch 'master' into pipe-switch
mak8427 Jan 21, 2025
4f425b3
Merge branch 'master' into pipe-switch
Dream-Master Jan 22, 2025
4cc7714
Merge branch 'master' into pipe-switch
Dream-Master Jan 22, 2025
eded734
Merge branch 'master' into pipe-switch
Dream-Master Jan 23, 2025
b9c4804
changed CTRL click from Keyboard to KeyboardUtil
mak8427 Jan 23, 2025
f054d1a
StatCollector instead of GTUtility.trans
mak8427 Jan 23, 2025
93e0972
Packet implementation first try
mak8427 Jan 24, 2025
aa2ff70
Merge branch 'master' into pipe-switch
Dream-Master Jan 25, 2025
49e336a
Merge branch 'master' into pipe-switch
Dream-Master Jan 25, 2025
24d91db
Merge branch 'master' into pipe-switch
Dream-Master Jan 25, 2025
cc57e4f
Merge branch 'master' into pipe-switch
mak8427 Jan 25, 2025
5bd80cb
Merge branch 'master' into pipe-switch
Dream-Master Jan 26, 2025
32f79a7
Merge branch 'master' into pipe-switch
Dream-Master Jan 27, 2025
8b07aec
Merge remote-tracking branch 'origin/pipe-switch' into pipe-switch
mak8427 Jan 28, 2025
c40941f
Spotless apply
mak8427 Jan 28, 2025
c8a3de3
Fix conditions
mak8427 Jan 28, 2025
ea171ba
Merge branch 'master' into pipe-switch
Dream-Master Jan 28, 2025
bb8f5f0
Merge branch 'master' into pipe-switch
Dream-Master Jan 30, 2025
26b9cc7
Merge branch 'master' into pipe-switch
Dream-Master Jan 30, 2025
def330a
star import fix
Dream-Master Jan 30, 2025
187205f
Update src/main/java/gregtech/api/metatileentity/implementations/MTEF…
mak8427 Jan 30, 2025
88f956e
Merge remote-tracking branch 'origin/pipe-switch' into pipe-switch
mak8427 Jan 30, 2025
65fcfd0
-fix for multiplayer sever compatibilitity from ctrl + right click t…
mak8427 Jan 30, 2025
c1df479
keep diseble input
mak8427 Jan 30, 2025
ca95f94
Keep fluid inside the pipe
mak8427 Jan 30, 2025
968e4ca
fix fluid handling
mak8427 Jan 30, 2025
85b5c03
Spotless
mak8427 Jan 30, 2025
7c229fa
Merge branch 'master' into pipe-switch
mak8427 Jan 31, 2025
567ca28
Merge branch 'master' into pipe-switch
Dream-Master Jan 31, 2025
ec91878
Remove CTRL var as unused
mak8427 Feb 1, 2025
975f2dc
Merge remote-tracking branch 'origin/pipe-switch' into pipe-switch
mak8427 Feb 1, 2025
1d6980e
Merge branch 'master' into pipe-switch
serenibyss Feb 1, 2025
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 @@ -37,6 +37,7 @@
import net.minecraftforge.fluids.IFluidHandler;

import org.apache.commons.lang3.tuple.MutableTriple;
import org.lwjgl.input.Keyboard;

import cpw.mods.fml.common.Optional;
import gregtech.GTMod;
Expand Down Expand Up @@ -64,6 +65,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 @@ -473,6 +475,147 @@ public void blockPipeOnSide(ForgeDirection side, EntityPlayer entityPlayer, byte
}
}

@Override
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side,
float aX, float aY, float aZ) {
if (Keyboard.isKeyDown(Keyboard.KEY_LCONTROL)) {
serenibyss marked this conversation as resolved.
Show resolved Hide resolved
final ItemStack handItem = aPlayer.inventory.getCurrentItem();
IMetaTileEntity meta = ItemMachines.getMetaTileEntity(handItem);
if (!(meta instanceof MTEFluid handFluid)) return false;

// Store old state before any changes
byte oldConnections = this.mConnections;
short oldMetaID = (short) aBaseMetaTileEntity.getMetaTileID();

// Create new pipe using newMetaEntity to ensure proper initialization
MTEFluid newPipe = (MTEFluid) handFluid.newMetaEntity(aBaseMetaTileEntity);
if (newPipe == null) return false;

// Preserve connections
newPipe.mConnections = oldConnections;
mak8427 marked this conversation as resolved.
Show resolved Hide resolved

// Store values for comparison
long oldCapacity = this.mCapacity;
boolean oldGasProof = this.mGasProof;
int oldHeatResistance = this.mHeatResistance;

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

// Build status change message
StringBuilder message = new StringBuilder();

// Capacity change
if (oldCapacity != newPipe.mCapacity) {
message.append(oldCapacity * 20)
.append("L/s → ");
if (newPipe.mCapacity > oldCapacity) {
message.append(EnumChatFormatting.GREEN);
} else {
message.append(EnumChatFormatting.RED);
}
message.append(newPipe.mCapacity * 20)
.append("L/s");
message.append(EnumChatFormatting.RESET);
}

// Heat resistance change
if (oldHeatResistance != newPipe.mHeatResistance) {
if (message.length() > 0) message.append(" | ");
message.append(oldHeatResistance)
.append("K → ");
if (newPipe.mHeatResistance > oldHeatResistance) {
message.append(EnumChatFormatting.GREEN);
} else {
message.append(EnumChatFormatting.RED);
}
message.append(newPipe.mHeatResistance)
.append("K");
message.append(EnumChatFormatting.RESET);
}

// Gas handling change
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);
}

// Pipe amount change
if (this.mPipeAmount != newPipe.mPipeAmount) {
if (message.length() > 0) message.append(" | ");
message.append(this.mPipeAmount)
.append(" → ");
if (newPipe.mPipeAmount > this.mPipeAmount) {
message.append(EnumChatFormatting.GREEN);
} else {
message.append(EnumChatFormatting.RED);
}
message.append(newPipe.mPipeAmount);
message.append(EnumChatFormatting.RESET);
}

// Send message if there were any changes
if (message.length() > 0) {
GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("215.2", "Pipe changed: ") + message.toString());
}

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

// Handle inventory swapping
if (!aPlayer.capabilities.isCreativeMode) {
// Create ItemStack for the removed pipe
ItemStack oldPipe = new ItemStack(handItem.getItem(), 1, oldMetaID);

// Try to give the old pipe to the player
boolean addedToInventory = false;
if (oldPipe != null) {
// First try to stack with existing pipes
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;
}
}

// If couldn't stack, try to find empty slot
if (!addedToInventory) {
addedToInventory = aPlayer.inventory.addItemStackToInventory(oldPipe);
}

// If still couldn't add, drop in world
if (!addedToInventory) {
aPlayer.dropPlayerItemWithRandomChoice(oldPipe, false);
}
}

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

return true;
}
return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ);
}

@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/java/gregtech/api/util/GTLanguageManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,7 @@ public static void writePlaceholderStrings() {
addStringLocalization("Interaction_DESCRIPTION_Index_213", "Input disabled");
addStringLocalization("Interaction_DESCRIPTION_Index_214", "Connected");
addStringLocalization("Interaction_DESCRIPTION_Index_215", "Disconnected");
addStringLocalization("Interaction_DESCRIPTION_Index_215.2", "Pipe Changed: ");
addStringLocalization("Interaction_DESCRIPTION_Index_216", "Deprecated Recipe");
addStringLocalization("Interaction_DESCRIPTION_Index_219", "Extended Facing: ");
addStringLocalization("Interaction_DESCRIPTION_Index_220", "Single recipe locking disabled.");
Expand Down
Loading