Skip to content

Commit d8a7623

Browse files
Fix many minor issues
- Add battery item provider - Allow inserts into battery buffers - String formatting from names - Fix name for pattern item providers - Fix colouring for planning warnings/errors - Skip bacvat renderer - Transform strong redstone sides
2 parents b069122 + 919af9b commit d8a7623

File tree

9 files changed

+108
-12
lines changed

9 files changed

+108
-12
lines changed

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.recursive_pineapple.matter_manipulator.common.building;
22

3-
import static gregtech.api.util.GTUtility.sendChatToPlayer;
4-
53
import java.util.ArrayList;
64
import java.util.List;
75
import java.util.Map;
@@ -260,12 +258,12 @@ public void givePlayerFluids(List<BigFluidStack> fluids) {
260258

261259
@Override
262260
public void warn(String message) {
263-
sendChatToPlayer(player, String.format("§cWarning at block %d, %d, %d: %s§r", x, y, z, message));
261+
MMUtils.sendWarningToPlayer(player, String.format("Warning at block %d, %d, %d: %s", x, y, z, message));
264262
}
265263

266264
@Override
267265
public void error(String message) {
268-
sendChatToPlayer(player, String.format("§cError at block %d, %d, %d: %s§r", x, y, z, message));
266+
MMUtils.sendErrorToPlayer(player, String.format("Error at block %d, %d, %d: %s", x, y, z, message));
269267
}
270268
}
271269

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

+6-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,6 @@ public GTAnalysisResult(IGregTechTileEntity igte) {
174174
mGTGhostCircuit = 0;
175175
} else if (circuit.getItem() == ItemList.Circuit_Integrated.getItem()) {
176176
mGTGhostCircuit = (byte) Items.feather.getDamage(circuit);
177-
178177
}
179178
}
180179

@@ -580,14 +579,20 @@ public void transform(Transform transform) {
580579
}
581580

582581
byte transformedConns = 0;
582+
byte transformedStrongOutput = 0;
583583

584584
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
585585
if ((mConnections & dir.flag) != 0) {
586586
transformedConns |= transform.apply(dir).flag;
587587
}
588+
589+
if ((mStrongRedstone & dir.flag) != 0) {
590+
transformedStrongOutput |= transform.apply(dir).flag;
591+
}
588592
}
589593

590594
mConnections = transformedConns;
595+
mStrongRedstone = transformedStrongOutput;
591596
}
592597

593598
@Override

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

+9-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.minecraft.item.ItemStack;
44

5+
import org.jetbrains.annotations.Contract;
56
import org.jetbrains.annotations.Nullable;
67

78
/**
@@ -17,7 +18,13 @@ public interface IItemProvider {
1718
* @param consume When false, no items will be extracted and the item will be provided as normal.
1819
* @return The item, or null if the pseudo inventory didn't have the required items.
1920
*/
20-
public @Nullable ItemStack getStack(IPseudoInventory inv, boolean consume);
21+
@Contract("_,false->!null")
22+
@Nullable
23+
ItemStack getStack(IPseudoInventory inv, boolean consume);
2124

22-
public IItemProvider clone();
25+
default String describe() {
26+
return getStack(null, false).getDisplayName();
27+
}
28+
29+
IItemProvider clone();
2330
}

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

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.recursive_pineapple.matter_manipulator.common.utils.Mods;
99
import com.recursive_pineapple.matter_manipulator.common.utils.Mods.Names;
1010

11+
import bartworks.common.loaders.FluidLoader;
1112
import tectech.thing.casing.TTCasingsContainer;
1213

