From 00340f5d7df495f7351159e9da86e74b1b5fd2a9 Mon Sep 17 00:00:00 2001 From: Kevin <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 17 Oct 2023 19:53:55 -0400 Subject: Refactor NEU Repo (#364) Add RepoParser Fix Golden Dragon stats leveling Add wiki option Fix recipe output count --- .../de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java | 2 +- .../de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java | 6 +++--- .../compatibility/rei/SkyblockCraftingDisplayGenerator.java | 6 +++--- .../skyblocker/compatibility/rei/SkyblockerREIClientPlugin.java | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/compatibility') 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 191da283..b52d6ff5 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java @@ -16,7 +16,7 @@ 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", ItemUtils.getItemId(recipe.getResult()).toLowerCase().replace(';', '_'))); + super(recipe.getGrid().stream().map(EmiStack::of).map(EmiIngredient.class::cast).toList(), EmiStack.of(recipe.getResult()).comparison(Comparison.compareNbt()), Identifier.of("skyblock", ItemUtils.getItemId(recipe.getResult()).toLowerCase().replace(';', '_') + "_" + recipe.getResult().getCount())); this.craftText = recipe.getCraftText(); } diff --git a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java index c6147016..6ed6a32a 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.compatibility.emi; import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry; +import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import de.hysky.skyblocker.utils.ItemUtils; import dev.emi.emi.api.EmiPlugin; import dev.emi.emi.api.EmiRegistry; @@ -21,9 +21,9 @@ public class SkyblockerEMIPlugin implements EmiPlugin { @Override public void register(EmiRegistry registry) { - ItemRegistry.getItemsStream().map(EmiStack::of).forEach(registry::addEmiStack); + ItemRepository.getItemsStream().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); + ItemRepository.getRecipesStream().map(SkyblockEmiRecipe::new).forEach(registry::addRecipe); } } diff --git a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java index 60e39b79..33cee20b 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java @@ -1,6 +1,6 @@ package de.hysky.skyblocker.compatibility.rei; -import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry; +import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import de.hysky.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe; import de.hysky.skyblocker.utils.ItemUtils; import me.shedaniel.rei.api.client.registry.display.DynamicDisplayGenerator; @@ -19,7 +19,7 @@ public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator public Optional> getRecipeFor(EntryStack entry) { if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); EntryStack inputItem = EntryStacks.of((ItemStack) entry.getValue()); - List filteredRecipes = ItemRegistry.getRecipesStream() + List filteredRecipes = ItemRepository.getRecipesStream() .filter(recipe -> { ItemStack itemStack = inputItem.getValue(); ItemStack itemStack1 = recipe.getResult(); @@ -34,7 +34,7 @@ public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator public Optional> getUsageFor(EntryStack entry) { if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); EntryStack inputItem = EntryStacks.of((ItemStack) entry.getValue()); - List filteredRecipes = ItemRegistry.getRecipesStream() + List filteredRecipes = ItemRepository.getRecipesStream() .filter(recipe -> { for (ItemStack item : recipe.getGrid()) { if(!ItemUtils.getItemId(item).isEmpty()) { diff --git a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockerREIClientPlugin.java b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockerREIClientPlugin.java index 97651718..7ed322a0 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockerREIClientPlugin.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockerREIClientPlugin.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.compatibility.rei; import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry; +import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; 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; @@ -29,6 +29,6 @@ public class SkyblockerREIClientPlugin implements REIClientPlugin { @Override public void registerEntries(EntryRegistry entryRegistry) { - entryRegistry.addEntries(ItemRegistry.getItemsStream().map(EntryStacks::of).toList()); + entryRegistry.addEntries(ItemRepository.getItemsStream().map(EntryStacks::of).toList()); } } -- cgit From 99a538292ac344aa9fd6087a2752e20563bf310c Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 20 Oct 2023 19:28:02 -0400 Subject: Patch Float/Double Field Controller Bug --- .../skyblocker/compatibility/MixinPlugin.java | 15 ++++++++ .../mixin/yacl/DoubleFieldControllerMixin.java | 27 ++++++++++++++ .../mixin/yacl/FloatFieldControllerMixin.java | 27 ++++++++++++++ .../mixin/yacl/IntegerFieldControllerMixin.java | 31 ++++++++++++++++ .../mixin/yacl/LongFieldControllerMixin.java | 31 ++++++++++++++++ .../mixin/yacl/NumberFieldControllerMixin.java | 43 ++++++++++++++++++++++ src/main/resources/skyblocker.mixins.json | 7 +++- 7 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/hysky/skyblocker/mixin/yacl/DoubleFieldControllerMixin.java create mode 100644 src/main/java/de/hysky/skyblocker/mixin/yacl/FloatFieldControllerMixin.java create mode 100644 src/main/java/de/hysky/skyblocker/mixin/yacl/IntegerFieldControllerMixin.java create mode 100644 src/main/java/de/hysky/skyblocker/mixin/yacl/LongFieldControllerMixin.java create mode 100644 src/main/java/de/hysky/skyblocker/mixin/yacl/NumberFieldControllerMixin.java (limited to 'src/main/java/de/hysky/skyblocker/compatibility') diff --git a/src/main/java/de/hysky/skyblocker/compatibility/MixinPlugin.java b/src/main/java/de/hysky/skyblocker/compatibility/MixinPlugin.java index c7fc6973..145f7ec4 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/MixinPlugin.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/MixinPlugin.java @@ -4,13 +4,17 @@ import java.util.List; import java.util.Set; import org.objectweb.asm.tree.ClassNode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; import org.spongepowered.asm.mixin.extensibility.IMixinInfo; import net.fabricmc.loader.api.FabricLoader; public class MixinPlugin implements IMixinConfigPlugin { + private static final Logger LOGGER = LoggerFactory.getLogger(MixinPlugin.class); private static final boolean OPTIFABRIC_LOADED = FabricLoader.getInstance().isModLoaded("optifabric"); + private static final String YACL_VERSION = FabricLoader.getInstance().getModContainer("yet_another_config_lib_v3").get().getMetadata().getVersion().getFriendlyString(); @Override public void onLoad(String mixinPackage) { @@ -26,6 +30,17 @@ public class MixinPlugin implements IMixinConfigPlugin { public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { //OptiFabric Compatibility if (mixinClassName.endsWith("WorldRendererMixin") && OPTIFABRIC_LOADED) return false; + + //YACL#103 Patch + if (mixinClassName.endsWith("DoubleFieldControllerMixin") || mixinClassName.endsWith("FloatFieldControllerMixin") || mixinClassName.endsWith("IntegerFieldControllerMixin") || mixinClassName.endsWith("LongFieldControllerMixin") || mixinClassName.endsWith("NumberFieldControllerMixin")) { + if (YACL_VERSION.equals("3.2.1+1.20.2")) { + LOGGER.info("[Skyblocker] Applying patch for " + targetClassName + " from " + mixinClassName); + } else { + LOGGER.info("[Skyblocker] Skipping patch on " + targetClassName + " due to an Unknown YACL version being found! Version: {}", YACL_VERSION); + + return false; + } + } return true; } diff --git a/src/main/java/de/hysky/skyblocker/mixin/yacl/DoubleFieldControllerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/yacl/DoubleFieldControllerMixin.java new file mode 100644 index 00000000..ac24c09f --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/yacl/DoubleFieldControllerMixin.java @@ -0,0 +1,27 @@ +package de.hysky.skyblocker.mixin.yacl; + +import java.text.NumberFormat; +import java.util.function.Function; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.gui.controllers.string.number.DoubleFieldController; +import dev.isxander.yacl3.gui.controllers.string.number.NumberFieldController; +import net.minecraft.text.Text; + +@Mixin(value = DoubleFieldController.class, remap = false) +public abstract class DoubleFieldControllerMixin extends NumberFieldController { + private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(); + + + public DoubleFieldControllerMixin(Option option, Function displayFormatter) { + super(option, displayFormatter); + } + + @Overwrite + public String getString() { + return NUMBER_FORMAT.format(option().pendingValue()); + } +} diff --git a/src/main/java/de/hysky/skyblocker/mixin/yacl/FloatFieldControllerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/yacl/FloatFieldControllerMixin.java new file mode 100644 index 00000000..d67993c2 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/yacl/FloatFieldControllerMixin.java @@ -0,0 +1,27 @@ +package de.hysky.skyblocker.mixin.yacl; + +import java.text.NumberFormat; +import java.util.function.Function; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.gui.controllers.string.number.FloatFieldController; +import dev.isxander.yacl3.gui.controllers.string.number.NumberFieldController; +import net.minecraft.text.Text; + +@Mixin(value = FloatFieldController.class, remap = false) +public abstract class FloatFieldControllerMixin extends NumberFieldController { + private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(); + + + public FloatFieldControllerMixin(Option option, Function displayFormatter) { + super(option, displayFormatter); + } + + @Overwrite + public String getString() { + return NUMBER_FORMAT.format(option().pendingValue()); + } +} diff --git a/src/main/java/de/hysky/skyblocker/mixin/yacl/IntegerFieldControllerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/yacl/IntegerFieldControllerMixin.java new file mode 100644 index 00000000..b95cbef7 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/yacl/IntegerFieldControllerMixin.java @@ -0,0 +1,31 @@ +package de.hysky.skyblocker.mixin.yacl; + +import java.text.NumberFormat; +import java.util.function.Function; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.gui.controllers.string.number.IntegerFieldController; +import dev.isxander.yacl3.gui.controllers.string.number.NumberFieldController; +import net.minecraft.text.Text; + +@Mixin(value = IntegerFieldController.class, remap = false) +public abstract class IntegerFieldControllerMixin extends NumberFieldController { + private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(); + + public IntegerFieldControllerMixin(Option option, Function displayFormatter) { + super(option, displayFormatter); + } + + @Overwrite + public String getString() { + return NUMBER_FORMAT.format(option().pendingValue()); + } + + @Overwrite + public boolean isInputValid(String input) { + return super.isInputValid(input); + } +} diff --git a/src/main/java/de/hysky/skyblocker/mixin/yacl/LongFieldControllerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/yacl/LongFieldControllerMixin.java new file mode 100644 index 00000000..99871e2e --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/yacl/LongFieldControllerMixin.java @@ -0,0 +1,31 @@ +package de.hysky.skyblocker.mixin.yacl; + +import java.text.NumberFormat; +import java.util.function.Function; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.gui.controllers.string.number.LongFieldController; +import dev.isxander.yacl3.gui.controllers.string.number.NumberFieldController; +import net.minecraft.text.Text; + +@Mixin(value = LongFieldController.class, remap = false) +public abstract class LongFieldControllerMixin extends NumberFieldController { + private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(); + + public LongFieldControllerMixin(Option option, Function displayFormatter) { + super(option, displayFormatter); + } + + @Overwrite + public String getString() { + return NUMBER_FORMAT.format(option().pendingValue()); + } + + @Overwrite + public boolean isInputValid(String input) { + return super.isInputValid(input); + } +} diff --git a/src/main/java/de/hysky/skyblocker/mixin/yacl/NumberFieldControllerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/yacl/NumberFieldControllerMixin.java new file mode 100644 index 00000000..17a99cfd --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/yacl/NumberFieldControllerMixin.java @@ -0,0 +1,43 @@ +package de.hysky.skyblocker.mixin.yacl; + +import java.text.DecimalFormatSymbols; +import java.text.NumberFormat; +import java.text.ParseException; +import java.text.ParsePosition; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import dev.isxander.yacl3.gui.controllers.slider.ISliderController; +import dev.isxander.yacl3.gui.controllers.string.number.NumberFieldController; +import dev.isxander.yacl3.impl.utils.YACLConstants; +import net.minecraft.util.math.MathHelper; + +@Mixin(value = NumberFieldController.class, remap = false) +public abstract class NumberFieldControllerMixin implements ISliderController { + private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(); + private static final DecimalFormatSymbols DECIMAL_FORMAT_SYMBOLS = DecimalFormatSymbols.getInstance(); + + @Overwrite + public void setFromString(String value) { + try { + setPendingValue(MathHelper.clamp(NUMBER_FORMAT.parse(value).doubleValue(), min(), max())); + } catch (ParseException ignore) { + YACLConstants.LOGGER.warn("Failed to parse number: {}", value); + } + } + + @Overwrite + public boolean isInputValid(String input) { + input = input.replace(DECIMAL_FORMAT_SYMBOLS.getGroupingSeparator() + "", ""); + ParsePosition parsePosition = new ParsePosition(0); + NUMBER_FORMAT.parse(input, parsePosition); + + return parsePosition.getIndex() == input.length(); + } + + @Overwrite + protected String cleanupNumberString(String number) { + throw new UnsupportedOperationException("This method should no longer be called."); + } +} diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 4e7bfe16..5bafb324 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -36,7 +36,12 @@ "accessor.PlayerListHudAccessor", "accessor.RecipeBookWidgetAccessor", "accessor.ScreenAccessor", - "accessor.WorldRendererAccessor" + "accessor.WorldRendererAccessor", + "yacl.DoubleFieldControllerMixin", + "yacl.FloatFieldControllerMixin", + "yacl.IntegerFieldControllerMixin", + "yacl.LongFieldControllerMixin", + "yacl.NumberFieldControllerMixin" ], "injectors": { "defaultRequire": 1 -- cgit