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

Cover refactor, part 1 #3874

Merged
merged 23 commits into from
Feb 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
3899a0e
Cover ID and behavior are immutable
YannickMG Feb 1, 2025
d954826
Move allowsTickRateAddition to CoverInfo
YannickMG Feb 1, 2025
6e1b92e
Add CoverInfo::hasNoBehavior
YannickMG Feb 1, 2025
59cd72b
Move onCoverRightclickClient to CoverInfo
YannickMG Feb 1, 2025
fcb3b4b
Marked methods exposing CoverBehavior as deprecated
YannickMG Feb 1, 2025
a12ee70
Add CoverInfo::createCoverContainer
YannickMG Feb 1, 2025
02d796d
Streamlined GTUIInfos::createCoverGuiContainer
YannickMG Feb 1, 2025
dfd7b63
Encapsulate calls to isGUIClickable
YannickMG Feb 1, 2025
cc2b16c
Remove IControlsWorkCover::makeSureOnlyOne
YannickMG Feb 1, 2025
e4e2d48
Remove IControlsWorkCover. CoverControlsWork can check against itself…
YannickMG Feb 1, 2025
8cc4131
Remove ICoverable::getCoverBehaviorAtSideNew
YannickMG Feb 1, 2025
d5d7a34
Removed unused ICoverable methods
YannickMG Feb 1, 2025
dfe83c6
Removed ICoverable::getComplexCoverDataAtSide
YannickMG Feb 1, 2025
b6fb59f
Removed ICoverable::getCoverBehaviorAtSide
YannickMG Feb 1, 2025
daf5bbb
Removed ICoverable::getCoverDataAtSide
YannickMG Feb 1, 2025
df4071d
Minor MTECropHarvestor cleanup
YannickMG Jan 31, 2025
c7d4d9a
createCoverGuiContainer doesn't really serve a meaningful purpose any…
YannickMG Feb 2, 2025
b905972
Don't use a WeakReference to populate a network packet. Still cleaner…
YannickMG Feb 2, 2025
b49f343
Actually, just remove un-overridden onCoverRightclickClient
YannickMG Feb 2, 2025
47882d3
Merge branch 'master' into cover-refactor
YannickMG Feb 2, 2025
07c6f4b
Merge branch 'master' into cover-refactor
YannickMG Feb 2, 2025
a0e6149
Merge branch 'master' into cover-refactor
Dream-Master Feb 2, 2025
359ce82
Merge branch 'master' into cover-refactor
YannickMG Feb 3, 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
9 changes: 2 additions & 7 deletions src/main/java/ggfab/mte/MTELinkedInputBus.java
Original file line number Diff line number Diff line change
Expand Up @@ -337,13 +337,8 @@ public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {

@Override
public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {
if (!getBaseMetaTileEntity().getCoverBehaviorAtSideNew(side)
.isGUIClickable(
side,
getBaseMetaTileEntity().getCoverIDAtSide(side),
getBaseMetaTileEntity().getComplexCoverDataAtSide(side),
getBaseMetaTileEntity()))
return;
if (!getBaseMetaTileEntity().getCoverInfoAtSide(side)
.isGUIClickable()) return;
if (aPlayer.isSneaking()) {
if (this.mRealInventory == null) {
aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.no_channel"));
Expand Down
53 changes: 10 additions & 43 deletions src/main/java/gregtech/api/gui/modularui/GTUIInfos.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords;
import gregtech.api.net.GTPacketSendCoverData;
import gregtech.api.util.CoverBehaviorBase;
import gregtech.common.covers.CoverInfo;

public class GTUIInfos {

Expand Down Expand Up @@ -70,26 +70,16 @@ public static void init() {}
.container((player, world, x, y, z) -> {
final TileEntity te = world.getTileEntity(x, y, z);
if (!(te instanceof ICoverable gtTileEntity)) return null;
final CoverBehaviorBase<?> cover = gtTileEntity.getCoverBehaviorAtSideNew(side);
return createCoverContainer(
player,
cover::createWindow,
te::markDirty,
gtTileEntity.getCoverIDAtSide(side),
side,
gtTileEntity);
return gtTileEntity.getCoverInfoAtSide(side)
.createCoverContainer(player);
})
.gui((player, world, x, y, z) -> {
if (!world.isRemote) return null;
final TileEntity te = world.getTileEntity(x, y, z);
if (!(te instanceof ICoverable gtTileEntity)) return null;
final CoverBehaviorBase<?> cover = gtTileEntity.getCoverBehaviorAtSideNew(side);
return createCoverGuiContainer(
player,
cover::createWindow,
gtTileEntity.getCoverIDAtSide(side),
side,
gtTileEntity);
ModularUIContainer container = gtTileEntity.getCoverInfoAtSide(side)
.createCoverContainer(player);
return (container == null) ? null : new ModularGui(container);
})
.build());
}
Expand All @@ -109,17 +99,14 @@ public static void openGTTileEntityUI(IHasWorldObjectAndCoords aTileEntity, Enti
}

/**
* Opens cover UI, created by {@link CoverBehaviorBase#createWindow}.
* Opens cover UI, created by {@link CoverInfo#createWindow}.
*/
public static void openCoverUI(ICoverable tileEntity, EntityPlayer player, ForgeDirection side) {
if (tileEntity.isClientSide()) return;

CoverInfo coverInfo = tileEntity.getCoverInfoAtSide(side);
GTValues.NW.sendToPlayer(
new GTPacketSendCoverData(
side,
tileEntity.getCoverIDAtSide(side),
tileEntity.getComplexCoverDataAtSide(side),
tileEntity),
new GTPacketSendCoverData(side, coverInfo.getCoverID(), coverInfo.getCoverData(), tileEntity),
(EntityPlayerMP) player);

coverUI.get(side)
Expand Down Expand Up @@ -157,27 +144,7 @@ private static ModularGui createTileEntityGuiContainer(EntityPlayer player,
windowCreator,
null,
containerConstructor);
if (container == null) return null;
return new ModularGui(container);
}

private static ModularUIContainer createCoverContainer(EntityPlayer player,
Function<CoverUIBuildContext, ModularWindow> windowCreator, Runnable onWidgetUpdate, int coverID,
ForgeDirection side, ICoverable tile) {
final CoverUIBuildContext buildContext = new CoverUIBuildContext(player, coverID, side, tile, false);
final ModularWindow window = windowCreator.apply(buildContext);
if (window == null) return null;
return new ModularUIContainer(new ModularUIContext(buildContext, onWidgetUpdate), window);
}

@SideOnly(Side.CLIENT)
private static ModularGui createCoverGuiContainer(EntityPlayer player,
Function<CoverUIBuildContext, ModularWindow> windowCreator, int coverID, ForgeDirection side, ICoverable tile) {
final ModularUIContainer container = createCoverContainer(player, windowCreator, null, coverID, side, tile);
if (container == null) {
return null;
}
return new ModularGui(container);
return (container == null) ? null : new ModularGui(container);
}

@FunctionalInterface
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
import net.minecraftforge.common.util.ForgeDirection;

import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.util.CoverBehavior;
import gregtech.api.util.ISerializableObject;
import gregtech.common.covers.CoverInfo;

/**
* Implemented by the MetaTileEntity of the Redstone Circuit Block
Expand Down Expand Up @@ -36,11 +37,11 @@ public interface IRedstoneCircuitBlock {
/**
* If this Side is Covered up and therefor not doing any Redstone
*/
CoverBehavior getCover(ForgeDirection side);
CoverInfo getCover(ForgeDirection side);

int getCoverID(ForgeDirection side);

int getCoverVariable(ForgeDirection side);
ISerializableObject getCoverData(ForgeDirection side);

/**
* returns whatever Block-ID is adjacent to the Redstone Circuit Block
Expand Down

This file was deleted.

24 changes: 0 additions & 24 deletions src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,13 @@
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;

import gregtech.api.util.CoverBehavior;
import gregtech.api.util.CoverBehaviorBase;
import gregtech.api.util.ISerializableObject;
import gregtech.common.covers.CoverInfo;

public interface ICoverable extends IRedstoneTileEntity, IHasInventory, IBasicEnergyContainer {

boolean canPlaceCoverIDAtSide(ForgeDirection side, int aID);

boolean canPlaceCoverItemAtSide(ForgeDirection side, ItemStack aCover);

boolean dropCover(ForgeDirection side, ForgeDirection droppedSide, boolean aForced);

default ItemStack removeCoverAtSide(ForgeDirection side, boolean aForced) {
return null;
}

@Deprecated
void setCoverDataAtSide(ForgeDirection side, int aData);

Expand All @@ -37,28 +27,14 @@ default void setCoverDataAtSide(ForgeDirection side, ISerializableObject aData)

void setCoverItemAtSide(ForgeDirection side, ItemStack aCover);

@Deprecated
int getCoverDataAtSide(ForgeDirection side);

default CoverInfo getCoverInfoAtSide(ForgeDirection side) {
return null;
}

default ISerializableObject getComplexCoverDataAtSide(ForgeDirection side) {
return new ISerializableObject.LegacyCoverData(getCoverDataAtSide(side));
}

int getCoverIDAtSide(ForgeDirection side);

ItemStack getCoverItemAtSide(ForgeDirection side);

@Deprecated
CoverBehavior getCoverBehaviorAtSide(ForgeDirection side);

default CoverBehaviorBase<?> getCoverBehaviorAtSideNew(ForgeDirection side) {
return getCoverBehaviorAtSide(side);
}

/**
* For use by the regular MetaTileEntities. Returns the Cover Manipulated input Redstone. Don't use this if you are
* a Cover Behavior. Only for MetaTileEntities.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,6 @@ && getRandomNumber(1000) == 0) {
if (!hasValidMetaTileEntity()) return;
if (isServerSide()) {
if (mTickTimer == 10) {
updateCoverBehavior();
issueBlockUpdate();
joinEnet();
}
Expand Down Expand Up @@ -814,8 +813,6 @@ public boolean onRightclick(EntityPlayer aPlayer, ForgeDirection side, float aX,
? GTUtility.determineWrenchingSide(side, aX, aY, aZ)
: side;
return (getCoverInfoAtSide(tSide).hasCoverGUI());
} else if (getCoverBehaviorAtSideNew(side).onCoverRightclickClient(side, this, aPlayer, aX, aY, aZ)) {
return true;
}
}
if (isServerSide()) {
Expand Down Expand Up @@ -1091,9 +1088,7 @@ public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) {
@Override
public boolean canExtractItem(int aIndex, ItemStack aStack, int ordinalSide) {
final ForgeDirection side = ForgeDirection.getOrientation(ordinalSide);
return canAccessData()
&& getCoverBehaviorAtSideNew(side)
.letsItemsOut(side, getCoverIDAtSide(side), getComplexCoverDataAtSide(side), aIndex, this)
return canAccessData() && getCoverInfoAtSide(side).letsItemsOut(aIndex)
&& mMetaTileEntity.canExtractItem(aIndex, aStack, ordinalSide);
}

Expand Down
40 changes: 6 additions & 34 deletions src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,6 @@ public void setInitialValuesAsNBT(NBTTagCompound aNBT, short aID) {
if (hasValidMetaTileEntity() && mMetaTileEntity.hasSidedRedstoneOutputBehavior())
mSidedRedstone = new byte[] { 0, 0, 0, 0, 0, 0 };
else mSidedRedstone = new byte[] { 15, 15, 15, 15, 15, 15 };

updateCoverBehavior();
}

/**
Expand Down Expand Up @@ -375,7 +373,6 @@ public void updateEntity() {
}
if (aSideServer) {
if (mRedstone != oRedstone || mTickTimer == 10) {
updateCoverBehavior();
oRedstone = mRedstone;
issueBlockUpdate();
}
Expand Down Expand Up @@ -1458,9 +1455,7 @@ public boolean onRightclick(EntityPlayer aPlayer, ForgeDirection side, float aX,
final ForgeDirection tSide = (getCoverIDAtSide(side) == 0)
? GTUtility.determineWrenchingSide(side, aX, aY, aZ)
: side;
return (getCoverBehaviorAtSideNew(tSide).hasCoverGUI());
} else if (getCoverBehaviorAtSideNew(side).onCoverRightclickClient(side, this, aPlayer, aX, aY, aZ)) {
return true;
return (getCoverInfoAtSide(tSide).hasCoverGUI());
}

if (!getCoverInfoAtSide(side).isGUIClickable()) return false;
Expand Down Expand Up @@ -1519,15 +1514,7 @@ public boolean onRightclick(EntityPlayer aPlayer, ForgeDirection side, float aX,
if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) {
setCoverDataAtSide(
side,
getCoverBehaviorAtSideNew(side).onCoverScrewdriverClick(
side,
getCoverIDAtSide(side),
getComplexCoverDataAtSide(side),
this,
aPlayer,
aX,
aY,
aZ));
getCoverInfoAtSide(side).onCoverScrewdriverClick(aPlayer, aX, aY, aZ));
mMetaTileEntity.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ, tCurrentItem);
GTUtility.sendSoundToPlayers(
worldObj,
Expand Down Expand Up @@ -1696,8 +1683,7 @@ public boolean onRightclick(EntityPlayer aPlayer, ForgeDirection side, float aX,
if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
final CoverInfo info = getCoverInfoAtSide(coverSide);
if (info != CoverInfo.EMPTY_INFO) {
final CoverBehaviorBase<?> behavior = info.getCoverBehavior();
if (behavior.allowsTickRateAddition()) {
if (info.allowsTickRateAddition()) {
info.onCoverJackhammer(aPlayer);
GTUtility.sendSoundToPlayers(
worldObj,
Expand All @@ -1723,23 +1709,10 @@ public boolean onRightclick(EntityPlayer aPlayer, ForgeDirection side, float aX,
// End item != null
} else if (aPlayer.isSneaking()) { // Sneak click, no tool -> open cover config if possible.
side = (getCoverIDAtSide(side) == 0) ? GTUtility.determineWrenchingSide(side, aX, aY, aZ) : side;
return getCoverIDAtSide(side) > 0 && getCoverBehaviorAtSideNew(side).onCoverShiftRightClick(
side,
getCoverIDAtSide(side),
getComplexCoverDataAtSide(side),
this,
aPlayer);
return getCoverIDAtSide(side) > 0 && getCoverInfoAtSide(side).onCoverShiftRightClick(aPlayer);
}

if (getCoverBehaviorAtSideNew(side).onCoverRightClick(
side,
getCoverIDAtSide(side),
getComplexCoverDataAtSide(side),
this,
aPlayer,
aX,
aY,
aZ)) return true;
if (getCoverInfoAtSide(side).onCoverRightClick(aPlayer, aX, aY, aZ)) return true;

if (!getCoverInfoAtSide(side).isGUIClickable()) return false;

Expand Down Expand Up @@ -1863,8 +1836,7 @@ && getCoverInfoAtSide(ForgeDirection.getOrientation(ordinalSide)).letsItemsIn(sl
public boolean canExtractItem(int slotIndex, ItemStack stack, int ordinalSide) {
final ForgeDirection side = ForgeDirection.getOrientation(ordinalSide);
return canAccessData() && (mRunningThroughTick || !mOutputDisabled)
&& getCoverBehaviorAtSideNew(side)
.letsItemsOut(side, getCoverIDAtSide(side), getComplexCoverDataAtSide(side), slotIndex, this)
&& getCoverInfoAtSide(side).letsItemsOut(slotIndex)
&& mMetaTileEntity.canExtractItem(slotIndex, stack, ordinalSide);
}

Expand Down
Loading