diff options
Diffstat (limited to 'src')
13 files changed, 114 insertions, 44 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/compatibility/emi/SkyblockEmiRecipe.java b/src/main/java/me/xmrvizzy/skyblocker/compatibility/emi/SkyblockEmiRecipe.java new file mode 100644 index 00000000..6cf91dac --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/compatibility/emi/SkyblockEmiRecipe.java @@ -0,0 +1,38 @@ +package me.xmrvizzy.skyblocker.compatibility.emi; + +import dev.emi.emi.api.recipe.EmiCraftingRecipe; +import dev.emi.emi.api.recipe.EmiRecipeCategory; +import dev.emi.emi.api.stack.Comparison; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; +import me.xmrvizzy.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe; +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()).comparison(Comparison.compareNbt()), Identifier.of("skyblock", ItemRegistry.getInternalName(recipe.getResult()).toLowerCase().replace(';', '_'))); + this.craftText = recipe.getCraftText(); + } + + @Override + public EmiRecipeCategory getCategory() { + return SkyblockerEMIPlugin.SKYBLOCK; + } + + @Override + public int getDisplayHeight() { + return super.getDisplayHeight() + (craftText.isEmpty() ? 0 : 10); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + super.addWidgets(widgets); + widgets.addText(Text.of(craftText), 59 - MinecraftClient.getInstance().textRenderer.getWidth(craftText) / 2, 55, 0xFFFFFF, true); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java b/src/main/java/me/xmrvizzy/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java new file mode 100644 index 00000000..526ac885 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java @@ -0,0 +1,29 @@ +package me.xmrvizzy.skyblocker.compatibility.emi; + +import dev.emi.emi.api.EmiPlugin; +import dev.emi.emi.api.EmiRegistry; +import dev.emi.emi.api.recipe.EmiRecipeCategory; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiStack; +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; +import me.xmrvizzy.skyblocker.utils.ItemUtils; +import net.minecraft.item.Items; +import net.minecraft.util.Identifier; + +/** + * EMI integration + */ +public class SkyblockerEMIPlugin implements EmiPlugin { + public static final Identifier SIMPLIFIED_TEXTURES = new Identifier("emi", "textures/gui/widgets.png"); + // TODO: Custom simplified texture for Skyblock + public static final EmiRecipeCategory SKYBLOCK = new EmiRecipeCategory(new Identifier(SkyblockerMod.NAMESPACE, "skyblock"), EmiStack.of(ItemUtils.getSkyblockerStack()), new EmiTexture(SIMPLIFIED_TEXTURES, 240, 240, 16, 16)); + + @Override + public void register(EmiRegistry registry) { + ItemRegistry.getRecipeResultsStream().map(EmiStack::of).forEach(registry::addEmiStack); + registry.addCategory(SKYBLOCK); + registry.addWorkstation(SKYBLOCK, EmiStack.of(Items.CRAFTING_TABLE)); + ItemRegistry.getRecipesStream().map(SkyblockEmiRecipe::new).forEach(registry::addRecipe); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/modmenu/ModMenuEntry.java b/src/main/java/me/xmrvizzy/skyblocker/compatibility/modmenu/ModMenuEntry.java index f9d4e8fe..0cba3d5e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/modmenu/ModMenuEntry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/compatibility/modmenu/ModMenuEntry.java @@ -1,4 +1,4 @@ -package me.xmrvizzy.skyblocker.config.modmenu; +package me.xmrvizzy.skyblocker.compatibility.modmenu; import me.shedaniel.autoconfig.AutoConfig; import com.terraformersmc.modmenu.api.ConfigScreenFactory; @@ -9,7 +9,6 @@ import net.fabricmc.api.Environment; @Environment(EnvType.CLIENT) public class ModMenuEntry implements ModMenuApi { - @Override public ConfigScreenFactory<?> getModConfigScreenFactory() { return screen -> AutoConfig.getConfigScreen(SkyblockerConfig.class, screen).get(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java b/src/main/java/me/xmrvizzy/skyblocker/compatibility/rei/SkyblockCategory.java index 3b402dc9..14c61d23 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/compatibility/rei/SkyblockCategory.java @@ -1,7 +1,6 @@ -package me.xmrvizzy.skyblocker.skyblock.rei; +package me.xmrvizzy.skyblocker.compatibility.rei; import com.google.common.collect.Lists; -import com.mojang.brigadier.exceptions.CommandSyntaxException; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.Renderer; @@ -13,14 +12,11 @@ import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.util.EntryStacks; -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.StringNbtReader; +import me.xmrvizzy.skyblocker.utils.ItemUtils; import net.minecraft.text.Text; import java.util.ArrayList; import java.util.List; -import java.util.Locale; /** * Skyblock recipe category class for REI @@ -33,21 +29,12 @@ public class SkyblockCategory implements DisplayCategory<SkyblockCraftingDisplay @Override public Text getTitle() { - return Text.translatable("key.categories.skyblocker"); + return Text.translatable("emi.category.skyblocker.skyblock"); } @Override public Renderer getIcon() { - // TODO separate icon from quickNav - SkyblockerConfig.ItemData iconItem = SkyblockerConfig.get().quickNav.button7.item; - String nbtString = "{id:\"minecraft:" + iconItem.itemName.toLowerCase(Locale.ROOT) + "\",Count:1"; - if (iconItem.nbt.length() > 2) nbtString += "," + iconItem.nbt; - nbtString += "}"; - try { - return EntryStacks.of(ItemStack.fromNbt(StringNbtReader.parse(nbtString))); - } catch (CommandSyntaxException e) { - throw new RuntimeException(e); - } + return EntryStacks.of(ItemUtils.getSkyblockerStack()); } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplay.java b/src/main/java/me/xmrvizzy/skyblocker/compatibility/rei/SkyblockCraftingDisplay.java index 5820780c..35b5c886 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/compatibility/rei/SkyblockCraftingDisplay.java @@ -1,4 +1,4 @@ -package me.xmrvizzy.skyblocker.skyblock.rei; +package me.xmrvizzy.skyblocker.compatibility.rei; import me.shedaniel.rei.api.common.category.CategoryIdentifier; @@ -12,12 +12,13 @@ import java.util.List; * Skyblock Crafting Recipe display class for REI */ public class SkyblockCraftingDisplay extends BasicDisplay implements SimpleGridMenuDisplay { - private final String craftText; + public SkyblockCraftingDisplay(List<EntryIngredient> input, List<EntryIngredient> output, String craftText) { super(input, output); this.craftText = craftText; } + public String getCraftText() { return craftText; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java b/src/main/java/me/xmrvizzy/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java index fd3f56ee..370e15dc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java @@ -1,4 +1,4 @@ -package me.xmrvizzy.skyblocker.skyblock.rei; +package me.xmrvizzy.skyblocker.compatibility.rei; import me.shedaniel.rei.api.client.registry.display.DynamicDisplayGenerator; import me.shedaniel.rei.api.common.entry.EntryIngredient; @@ -18,8 +18,7 @@ public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator public Optional<List<SkyblockCraftingDisplay>> getRecipeFor(EntryStack<?> entry) { if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); EntryStack<ItemStack> inputItem = EntryStacks.of((ItemStack) entry.getValue()); - List<SkyblockCraftingRecipe> filteredRecipes = ItemRegistry.getRecipes() - .stream() + List<SkyblockCraftingRecipe> filteredRecipes = ItemRegistry.getRecipesStream() .filter(recipe -> ItemRegistry.getInternalName(recipe.getResult()).equals(ItemRegistry.getInternalName(inputItem.getValue()))) .toList(); @@ -30,11 +29,10 @@ public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator public Optional<List<SkyblockCraftingDisplay>> getUsageFor(EntryStack<?> entry) { if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); EntryStack<ItemStack> inputItem = EntryStacks.of((ItemStack) entry.getValue()); - List<SkyblockCraftingRecipe> filteredRecipes = ItemRegistry.getRecipes() - .stream() + List<SkyblockCraftingRecipe> filteredRecipes = ItemRegistry.getRecipesStream() .filter(recipe -> { for (ItemStack item : recipe.getGrid()) { - if(!ItemRegistry.getInternalName(item).equals("") && ItemRegistry.getInternalName(item).equals(ItemRegistry.getInternalName(inputItem.getValue()))) + if(!ItemRegistry.getInternalName(item).isEmpty() && ItemRegistry.getInternalName(item).equals(ItemRegistry.getInternalName(inputItem.getValue()))) return true; } return false; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java b/src/main/java/me/xmrvizzy/skyblocker/compatibility/rei/SkyblockerREIClientPlugin.java index 5f43ca0e..5c97a274 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/compatibility/rei/SkyblockerREIClientPlugin.java @@ -1,19 +1,15 @@ -package me.xmrvizzy.skyblocker.skyblock.rei; +package me.xmrvizzy.skyblocker.compatibility.rei; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; import me.shedaniel.rei.api.common.category.CategoryIdentifier; -import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.EntryStacks; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; -import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import java.util.ArrayList; - /** * REI integration */ @@ -33,8 +29,6 @@ public class SkyblockerREIClientPlugin implements REIClientPlugin { @Override public void registerEntries(EntryRegistry entryRegistry) { - ArrayList<EntryStack<ItemStack>> entries = new ArrayList<>(); - ItemRegistry.getRecipes().forEach(recipe -> entries.add(EntryStacks.of(recipe.getResult()))); - entryRegistry.addEntries(entries); + entryRegistry.addEntries(ItemRegistry.getRecipeResultsStream().map(EntryStacks::of).toList()); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java index ad35dae6..e6e0ebb7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java @@ -6,12 +6,15 @@ import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(HandledScreen.class) public interface HandledScreenAccessor { - @Accessor + @Accessor("x") int getX(); - @Accessor + + @Accessor("y") int getY(); + @Accessor int getBackgroundWidth(); + @Accessor int getBackgroundHeight(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index dc63e351..a4b566e8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Stream; public class ItemRegistry { protected static final Path ITEM_LIST_DIR = NEURepo.LOCAL_REPO_DIR.resolve("items"); @@ -105,8 +106,12 @@ public class ItemRegistry { return result; } - public static List<SkyblockCraftingRecipe> getRecipes() { - return recipes; + public static Stream<SkyblockCraftingRecipe> getRecipesStream() { + return recipes.stream(); + } + + public static Stream<ItemStack> getRecipeResultsStream() { + return recipes.stream().map(SkyblockCraftingRecipe::getResult); } /** diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java index 4f74ce3a..5c12b777 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java @@ -1,8 +1,10 @@ package me.xmrvizzy.skyblocker.utils; +import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.minecraft.client.MinecraftClient; import net.minecraft.client.item.TooltipContext; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.StringNbtReader; import net.minecraft.text.Text; import java.util.ArrayList; @@ -30,4 +32,12 @@ public class ItemUtils { return list; } + + public static ItemStack getSkyblockerStack() { + try { + return ItemStack.fromNbt(StringNbtReader.parse("{id:\"minecraft:player_head\",Count:1,tag:{SkullOwner:{Id:[I;-300151517,-631415889,-1193921967,-1821784279],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}}}}")); + } catch (CommandSyntaxException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/render/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/utils/render/gui/ContainerSolverManager.java index be1d01b4..f78222d0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/render/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/render/gui/ContainerSolverManager.java @@ -54,7 +54,7 @@ public class ContainerSolverManager { ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { if (Utils.isOnSkyblock() && screen instanceof GenericContainerScreen genericContainerScreen) { ScreenEvents.afterRender(screen).register((screen1, context, mouseX, mouseY, delta) -> { - MatrixStack matrices = context.getMatrices(); + MatrixStack matrices = context.getMatrices(); matrices.push(); matrices.translate(((HandledScreenAccessor) genericContainerScreen).getX(), ((HandledScreenAccessor) genericContainerScreen).getY(), 300); onDraw(context, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9)); @@ -117,8 +117,9 @@ public class ContainerSolverManager { private Map<Integer, ItemStack> slotMap(List<Slot> slots) { Map<Integer, ItemStack> slotMap = new TreeMap<>(); - for (int i = 0; i < slots.size(); i++) + for (int i = 0; i < slots.size(); i++) { slotMap.put(i, slots.get(i).getStack()); + } return slotMap; } } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 33f6ff9c..b2c7fe9e 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -349,5 +349,7 @@ "skyblocker.quiverWarning.50Left": "You only have 50 Arrows left in your Quiver!", "skyblocker.quiverWarning.10Left": "You only have 10 Arrows left in your Quiver!", - "skyblocker.quiverWarning.empty": "You don't have any more Arrows left in your Quiver!" + "skyblocker.quiverWarning.empty": "You don't have any more Arrows left in your Quiver!", + + "emi.category.skyblocker.skyblock": "Skyblock" } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 596fe8cf..cf7e639c 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -22,10 +22,13 @@ "dev.cbyrne.betterinject.BetterInject::initialize" ], "modmenu": [ - "me.xmrvizzy.skyblocker.config.modmenu.ModMenuEntry" + "me.xmrvizzy.skyblocker.compatibility.modmenu.ModMenuEntry" ], "rei_client": [ - "me.xmrvizzy.skyblocker.skyblock.rei.SkyblockerREIClientPlugin" + "me.xmrvizzy.skyblocker.compatibility.rei.SkyblockerREIClientPlugin" + ], + "emi": [ + "me.xmrvizzy.skyblocker.compatibility.emi.SkyblockerEMIPlugin" ] }, "mixins": [ |