diff --git a/gradle.properties b/gradle.properties index 4c5db8b..3b6908b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ neo_version=26.1.2.44-beta mod_id=cakesticklib mod_name=CakeStickLib mod_license=Custom License -mod_version=1.10 +mod_version=1.10.1 mod_group_id=com.devdyna.cakestick mod_authors=DevDyna mod_description=A standalone port of Synergy API to unify most of the code diff --git a/src/main/java/com/devdyna/cakesticklib/api/AnimatedText.java b/src/main/java/com/devdyna/cakesticklib/api/animations/AnimatedText.java similarity index 95% rename from src/main/java/com/devdyna/cakesticklib/api/AnimatedText.java rename to src/main/java/com/devdyna/cakesticklib/api/animations/AnimatedText.java index 627fadf..eb2a517 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/AnimatedText.java +++ b/src/main/java/com/devdyna/cakesticklib/api/animations/AnimatedText.java @@ -1,4 +1,4 @@ -package com.devdyna.cakesticklib.api; +package com.devdyna.cakesticklib.api.animations; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -83,7 +83,7 @@ private MutableComponent tick() { } private void pickNext() { - if (bag.isEmpty()) + if (bag.isEmpty()) refillBag(); currentRaw = entries.get(bag.remove(0)); @@ -92,7 +92,7 @@ private void pickNext() { private void refillBag() { bag.clear(); - for (int i = 0; i < entries.size(); i++) + for (int i = 0; i < entries.size(); i++) bag.add(i); Collections.shuffle(bag); @@ -103,5 +103,4 @@ private void randomizeDelay() { + RANDOM.nextInt((int) (3.5 * TimeUtil.ONE_SECOND))); } - } \ No newline at end of file diff --git a/src/main/java/com/devdyna/cakesticklib/api/animations/CyclicImageGui.java b/src/main/java/com/devdyna/cakesticklib/api/animations/CyclicImageGui.java new file mode 100644 index 0000000..a06d9f9 --- /dev/null +++ b/src/main/java/com/devdyna/cakesticklib/api/animations/CyclicImageGui.java @@ -0,0 +1,73 @@ +package com.devdyna.cakesticklib.api.animations; + +import java.util.List; + +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.resources.Identifier; +import net.minecraft.util.ARGB; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.Slot; + +/** + * Utility render class based on + * {@code net.minecraft.client.gui.screens.inventory.CyclingSlotBackground} + */ +public class CyclicImageGui { + + private final int slotIndex; + private List icons = List.of(); + private int tick; + private int iconIndex; + private int tickDelay = 30; + + public CyclicImageGui(int slotIndex, int delay) { + this(slotIndex); + this.tickDelay = delay; + } + + public CyclicImageGui(int slotIndex) { + this.slotIndex = slotIndex; + } + + public void tick(List newIcons) { + if (!this.icons.equals(newIcons)) { + this.icons = newIcons; + this.iconIndex = 0; + } + + if (!this.icons.isEmpty() && ++this.tick % tickDelay == 0) + this.iconIndex = (this.iconIndex + 1) % this.icons.size(); + + } + + public void render(AbstractContainerMenu menu, GuiGraphicsExtractor graphics, float partialTicks, + int top, int left, int width, int height, int u, int v, int textureX, int textureY) { + Slot slot = menu.getSlot(this.slotIndex); + if (!this.icons.isEmpty() && !slot.hasItem()) { + float alphaProgress = (this.icons.size() > 1 && this.tick >= tickDelay) + ? (Math.min((this.tick % tickDelay) + partialTicks, 4.0F) / 4.0F) + : 1.0F; + if (alphaProgress < 1.0F) + sprite(slot, + this.icons.get(Math.floorMod(this.iconIndex - 1, this.icons.size())), + 1.0F - alphaProgress, graphics, top, left, width, height, u, v, textureX, textureY); + + sprite(slot, this.icons.get(this.iconIndex), alphaProgress, graphics, top, left, width, height, u, v, + textureX, textureY); + } + + } + + private void sprite(Slot slot, Identifier image, float alphaProgress, + GuiGraphicsExtractor graphics, int top, int left, int width, int height, int u, int v, int textureX, + int textureY) { + graphics.blit(RenderPipelines.GUI_TEXTURED, image, + left + slot.x - 1, top + slot.y - 1, + u, v, + width, height, + textureX, textureY, + ARGB.white(alphaProgress)); + } + +} \ No newline at end of file diff --git a/src/main/java/com/devdyna/cakesticklib/api/compat/jei/BaseRecipeCategory.java b/src/main/java/com/devdyna/cakesticklib/api/compat/jei/BaseRecipeCategory.java index a3c36df..ae97ecd 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/compat/jei/BaseRecipeCategory.java +++ b/src/main/java/com/devdyna/cakesticklib/api/compat/jei/BaseRecipeCategory.java @@ -100,10 +100,10 @@ public Size tickPos() { } /** - * Default : 0xA0A0A0 + * Default : 0xFFA0A0A0 */ public int tickColor() { - return 0xA0A0A0; + return 0xFFA0A0A0; } } \ No newline at end of file diff --git a/src/main/java/com/devdyna/cakesticklib/api/compat/jei/JEIFluidTankHelper.java b/src/main/java/com/devdyna/cakesticklib/api/compat/jei/JEIFluidTankHelper.java index 498f719..c2dd788 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/compat/jei/JEIFluidTankHelper.java +++ b/src/main/java/com/devdyna/cakesticklib/api/compat/jei/JEIFluidTankHelper.java @@ -49,7 +49,7 @@ public static JEIFluidTankHelper of() { public void build(BiFunction builder) { var height = (int) (Math.min(16, Math.max((int) ((fluids.getFirst().getAmount() + 256) * 0.016), 1)) * h); - builder.apply((int) (x0 * w), y0 - height) + builder.apply((int) (x0 * w), y0 - height)//TODO +16 .addIngredients(NeoForgeTypes.FLUID_STACK, fluids) .setFluidRenderer(fluids.getFirst().getAmount(), false, (int) (w * 16), height); } diff --git a/src/main/java/com/devdyna/cakesticklib/api/gui/ClientUtils.java b/src/main/java/com/devdyna/cakesticklib/api/gui/ClientUtils.java index c314481..538479b 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/gui/ClientUtils.java +++ b/src/main/java/com/devdyna/cakesticklib/api/gui/ClientUtils.java @@ -11,7 +11,7 @@ public interface ClientUtils { - final Color defaultToolTipColor = ColorUtils.color(64, 64, 64); + final Color defaultToolTipColor = ColorUtils.color(64, 64, 64,255); default boolean hasShiftDown() { return Minecraft.getInstance().hasShiftDown(); diff --git a/src/main/java/com/devdyna/cakesticklib/api/gui/ImageGui.java b/src/main/java/com/devdyna/cakesticklib/api/gui/ImageGui.java index 2ccfcb7..665097f 100644 --- a/src/main/java/com/devdyna/cakesticklib/api/gui/ImageGui.java +++ b/src/main/java/com/devdyna/cakesticklib/api/gui/ImageGui.java @@ -1,6 +1,10 @@ package com.devdyna.cakesticklib.api.gui; import com.devdyna.cakesticklib.CakeStickLib; +import com.devdyna.cakesticklib.api.primitive.Pos; +import com.devdyna.cakesticklib.api.primitive.Size; +import com.devdyna.cakesticklib.api.utils.ColorUtils; +import java.awt.Color; import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.renderer.RenderPipelines; @@ -8,9 +12,9 @@ public class ImageGui { - private int x; - private int y; - private String rl; + private int x = 0; + private int y = 0; + private String rl = ""; private String modid = CakeStickLib.MODULE_ID; private int xo = 0; private int yo = 0; @@ -19,6 +23,9 @@ public class ImageGui { private int u = 0; private int v = 0; + private int color = -1;// default + + private boolean flag_first_offset = true; public ImageGui() { @@ -47,8 +54,30 @@ public ImageGui uv(int u, int v) { } public ImageGui offset(int xo, int yo) { - this.xo = xo; - this.yo = yo; + if (flag_first_offset) { + this.xo = xo; + this.yo = yo; + flag_first_offset = false; + } else { + this.xo = this.xo + xo; + this.yo = this.yo + yo; + } + + return this; + } + + public ImageGui color(int c) { + this.color = c; + return this; + } + + public ImageGui color(int a, int r, int g, int b) { + this.color = ColorUtils.argb(a, r, g, b); + return this; + } + + public ImageGui color(Color c) { + this.color = ColorUtils.argb(c); return this; } @@ -69,6 +98,66 @@ public ImageGui rl(Identifier rl) { return this; } + public Identifier getLocation() { + return com.devdyna.cakesticklib.api.utils.x.rl(modid, rl); + } + + public Size getSpriteSize() { + return Size.of(x, y); + } + + public Pos getOffsetPos() { + return Pos.of(xo, yo); + } + + public Size getTextureSize() { + return Size.of(tx, ty); + } + + public int getPosX() { + return x; + } + + public int getPosY() { + return y; + } + + public int getOffsetX() { + return xo; + } + + public int getOffsetY() { + return yo; + } + + public int getTextureX() { + return tx; + } + + public int getTextureY() { + return ty; + } + + public int getU() { + return u; + } + + public int getV() { + return v; + } + + public int getColor() { + return color; + } + + public String getModid() { + return modid; + } + + public String getPath() { + return rl; + } + public void render(GuiGraphicsExtractor g) { g.blit( @@ -78,7 +167,8 @@ public void render(GuiGraphicsExtractor g) { yo - 1, u, v, x, y, - tx, ty); + tx, ty, + color); }