Skip to content

Commit 3df32ff

Browse files
authored
Add KJS Shaped Recipe Schema with GT Tool Symbols (GregTechCEu#3041)
1 parent 9b64d12 commit 3df32ff

File tree

5 files changed

+352
-123
lines changed

5 files changed

+352
-123
lines changed

src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,14 @@
6363
import net.minecraftforge.common.TierSortingRegistry;
6464
import net.minecraftforge.event.ForgeEventFactory;
6565

66-
import com.google.common.collect.BiMap;
67-
import com.google.common.collect.HashBiMap;
66+
import it.unimi.dsi.fastutil.chars.Char2ReferenceMap;
67+
import it.unimi.dsi.fastutil.chars.Char2ReferenceOpenHashMap;
68+
import it.unimi.dsi.fastutil.chars.CharSet;
69+
import it.unimi.dsi.fastutil.chars.CharSets;
6870
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
6971
import org.jetbrains.annotations.NotNull;
7072
import org.jetbrains.annotations.Nullable;
73+
import org.jetbrains.annotations.UnmodifiableView;
7174

7275
import java.util.*;
7376
import java.util.function.Supplier;
@@ -127,33 +130,27 @@ public class ToolHelper {
127130
public static final String RELOCATE_MOB_DROPS_KEY = "RelocateMobDrops";
128131

129132
// Crafting Symbols
130-
private static final BiMap<Character, GTToolType> symbols = HashBiMap.create();
133+
private static final Char2ReferenceMap<GTToolType> symbols = new Char2ReferenceOpenHashMap<>();
131134

132135
private ToolHelper() {/**/}
133136

134-
/**
135-
* @return finds the registered crafting symbol with the tool
136-
*/
137-
public static Character getSymbolFromTool(GTToolType tool) {
138-
return symbols.inverse().get(tool);
139-
}
140-
141137
/**
142138
* @return finds the registered tool with the crafting symbol
143139
*/
144-
public static GTToolType getToolFromSymbol(Character symbol) {
140+
public static GTToolType getToolFromSymbol(char symbol) {
145141
return symbols.get(symbol);
146142
}
147143

148-
public static Set<Character> getToolSymbols() {
149-
return symbols.keySet();
144+
@UnmodifiableView
145+
public static CharSet getToolSymbols() {
146+
return CharSets.unmodifiable(symbols.keySet());
150147
}
151148

152149
/**
153150
* Registers the tool against a crafting symbol, this is used in
154151
* {@link com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper}
155152
*/
156-
public static void registerToolSymbol(Character symbol, GTToolType tool) {
153+
public static void registerToolSymbol(char symbol, GTToolType tool) {
157154
symbols.put(symbol, tool);
158155
}
159156

src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -253,23 +253,24 @@ public static void addShapedRecipe(Consumer<FinishedRecipe> provider, boolean se
253253
@NotNull Object... recipe) {
254254
var builder = new ShapedRecipeBuilder(regName).output(result);
255255
builder.isStrict(isStrict);
256-
CharSet set = new CharOpenHashSet();
256+
final CharSet tools = ToolHelper.getToolSymbols();
257+
CharSet foundTools = new CharArraySet(9);
257258
for (int i = 0; i < recipe.length; i++) {
258259
var o = recipe[i];
259260
if (o instanceof String pattern) {
260261
builder.pattern(pattern);
261-
for (Character c : ToolHelper.getToolSymbols()) {
262-
if (pattern.indexOf(c) >= 0) {
263-
set.add(c.charValue());
262+
for (char c : pattern.toCharArray()) {
263+
if (tools.contains(c)) {
264+
foundTools.add(c);
264265
}
265266
}
266267
}
267268
if (o instanceof String[] pattern) {
268269
for (String s : pattern) {
269270
builder.pattern(s);
270-
for (Character c : ToolHelper.getToolSymbols()) {
271-
if (s.indexOf(c) >= 0) {
272-
set.add(c.charValue());
271+
for (char c : s.toCharArray()) {
272+
if (tools.contains(c)) {
273+
foundTools.add(c);
273274
}
274275
}
275276
}
@@ -299,7 +300,8 @@ public static void addShapedRecipe(Consumer<FinishedRecipe> provider, boolean se
299300
}
300301
}
301302
}
302-
for (Character c : set) {
303+
for (var it = foundTools.iterator(); it.hasNext();) {
304+
char c = it.nextChar();
303305
builder.define(c, ToolHelper.getToolFromSymbol(c).itemTags.get(0));
304306
}
305307
builder.save(provider);
@@ -347,23 +349,24 @@ public static void addShapedEnergyTransferRecipe(Consumer<FinishedRecipe> provid
347349
@NotNull Object... recipe) {
348350
var builder = new ShapedEnergyTransferRecipeBuilder(regName).output(result);
349351
builder.chargeIngredient(chargeIngredient).overrideCharge(overrideCharge).transferMaxCharge(transferMaxCharge);
350-
CharSet set = new CharOpenHashSet();
352+
final CharSet tools = ToolHelper.getToolSymbols();
353+
CharSet foundTools = new CharArraySet(9);
351354
for (int i = 0; i < recipe.length; i++) {
352355
var o = recipe[i];
353356
if (o instanceof String pattern) {
354357
builder.pattern(pattern);
355-
for (Character c : ToolHelper.getToolSymbols()) {
356-
if (pattern.indexOf(c) >= 0) {
357-
set.add(c.charValue());
358+
for (char c : pattern.toCharArray()) {
359+
if (tools.contains(c)) {
360+
foundTools.add(c);
358361
}
359362
}
360363
}
361364
if (o instanceof String[] pattern) {
362365
for (String s : pattern) {
363366
builder.pattern(s);
364-
for (Character c : ToolHelper.getToolSymbols()) {
365-
if (s.indexOf(c) >= 0) {
366-
set.add(c.charValue());
367+
for (char c : s.toCharArray()) {
368+
if (tools.contains(c)) {
369+
foundTools.add(c);
367370
}
368371
}
369372
}
@@ -389,7 +392,8 @@ public static void addShapedEnergyTransferRecipe(Consumer<FinishedRecipe> provid
389392
}
390393
}
391394
}
392-
for (Character c : set) {
395+
for (var it = foundTools.iterator(); it.hasNext();) {
396+
char c = it.nextChar();
393397
builder.define(c, ToolHelper.getToolFromSymbol(c).itemTags.get(0));
394398
}
395399
builder.save(provider);
@@ -413,23 +417,24 @@ public static void addShapedFluidContainerRecipe(Consumer<FinishedRecipe> provid
413417
@NotNull Object... recipe) {
414418
var builder = new ShapedFluidContainerRecipeBuilder(regName).output(result);
415419
builder.isStrict(isStrict);
416-
CharSet set = new CharOpenHashSet();
420+
final CharSet tools = ToolHelper.getToolSymbols();
421+
CharSet foundTools = new CharArraySet(9);
417422
for (int i = 0; i < recipe.length; i++) {
418423
var o = recipe[i];
419424
if (o instanceof String pattern) {
420425
builder.pattern(pattern);
421-
for (Character c : ToolHelper.getToolSymbols()) {
422-
if (pattern.indexOf(c) >= 0) {
423-
set.add(c.charValue());
426+
for (char c : pattern.toCharArray()) {
427+
if (tools.contains(c)) {
428+
foundTools.add(c);
424429
}
425430
}
426431
}
427432
if (o instanceof String[] pattern) {
428433
for (String s : pattern) {
429434
builder.pattern(s);
430-
for (Character c : ToolHelper.getToolSymbols()) {
431-
if (s.indexOf(c) >= 0) {
432-
set.add(c.charValue());
435+
for (char c : s.toCharArray()) {
436+
if (tools.contains(c)) {
437+
foundTools.add(c);
433438
}
434439
}
435440
}
@@ -459,7 +464,8 @@ public static void addShapedFluidContainerRecipe(Consumer<FinishedRecipe> provid
459464
}
460465
}
461466
}
462-
for (Character c : set) {
467+
for (var it = foundTools.iterator(); it.hasNext();) {
468+
char c = it.nextChar();
463469
builder.define(c, ToolHelper.getToolFromSymbol(c).itemTags.get(0));
464470
}
465471

@@ -549,8 +555,7 @@ public static ItemMaterialInfo getRecyclingIngredients(int outputCount, @NotNull
549555
while (recipe[itr] instanceof String s) {
550556
for (char c : s.toCharArray()) {
551557
if (ToolHelper.getToolFromSymbol(c) != null) continue; // skip tools
552-
int count = inputCountMap.getOrDefault(c, 0);
553-
inputCountMap.put(c, count + 1);
558+
inputCountMap.addTo(c, 1);
554559
}
555560
itr++;
556561
}

0 commit comments

Comments
 (0)