Skip to content

Commit

Permalink
Fix covers (due to api change) & facades
Browse files Browse the repository at this point in the history
  • Loading branch information
RecursivePineapple committed Feb 4, 2025
1 parent 3cc25d7 commit 645cca6
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -243,9 +243,10 @@ protected void removeCovers(TileEntity te) {
if (te instanceof ICoverable coverable) {
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
if (coverable.getCoverIDAtSide(side) != 0) {
ItemStack cover = coverable.removeCoverAtSide(side, true);
ItemStack cover = coverable.getCoverInfoAtSide(side).getDrop();

if (cover != null && cover.getItem() != null) {
coverable.setCoverItemAtSide(side, null);
givePlayerItems(cover);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.recursive_pineapple.matter_manipulator.common.building;

import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;

Expand All @@ -19,7 +17,6 @@ public class CoverData {
public NBTBase coverData;
public Integer tickRateAddition;

public transient Integer coverID;
public transient CoverBehaviorBase<?> behaviour;
public transient ISerializableObject coverDataObject;

Expand All @@ -35,19 +32,9 @@ public ItemStack getCover() {
return cover.toStack();
}

public int getCoverID() {
if (coverID == null) {
ItemStack stack = getCover();

coverID = (Item.getIdFromItem(stack.getItem()) & 0xFFFF) | ((Items.feather.getDamage(stack) & 0xFFFF) << 16);
}

return coverID;
}

public CoverBehaviorBase<?> getCoverBehaviour() {
if (behaviour == null) {
behaviour = GregTechAPI.getCoverBehaviorNew(getCoverID());
behaviour = GregTechAPI.getCoverBehaviorNew(getCover());
}

return behaviour;
Expand All @@ -68,7 +55,6 @@ public CoverData clone() {
dup.cover = cover.clone();
dup.coverData = coverData.copy();
dup.tickRateAddition = tickRateAddition;
dup.coverID = coverID;

return dup;
}
Expand All @@ -79,17 +65,11 @@ public CoverData clone() {
* @return The CoverData, or null if there's no cover.
*/
public static CoverData fromInfo(CoverInfo info) {
if (info.getCoverID() == 0) return null;

int itemId = info.getCoverID() & 0xFFFF;
int metadata = (info.getCoverID() >> 16) & 0xFFFF;

Item item = Item.getItemById(itemId);
if (info == null || info.getDrop() == null) return null;

return new CoverData(
new PortableItemStack(item, metadata),
info.getCoverData()
.saveDataToNBT(),
PortableItemStack.withNBT(info.getDrop()),
info.getCoverData().saveDataToNBT(),
info.getTickRateAddition()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import gregtech.api.metatileentity.implementations.MTEHatchInputBus;
import gregtech.api.metatileentity.implementations.MTEHatchOutput;
import gregtech.api.metatileentity.implementations.MTEMultiBlockBase;
import gregtech.api.objects.GTItemStack;
import gregtech.common.covers.CoverInfo;
import gregtech.common.tileentities.machines.MTEHatchOutputBusME;
import gregtech.common.tileentities.machines.MTEHatchOutputME;
Expand Down Expand Up @@ -315,16 +316,14 @@ public boolean apply(IBlockApplyContext ctx) {
// install/remove/update the covers
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
CoverData expected = mCovers == null ? null : mCovers[dir.ordinal()];
CoverInfo actual = gte.getCoverIDAtSide(dir) == 0 ?
null :
new CoverInfo(dir, gte.getCoverIDAtSide(dir), gte, gte.getComplexCoverDataAtSide(dir));
CoverInfo actual = gte.getCoverInfoAtSide(dir);

if (actual == null && expected != null) {
installCover(ctx, gte, dir, expected);
} else if (actual != null && expected == null) {
removeCover(ctx, gte, dir);
} else if (actual != null && expected != null) {
if (actual.getCoverID() != expected.getCoverID()) {
if (!ItemStack.areItemStacksEqual(expected.getCover(), actual.getDrop())) {
removeCover(ctx, gte, dir);
installCover(ctx, gte, dir, expected);
} else if (!Objects.equals(actual.getCoverData(), expected.getCoverData())) {
Expand Down Expand Up @@ -453,14 +452,15 @@ public boolean apply(IBlockApplyContext ctx) {

private void removeCover(IBlockApplyContext context, IGregTechTileEntity gte, ForgeDirection side) {
if (gte.getCoverIDAtSide(side) != 0) {
context.givePlayerItems(gte.removeCoverAtSide(side, true));
context.givePlayerItems(gte.getCoverInfoAtSide(side).getDrop());
gte.setCoverItemAtSide(side, null);
}
}

private void installCover(IBlockApplyContext context, IGregTechTileEntity gte, ForgeDirection side, CoverData cover) {
ItemStack stack = cover.getCover();

if (!gte.canPlaceCoverItemAtSide(side, stack)) {
if (!canPlace(gte, side, cover)) {
context.error("Was not allowed to put cover on " + side.name().toLowerCase() + "side: " + stack.getDisplayName());
return;
}
Expand All @@ -470,11 +470,8 @@ private void installCover(IBlockApplyContext context, IGregTechTileEntity gte, F
return;
}

gte.setCoverIdAndDataAtSide(
side,
cover.getCoverID(),
cover.getCoverBehaviour().allowsCopyPasteTool() ? cover.getCoverData() : null
);
gte.setCoverItemAtSide(side, stack);
gte.setCoverDataAtSide(side, cover.getCoverBehaviour().allowsCopyPasteTool() ? cover.getCoverData() : null);
}

private void updateCover(
Expand All @@ -483,8 +480,8 @@ private void updateCover(
ForgeDirection side,
CoverData target
) {
if (gte.getCoverIDAtSide(side) == target.getCoverID()) {
if (gte.getCoverBehaviorAtSideNew(side).allowsCopyPasteTool()) {
if (ItemStack.areItemStacksEqual(gte.getCoverItemAtSide(side), target.getCover())) {
if (gte.getCoverInfoAtSide(side).allowsCopyPasteTool()) {
gte.setCoverDataAtSide(side, target.getCoverData());
}
}
Expand All @@ -497,20 +494,15 @@ public boolean getRequiredItemsForExistingBlock(IBlockApplyContext context) {
if (te instanceof IGregTechTileEntity gte) {
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
CoverData target = mCovers == null ? null : mCovers[side.ordinal()];
CoverInfo actual = gte.getCoverIDAtSide(side) == 0 ?
null :
new CoverInfo(side, gte.getCoverIDAtSide(side), gte, gte.getComplexCoverDataAtSide(side));

if (actual != null && (target == null || actual.getCoverID() != target.getCoverID())) {
context.givePlayerItems(
gte.getCoverItemAtSide(side)
.copy()
);
CoverInfo actual = gte.getCoverInfoAtSide(side);

if (actual != null && (target == null || ItemStack.areItemStacksEqual(actual.getDrop(), target.getCover()))) {
context.givePlayerItems(gte.getCoverItemAtSide(side));
actual = null;
}

if (actual == null && target != null) {
if (gte.canPlaceCoverItemAtSide(side, target.getCover())) {
if (canPlace(gte, side, target)) {
context.tryConsumeItems(target.getCover());
}
}
Expand All @@ -533,6 +525,15 @@ public boolean getRequiredItemsForNewBlock(IBlockApplyContext context) {
return true;
}

private boolean canPlace(IGregTechTileEntity gte, ForgeDirection side, CoverData cover) {
ItemStack stack = cover.getCover();

if (!cover.getCoverBehaviour().isCoverPlaceable(side, stack, gte)) return false;
if (!gte.getMetaTileEntity().allowCoverOnSide(side, new GTItemStack(stack))) return false;

return true;
}

@Override
public void getItemTag(NBTTagCompound tag) {
if (mGTMEBusCapacity != 0) {
Expand Down

0 comments on commit 645cca6

Please sign in to comment.