Skip to content

Commit ad7b918

Browse files
Merge pull request #56 from RecursivePineapple/api-changes
Changes for new GT APIs
2 parents d8a7623 + f39edb1 commit ad7b918

File tree

5 files changed

+64
-86
lines changed

5 files changed

+64
-86
lines changed

src/main/java/com/recursive_pineapple/matter_manipulator/common/building/AbstractBuildable.java

+2-5
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
3232
import gregtech.api.interfaces.tileentity.IRedstoneEmitter;
3333
import gregtech.api.util.GTUtility;
34-
import gregtech.common.covers.CoverInfo;
3534
import gregtech.common.tileentities.machines.MTEHatchOutputBusME;
3635
import gregtech.common.tileentities.machines.MTEHatchOutputME;
3736
import gregtech.common.tileentities.storage.MTEDigitalChestBase;
@@ -245,10 +244,8 @@ protected void emptyTank(TileEntity te) {
245244
protected void removeCovers(TileEntity te) {
246245
if (te instanceof ICoverable coverable) {
247246
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
248-
CoverInfo info = MMUtils.getActualCover(coverable, side);
249-
if (info != null) {
250-
givePlayerItems(info.getDrop());
251-
coverable.setCoverIDAtSide(side, 0);
247+
if (coverable.hasCoverAtSide(side)) {
248+
givePlayerItems(coverable.detachCover(side));
252249
}
253250
}
254251
}

src/main/java/com/recursive_pineapple/matter_manipulator/common/building/CoverData.java

+24-24
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
package com.recursive_pineapple.matter_manipulator.common.building;
22

3+
import java.lang.invoke.MethodHandle;
4+
import java.lang.invoke.MethodType;
5+
import java.util.Optional;
6+
37
import net.minecraft.item.ItemStack;
48
import net.minecraft.nbt.NBTBase;
59

10+
import net.minecraftforge.common.util.ForgeDirection;
11+
12+
import com.recursive_pineapple.matter_manipulator.common.utils.MMUtils;
613
import gregtech.api.covers.CoverRegistry;
7-
import gregtech.api.util.CoverBehaviorBase;
14+
import gregtech.api.interfaces.tileentity.ICoverable;
815
import gregtech.api.util.ISerializableObject;
9-
import gregtech.common.covers.CoverInfo;
16+
import gregtech.common.covers.Cover;
17+
import gregtech.common.covers.CoverBehaviorBase;
18+
import lombok.SneakyThrows;
1019

1120
/**
1221
* Contains all GT cover analysis data.
@@ -17,9 +26,6 @@ public class CoverData {
1726
public NBTBase coverData;
1827
public Integer tickRateAddition;
1928

20-
public transient CoverBehaviorBase<?> behaviour;
21-
public transient ISerializableObject coverDataObject;
22-
2329
public CoverData() {}
2430

2531
public CoverData(PortableItemStack cover, NBTBase coverData, int tickRateAddition) {
@@ -28,24 +34,16 @@ public CoverData(PortableItemStack cover, NBTBase coverData, int tickRateAdditio
2834
this.tickRateAddition = tickRateAddition == 0 ? null : tickRateAddition;
2935
}
3036

31-
public ItemStack getCover() {
37+
public ItemStack getCoverStack() {
3238
return cover.toStack();
3339
}
3440

35-
public CoverBehaviorBase<?> getCoverBehaviour() {
36-
if (behaviour == null) {
37-
behaviour = CoverRegistry.getCoverBehaviorNew(getCover());
38-
}
41+
private static final MethodHandle COVER_LOAD_FROM_NBT = MMUtils.exposeMethod(CoverBehaviorBase.class,
42+
MethodType.methodType(ISerializableObject.class, NBTBase.class), "loadFromNbt");
3943

40-
return behaviour;
41-
}
42-
43-
public ISerializableObject getCoverData() {
44-
if (coverDataObject == null) {
45-
coverDataObject = getCoverBehaviour().createDataObject(coverData);
46-
}
47-
48-
return coverDataObject;
44+
@SneakyThrows
45+
public ISerializableObject getCoverData(Cover cover) {
46+
return (ISerializableObject) COVER_LOAD_FROM_NBT.invokeExact((CoverBehaviorBase<?>) cover, coverData);
4947
}
5048

5149
@Override
@@ -64,13 +62,15 @@ public CoverData clone() {
6462
*
6563
* @return The CoverData, or null if there's no cover.
6664
*/
67-
public static CoverData fromInfo(CoverInfo info) {
68-
if (info == null || info.getDrop() == null) return null;
65+
public static CoverData fromMachine(ICoverable coverable, ForgeDirection dir) {
66+
if (!coverable.hasCoverAtSide(dir)) return null;
67+
68+
Cover cover = coverable.getCoverAtSide(dir);
6969

7070
return new CoverData(
71-
PortableItemStack.withNBT(info.getDrop()),
72-
info.getCoverData().saveDataToNBT(),
73-
info.getTickRateAddition()
71+
PortableItemStack.withNBT(coverable.getCoverItemAtSide(dir)),
72+
cover.getCoverData().saveDataToNBT(),
73+
cover.getTickRateAddition()
7474
);
7575
}
7676

src/main/java/com/recursive_pineapple/matter_manipulator/common/building/GTAnalysisResult.java

+38-37
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import static com.recursive_pineapple.matter_manipulator.common.utils.MMUtils.nullIfUnknown;
44

5+
import java.lang.invoke.MethodHandle;
6+
import java.lang.invoke.MethodType;
57
import java.util.Arrays;
68
import java.util.List;
79
import java.util.Objects;
@@ -13,6 +15,7 @@
1315

1416
import net.minecraftforge.common.util.ForgeDirection;
1517

18+
import gregtech.api.covers.CoverRegistry;
1619
import gregtech.api.enums.ItemList;
1720
import gregtech.api.enums.VoidingMode;
1821
import gregtech.api.interfaces.IConfigurationCircuitSupport;
@@ -28,8 +31,7 @@
2831
import gregtech.api.metatileentity.implementations.MTEHatchInputBus;
2932
import gregtech.api.metatileentity.implementations.MTEHatchOutput;
3033
import gregtech.api.metatileentity.implementations.MTEMultiBlockBase;
31-
import gregtech.api.objects.GTItemStack;
32-
import gregtech.common.covers.CoverInfo;
34+
import gregtech.common.covers.Cover;
3335
import gregtech.common.tileentities.machines.MTEHatchOutputBusME;
3436
import gregtech.common.tileentities.machines.MTEHatchOutputME;
3537

@@ -46,6 +48,7 @@
4648
import com.recursive_pineapple.matter_manipulator.common.items.manipulator.Transform;
4749
import com.recursive_pineapple.matter_manipulator.common.utils.MMUtils;
4850

51+
import lombok.SneakyThrows;
4952
import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoTunnel;
5053
import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyTunnel;
5154
import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase;
@@ -148,8 +151,8 @@ public GTAnalysisResult(IGregTechTileEntity igte) {
148151

149152
// check each side for covers
150153
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
151-
if (igte.getCoverIDAtSide(dir) != 0) {
152-
covers[dir.ordinal()] = CoverData.fromInfo(MMUtils.getActualCover(igte, dir));
154+
if (igte.hasCoverAtSide(dir)) {
155+
covers[dir.ordinal()] = CoverData.fromMachine(igte, dir);
153156
hasCover = true;
154157

155158
if (igte.getRedstoneOutputStrength(dir)) {
@@ -250,6 +253,13 @@ public GTAnalysisResult(IGregTechTileEntity igte) {
250253
}
251254
}
252255

256+
private static final MethodHandle SET_TICK_RATE_ADDITION = MMUtils.exposeMethod(Cover.class, MethodType.methodType(void.class, int.class), "setTickRateAddition");
257+
258+
@SneakyThrows
259+
private static void setTickRateAddition(Cover cover, int value) {
260+
SET_TICK_RATE_ADDITION.invokeExact(cover, value);
261+
}
262+
253263
@Override
254264
public boolean apply(IBlockApplyContext ctx) {
255265
TileEntity te = ctx.getTileEntity();
@@ -317,28 +327,28 @@ public boolean apply(IBlockApplyContext ctx) {
317327
// install/remove/update the covers
318328
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
319329
CoverData expected = mCovers == null ? null : mCovers[dir.ordinal()];
320-
CoverInfo actual = MMUtils.getActualCover(gte, dir);
330+
Cover actual = gte.getCoverAtSide(dir);
321331

322332
if (actual == null && expected != null) {
323333
installCover(ctx, gte, dir, expected);
324334
} else if (actual != null && expected == null) {
325335
removeCover(ctx, gte, dir);
326336
} else if (actual != null && expected != null) {
327-
if (!ItemStack.areItemStacksEqual(expected.getCover(), actual.getDrop())) {
337+
if (!ItemStack.areItemStacksEqual(expected.getCoverStack(), gte.getCoverItemAtSide(dir))) {
328338
removeCover(ctx, gte, dir);
329339
installCover(ctx, gte, dir, expected);
330-
} else if (!Objects.equals(actual.getCoverData(), expected.getCoverData())) {
340+
} else if (!Objects.equals(actual.getCoverData(), expected.getCoverData(actual))) {
331341
updateCover(ctx, gte, dir, expected);
332342
}
333343
}
334344

335345
// set the redstone strength
336346
gte.setRedstoneOutputStrength(dir, (mStrongRedstone & dir.flag) != 0);
337347
if (expected != null) {
338-
actual = MMUtils.getActualCover(gte, dir);
348+
actual = gte.getCoverAtSide(dir);
339349

340350
if (actual != null) {
341-
actual.setTickRateAddition(expected.tickRateAddition == null ? 0 : expected.tickRateAddition);
351+
setTickRateAddition(actual, expected.tickRateAddition == null ? 0 : expected.tickRateAddition);
342352
}
343353
}
344354
}
@@ -452,24 +462,13 @@ public boolean apply(IBlockApplyContext ctx) {
452462
}
453463

454464
private void removeCover(IBlockApplyContext context, IGregTechTileEntity gte, ForgeDirection side) {
455-
CoverInfo actual = MMUtils.getActualCover(gte, side);
456-
457-
if (actual != null) {
458-
context.givePlayerItems(actual.getDrop());
459-
460-
actual.onCoverRemoval(true);
461-
actual.onDropped();
462-
gte.setCoverIDAtSide(side, 0);
463-
464-
if (gte instanceof CoverableTileEntity te) {
465-
te.clearCoverInfoAtSide(side);
466-
te.setOutputRedstoneSignal(side, (byte) 0);
467-
}
465+
if (gte.hasCoverAtSide(side)) {
466+
context.givePlayerItems(gte.detachCover(side));
468467
}
469468
}
470469

471470
private void installCover(IBlockApplyContext context, IGregTechTileEntity gte, ForgeDirection side, CoverData cover) {
472-
ItemStack stack = cover.getCover();
471+
ItemStack stack = cover.getCoverStack();
473472

474473
if (!canPlace(gte, side, cover)) {
475474
context.error("Was not allowed to put cover on " + side.name().toLowerCase() + "side: " + stack.getDisplayName());
@@ -481,8 +480,11 @@ private void installCover(IBlockApplyContext context, IGregTechTileEntity gte, F
481480
return;
482481
}
483482

484-
gte.attachCover(context.getRealPlayer(), stack, side);
485-
gte.setCoverDataAtSide(side, cover.getCoverBehaviour().allowsCopyPasteTool() ? cover.getCoverData() : null);
483+
CoverRegistry.getCoverPlacer(stack).placeCover(context.getRealPlayer(), stack, gte, side);
484+
485+
if (gte.getCoverAtSide(side).allowsCopyPasteTool()) {
486+
gte.setCoverDataAtSide(side, cover.getCoverData(gte.getCoverAtSide(side)));
487+
}
486488
}
487489

488490
private void updateCover(
@@ -491,10 +493,10 @@ private void updateCover(
491493
ForgeDirection side,
492494
CoverData target
493495
) {
494-
CoverInfo info = MMUtils.getActualCover(gte, side);
495-
if (info != null && ItemStack.areItemStacksEqual(info.getDrop(), target.getCover())) {
496-
if (info.allowsCopyPasteTool()) {
497-
info.setCoverData(target.getCoverData());
496+
if (gte.hasCoverAtSide(side) && ItemStack.areItemStacksEqual(gte.getCoverItemAtSide(side), target.getCoverStack())) {
497+
Cover cover = gte.getCoverAtSide(side);
498+
if (cover.allowsCopyPasteTool()) {
499+
cover.setCoverData(target.getCoverData(cover));
498500
}
499501
}
500502
}
@@ -506,16 +508,16 @@ public boolean getRequiredItemsForExistingBlock(IBlockApplyContext context) {
506508
if (te instanceof IGregTechTileEntity gte) {
507509
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
508510
CoverData target = mCovers == null ? null : mCovers[side.ordinal()];
509-
CoverInfo actual = MMUtils.getActualCover(gte, side);
511+
Cover actual = gte.getCoverAtSide(side);
510512

511-
if (actual != null && (target == null || ItemStack.areItemStacksEqual(actual.getDrop(), target.getCover()))) {
512-
context.givePlayerItems(actual.getDrop());
513+
if (actual != null && (target == null || ItemStack.areItemStacksEqual(gte.getCoverItemAtSide(side), target.getCoverStack()))) {
514+
context.givePlayerItems(gte.getCoverItemAtSide(side));
513515
actual = null;
514516
}
515517

516518
if (actual == null && target != null) {
517519
if (canPlace(gte, side, target)) {
518-
context.tryConsumeItems(target.getCover());
520+
context.tryConsumeItems(target.getCoverStack());
519521
}
520522
}
521523
}
@@ -530,18 +532,17 @@ public boolean getRequiredItemsForNewBlock(IBlockApplyContext context) {
530532
CoverData target = mCovers == null ? null : mCovers[side.ordinal()];
531533

532534
if (target != null) {
533-
context.tryConsumeItems(target.getCover());
535+
context.tryConsumeItems(target.getCoverStack());
534536
}
535537
}
536538

537539
return true;
538540
}
539541

540542
private boolean canPlace(IGregTechTileEntity gte, ForgeDirection side, CoverData cover) {
541-
ItemStack stack = cover.getCover();
543+
ItemStack stack = cover.getCoverStack();
542544

543-
if (!cover.getCoverBehaviour().isCoverPlaceable(side, stack, gte)) return false;
544-
if (!gte.getMetaTileEntity().allowCoverOnSide(side, new GTItemStack(stack))) return false;
545+
if (!gte.getMetaTileEntity().allowCoverOnSide(side, stack)) return false;
545546

546547
return true;
547548
}

src/main/java/com/recursive_pineapple/matter_manipulator/common/uplink/MTEMMUplinkMEHatch.java

-5
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,6 @@ public void onFacingChange() {
191191
updateValidGridProxySides();
192192
}
193193

194-
@Override
195-
public boolean isSimpleMachine() {
196-
return true;
197-
}
198-
199194
@Override
200195
public boolean isFacingValid(ForgeDirection facing) {
201196
return true;

src/main/java/com/recursive_pineapple/matter_manipulator/common/utils/MMUtils.java

-15
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@
3737
import java.util.stream.IntStream;
3838
import java.util.stream.Stream;
3939

40-
import javax.annotation.Nullable;
41-
4240
import net.minecraft.block.Block;
4341
import net.minecraft.client.Minecraft;
4442
import net.minecraft.entity.player.EntityPlayer;
@@ -79,12 +77,10 @@
7977

8078
import gregtech.api.GregTechAPI;
8179
import gregtech.api.interfaces.metatileentity.IConnectable;
82-
import gregtech.api.interfaces.tileentity.ICoverable;
8380
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
8481
import gregtech.api.interfaces.tileentity.IHasInventory;
8582
import gregtech.api.metatileentity.BaseMetaTileEntity;
8683
import gregtech.common.blocks.BlockMachines;
87-
import gregtech.common.covers.CoverInfo;
8884
import gregtech.common.tileentities.machines.MTEHatchInputBusME;
8985
import gregtech.common.tileentities.machines.MTEHatchInputME;
9086

@@ -744,17 +740,6 @@ public static boolean isStockingHatch(IFluidHandler tank) {
744740
}
745741
}
746742

747-
@Optional(Names.GREG_TECH)
748-
public static @Nullable CoverInfo getActualCover(ICoverable gte, ForgeDirection side) {
749-
CoverInfo info = gte.getCoverInfoAtSide(side);
750-
751-
if (info == null || info == CoverInfo.EMPTY_INFO) return null;
752-
if (info.getDrop() == null) return null;
753-
if (!info.isValid()) return null;
754-
755-
return info;
756-
}
757-
758743
/**
759744
* Removes all items in an inventory without returning them.
760745
*/

0 commit comments

Comments
 (0)