aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/compatibility/emi/SkyblockEmiRecipe.java38
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java29
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/compatibility/modmenu/ModMenuEntry.java (renamed from src/main/java/me/xmrvizzy/skyblocker/config/modmenu/ModMenuEntry.java)3
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/compatibility/rei/SkyblockCategory.java (renamed from src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java)21
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/compatibility/rei/SkyblockCraftingDisplay.java (renamed from src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplay.java)5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java (renamed from src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java)10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/compatibility/rei/SkyblockerREIClientPlugin.java (renamed from src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java)10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java7
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java9
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/render/gui/ContainerSolverManager.java5
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json4
-rw-r--r--src/main/resources/fabric.mod.json7
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": [