diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bc7d9253..5e5d2d5b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,7 +10,7 @@ jobs: !contains(github.event.head_commit.message, '[ciskip]') uses: FTBTeam/mods-meta/.github/workflows/standard-release.yml@main with: - curse-publish-task: curseforge + curse-publish-task: publishMods java-version: 21 secrets: ftb-maven-token: ${{ secrets.FTB_MAVEN_TOKEN }} diff --git a/build.gradle b/build.gradle index e1fef3d1..b6fa9583 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,7 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" id "dev.architectury.loom" version "1.6-SNAPSHOT" apply false + id "me.modmuss50.mod-publish-plugin" version "0.5.1" } architectury { @@ -78,12 +79,87 @@ allprojects { } dependencies { - testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2' + testImplementation 'org.junit.jupiter:junit-jupiter:5.11.0-M1' } java { withSourcesJar() } + + publishing { + repositories { + if (ftbPublishing.ftbToken) { + maven { + url ftbPublishing.ftbURL + credentials { + username = ftbPublishing.ftbUser + password = ftbPublishing.ftbToken + } + } + } + + if (ftbPublishing.sapsToken) { + maven { + url ftbPublishing.sapsURL + credentials { + username = ftbPublishing.sapsUser + password = ftbPublishing.sapsToken + } + } + } + } + } } -task curseforgePublish +publishMods { + dryRun = providers.environmentVariable("CURSEFORGE_KEY").getOrNull() == null + changelog = providers.environmentVariable("CHANGELOG").getOrElse("No changelog provided") + version = mod_version + + // TODO: Migrate to something else + def tag = providers.environmentVariable("TAG").getOrElse("release") + type = tag == "beta" ? BETA : (tag == "alpha" ? ALPHA : STABLE) + + def createOptions = (String projectName) -> { + publishOptions { + file = project.provider { project(":$projectName").tasks.remapJar }.flatMap { it.archiveFile } + displayName = "[${projectName.toUpperCase()}][${minecraft_version}] ${readable_name} ${mod_version}" + modLoaders.add(projectName.toLowerCase()) + } + } + + def fabricOptions = createOptions("fabric") + def neoForgeOptions = createOptions("neoforge") +// def forgeOptions = createOptions("forge") + + def curseForgeOptions = curseforgeOptions { + accessToken = providers.environmentVariable("CURSEFORGE_KEY") + minecraftVersions.add("${minecraft_version}") + javaVersions.add(JavaVersion.VERSION_21) + } + + curseforge("curseforgeFabric") { + from(curseForgeOptions, fabricOptions) + projectId = curseforge_id_fabric + requires('architectury-api') + requires('fabric-api') + optional('jei') + optional('roughly-enough-items') + } + + curseforge("curseforgeNeoForge") { + from(curseForgeOptions, neoForgeOptions) + projectId = curseforge_id_forge + requires("architectury-api") + optional('jei') + optional('roughly-enough-items') + } + +// curseforge("curseforgeForge") { +// from(curseForgeOptions, forgeOptions) +// projectId = curseforge_id_forge +// requires("architectury-api") +// optional('jei') +// optional('roughly-enough-items') +// } +} diff --git a/common/build.gradle b/common/build.gradle index 24f0a40b..66bbedfe 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -11,15 +11,11 @@ dependencies { exclude group: "dev.architectury" } -// modCompileOnly("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}") - modCompileOnly("mezz.jei:jei-1.20.4-common-api:${jei_version}") + modCompileOnly("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}") -// modCompileOnly "dev.emi:emi-xplat-intermediary:${emi_version}+${minecraft_version}:api" - modCompileOnly "dev.emi:emi-xplat-intermediary:${emi_version}+1.20.4:api" + modCompileOnly "dev.emi:emi-xplat-intermediary:${emi_version}+${minecraft_version}:api" } -def ENV = System.getenv() - test { useJUnitPlatform() } @@ -43,31 +39,9 @@ artifacts { publishing { publications { mavenCommon(MavenPublication) { - artifactId = rootProject.archivesBaseName + artifactId = "${rootProject.archives_base_name}" version ftbPublishing.mavenVersion from components.java } } - - repositories { - if (ftbPublishing.ftbToken) { - maven { - url ftbPublishing.ftbURL - credentials { - username = ftbPublishing.ftbUser - password = ftbPublishing.ftbToken - } - } - } - - if (ftbPublishing.sapsToken) { - maven { - url ftbPublishing.sapsURL - credentials { - username = ftbPublishing.sapsUser - password = ftbPublishing.sapsToken - } - } - } - } } diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/FTBLibrary.java b/common/src/main/java/dev/ftb/mods/ftblibrary/FTBLibrary.java index 706952c3..5a046d9f 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/FTBLibrary.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/FTBLibrary.java @@ -31,7 +31,7 @@ public FTBLibrary() { } public static ResourceLocation rl(String path) { - return new ResourceLocation(MOD_ID, path); + return ResourceLocation.fromNamespaceAndPath(MOD_ID, path); } private void serverStarted(MinecraftServer server) { diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/config/ImageResourceConfig.java b/common/src/main/java/dev/ftb/mods/ftblibrary/config/ImageResourceConfig.java index 40feb8bd..eba45ae1 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/config/ImageResourceConfig.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/config/ImageResourceConfig.java @@ -15,7 +15,7 @@ import java.util.OptionalLong; public class ImageResourceConfig extends ResourceConfigValue { - public static final ResourceLocation NONE = new ResourceLocation(FTBLibrary.MOD_ID, "none"); + public static final ResourceLocation NONE = FTBLibrary.rl("none"); private boolean allowEmpty = true; diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/config/ui/SelectFluidScreen.java b/common/src/main/java/dev/ftb/mods/ftblibrary/config/ui/SelectFluidScreen.java index 24d35f08..a32ae2e0 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/config/ui/SelectFluidScreen.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/config/ui/SelectFluidScreen.java @@ -40,8 +40,10 @@ public boolean shouldAdd(String search) { return true; } else if (search.startsWith("@")) { return RegistrarManager.getId(getStack().getFluid(), Registries.FLUID).getNamespace().contains(search.substring(1)); - } else if (search.startsWith("#") && ResourceLocation.isValidResourceLocation(search.substring(1))) { - return getStack().getFluid().builtInRegistryHolder().is(TagKey.create(Registries.FLUID, new ResourceLocation(search.substring(1)))); + } else if (search.startsWith("#")) { + return ResourceLocation.read(search.substring(1)).result() + .map(resloc -> getStack().getFluid().builtInRegistryHolder().is(TagKey.create(Registries.FLUID, resloc))) + .orElse(false); } else { return getStack().getName().getString().toLowerCase().contains(search); } diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/config/ui/SelectImageResourceScreen.java b/common/src/main/java/dev/ftb/mods/ftblibrary/config/ui/SelectImageResourceScreen.java index 22028167..d64850c0 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/config/ui/SelectImageResourceScreen.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/config/ui/SelectImageResourceScreen.java @@ -127,16 +127,15 @@ public Collection> getAllResource StringUtils.ignoreResourceLocationErrors = false; textures.keySet().forEach(rl -> { - if (!ResourceLocation.isValidResourceLocation(rl.toString())) { - FTBLibrary.LOGGER.warn("Image " + rl + " has invalid path! Report this to author of '" + rl.getNamespace() + "'!"); - } else if (isValidImage(rl)) { - images.add(rl); - } + ResourceLocation.read(rl.toString()).result().ifPresentOrElse( + images::add, + () -> FTBLibrary.LOGGER.warn("Image {} has invalid path! Report this to author of '{}'!", rl, rl.getNamespace()) + ); }); cachedImages = images.stream().sorted().map(res -> { // shorten :textures/A/B.png to :A/B - ResourceLocation res1 = new ResourceLocation(res.getNamespace(), res.getPath().substring(9, res.getPath().length() - 4)); + ResourceLocation res1 = ResourceLocation.fromNamespaceAndPath(res.getNamespace(), res.getPath().substring(9, res.getPath().length() - 4)); TextureAtlasSprite sprite = Minecraft.getInstance().getModelManager().getAtlas(InventoryMenu.BLOCK_ATLAS).getSprite(res1); SpriteContents contents = sprite.contents(); if (contents.name().equals(MissingTextureAtlasSprite.getLocation())) { diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/config/ui/SelectItemStackScreen.java b/common/src/main/java/dev/ftb/mods/ftblibrary/config/ui/SelectItemStackScreen.java index e79034fd..4adaa04b 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/config/ui/SelectItemStackScreen.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/config/ui/SelectItemStackScreen.java @@ -42,8 +42,10 @@ public boolean shouldAdd(String search) { return true; } else if (search.startsWith("@")) { return RegistrarManager.getId(getStack().getItem(), Registries.ITEM).getNamespace().contains(search.substring(1)); - } else if (search.startsWith("#") && ResourceLocation.isValidResourceLocation(search.substring(1))) { - return getStack().is(TagKey.create(Registries.ITEM, new ResourceLocation(search.substring(1)))); + } else if (search.startsWith("#")) { + return ResourceLocation.read(search.substring(1)).result() + .map(resloc -> getStack().is(TagKey.create(Registries.ITEM, resloc))) + .orElse(false); } else { return getStack().getHoverName().getString().toLowerCase().contains(search); } diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/AtlasSpriteIcon.java b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/AtlasSpriteIcon.java index c8cc0b56..3cae4254 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/AtlasSpriteIcon.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/AtlasSpriteIcon.java @@ -53,16 +53,23 @@ public void draw(GuiGraphics graphics, int x, int y, int w, int h) { var maxU = sprite.getU1(); var maxV = sprite.getV1(); - RenderSystem.setShader(GameRenderer::getPositionColorTexShader); + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); RenderSystem.setShaderColor(1F, 1F, 1F, 1F); RenderSystem.setShaderTexture(0, sprite.atlasLocation()); - var buffer = Tesselator.getInstance().getBuilder(); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_TEX); - buffer.vertex(m, x, y, 0F).color(r, g, b, a).uv(minU, minV).endVertex(); - buffer.vertex(m, x, y + h, 0F).color(r, g, b, a).uv(minU, maxV).endVertex(); - buffer.vertex(m, x + w, y + h, 0F).color(r, g, b, a).uv(maxU, maxV).endVertex(); - buffer.vertex(m, x + w, y, 0F).color(r, g, b, a).uv(maxU, minV).endVertex(); - BufferUploader.drawWithShader(buffer.end()); + var buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); + buffer.addVertex(m, x, y, 0F) + .setUv(minU, minV) + .setColor(r, g, b, a); + buffer.addVertex(m, x, y + h, 0F) + .setUv(minU, maxV) + .setColor(r, g, b, a); + buffer.addVertex(m, x + w, y + h, 0F) + .setUv(maxU, maxV) + .setColor(r, g, b, a); + buffer.addVertex(m, x + w, y, 0F) + .setUv(maxU, minV) + .setColor(r, g, b, a); + BufferUploader.drawWithShader(buffer.buildOrThrow()); } @Override @@ -79,7 +86,7 @@ public boolean hasPixelBuffer() { @Nullable public PixelBuffer createPixelBuffer() { try { - return PixelBuffer.from(Minecraft.getInstance().getResourceManager().getResource(new ResourceLocation(id.getNamespace(), "textures/" + id.getPath() + ".png")).orElseThrow().open()); + return PixelBuffer.from(Minecraft.getInstance().getResourceManager().getResource(ResourceLocation.fromNamespaceAndPath(id.getNamespace(), "textures/" + id.getPath() + ".png")).orElseThrow().open()); } catch (Exception ex) { return null; } diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/BulletIcon.java b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/BulletIcon.java index 4cf098eb..bd135a9b 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/BulletIcon.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/BulletIcon.java @@ -3,6 +3,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferUploader; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexFormat; @@ -92,9 +93,7 @@ public void draw(GuiGraphics graphics, int x, int y, int w, int h) { RenderSystem.setShader(GameRenderer::getPositionColorShader); RenderSystem.setShaderColor(1F, 1F, 1F, 1F); - var tesselator = Tesselator.getInstance(); - var buffer = tesselator.getBuilder(); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + var buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); GuiHelper.addRectToBuffer(graphics, buffer, x, y + 1, 1, h - 2, inverse ? cd : cb); GuiHelper.addRectToBuffer(graphics, buffer, x + w - 1, y + 1, 1, h - 2, inverse ? cb : cd); @@ -102,7 +101,7 @@ public void draw(GuiGraphics graphics, int x, int y, int w, int h) { GuiHelper.addRectToBuffer(graphics, buffer, x + 1, y + h - 1, w - 2, 1, inverse ? cb : cd); GuiHelper.addRectToBuffer(graphics, buffer, x + 1, y + 1, w - 2, h - 2, c); - tesselator.end(); + BufferUploader.drawWithShader(buffer.buildOrThrow()); } @Override diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/Color4I.java b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/Color4I.java index 618d1305..c806e734 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/Color4I.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/Color4I.java @@ -6,6 +6,7 @@ import com.mojang.blaze3d.platform.GlStateManager.DestFactor; import com.mojang.blaze3d.platform.GlStateManager.SourceFactor; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferUploader; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexFormat; @@ -375,11 +376,10 @@ public void draw(GuiGraphics graphics, int x, int y, int w, int h) { RenderSystem.setShaderColor(1F, 1F, 1F, 1F); RenderSystem.enableBlend(); RenderSystem.blendFuncSeparate(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA, SourceFactor.ONE, DestFactor.ZERO); - var tesselator = Tesselator.getInstance(); - var buffer = tesselator.getBuilder(); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + + var buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); GuiHelper.addRectToBuffer(graphics, buffer, x, y, w, h, this); - tesselator.end(); + BufferUploader.drawWithShader(buffer.buildOrThrow()); } @Override diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/Icon.java b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/Icon.java index da836d19..55eba3a4 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/Icon.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/Icon.java @@ -211,7 +211,7 @@ private static Icon getIcon0(String id) { } } - return (id.endsWith(".png") || id.endsWith(".jpg")) ? new ImageIcon(new ResourceLocation(id)) : new AtlasSpriteIcon(new ResourceLocation(id)); + return (id.endsWith(".png") || id.endsWith(".jpg")) ? new ImageIcon(ResourceLocation.parse(id)) : new AtlasSpriteIcon(ResourceLocation.parse(id)); } private static boolean isNone(String id) { diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/ImageIcon.java b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/ImageIcon.java index 5636c6a6..89d5b769 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/ImageIcon.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/ImageIcon.java @@ -2,6 +2,7 @@ import com.google.common.base.Objects; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferUploader; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexFormat; @@ -18,7 +19,7 @@ import org.jetbrains.annotations.Nullable; public class ImageIcon extends Icon implements IResourceIcon { - public static final ResourceLocation MISSING_IMAGE = new ResourceLocation(FTBLibrary.MOD_ID, "textures/gui/missing_image.png"); + public static final ResourceLocation MISSING_IMAGE = FTBLibrary.rl("textures/gui/missing_image.png"); public final ResourceLocation texture; public float minU, minV, maxU, maxV; @@ -84,15 +85,22 @@ public void draw(GuiGraphics graphics, int x, int y, int w, int h) { var m = graphics.pose().last().pose(); var tesselator = Tesselator.getInstance(); - var buffer = tesselator.getBuilder(); - RenderSystem.setShader(GameRenderer::getPositionColorTexShader); + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); RenderSystem.setShaderColor(1F, 1F, 1F, 1F); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_TEX); - buffer.vertex(m, x, y + h, 0).color(r, g, b, a).uv((float) (x / tileSize), (float) ((y + h) / tileSize)).endVertex(); - buffer.vertex(m, x + w, y + h, 0).color(r, g, b, a).uv((float) ((x + w) / tileSize), (float) ((y + h) / tileSize)).endVertex(); - buffer.vertex(m, x + w, y, 0).color(r, g, b, a).uv((float) ((x + w) / tileSize), (float) (y / tileSize)).endVertex(); - buffer.vertex(m, x, y, 0).color(r, g, b, a).uv((float) (x / tileSize), (float) (y / tileSize)).endVertex(); - tesselator.end(); + var buffer = tesselator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); + buffer.addVertex(m, x, y + h, 0) + .setUv((float) (x / tileSize), (float) ((y + h) / tileSize)) + .setColor(r, g, b, a); + buffer.addVertex(m, x + w, y + h, 0) + .setUv((float) ((x + w) / tileSize), (float) ((y + h) / tileSize)) + .setColor(r, g, b, a); + buffer.addVertex(m, x + w, y, 0) + .setUv((float) ((x + w) / tileSize), (float) (y / tileSize)) + .setColor(r, g, b, a); + buffer.addVertex(m, x, y, 0) + .setUv((float) (x / tileSize), (float) (y / tileSize)) + .setColor(r, g, b, a); + BufferUploader.drawWithShader(buffer.buildOrThrow()); } } diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/ItemIcon.java b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/ItemIcon.java index 266f73b8..b92454e3 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/ItemIcon.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/ItemIcon.java @@ -3,6 +3,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.brigadier.exceptions.CommandSyntaxException; import dev.architectury.registry.registries.RegistrarManager; +import dev.ftb.mods.ftblibrary.FTBLibrary; import dev.ftb.mods.ftblibrary.ui.GuiHelper; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -47,7 +48,7 @@ public static Icon getItemIcon(String lazyStackString) { return new LazyIcon(() -> { var s = lazyStackString.split(" ", 4); - var stack = BuiltInRegistries.ITEM.get(new ResourceLocation(s[0])).getDefaultInstance(); + var stack = BuiltInRegistries.ITEM.get(ResourceLocation.parse(s[0])).getDefaultInstance(); if (s.length >= 2 && !s[1].equals("1")) { stack.setCount(Integer.parseInt(s[1])); @@ -60,9 +61,10 @@ public static Icon getItemIcon(String lazyStackString) { if (s.length >= 4 && !s[3].equals("null")) { try { DataComponentMap.CODEC.parse(NbtOps.INSTANCE, TagParser.parseTag(s[3])) - .ifSuccess(stack::applyComponents); + .resultOrPartial(err -> FTBLibrary.LOGGER.error("can't parse data component map for {}: {}", s[3], err)) + .ifPresent(stack::applyComponents); } catch (CommandSyntaxException ex) { - ex.printStackTrace(); + FTBLibrary.LOGGER.error("can't parse data component tag for item icon: {} ({})", lazyStackString, ex.getMessage()); } } @@ -94,11 +96,11 @@ public ItemStack getStack() { public void draw(GuiGraphics graphics, int x, int y, int w, int h) { PoseStack poseStack = graphics.pose(); poseStack.pushPose(); - poseStack.translate(x + w / 2D, y + h / 2D, 100); + poseStack.translate(x + w / 2D, y + h / 2D, 0); if (w != 16 || h != 16) { - int s = Math.min(w, h); - poseStack.scale(s / 16F, s / 16F, s / 16F); + float s = Math.min(w, h) / 16F; + poseStack.scale(s, s, s); } GuiHelper.drawItem(graphics, getStack(), 0, true, null); @@ -110,11 +112,11 @@ public void draw(GuiGraphics graphics, int x, int y, int w, int h) { public void drawStatic(GuiGraphics graphics, int x, int y, int w, int h) { PoseStack poseStack = graphics.pose(); poseStack.pushPose(); - poseStack.translate(x + w / 2D, y + h / 2D, 100); + poseStack.translate(x + w / 2D, y + h / 2D, 0); if (w != 16 || h != 16) { - int s = Math.min(w, h); - poseStack.scale(s / 16F, s / 16F, s / 16F); + float s = Math.min(w, h) / 16F; + poseStack.scale(s, s, s); } GuiHelper.drawItem(graphics, getStack(), 0, false, null); diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/URLImageIcon.java b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/URLImageIcon.java index 5c3e3e17..cb875595 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/icon/URLImageIcon.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/icon/URLImageIcon.java @@ -27,7 +27,7 @@ public URLImageIcon(ResourceLocation tex, URI _uri) { } public URLImageIcon(URI uri) { - this(new ResourceLocation("remote_image:" + UndashedUuid.toString(UUID.nameUUIDFromBytes(uri.toString().getBytes(StandardCharsets.UTF_8)))), uri); + this(ResourceLocation.parse("remote_image:" + UndashedUuid.toString(UUID.nameUUIDFromBytes(uri.toString().getBytes(StandardCharsets.UTF_8)))), uri); } @Override diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/integration/EMIIntegration.java b/common/src/main/java/dev/ftb/mods/ftblibrary/integration/EMIIntegration.java index 7c85117d..babf6f57 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/integration/EMIIntegration.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/integration/EMIIntegration.java @@ -21,7 +21,7 @@ public class EMIIntegration implements EmiPlugin { @Override public Icon getIcon() { // https://github.com/emilyploszaj/emi/blob/1.20.4/xplat/src/main/resources/assets/emi/textures/gui/widgets.png (the grid towards the bottom) - return Icon.getIcon(new ResourceLocation("emi", "textures/gui/widgets.png")) + return Icon.getIcon(ResourceLocation.fromNamespaceAndPath("emi", "textures/gui/widgets.png")) .withUV(17, 147, 14, 14, 256, 256); } diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/integration/JEIIntegration.java b/common/src/main/java/dev/ftb/mods/ftblibrary/integration/JEIIntegration.java index c3a72de4..05dd4c99 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/integration/JEIIntegration.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/integration/JEIIntegration.java @@ -45,7 +45,7 @@ public void onRuntimeAvailable(IJeiRuntime r) { @Override @NotNull public ResourceLocation getPluginUid() { - return new ResourceLocation(FTBLibrary.MOD_ID, "jei"); + return FTBLibrary.rl("jei"); } @Override diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/integration/REIIntegration.java b/common/src/main/java/dev/ftb/mods/ftblibrary/integration/REIIntegration.java index 7f2ed97a..f49413d9 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/integration/REIIntegration.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/integration/REIIntegration.java @@ -5,6 +5,7 @@ import com.google.gson.JsonParser; import com.mojang.serialization.DataResult; import com.mojang.serialization.Lifecycle; +import dev.ftb.mods.ftblibrary.FTBLibrary; import dev.ftb.mods.ftblibrary.config.ui.SelectItemStackScreen; import dev.ftb.mods.ftblibrary.config.ui.ResourceSearchMode; import dev.ftb.mods.ftblibrary.config.ui.SelectableResource; @@ -44,7 +45,7 @@ import java.util.List; public class REIIntegration implements REIClientPlugin { - public static final ResourceLocation ID = new ResourceLocation("ftblibrary", "sidebar_button"); + public static final ResourceLocation ID = FTBLibrary.rl("sidebar_button"); private static final ResourceSearchMode REI_ITEMS = new ResourceSearchMode<>() { @Override @@ -101,7 +102,7 @@ public CompoundTag save(SidebarButtonEntry entry, CompoundTag tag) { @Override public DataResult read(CompoundTag object) { - var id = new ResourceLocation(object.getString("id")); + var id = ResourceLocation.parse(object.getString("id")); var json = (JsonObject) JsonParser.parseString(object.getString("json")); return DataResult.success(new SidebarButtonEntry(createSidebarButton(id, null, json)), Lifecycle.stable()); } diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/sidebar/SidebarButtonManager.java b/common/src/main/java/dev/ftb/mods/ftblibrary/sidebar/SidebarButtonManager.java index ef1d760c..b885ea84 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/sidebar/SidebarButtonManager.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/sidebar/SidebarButtonManager.java @@ -66,7 +66,7 @@ public void onResourceManagerReload(ResourceManager manager) { for (var domain : manager.getNamespaces()) { try { // TODO: Use an alternative way to register sidebar groups because jsons are a bit messy - for (var resource : manager.getResourceStack((new ResourceLocation(domain, "sidebar_button_groups.json")))) { + for (var resource : manager.getResourceStack(ResourceLocation.fromNamespaceAndPath(domain, "sidebar_button_groups.json"))) { var json = readJson(resource); for (var entry : json.getAsJsonObject().entrySet()) { @@ -83,7 +83,7 @@ public void onResourceManagerReload(ResourceManager manager) { pinned = groupJson.get("pinned").getAsBoolean(); } - var group = new SidebarButtonGroup(new ResourceLocation(domain, entry.getKey()), y, pinned); + var group = new SidebarButtonGroup(ResourceLocation.fromNamespaceAndPath(domain, entry.getKey()), y, pinned); groupMap.put(group.getId(), group); } } @@ -95,7 +95,7 @@ public void onResourceManagerReload(ResourceManager manager) { for (var domain : manager.getNamespaces()) { try { - for (var resource : manager.getResourceStack(new ResourceLocation(domain, "sidebar_buttons.json"))) { + for (var resource : manager.getResourceStack(ResourceLocation.fromNamespaceAndPath(domain, "sidebar_buttons.json"))) { var json = readJson(resource); if (json.isJsonObject()) { @@ -111,13 +111,13 @@ public void onResourceManagerReload(ResourceManager manager) { continue; } - var group = groupMap.get(new ResourceLocation(buttonJson.get("group").getAsString())); + var group = groupMap.get(ResourceLocation.parse(buttonJson.get("group").getAsString())); if (group == null) { continue; } - var button = new SidebarButton(new ResourceLocation(domain, entry.getKey()), group, buttonJson); + var button = new SidebarButton(ResourceLocation.fromNamespaceAndPath(domain, entry.getKey()), group, buttonJson); group.getButtons().add(button); diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/ui/GuiHelper.java b/common/src/main/java/dev/ftb/mods/ftblibrary/ui/GuiHelper.java index f5e3fea5..d64b24a6 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/ui/GuiHelper.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/ui/GuiHelper.java @@ -77,12 +77,11 @@ public static void playSound(SoundEvent event, float pitch) { } public static void drawTexturedRect(GuiGraphics graphics, int x, int y, int w, int h, Color4I col, float u0, float v0, float u1, float v1) { - RenderSystem.setShader(GameRenderer::getPositionColorTexShader); + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); RenderSystem.setShaderColor(1F, 1F, 1F, 1F); - var buffer = Tesselator.getInstance().getBuilder(); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_TEX); + var buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); addRectToBufferWithUV(graphics, buffer, x, y, w, h, col, u0, v0, u1, v1); - BufferUploader.drawWithShader(buffer.end()); + BufferUploader.drawWithShader(buffer.buildOrThrow()); } public static void addRectToBuffer(GuiGraphics graphics, BufferBuilder buffer, int x, int y, int w, int h, Color4I col) { @@ -95,10 +94,10 @@ public static void addRectToBuffer(GuiGraphics graphics, BufferBuilder buffer, i var g = col.greeni(); var b = col.bluei(); var a = col.alphai(); - buffer.vertex(m, x, y + h, 0).color(r, g, b, a).endVertex(); - buffer.vertex(m, x + w, y + h, 0).color(r, g, b, a).endVertex(); - buffer.vertex(m, x + w, y, 0).color(r, g, b, a).endVertex(); - buffer.vertex(m, x, y, 0).color(r, g, b, a).endVertex(); + buffer.addVertex(m, x, y + h, 0).setColor(r, g, b, a); + buffer.addVertex(m, x + w, y + h, 0).setColor(r, g, b, a); + buffer.addVertex(m, x + w, y, 0).setColor(r, g, b, a); + buffer.addVertex(m, x, y, 0).setColor(r, g, b, a); } public static void addRectToBufferWithUV(GuiGraphics graphics, BufferBuilder buffer, int x, int y, int w, int h, Color4I col, float u0, float v0, float u1, float v1) { @@ -111,10 +110,10 @@ public static void addRectToBufferWithUV(GuiGraphics graphics, BufferBuilder buf var g = col.greeni(); var b = col.bluei(); var a = col.alphai(); - buffer.vertex(m, x, y + h, 0).color(r, g, b, a).uv(u0, v1).endVertex(); - buffer.vertex(m, x + w, y + h, 0).color(r, g, b, a).uv(u1, v1).endVertex(); - buffer.vertex(m, x + w, y, 0).color(r, g, b, a).uv(u1, v0).endVertex(); - buffer.vertex(m, x, y, 0).color(r, g, b, a).uv(u0, v0).endVertex(); + buffer.addVertex(m, x, y + h, 0).setUv(u0, v1).setColor(r, g, b, a); + buffer.addVertex(m, x + w, y + h, 0).setUv(u1, v1).setColor(r, g, b, a); + buffer.addVertex(m, x + w, y, 0).setUv(u1, v0).setColor(r, g, b, a); + buffer.addVertex(m, x, y, 0).setUv(u0, v0).setColor(r, g, b, a); } public static void drawHollowRect(GuiGraphics graphics, int x, int y, int w, int h, Color4I col, boolean roundEdges) { @@ -124,9 +123,7 @@ public static void drawHollowRect(GuiGraphics graphics, int x, int y, int w, int } RenderSystem.setShader(GameRenderer::getPositionColorShader); - var tesselator = Tesselator.getInstance(); - var buffer = tesselator.getBuilder(); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + var buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); addRectToBuffer(graphics, buffer, x, y + 1, 1, h - 2, col); addRectToBuffer(graphics, buffer, x + w - 1, y + 1, 1, h - 2, col); @@ -139,14 +136,12 @@ public static void drawHollowRect(GuiGraphics graphics, int x, int y, int w, int addRectToBuffer(graphics, buffer, x, y + h - 1, w, 1, col); } - tesselator.end(); + BufferUploader.drawWithShader(buffer.buildOrThrow()); } public static void drawRectWithShade(GuiGraphics graphics, int x, int y, int w, int h, Color4I col, int intensity) { RenderSystem.setShader(GameRenderer::getPositionColorShader); - var tesselator = Tesselator.getInstance(); - var buffer = tesselator.getBuilder(); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + var buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); addRectToBuffer(graphics, buffer, x, y, w - 1, 1, col); addRectToBuffer(graphics, buffer, x, y + 1, 1, h - 1, col); col = col.mutable().addBrightness(-intensity); @@ -155,7 +150,7 @@ public static void drawRectWithShade(GuiGraphics graphics, int x, int y, int w, col = col.mutable().addBrightness(-intensity); addRectToBuffer(graphics, buffer, x + w - 1, y + 1, 1, h - 2, col); addRectToBuffer(graphics, buffer, x + 1, y + h - 1, w - 1, 1, col); - tesselator.end(); + BufferUploader.drawWithShader(buffer.buildOrThrow()); } public static void drawGradientRect(GuiGraphics graphics, int x, int y, int w, int h, Color4I col1, Color4I col2) { @@ -185,13 +180,12 @@ private static void draw(GuiGraphics graphics, Tesselator t, int x, int y, int w RenderSystem.setShader(GameRenderer::getPositionColorShader); var m = graphics.pose().last().pose(); - var renderer = t.getBuilder(); - renderer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); - renderer.vertex(m, x, y, 0).color(red, green, blue, alpha).endVertex(); - renderer.vertex(m, x, y + height, 0).color(red, green, blue, alpha).endVertex(); - renderer.vertex(m, x + width, y + height, 0).color(red, green, blue, alpha).endVertex(); - renderer.vertex(m, x + width, y, 0).color(red, green, blue, alpha).endVertex(); - t.end(); + var buffer = t.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + buffer.addVertex(m, x, y, 0).setColor(red, green, blue, alpha); + buffer.addVertex(m, x, y + height, 0).setColor(red, green, blue, alpha); + buffer.addVertex(m, x + width, y + height, 0).setColor(red, green, blue, alpha); + buffer.addVertex(m, x + width, y, 0).setColor(red, green, blue, alpha); + BufferUploader.drawWithShader(buffer.buildOrThrow()); } public static void pushScissor(Window screen, int x, int y, int w, int h) { diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/ui/ScreenWrapper.java b/common/src/main/java/dev/ftb/mods/ftblibrary/ui/ScreenWrapper.java index ecc6fd21..0d410166 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/ui/ScreenWrapper.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/ui/ScreenWrapper.java @@ -117,7 +117,7 @@ public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTi wrappedGui.draw(graphics, theme, x, y, w, h); wrappedGui.drawForeground(graphics, theme, x, y, w, h); - wrappedGui.addMouseOverText(tooltipList); //getContextMenu().orElse(wrappedGui).addMouseOverText(tooltipList); + wrappedGui.addMouseOverText(tooltipList); if (!tooltipList.shouldRender()) { wrappedGui.getIngredientUnderMouse().ifPresent(underMouse -> { @@ -137,7 +137,6 @@ public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTi graphics.renderTooltip(theme.getFont(), tooltipList.getLines(), Optional.empty(), mouseX, Math.max(mouseY, 18)); graphics.setColor(1f, 1f, 1f, 1f); graphics.pose().translate(0, 0, -600); -// tooltipList.render(graphics, mouseX, Math.max(mouseY, 18), wrappedGui.getScreen().getGuiScaledWidth(), wrappedGui.getScreen().getGuiScaledHeight(), theme.getFont()); } tooltipList.reset(); diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/ui/misc/LoadingScreen.java b/common/src/main/java/dev/ftb/mods/ftblibrary/ui/misc/LoadingScreen.java index c9246bf7..3fa5461e 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/ui/misc/LoadingScreen.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/ui/misc/LoadingScreen.java @@ -1,6 +1,7 @@ package dev.ftb.mods.ftblibrary.ui.misc; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferUploader; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexFormat; @@ -8,6 +9,7 @@ import dev.ftb.mods.ftblibrary.ui.BaseScreen; import dev.ftb.mods.ftblibrary.ui.GuiHelper; import dev.ftb.mods.ftblibrary.ui.Theme; +import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.GameRenderer; @@ -51,9 +53,7 @@ public void drawBackground(GuiGraphics graphics, Theme theme, int x, int y, int var col = Color4I.WHITE; RenderSystem.setShader(GameRenderer::getPositionColorShader); - var tesselator = Tesselator.getInstance(); - var buffer = tesselator.getBuilder(); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + var buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); GuiHelper.addRectToBuffer(graphics, buffer, x1, y1 + 1, 1, h1 - 2, col); GuiHelper.addRectToBuffer(graphics, buffer, x1 + w1 - 1, y1 + 1, 1, h1 - 2, col); @@ -65,7 +65,9 @@ public void drawBackground(GuiGraphics graphics, Theme theme, int x, int y, int w1 -= 2; h1 -= 2; - timer += Minecraft.getInstance().getDeltaFrameTime(); + DeltaTracker d = Minecraft.getInstance().getTimer(); + + timer += d.getRealtimeDeltaTicks(); timer = timer % (h1 * 2F); for (var oy = 0; oy < h1; oy++) { @@ -80,7 +82,7 @@ public void drawBackground(GuiGraphics graphics, Theme theme, int x, int y, int } } - tesselator.end(); + BufferUploader.drawWithShader(buffer.buildOrThrow()); var s = getText(); diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/ui/misc/SimpleToast.java b/common/src/main/java/dev/ftb/mods/ftblibrary/ui/misc/SimpleToast.java index 4fee1ad4..279db571 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/ui/misc/SimpleToast.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/ui/misc/SimpleToast.java @@ -1,6 +1,5 @@ package dev.ftb.mods.ftblibrary.ui.misc; -import com.mojang.blaze3d.platform.Lighting; import dev.ftb.mods.ftblibrary.icon.Icon; import dev.ftb.mods.ftblibrary.icon.Icons; import dev.ftb.mods.ftblibrary.ui.GuiHelper; @@ -14,7 +13,7 @@ import net.minecraft.util.Mth; public class SimpleToast implements Toast { - private static final ResourceLocation BACKGROUND_SPRITE = new ResourceLocation("toast/advancement"); + private static final ResourceLocation BACKGROUND_SPRITE = ResourceLocation.parse("toast/advancement"); private boolean hasPlayedSound = false; @Override diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/util/StringUtils.java b/common/src/main/java/dev/ftb/mods/ftblibrary/util/StringUtils.java index c2568a71..20432a0d 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/util/StringUtils.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/util/StringUtils.java @@ -1,6 +1,7 @@ package dev.ftb.mods.ftblibrary.util; import dev.ftb.mods.ftblibrary.math.Bits; +import net.minecraft.resources.ResourceLocation; import net.minecraft.util.StringRepresentable; import org.jetbrains.annotations.Nullable; diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/util/TooltipList.java b/common/src/main/java/dev/ftb/mods/ftblibrary/util/TooltipList.java index a2c784da..8af9b9f7 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/util/TooltipList.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/util/TooltipList.java @@ -1,23 +1,12 @@ package dev.ftb.mods.ftblibrary.util; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.*; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; import net.minecraft.ChatFormatting; -import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; -import net.minecraft.util.FormattedCharSequence; -import org.joml.Matrix4f; import java.util.ArrayList; import java.util.List; - public class TooltipList { private final List lines = new ArrayList<>(); public int zOffset = 950; @@ -76,153 +65,4 @@ public void translate(String key, Object... objects) { public List getLines() { return lines; } - - @Environment(EnvType.CLIENT) - public void render(GuiGraphics graphics, int mouseX, int mouseY, int screenWidth, int screenHeight, Font font) { - mouseX += xOffset; - mouseY += yOffset; - - List textLines = new ArrayList<>(lines.size()); - - for (var component : lines) { - textLines.add(component.getVisualOrderText()); - } - - RenderSystem.disableDepthTest(); - var tooltipTextWidth = 0; - - for (var textLine : textLines) { - var textLineWidth = font.width(textLine); - if (textLineWidth > tooltipTextWidth) { - tooltipTextWidth = textLineWidth; - } - } - - var needsWrap = false; - - var titleLinesCount = 1; - var tooltipX = mouseX + 12; - if (tooltipX + tooltipTextWidth + 4 > screenWidth) { - tooltipX = mouseX - 16 - tooltipTextWidth; - if (tooltipX < 4) // if the tooltip doesn't fit on the screen - { - if (mouseX > screenWidth / 2) { - tooltipTextWidth = mouseX - 12 - 8; - } else { - tooltipTextWidth = screenWidth - 16 - mouseX; - } - needsWrap = true; - } - } - - if (maxWidth > 0 && tooltipTextWidth > maxWidth) { - tooltipTextWidth = maxWidth; - needsWrap = true; - } - - if (needsWrap) { - var wrappedTooltipWidth = 0; - List wrappedTextLines = new ArrayList<>(); - for (var i = 0; i < lines.size(); i++) { - var textLine = lines.get(i); - var wrappedLine = font.split(textLine, tooltipTextWidth); - if (i == 0) { - titleLinesCount = wrappedLine.size(); - } - - for (var line : wrappedLine) { - var lineWidth = font.width(line); - if (lineWidth > wrappedTooltipWidth) { - wrappedTooltipWidth = lineWidth; - } - wrappedTextLines.add(line); - } - } - tooltipTextWidth = wrappedTooltipWidth; - textLines = wrappedTextLines; - - if (mouseX > screenWidth / 2) { - tooltipX = mouseX - 16 - tooltipTextWidth; - } else { - tooltipX = mouseX + 12; - } - } - - var tooltipY = mouseY - 12; - var tooltipHeight = 8; - - if (textLines.size() > 1) { - tooltipHeight += (textLines.size() - 1) * 10; - if (textLines.size() > titleLinesCount) { - tooltipHeight += 2; // gap between title lines and next lines - } - } - - if (tooltipY < 4) { - tooltipY = 4; - } else if (tooltipY + tooltipHeight + 4 > screenHeight) { - tooltipY = screenHeight - tooltipHeight - 4; - } - - PoseStack poseStack = graphics.pose(); - poseStack.pushPose(); - poseStack.translate(0, 0, zOffset); - var mat = poseStack.last().pose(); - RenderSystem.enableDepthTest(); - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - - var tesselator = Tesselator.getInstance(); - var buffer = tesselator.getBuilder(); - RenderSystem.setShader(GameRenderer::getPositionColorShader); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); - drawGradientRect(mat, buffer, tooltipX - 3, tooltipY - 4, tooltipX + tooltipTextWidth + 3, tooltipY - 3, backgroundColor, backgroundColor); - drawGradientRect(mat, buffer, tooltipX - 3, tooltipY + tooltipHeight + 3, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 4, backgroundColor, backgroundColor); - drawGradientRect(mat, buffer, tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor); - drawGradientRect(mat, buffer, tooltipX - 4, tooltipY - 3, tooltipX - 3, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor); - drawGradientRect(mat, buffer, tooltipX + tooltipTextWidth + 3, tooltipY - 3, tooltipX + tooltipTextWidth + 4, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor); - drawGradientRect(mat, buffer, tooltipX - 3, tooltipY - 3 + 1, tooltipX - 3 + 1, tooltipY + tooltipHeight + 3 - 1, borderColorStart, borderColorEnd); - drawGradientRect(mat, buffer, tooltipX + tooltipTextWidth + 2, tooltipY - 3 + 1, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3 - 1, borderColorStart, borderColorEnd); - drawGradientRect(mat, buffer, tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3, tooltipY - 3 + 1, borderColorStart, borderColorStart); - drawGradientRect(mat, buffer, tooltipX - 3, tooltipY + tooltipHeight + 2, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3, borderColorEnd, borderColorEnd); - tesselator.end(); - - RenderSystem.disableBlend(); - var renderType = MultiBufferSource.immediate(buffer); - - for (var lineNumber = 0; lineNumber < textLines.size(); ++lineNumber) { - var line = textLines.get(lineNumber); - if (line != null) { - font.drawInBatch(line, (float) tooltipX, (float) tooltipY, -1, true, mat, renderType, Font.DisplayMode.NORMAL, 0, 15728880); - } - - if (lineNumber + 1 == titleLinesCount) { - tooltipY += 2; - } - - tooltipY += 10; - } - - renderType.endBatch(); - poseStack.popPose(); - - RenderSystem.enableDepthTest(); - } - - @Environment(EnvType.CLIENT) - private static void drawGradientRect(Matrix4f mat, BufferBuilder buffer, int left, int top, int right, int bottom, int startColor, int endColor) { - var startAlpha = (startColor >> 24) & 255; - var startRed = (startColor >> 16) & 255; - var startGreen = (startColor >> 8) & 255; - var startBlue = startColor & 255; - var endAlpha = (endColor >> 24) & 255; - var endRed = (endColor >> 16) & 255; - var endGreen = (endColor >> 8) & 255; - var endBlue = endColor & 255; - - buffer.vertex(mat, right, top, 0).color(startRed, startGreen, startBlue, startAlpha).endVertex(); - buffer.vertex(mat, left, top, 0).color(startRed, startGreen, startBlue, startAlpha).endVertex(); - buffer.vertex(mat, left, bottom, 0).color(endRed, endGreen, endBlue, endAlpha).endVertex(); - buffer.vertex(mat, right, bottom, 0).color(endRed, endGreen, endBlue, endAlpha).endVertex(); - } } diff --git a/common/src/main/java/dev/ftb/mods/ftblibrary/util/client/ClientUtils.java b/common/src/main/java/dev/ftb/mods/ftblibrary/util/client/ClientUtils.java index b3f39bd0..1418f2d0 100644 --- a/common/src/main/java/dev/ftb/mods/ftblibrary/util/client/ClientUtils.java +++ b/common/src/main/java/dev/ftb/mods/ftblibrary/util/client/ClientUtils.java @@ -139,16 +139,18 @@ public static boolean handleClick(String scheme, String path) { return false; } case "custom": - if (ResourceLocation.isValidResourceLocation(path)) { - return CustomClickEvent.EVENT.invoker().act(new CustomClickEvent(new ResourceLocation(path))).isPresent(); - } + return ResourceLocation.read(path).result() + .map(rl -> CustomClickEvent.EVENT.invoker().act(new CustomClickEvent(rl)).isPresent()) + .orElse(false); default: - if (ResourceLocation.isValidResourceLocation(scheme + ":" + path)) { - return CustomClickEvent.EVENT.invoker().act(new CustomClickEvent(new ResourceLocation(scheme, path))).isPresent(); + boolean res = ResourceLocation.read(scheme + ":" + path).result() + .map(rl -> CustomClickEvent.EVENT.invoker().act(new CustomClickEvent(rl)).isPresent()) + .orElse(false); + if (!res) { + FTBLibrary.LOGGER.warn("invalid scheme/path resourcelocation for handleClick(): {}:{}", scheme, path); } + return res; } - FTBLibrary.LOGGER.warn("invalid scheme/path resourcelocation for handleClick(): {}:{}", scheme, path); - return false; } public static HolderLookup.Provider registryAccess() { diff --git a/fabric/build.gradle b/fabric/build.gradle index 8b34824b..09861260 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -1,10 +1,7 @@ plugins { id "com.github.johnrengelman.shadow" version "7.0.0" - id "com.matthewprenger.cursegradle" version "1.4.0" } -def ENV = System.getenv() - architectury { platformSetupLoomIde() fabric() @@ -33,8 +30,7 @@ dependencies { modApi "dev.architectury:architectury-fabric:${rootProject.architectury_version}" -// modCompileOnlyApi("mezz.jei:jei-${minecraft_version}-fabric-api:${jei_version}") - modCompileOnlyApi("mezz.jei:jei-1.20.4-fabric-api:${jei_version}") + modCompileOnlyApi("mezz.jei:jei-${minecraft_version}-fabric-api:${jei_version}") common(project(path: ":common", configuration: "dev")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } @@ -73,26 +69,6 @@ components.java { } } -if (ENV.CURSEFORGE_KEY) { - curseforge { - apiKey = ENV.CURSEFORGE_KEY - project { - id = project.curseforge_id_fabric - releaseType = ftbPublishing.relType - addGameVersion "Fabric" - addGameVersion rootProject.minecraft_version - mainArtifact(remapJar.archiveFile) - relations { - requiredDependency 'architectury-api' - optionalDependency 'jei' - optionalDependency 'roughly-enough-items' - } - changelog = ENV.CHANGELOG // expected to exist if ENV.CURSEFORGE does - changelogType = 'markdown' - } - } -} - publishing { publications { mavenFabric(MavenPublication) { @@ -101,28 +77,4 @@ publishing { from components.java } } - - repositories { - if (ftbPublishing.ftbToken) { - maven { - url ftbPublishing.ftbURL - credentials { - username = ftbPublishing.ftbUser - password = ftbPublishing.ftbToken - } - } - } - - if (ftbPublishing.sapsToken) { - maven { - url ftbPublishing.sapsURL - credentials { - username = ftbPublishing.sapsUser - password = ftbPublishing.sapsToken - } - } - } - } } - -rootProject.tasks.getByName("curseforgePublish").dependsOn tasks.getByName("curseforge") diff --git a/fabric/src/main/java/dev/ftb/mods/ftblibrary/fabric/PlayerDisplayNameCallback.java b/fabric/src/main/java/dev/ftb/mods/ftblibrary/fabric/PlayerDisplayNameCallback.java index e4a65795..ed36d09e 100644 --- a/fabric/src/main/java/dev/ftb/mods/ftblibrary/fabric/PlayerDisplayNameCallback.java +++ b/fabric/src/main/java/dev/ftb/mods/ftblibrary/fabric/PlayerDisplayNameCallback.java @@ -8,8 +8,8 @@ import net.minecraft.world.entity.player.Player; public interface PlayerDisplayNameCallback { - ResourceLocation EARLY = new ResourceLocation(FTBLibrary.MOD_ID, "early"); - ResourceLocation LATE = new ResourceLocation(FTBLibrary.MOD_ID, "late"); + ResourceLocation EARLY = FTBLibrary.rl("early"); + ResourceLocation LATE = FTBLibrary.rl("late"); Event EVENT = EventFactory.createWithPhases(PlayerDisplayNameCallback.class, (listeners) -> ((player, originalName) -> { diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 943603e9..1f373341 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -33,7 +33,7 @@ ], "depends": { "fabric": ">=${fabricapiversion}", - "minecraft": "~1.20", + "minecraft": "~${mcversion}", "architectury": ">=${archversion}" } } diff --git a/forge/build.gradle b/forge/build.gradle index 683f6516..a9d90f91 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -1,6 +1,5 @@ plugins { id "com.github.johnrengelman.shadow" version "7.0.0" - id "com.matthewprenger.cursegradle" version "1.4.0" } def ENV = System.getenv() @@ -105,26 +104,6 @@ components.java { } } -if (ENV.CURSEFORGE_KEY) { - curseforge { - apiKey = ENV.CURSEFORGE_KEY - project { - id = project.curseforge_id_forge - releaseType = ftbPublishing.relType - addGameVersion "Forge" - addGameVersion rootProject.minecraft_version - mainArtifact(remapJar.archiveFile) - relations { - requiredDependency 'architectury-api' - optionalDependency 'jei' - optionalDependency 'roughly-enough-items' - } - changelog = ENV.CHANGELOG // expected to exist if ENV.CURSEFORGE does - changelogType = 'markdown' - } - } -} - publishing { publications { mavenForge(MavenPublication) { @@ -133,28 +112,4 @@ publishing { from components.java } } - - repositories { - if (ftbPublishing.ftbToken) { - maven { - url ftbPublishing.ftbURL - credentials { - username = ftbPublishing.ftbUser - password = ftbPublishing.ftbToken - } - } - } - - if (ftbPublishing.sapsToken) { - maven { - url ftbPublishing.sapsURL - credentials { - username = ftbPublishing.sapsUser - password = ftbPublishing.sapsToken - } - } - } - } -} - -rootProject.tasks.getByName("curseforgePublish").dependsOn tasks.getByName("curseforge") +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 82ee8b6e..354ebd40 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,8 @@ org.gradle.daemon=false # Mod mod_id=ftblibrary -mod_version=2006.1.2 +readable_name=FTB Library +mod_version=2100.1.0 mod_author=FTB Team # Maven @@ -11,21 +12,21 @@ archives_base_name=ftb-library maven_group=dev.ftb.mods # MC -minecraft_version=1.20.6 +minecraft_version=1.21 # Deps forge_version=49.0.31 -neoforge_version=20.6.116 -neoforge_loader_version=1 -fabric_loader_version=0.15.10 -fabric_api_version=0.99.0+1.20.6 +neoforge_version=21.0.14-beta +neoforge_loader_version=4 +fabric_loader_version=0.15.11 +fabric_api_version=0.100.1+1.21 -architectury_version=12.1.3 +architectury_version=13.0.1 # There are too many of these now -rei_version=15.0.728 -jei_version=17.3.0.49 -emi_version=1.1.3 +rei_version=16.0.729 +jei_version=19.0.0.3 +emi_version=1.1.7 # mod_menu_version=1.14.6+ curseforge_id_forge=404465 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 48c0a02c..0d184210 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/neoforge/build.gradle b/neoforge/build.gradle index f272c74d..66db15db 100644 --- a/neoforge/build.gradle +++ b/neoforge/build.gradle @@ -1,10 +1,7 @@ plugins { id "com.github.johnrengelman.shadow" version "7.0.0" - id "com.matthewprenger.cursegradle" version "1.4.0" } -def ENV = System.getenv() - architectury { platformSetupLoomIde() neoForge() @@ -39,8 +36,7 @@ dependencies { modApi "dev.architectury:architectury-neoforge:${rootProject.architectury_version}" modCompileOnly "me.shedaniel:RoughlyEnoughItems-neoforge:${rootProject.rei_version}" -// modCompileOnly("mezz.jei:jei-${minecraft_version}-neoforge-api:${jei_version}") - modCompileOnly("mezz.jei:jei-1.20.4-neoforge-api:${jei_version}") + modCompileOnly("mezz.jei:jei-${minecraft_version}-neoforge-api:${jei_version}") common(project(path: ":common", configuration: "dev")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionNeoForge")) { transitive false } @@ -97,26 +93,6 @@ components.java { } } -if (ENV.CURSEFORGE_KEY) { - curseforge { - apiKey = ENV.CURSEFORGE_KEY - project { - id = project.curseforge_id_forge - releaseType = ftbPublishing.relType - addGameVersion "NeoForge" - addGameVersion rootProject.minecraft_version - mainArtifact(remapJar.archiveFile) - relations { - requiredDependency 'architectury-api' - optionalDependency 'jei' - optionalDependency 'roughly-enough-items' - } - changelog = ENV.CHANGELOG // expected to exist if ENV.CURSEFORGE does - changelogType = 'markdown' - } - } -} - publishing { publications { mavenForge(MavenPublication) { @@ -125,28 +101,4 @@ publishing { from components.java } } - - repositories { - if (ftbPublishing.ftbToken) { - maven { - url ftbPublishing.ftbURL - credentials { - username = ftbPublishing.ftbUser - password = ftbPublishing.ftbToken - } - } - } - - if (ftbPublishing.sapsToken) { - maven { - url ftbPublishing.sapsURL - credentials { - username = ftbPublishing.sapsUser - password = ftbPublishing.sapsToken - } - } - } - } } - -rootProject.tasks.getByName("curseforgePublish").dependsOn tasks.getByName("curseforge") diff --git a/settings.gradle b/settings.gradle index 5d3c9e75..26a6ade7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -8,4 +8,4 @@ pluginManagement { include "common", "fabric", "neoforge" // , "forge" -rootProject.name = 'FTB-Library-1.20.6' +rootProject.name = 'FTB-Library-1.21'