aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2024-08-13 22:22:09 +0800
committerKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2024-08-13 22:22:09 +0800
commitddecc0c76ad1fec89eb3e2968c204d46d35efcf7 (patch)
tree4d428e1b075417b6f00627901beb35e08fa3caf2 /src
parentac08fb6514defbac92876dc70e1ba98f7504ae24 (diff)
downloadSkyblocker-ddecc0c76ad1fec89eb3e2968c204d46d35efcf7.tar.gz
Skyblocker-ddecc0c76ad1fec89eb3e2968c204d46d35efcf7.tar.bz2
Skyblocker-ddecc0c76ad1fec89eb3e2968c204d46d35efcf7.zip
Basic JEI impl
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/compatibility/jei/SkyblockCraftingRecipeCategory.java33
-rw-r--r--src/main/java/de/hysky/skyblocker/compatibility/jei/SkyblockerJEIPlugin.java64
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/datafixer/ItemStackComponentizationFixer.java20
-rw-r--r--src/main/resources/fabric.mod.json3
6 files changed, 118 insertions, 12 deletions
diff --git a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java
index 218eb8d1..7f102fc1 100644
--- a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java
+++ b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java
@@ -1,7 +1,6 @@
package de.hysky.skyblocker.compatibility.emi;
import de.hysky.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe;
-import de.hysky.skyblocker.utils.ItemUtils;
import dev.emi.emi.api.recipe.EmiCraftingRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.stack.EmiIngredient;
@@ -9,13 +8,12 @@ import dev.emi.emi.api.stack.EmiStack;
import dev.emi.emi.api.widget.WidgetHolder;
import net.minecraft.client.MinecraftClient;
import net.minecraft.text.Text;
-import net.minecraft.util.Identifier;
public class SkyblockEmiRecipe extends EmiCraftingRecipe {
private final String craftText;
public SkyblockEmiRecipe(SkyblockCraftingRecipe recipe) {
- super(recipe.getGrid().stream().map(EmiStack::of).map(EmiIngredient.class::cast).toList(), EmiStack.of(recipe.getResult()), Identifier.of("skyblock", ItemUtils.getItemId(recipe.getResult()).toLowerCase().replace(';', '_') + "_" + recipe.getResult().getCount()));
+ super(recipe.getGrid().stream().map(EmiStack::of).map(EmiIngredient.class::cast).toList(), EmiStack.of(recipe.getResult()), recipe.getId());
this.craftText = recipe.getCraftText();
}
diff --git a/src/main/java/de/hysky/skyblocker/compatibility/jei/SkyblockCraftingRecipeCategory.java b/src/main/java/de/hysky/skyblocker/compatibility/jei/SkyblockCraftingRecipeCategory.java
new file mode 100644
index 00000000..05bb7c5e
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/compatibility/jei/SkyblockCraftingRecipeCategory.java
@@ -0,0 +1,33 @@
+package de.hysky.skyblocker.compatibility.jei;
+
+import de.hysky.skyblocker.SkyblockerMod;
+import mezz.jei.api.helpers.IGuiHelper;
+import mezz.jei.api.recipe.RecipeType;
+import mezz.jei.library.plugins.vanilla.crafting.CraftingRecipeCategory;
+import net.minecraft.recipe.CraftingRecipe;
+import net.minecraft.recipe.RecipeEntry;
+import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
+import org.jetbrains.annotations.NotNull;
+
+public class SkyblockCraftingRecipeCategory extends CraftingRecipeCategory {
+ @SuppressWarnings({"unchecked", "RedundantCast", "rawtypes"})
+ private static final RecipeType<RecipeEntry<CraftingRecipe>> SKYBLOCK_RECIPE = new RecipeType<>(Identifier.of(SkyblockerMod.NAMESPACE, "skyblock"), (Class<? extends RecipeEntry<CraftingRecipe>>) (Class) RecipeEntry.class);
+ private final Text title = Text.translatable("emi.category.skyblocker.skyblock");
+
+ public SkyblockCraftingRecipeCategory(IGuiHelper guiHelper) {
+ super(guiHelper);
+ }
+
+ @Override
+ @NotNull
+ public RecipeType<RecipeEntry<CraftingRecipe>> getRecipeType() {
+ return SKYBLOCK_RECIPE;
+ }
+
+ @NotNull
+ @Override
+ public Text getTitle() {
+ return title;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/de/hysky/skyblocker/compatibility/jei/SkyblockerJEIPlugin.java b/src/main/java/de/hysky/skyblocker/compatibility/jei/SkyblockerJEIPlugin.java
new file mode 100644
index 00000000..0c709232
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/compatibility/jei/SkyblockerJEIPlugin.java
@@ -0,0 +1,64 @@
+package de.hysky.skyblocker.compatibility.jei;
+
+import de.hysky.skyblocker.SkyblockerMod;
+import de.hysky.skyblocker.skyblock.itemlist.ItemRepository;
+import de.hysky.skyblocker.utils.datafixer.ItemStackComponentizationFixer;
+import mezz.jei.api.IModPlugin;
+import mezz.jei.api.JeiPlugin;
+import mezz.jei.api.constants.RecipeTypes;
+import mezz.jei.api.constants.VanillaTypes;
+import mezz.jei.api.registration.IRecipeCategoryRegistration;
+import mezz.jei.api.registration.IRecipeRegistration;
+import mezz.jei.api.registration.ISubtypeRegistration;
+import mezz.jei.library.ingredients.subtypes.SubtypeInterpreters;
+import mezz.jei.library.load.registration.SubtypeRegistration;
+import net.minecraft.item.ItemStack;
+import net.minecraft.recipe.*;
+import net.minecraft.recipe.book.CraftingRecipeCategory;
+import net.minecraft.util.Identifier;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Map;
+
+@JeiPlugin
+public class SkyblockerJEIPlugin implements IModPlugin {
+ private SkyblockCraftingRecipeCategory skyblockCraftingRecipeCategory;
+
+ @Override
+ @NotNull
+ public Identifier getPluginUid() {
+ return Identifier.of(SkyblockerMod.NAMESPACE, "skyblock");
+ }
+
+ @Override
+ public void registerItemSubtypes(@NotNull ISubtypeRegistration registration) {
+ SubtypeInterpreters interpreters = ((SubtypeRegistration) registration).getInterpreters();
+ ItemRepository.getItemsStream().filter(stack -> !interpreters.contains(VanillaTypes.ITEM_STACK, stack)).map(ItemStack::getItem).distinct().forEach(item ->
+ registration.registerSubtypeInterpreter(item, (stack, context) -> ItemStackComponentizationFixer.componentsAsString(stack))
+ );
+ }
+
+ @Override
+ public void registerCategories(@NotNull IRecipeCategoryRegistration registration) {
+// registration.addRecipeCategories(skyblockCraftingRecipeCategory = new SkyblockCraftingRecipeCategory(registration.getJeiHelpers().getGuiHelper()));
+ }
+
+ @Override
+ public void registerRecipes(@NotNull IRecipeRegistration registration) {
+ registration.getIngredientManager().addIngredientsAtRuntime(VanillaTypes.ITEM_STACK, ItemRepository.getItems());
+// registration.addRecipes(skyblockCraftingRecipeCategory.getRecipeType(), ItemRepository.getRecipesStream().map(recipe ->
+ registration.addRecipes(RecipeTypes.CRAFTING, ItemRepository.getRecipesStream().map(recipe ->
+ new RecipeEntry<CraftingRecipe>(recipe.getId(), new ShapedRecipe("", CraftingRecipeCategory.MISC, RawShapedRecipe.create(Map.of(
+ 'a', Ingredient.ofStacks(recipe.getGrid().get(0)),
+ 'b', Ingredient.ofStacks(recipe.getGrid().get(1)),
+ 'c', Ingredient.ofStacks(recipe.getGrid().get(2)),
+ 'd', Ingredient.ofStacks(recipe.getGrid().get(3)),
+ 'e', Ingredient.ofStacks(recipe.getGrid().get(4)),
+ 'f', Ingredient.ofStacks(recipe.getGrid().get(5)),
+ 'g', Ingredient.ofStacks(recipe.getGrid().get(6)),
+ 'h', Ingredient.ofStacks(recipe.getGrid().get(7)),
+ 'i', Ingredient.ofStacks(recipe.getGrid().get(8))
+ ), "abc", "def", "ghi"), recipe.getResult()))
+ ).toList());
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java
index f5b379dc..bc6d7977 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java
@@ -1,9 +1,11 @@
package de.hysky.skyblocker.skyblock.itemlist;
+import de.hysky.skyblocker.utils.ItemUtils;
import io.github.moulberry.repo.data.NEUCraftingRecipe;
import io.github.moulberry.repo.data.NEUIngredient;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
+import net.minecraft.util.Identifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,4 +54,8 @@ public class SkyblockCraftingRecipe {
public String getCraftText() {
return craftText;
}
+
+ public Identifier getId() {
+ return Identifier.of("skyblock", ItemUtils.getItemId(getResult()).toLowerCase().replace(';', '_') + "_" + getResult().getCount());
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/datafixer/ItemStackComponentizationFixer.java b/src/main/java/de/hysky/skyblocker/utils/datafixer/ItemStackComponentizationFixer.java
index a9b227a1..9c74cc99 100644
--- a/src/main/java/de/hysky/skyblocker/utils/datafixer/ItemStackComponentizationFixer.java
+++ b/src/main/java/de/hysky/skyblocker/utils/datafixer/ItemStackComponentizationFixer.java
@@ -10,6 +10,7 @@ import com.mojang.serialization.Dynamic;
import net.minecraft.client.MinecraftClient;
import net.minecraft.command.argument.ItemStringReader;
import net.minecraft.command.argument.ItemStringReader.ItemResult;
+import net.minecraft.component.Component;
import net.minecraft.component.ComponentType;
import net.minecraft.datafixer.Schemas;
import net.minecraft.datafixer.TypeReferences;
@@ -48,15 +49,16 @@ public class ItemStackComponentizationFixer {
RegistryOps<NbtElement> nbtRegistryOps = getRegistryLookup().getOps(NbtOps.INSTANCE);
return Arrays.toString(stack.getComponentChanges().entrySet().stream().map(entry -> {
- @SuppressWarnings("unchecked")
- ComponentType<Object> dataComponentType = (ComponentType<Object>) entry.getKey();
- Identifier componentId = Registries.DATA_COMPONENT_TYPE.getId(dataComponentType);
- Optional<NbtElement> encodedComponent = dataComponentType.getCodec().encodeStart(nbtRegistryOps, entry.getValue().orElseThrow()).result();
+ ComponentType<?> componentType = entry.getKey();
+ Identifier componentId = Registries.DATA_COMPONENT_TYPE.getId(componentType);
+ if (componentId == null) return null;
- if (componentId == null || encodedComponent.isEmpty()) {
- return null;
- }
+ Optional<?> component = entry.getValue();
+ if (component.isEmpty()) return "!" + componentId;
+ Optional<NbtElement> encodedComponent = Component.of(componentType, component.get()).encode(nbtRegistryOps).result();
+
+ if (encodedComponent.isEmpty()) return null;
return componentId + "=" + encodedComponent.orElseThrow();
}).filter(Objects::nonNull).toArray());
}
@@ -87,6 +89,6 @@ public class ItemStackComponentizationFixer {
*/
public static WrapperLookup getRegistryLookup() {
MinecraftClient client = MinecraftClient.getInstance();
- return client != null && client.getNetworkHandler() != null && client.getNetworkHandler().getRegistryManager() != null ? client.getNetworkHandler().getRegistryManager() : LOOKUP;
- }
+ return client != null && client.getNetworkHandler() != null && client.getNetworkHandler().getRegistryManager() != null ? client.getNetworkHandler().getRegistryManager() : LOOKUP;
+ }
}
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index f7a2273c..58ff95d0 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -26,6 +26,9 @@
],
"emi": [
"de.hysky.skyblocker.compatibility.emi.SkyblockerEMIPlugin"
+ ],
+ "jei_mod_plugin": [
+ "de.hysky.skyblocker.compatibility.jei.SkyblockerJEIPlugin"
]
},
"mixins": [