1314
/**
@@ -29,6 +30,7 @@ private static boolean shouldBeSkippedGT(Block block, int meta) {
2930
if (block == GregTechAPI.sBlackholeRender) return true;
3031
if (block == TTCasingsContainer.eyeOfHarmonyRenderBlock) return true;
3132
if (block == TTCasingsContainer.forgeOfGodsRenderBlock) return true;
33+
if (block == FluidLoader.bioFluidBlock) return true;
3234

3335
return false;
3436
}

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

+8-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.minecraft.item.ItemStack;
99

1010
import com.recursive_pineapple.matter_manipulator.common.building.BlockAnalyzer.IBlockApplyContext;
11+
import com.recursive_pineapple.matter_manipulator.common.building.providers.BatteryItemProvider;
1112
import com.recursive_pineapple.matter_manipulator.common.utils.InventoryAdapter;
1213
import com.recursive_pineapple.matter_manipulator.common.utils.MMUtils;
1314
import com.recursive_pineapple.matter_manipulator.common.utils.Mods;
@@ -61,6 +62,10 @@ private static IItemProvider getProviderFor(ItemStack stack, boolean fuzzy) {
6162
if (pattern != null) return pattern;
6263
}
6364

65+
IItemProvider battery = BatteryItemProvider.fromStack(stack);
66+
67+
if (battery != null) return battery;
68+
6469
return fuzzy ? new PortableItemStack(stack) : PortableItemStack.withNBT(stack);
6570
}
6671

@@ -100,7 +105,7 @@ public boolean apply(IBlockApplyContext context, IInventory inv, InventoryAdapte
100105
ItemStack stack = inv.getStackInSlot(slot);
101106
if (stack != null) {
102107
if (!adapter.canExtract(inv, slot)) {
103-
context.warn("Could not extract item in slot " + slot + ": " + stack.getDisplayName());
108+
context.warn("Could not extract item in slot " + slot + ": " + MMUtils.stripFormat(stack.getDisplayName()));
104109
continue;
105110
}
106111

@@ -114,14 +119,14 @@ public boolean apply(IBlockApplyContext context, IInventory inv, InventoryAdapte
114119

115120
if (target != null) {
116121
if (!adapter.canInsert(inv, slot, target.getStack(null, false))) {
117-
context.warn("Invalid item for slot " + slot + ": " + target.toString());
122+
context.warn("Invalid item for slot " + slot + ": " + MMUtils.stripFormat(target.describe()));
118123
continue;
119124
}
120125

121126
ItemStack toInsert = target.getStack(context, consume);
122127

123128
if (toInsert == null) {
124-
context.warn("Could not gather item for inventory: " + target.toString());
129+
context.warn("Could not gather item for inventory: " + MMUtils.stripFormat(target.describe()));
125130
success = false;
126131
} else {
127132
if (!simulate) {

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

+6-2
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@ public static PatternItemProvider fromPattern(ItemStack stack) {
4444

4545
@Override
4646
public @Nullable ItemStack getStack(IPseudoInventory inv, boolean consume) {
47-
ItemStack stack = PATTERN.maybeStack(1)
48-
.get();
47+
ItemStack stack = PATTERN.maybeStack(1).get();
4948

5049
stack.stackSize = amount == null ? 1 : amount;
5150
stack.setTagCompound(pattern != null ? (NBTTagCompound) pattern.copy() : null);
@@ -60,6 +59,11 @@ public static PatternItemProvider fromPattern(ItemStack stack) {
6059
return stack;
6160
}
6261

62+
@Override
63+
public String describe() {
64+
return BLANK_PATTERN.maybeStack(1).get().getDisplayName();
65+
}
66+
6367
@Override
6468
public PatternItemProvider clone() {
6569
PatternItemProvider dup = new PatternItemProvider();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.recursive_pineapple.matter_manipulator.common.building.providers;
2+
3+
import java.util.Arrays;
4+
5+
import net.minecraft.init.Items;
6+
import net.minecraft.item.ItemStack;
7+
8+
import net.minecraftforge.oredict.OreDictionary;
9+
10+
import com.recursive_pineapple.matter_manipulator.common.building.IItemProvider;
11+
import com.recursive_pineapple.matter_manipulator.common.building.IPseudoInventory;
12+
import com.recursive_pineapple.matter_manipulator.common.utils.BigItemStack;
13+
import com.recursive_pineapple.matter_manipulator.common.utils.ImmutableItemMeta;
14+
import com.recursive_pineapple.matter_manipulator.common.utils.ItemMeta;
15+
16+
import org.jetbrains.annotations.Nullable;
17+
18+
public class BatteryItemProvider implements IItemProvider {
19+
20+
public ImmutableItemMeta battery;
21+
22+
public BatteryItemProvider() {}
23+
24+
public static BatteryItemProvider fromStack(ItemStack stack) {
25+
if (stack == null) return null;
26+
27+
boolean isBattery = false;
28+
29+
for (int oreId : OreDictionary.getOreIDs(stack)) {
30+
if (OreDictionary.getOreName(oreId).startsWith("battery")) {
31+
isBattery = true;
32+
break;
33+
}
34+
}
35+
36+
if (!isBattery) return null;
37+
38+
BatteryItemProvider provider = new BatteryItemProvider();
39+
40+
provider.battery = new ItemMeta(stack.getItem(), Items.feather.getDamage(stack));
41+
42+
return provider;
43+
}
44+
45+
@Override
46+
public @Nullable ItemStack getStack(IPseudoInventory inv, boolean consume) {
47+
ItemStack stack = new ItemStack(battery.getItem(), 1, battery.getMeta());
48+
49+
if (!consume) return stack;
50+
51+
var result = inv.tryConsumeItems(Arrays.asList(new BigItemStack(stack)), IPseudoInventory.CONSUME_FUZZY);
52+
53+
if (!result.leftBoolean()) return null;
54+
55+
return result.right().get(0).getItemStack();
56+
}
57+
58+
@Override
59+
public IItemProvider clone() {
60+
BatteryItemProvider provider = new BatteryItemProvider();
61+
62+
provider.battery = new ItemMeta(battery.getItem(), battery.getMeta());
63+
64+
return provider;
65+
}
66+
}

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

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
1414
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
1515
import gregtech.api.interfaces.tileentity.IHasInventory;
16+
import gregtech.api.metatileentity.implementations.MTEBasicBatteryBuffer;
1617
import gregtech.api.metatileentity.implementations.MTEMultiBlockBase;
1718
import gregtech.common.tileentities.machines.MTEHatchOutputBusME;
1819
import gregtech.common.tileentities.machines.MTEHatchOutputME;
@@ -42,6 +43,7 @@ private boolean canHandleImpl(IInventory inv) {
4243
if (imte instanceof MTEHatchOutputME) return true;
4344
if (imte instanceof MTEHatchRack) return true;
4445
if (imte instanceof MTEMultiBlockBase) return true;
46+
if (imte instanceof MTEBasicBatteryBuffer) return true;
4547
}
4648

4749
return false;

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

+7
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.UUID;
3333
import java.util.function.Function;
3434
import java.util.function.IntFunction;
35+
import java.util.regex.Pattern;
3536
import java.util.stream.Collectors;
3637
import java.util.stream.IntStream;
3738
import java.util.stream.Stream;
@@ -164,6 +165,8 @@ public class MMUtils {
164165
public static final String ITALIC = EnumChatFormatting.ITALIC.toString();
165166
public static final String RESET = EnumChatFormatting.RESET.toString();
166167

168+
public static final Pattern FORMATTING_CODE_PATTERN = Pattern.compile("(?i)§[0-9A-FK-OR]");
169+
167170
private MMUtils() {}
168171

169172
public static int clamp(int val, int lo, int hi) {
@@ -415,6 +418,10 @@ public static void sendChatToPlayer(EntityPlayer aPlayer, String aChatMessage) {
415418
}
416419
}
417420

421+
public static String stripFormat(String text) {
422+
return FORMATTING_CODE_PATTERN.matcher(text).replaceAll("");
423+
}
424+
418425
private static DecimalFormat getDecimalFormat() {
419426
return decimalFormatters.computeIfAbsent(Locale.getDefault(Locale.Category.FORMAT), locale -> {
420427
DecimalFormat numberFormat = new DecimalFormat(); // uses the necessary locale inside anyway

0 commit comments

Comments
 (0)