diff --git a/build.gradle b/build.gradle index 477e755..08a77ef 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ archivesBaseName = project.archives_base_name version = project.mod_version repositories { - jcenter() + maven { url "https://maven.shedaniel.me/"} maven { url "https://www.cursemaven.com" } } diff --git a/gradle.properties b/gradle.properties index 235274e..8b87eae 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,13 +3,13 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html minecraft_version=1.16.5 -yarn_mappings=1.16.5+build.3 -loader_version=0.11.1 +yarn_mappings=1.16.5+build.5 +loader_version=0.11.3 # Mod Properties mod_version=0.1.0 archives_base_name=skyblock-rei # Dependencies # check this on https://modmuss50.me/fabric.html -fabric_version=0.25.1+build.416-1.16 +fabric_version=0.32.0+1.16 -rei_version=5.8.10 +rei_version=5.10.184 diff --git a/src/main/java/com/cocona/skyblockrei/SkyblockREI.java b/src/main/java/com/cocona/skyblockrei/SkyblockREI.java index 3dcad8a..1cf6ecf 100644 --- a/src/main/java/com/cocona/skyblockrei/SkyblockREI.java +++ b/src/main/java/com/cocona/skyblockrei/SkyblockREI.java @@ -17,6 +17,8 @@ public class SkyblockREI implements ClientModInitializer { public static final Logger LOG = LogManager.getLogger("skyblock-rei"); + public static PackagedData packagedDataRef; + public static final Identifier SKYBLOCK_CRAFTING_ID = new Identifier("skyblock-rei", "recipes/skyblock_crafting"); @@ -27,6 +29,10 @@ public void onInitializeClient() { } + public static void updatePackagedDataRef(PackagedData update){ + packagedDataRef = update; + } + public static boolean isAllEntryStacksNull(List list) { int potential = list.size(); for(EntryStack e : list){ diff --git a/src/main/java/com/cocona/skyblockrei/SkyblockREIPlugin.java b/src/main/java/com/cocona/skyblockrei/SkyblockREIPlugin.java index 5adfc57..6f082e7 100644 --- a/src/main/java/com/cocona/skyblockrei/SkyblockREIPlugin.java +++ b/src/main/java/com/cocona/skyblockrei/SkyblockREIPlugin.java @@ -1,6 +1,7 @@ package com.cocona.skyblockrei; import com.cocona.skyblockrei.data.PackagedData; +import com.cocona.skyblockrei.data.search.SkyblockFocusedStackProvider; import com.cocona.skyblockrei.recipe.skyblockCrafting.SkyblockCustomCategory; import com.cocona.skyblockrei.recipe.skyblockCrafting.SkyblockCustomDisplay; import com.google.common.base.Predicates; @@ -38,6 +39,7 @@ public void registerEntries(EntryRegistry entryRegistry) { stacks.sort(Comparator.comparing(stack -> Registry.ITEM.getId(stack.getItemStack().getItem())) .thenComparing(stack -> stack.asFormatStrippedText().asString())); entryRegistry.registerEntries(stacks.toArray(new EntryStack[0])); + SkyblockREI.updatePackagedDataRef(packagedData); } @Override @@ -69,4 +71,9 @@ public void registerPluginCategories(RecipeHelper recipeHelper) { SkyblockCustomCategory category = new SkyblockCustomCategory(); recipeHelper.registerCategory(category); } + + @Override + public void registerOthers(RecipeHelper recipeHelper) { + recipeHelper.registerFocusedStackProvider(new SkyblockFocusedStackProvider()); + } } diff --git a/src/main/java/com/cocona/skyblockrei/data/PackagedData.java b/src/main/java/com/cocona/skyblockrei/data/PackagedData.java index ab75a52..d91a8a5 100644 --- a/src/main/java/com/cocona/skyblockrei/data/PackagedData.java +++ b/src/main/java/com/cocona/skyblockrei/data/PackagedData.java @@ -21,7 +21,7 @@ public PackagedData(List i, List defaultResult = new Pair<>("", EntryStack.empty()); int amount = 1; //amount parsing diff --git a/src/main/java/com/cocona/skyblockrei/data/search/SkyblockFocusedStackProvider.java b/src/main/java/com/cocona/skyblockrei/data/search/SkyblockFocusedStackProvider.java new file mode 100644 index 0000000..b9a2105 --- /dev/null +++ b/src/main/java/com/cocona/skyblockrei/data/search/SkyblockFocusedStackProvider.java @@ -0,0 +1,53 @@ +package com.cocona.skyblockrei.data.search; + +import com.cocona.skyblockrei.SkyblockREI; +import com.cocona.skyblockrei.SkyblockREIPlugin; +import com.cocona.skyblockrei.mixin.HandledScreenAccess; +import com.mojang.brigadier.StringReader; +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.FocusedStackProvider; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.StringNbtReader; +import net.minecraft.util.TypedActionResult; +import org.jetbrains.annotations.NotNull; + +import java.util.function.Supplier; + +public class SkyblockFocusedStackProvider implements FocusedStackProvider { + @Override + public @NotNull TypedActionResult provide(Screen screen) { + if (screen instanceof HandledScreen) { + HandledScreen containerScreen = (HandledScreen) screen; + + if (((HandledScreenAccess)containerScreen).getFocusedSlot() != null && !((HandledScreenAccess)containerScreen).getFocusedSlot().getStack().isEmpty()){ + ItemStack focusedItem = ((HandledScreenAccess)containerScreen).getFocusedSlot().getStack(); + try { + CompoundTag tag = focusedItem.getTag(); + CompoundTag subtag = tag.getCompound("ExtraAttributes"); + String attID = subtag.getString("id"); + EntryStack result = SkyblockREI.packagedDataRef.getEntryFromMap(attID); + if(!result.equals(EntryStack.empty())){ + return TypedActionResult.success(result.setting(EntryStack.Settings.CHECK_TAGS, () -> true)); + } else { + return TypedActionResult.success(EntryStack.create(((HandledScreenAccess) containerScreen).getFocusedSlot().getStack())); + } + + } catch(Exception e){ + SkyblockREI.LOG.error("Error caught while parsing item nbt for skyblock-specific data. Returning to default behavior!"); + SkyblockREI.LOG.catching(e); + return TypedActionResult.success(EntryStack.create(((HandledScreenAccess) containerScreen).getFocusedSlot().getStack())); + } + } + } + return TypedActionResult.pass(EntryStack.empty()); + } + + @Override + public double getPriority() { + return 1000; + } +} diff --git a/src/main/java/com/cocona/skyblockrei/mixin/HandledScreenAccess.java b/src/main/java/com/cocona/skyblockrei/mixin/HandledScreenAccess.java new file mode 100644 index 0000000..5554fe3 --- /dev/null +++ b/src/main/java/com/cocona/skyblockrei/mixin/HandledScreenAccess.java @@ -0,0 +1,14 @@ +package com.cocona.skyblockrei.mixin; + +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.screen.slot.Slot; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(HandledScreen.class) +public interface HandledScreenAccess { + @Accessor("focusedSlot") + public Slot getFocusedSlot(); + + +} diff --git a/src/main/resources/skyblock-rei.mixins.json b/src/main/resources/skyblock-rei.mixins.json index cd50776..89a1831 100644 --- a/src/main/resources/skyblock-rei.mixins.json +++ b/src/main/resources/skyblock-rei.mixins.json @@ -8,5 +8,8 @@ ], "injectors": { "defaultRequire": 1 - } + }, + "mixins": [ + "HandledScreenAccess" + ] }