diff options
author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2024-02-05 22:09:46 -0500 |
---|---|---|
committer | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2024-04-26 16:23:19 -0400 |
commit | a0588bc0fce38990f06e66b5be9c89417217408f (patch) | |
tree | 1657452eb0d0e80df463fe62965f6f67d67b3be2 /src/main/java/de | |
parent | 37ad3ca7aa844bf0db54e7ee21e35837fd3cbbc1 (diff) | |
download | Skyblocker-a0588bc0fce38990f06e66b5be9c89417217408f.tar.gz Skyblocker-a0588bc0fce38990f06e66b5be9c89417217408f.tar.bz2 Skyblocker-a0588bc0fce38990f06e66b5be9c89417217408f.zip |
24w05a/b
Diffstat (limited to 'src/main/java/de')
14 files changed, 90 insertions, 36 deletions
diff --git a/src/main/java/de/hysky/skyblocker/debug/Debug.java b/src/main/java/de/hysky/skyblocker/debug/Debug.java index 86adcac6..5a9d221b 100644 --- a/src/main/java/de/hysky/skyblocker/debug/Debug.java +++ b/src/main/java/de/hysky/skyblocker/debug/Debug.java @@ -20,6 +20,7 @@ public class Debug { public static void init() { if (debugEnabled()) { + SnapshotDebug.init(); ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(literal("debug") .then(dumpPlayersCommand()) .then(ItemUtils.dumpHeldItemNbtCommand()) diff --git a/src/main/java/de/hysky/skyblocker/debug/SnapshotDebug.java b/src/main/java/de/hysky/skyblocker/debug/SnapshotDebug.java new file mode 100644 index 00000000..bd4abd2c --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/debug/SnapshotDebug.java @@ -0,0 +1,32 @@ +package de.hysky.skyblocker.debug; + +import de.hysky.skyblocker.utils.render.RenderHelper; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.SharedConstants; +import net.minecraft.text.Text; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +public class SnapshotDebug { + private static final float[] RED = { 1.0f, 0.0f, 0.0f }; + private static final float ALPHA = 0.5f; + private static final float LINE_WIDTH = 8f; + + private static boolean isInSnapshot() { + return !SharedConstants.getGameVersion().isStable(); + } + + static void init() { + if (isInSnapshot()) { + WorldRenderEvents.AFTER_TRANSLUCENT.register(SnapshotDebug::renderTest); + } + } + + private static void renderTest(WorldRenderContext wrc) { + RenderHelper.renderFilledWithBeaconBeam(wrc, new BlockPos(175, 63, -14), RED, ALPHA, true); + RenderHelper.renderLinesFromPoints(wrc, new Vec3d[] { new Vec3d(173, 66, -7.5), new Vec3d(178, 66, -7.5) }, RED, ALPHA, LINE_WIDTH, false); + RenderHelper.renderQuad(wrc, new Vec3d[] { new Vec3d(183, 66, -16), new Vec3d(183, 63, -16), new Vec3d(183, 63, -14), new Vec3d(183, 66, -14) }, RED, ALPHA, false); + RenderHelper.renderText(wrc, Text.of("Skyblocker on " + SharedConstants.getGameVersion().getName() + "!"), new Vec3d(175.5, 67.5, -7.5), false); + } +} diff --git a/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java b/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java index b9bdb523..e13c41ee 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java @@ -18,7 +18,7 @@ import java.util.Optional; public class ArmorTrimMixin { @ModifyReturnValue(method = "getTrim", at = @At("RETURN")) - private static Optional<ArmorTrim> skyblocker$customArmorTrims(@SuppressWarnings("OptionalUsedAsFieldOrParameterType") Optional<ArmorTrim> original, @Local ItemStack stack) { + private static Optional<ArmorTrim> skyblocker$customArmorTrims(@SuppressWarnings("OptionalUsedAsFieldOrParameterType") Optional<ArmorTrim> original, @Local(argsOnly = true) ItemStack stack) { if (Utils.isOnSkyblock()) { Object2ObjectOpenHashMap<String, CustomArmorTrims.ArmorTrimId> customTrims = SkyblockerConfigManager.get().general.customArmorTrims; String itemUuid = ItemUtils.getItemUuid(stack); diff --git a/src/main/java/de/hysky/skyblocker/mixin/DrawContextMixin.java b/src/main/java/de/hysky/skyblocker/mixin/DrawContextMixin.java index b33a8b23..e2979040 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/DrawContextMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/DrawContextMixin.java @@ -65,7 +65,7 @@ public abstract class DrawContextMixin { @ModifyExpressionValue(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/ItemCooldownManager;getCooldownProgress(Lnet/minecraft/item/Item;F)F")) - private float skyblocker$modifyItemCooldown(float cooldownProgress, @Local ItemStack stack) { + private float skyblocker$modifyItemCooldown(float cooldownProgress, @Local(argsOnly = true) ItemStack stack) { return Utils.isOnSkyblock() && ItemCooldowns.isOnCooldown(stack) ? ItemCooldowns.getItemCooldownEntry(stack).getRemainingCooldownPercent() : cooldownProgress; } } diff --git a/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java b/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java index 64f6a452..b20b58b5 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java @@ -13,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.At; @Mixin(DyeableItem.class) public interface DyeableItemMixin { @ModifyReturnValue(method = "getColor", at = @At("RETURN")) - private int skyblocker$customDyeColor(int originalColor, ItemStack stack) { + private static int skyblocker$customDyeColor(int originalColor, ItemStack stack) { if (Utils.isOnSkyblock()) { String itemUuid = ItemUtils.getItemUuid(stack); diff --git a/src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java b/src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java index b0970b4b..fc0d58b7 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java @@ -51,16 +51,11 @@ public abstract class InGameHudMixin { private final FancyStatusBars statusBars = new FancyStatusBars(); @Shadow - private int scaledHeight; - @Shadow - private int scaledWidth; - - @Shadow @Final private MinecraftClient client; @Inject(method = "renderHotbar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/InGameHud;renderHotbarItem(Lnet/minecraft/client/gui/DrawContext;IIFLnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/item/ItemStack;I)V", ordinal = 0)) - public void skyblocker$renderHotbarItemLockOrRarityBg(float tickDelta, DrawContext context, CallbackInfo ci, @Local(ordinal = 4, name = "m") int index, @Local(ordinal = 5, name = "n") int x, @Local(ordinal = 6, name = "o") int y, @Local PlayerEntity player) { + public void skyblocker$renderHotbarItemLockOrRarityBg(CallbackInfo ci, @Local(argsOnly = true) DrawContext context, @Local(ordinal = 4, name = "m") int index, @Local(ordinal = 5, name = "n") int x, @Local(ordinal = 6, name = "o") int y, @Local PlayerEntity player) { if (Utils.isOnSkyblock()) { // slot lock if (SkyblockerConfigManager.get().general.itemInfoDisplay.itemRarityBackgrounds) ItemRarityBackgrounds.tryDraw(player.getInventory().main.get(index), context, x, y); @@ -88,7 +83,7 @@ public abstract class InGameHudMixin { private void skyblocker$renderStatusBars(DrawContext context, CallbackInfo ci) { if (!Utils.isOnSkyblock()) return; - if (statusBars.render(context, scaledWidth, scaledHeight)) + if (statusBars.render(context, context.getScaledWindowWidth(), context.getScaledWindowHeight())) ci.cancel(); if (Utils.isInDungeons() && DungeonScore.isDungeonStarted()) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java b/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java index e572d9dc..bc0eede8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java @@ -9,6 +9,7 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.hit.BlockHitResult; @@ -83,7 +84,7 @@ public class TeleportOverlay { private static void render(WorldRenderContext wrc, int range) { if (client.crosshairTarget != null && client.crosshairTarget.getType() == HitResult.Type.BLOCK && client.crosshairTarget instanceof BlockHitResult blockHitResult && client.crosshairTarget.squaredDistanceTo(client.player) < range * range) { render(wrc, blockHitResult); - } else if (client.interactionManager != null && range > client.interactionManager.getReachDistance()) { + } else if (client.interactionManager != null && range > client.player.getAttributeInstance(EntityAttributes.PLAYER_BLOCK_INTERACTION_RANGE).getValue()) { @SuppressWarnings("DataFlowIssue") HitResult result = client.player.raycast(range, wrc.tickDelta(), false); if (result.getType() == HitResult.Type.BLOCK && result instanceof BlockHitResult blockHitResult) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/TicTacToe.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/TicTacToe.java index a9b88b3d..e4c51e69 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/TicTacToe.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/TicTacToe.java @@ -8,7 +8,6 @@ import de.hysky.skyblocker.utils.tictactoe.TicTacToeUtils; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.decoration.ItemFrameEntity; -import net.minecraft.item.FilledMapItem; import net.minecraft.item.map.MapState; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; @@ -54,7 +53,7 @@ public class TicTacToe extends DungeonPuzzle { char[][] board = new char[3][3]; for (ItemFrameEntity itemFrame : itemFramesThatHoldMaps) { - MapState mapState = client.world.getMapState(FilledMapItem.getMapName(itemFrame.getMapId().getAsInt())); + MapState mapState = client.world.getMapState(itemFrame.getMapId()); if (mapState == null) continue; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java index 86997cd3..c90f1134 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java @@ -35,6 +35,7 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; +import net.minecraft.command.CommandRegistryAccess; import net.minecraft.command.CommandSource; import net.minecraft.command.argument.BlockPosArgumentType; import net.minecraft.command.argument.PosArgument; @@ -244,8 +245,8 @@ public class DungeonManager { .then(literal("markAsMissing").then(markSecretsCommand(false))) .then(literal("getRelativePos").executes(DungeonManager::getRelativePos)) .then(literal("getRelativeTargetPos").executes(DungeonManager::getRelativeTargetPos)) - .then(literal("addWaypoint").then(addCustomWaypointCommand(false))) - .then(literal("addWaypointRelatively").then(addCustomWaypointCommand(true))) + .then(literal("addWaypoint").then(addCustomWaypointCommand(false, registryAccess))) + .then(literal("addWaypointRelatively").then(addCustomWaypointCommand(true, registryAccess))) .then(literal("removeWaypoint").then(removeCustomWaypointCommand(false))) .then(literal("removeWaypointRelatively").then(removeCustomWaypointCommand(true))) )))); @@ -385,11 +386,11 @@ public class DungeonManager { return Command.SINGLE_SUCCESS; } - private static RequiredArgumentBuilder<FabricClientCommandSource, PosArgument> addCustomWaypointCommand(boolean relative) { + private static RequiredArgumentBuilder<FabricClientCommandSource, PosArgument> addCustomWaypointCommand(boolean relative, CommandRegistryAccess registryAccess) { return argument("pos", BlockPosArgumentType.blockPos()) .then(argument("secretIndex", IntegerArgumentType.integer()) .then(argument("category", SecretWaypoint.Category.CategoryArgumentType.category()) - .then(argument("name", TextArgumentType.text()).executes(context -> { + .then(argument("name", TextArgumentType.text(registryAccess)).executes(context -> { // TODO Less hacky way with custom ClientBlockPosArgumentType BlockPos pos = context.getArgument("pos", PosArgument.class).toAbsoluteBlockPos(new ServerCommandSource(null, context.getSource().getPosition(), context.getSource().getRotation(), null, 0, null, null, null, null)); return relative ? addCustomWaypointRelative(context, pos) : addCustomWaypoint(context, pos); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomItemNames.java b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomItemNames.java index e47444cf..e1af788e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomItemNames.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomItemNames.java @@ -26,7 +26,7 @@ public class CustomItemNames { .then(ClientCommandManager.literal("custom") .then(ClientCommandManager.literal("renameItem") .executes(context -> renameItem(context.getSource(), null)) - .then(ClientCommandManager.argument("textComponent", TextArgumentType.text()) + .then(ClientCommandManager.argument("textComponent", TextArgumentType.text(registryAccess)) .executes(context -> renameItem(context.getSource(), context.getArgument("textComponent", Text.class))))))); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/MuseumItemCache.java b/src/main/java/de/hysky/skyblocker/skyblock/item/MuseumItemCache.java index ae908245..a076277a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/MuseumItemCache.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/MuseumItemCache.java @@ -86,7 +86,7 @@ public class MuseumItemCache { for (Map.Entry<String, JsonElement> donatedSet : donatedSets.entrySet()) { //Item is plural here because the nbt is a list String itemsData = donatedSet.getValue().getAsJsonObject().get("items").getAsJsonObject().get("data").getAsString(); - NbtList items = NbtIo.readCompressed(new ByteArrayInputStream(Base64.getDecoder().decode(itemsData)), NbtTagSizeTracker.ofUnlimitedBytes()).getList("i", NbtElement.COMPOUND_TYPE); + NbtList items = NbtIo.readCompressed(new ByteArrayInputStream(Base64.getDecoder().decode(itemsData)), NbtSizeTracker.ofUnlimitedBytes()).getList("i", NbtElement.COMPOUND_TYPE); for (int i = 0; i < items.size(); i++) { NbtCompound tag = items.getCompound(i).getCompound("tag"); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java index ea24dc63..562c244c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java @@ -202,8 +202,8 @@ public class ItemTooltip { String uuid = ItemUtils.getItemUuid(stack); boolean hasCustomDye = SkyblockerConfigManager.get().general.customDyeColors.containsKey(uuid) || SkyblockerConfigManager.get().general.customAnimatedDyes.containsKey(uuid); - if (!hasCustomDye && stack.getItem() instanceof DyeableItem item && item.hasColor(stack)) { - String colorHex = String.format("%06X", item.getColor(stack)); + if (!hasCustomDye && DyeableItem.hasColor(stack)) { + String colorHex = String.format("%06X", DyeableItem.getColor(stack)); String expectedHex = ExoticTooltip.getExpectedHex(internalID); boolean correctLine = false; diff --git a/src/main/java/de/hysky/skyblocker/utils/render/MatrixHelper.java b/src/main/java/de/hysky/skyblocker/utils/render/MatrixHelper.java new file mode 100644 index 00000000..220dbf86 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/render/MatrixHelper.java @@ -0,0 +1,30 @@ +package de.hysky.skyblocker.utils.render; + +import org.joml.Matrix4f; + +import net.minecraft.client.util.math.MatrixStack; + +/** + * Matrix helper methods + */ +public interface MatrixHelper { + + /** + * Copies the {@code matrix} into a new {@link Matrix4f}. This is necessary otherwise + * any transformations applied will affect other uses of the same matrix. + */ + static Matrix4f copyOf(Matrix4f matrix) { + return new Matrix4f(matrix); + } + + /** + * Creates a blank {@link MatrixStack} and sets it's position matrix to the supplied + * {@code positionMatrix}. + */ + static MatrixStack toStack(Matrix4f positionMatrix) { + MatrixStack matrices = new MatrixStack(); + matrices.peek().getPositionMatrix().set(positionMatrix); + + return matrices; + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java index da179d0e..4d97e733 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java @@ -26,6 +26,7 @@ import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.util.math.Vec3d; + import org.joml.Matrix3f; import org.joml.Matrix4f; import org.joml.Vector3f; @@ -243,15 +244,13 @@ public class RenderHelper { } public static void renderQuad(WorldRenderContext context, Vec3d[] points, float[] colorComponents, float alpha, boolean throughWalls) { + Matrix4f positionMatrix = new Matrix4f(); Vec3d camera = context.camera().getPos(); - MatrixStack matrices = context.matrixStack(); - matrices.push(); - matrices.translate(-camera.x, -camera.y, -camera.z); + positionMatrix.translate((float) -camera.x, (float) -camera.y, (float) -camera.z); Tessellator tessellator = RenderSystem.renderThreadTesselator(); BufferBuilder buffer = tessellator.getBuffer(); - Matrix4f positionMatrix = matrices.peek().getPositionMatrix(); RenderSystem.setShader(GameRenderer::getPositionColorProgram); RenderSystem.setShaderColor(1f, 1f, 1f, 1f); @@ -268,8 +267,6 @@ public class RenderHelper { RenderSystem.enableCull(); RenderSystem.depthFunc(GL11.GL_LEQUAL); - - matrices.pop(); } public static void renderText(WorldRenderContext context, Text text, Vec3d pos, boolean throughWalls) { @@ -290,19 +287,18 @@ public class RenderHelper { * @param throughWalls whether the text should be able to be seen through walls or not. */ public static void renderText(WorldRenderContext context, OrderedText text, Vec3d pos, float scale, float yOffset, boolean throughWalls) { - MatrixStack matrices = context.matrixStack(); - Vec3d camera = context.camera().getPos(); + Matrix4f positionMatrix = new Matrix4f(); + Camera camera = context.camera(); + Vec3d cameraPos = camera.getPos(); TextRenderer textRenderer = client.textRenderer; scale *= 0.025f; - matrices.push(); - matrices.translate(pos.getX() - camera.getX(), pos.getY() - camera.getY(), pos.getZ() - camera.getZ()); - matrices.peek().getPositionMatrix().mul(RenderSystem.getModelViewMatrix()); - matrices.multiply(context.camera().getRotation()); - matrices.scale(-scale, -scale, scale); + positionMatrix + .translate((float) (pos.getX() - cameraPos.getX()), (float) (pos.getY() - cameraPos.getY()), (float) (pos.getZ() - cameraPos.getZ())) + .rotate(camera.getRotation()) + .scale(-scale, -scale, scale); - Matrix4f positionMatrix = matrices.peek().getPositionMatrix(); float xOffset = -textRenderer.getWidth(text) / 2f; Tessellator tessellator = RenderSystem.renderThreadTesselator(); @@ -315,7 +311,6 @@ public class RenderHelper { consumers.draw(); RenderSystem.depthFunc(GL11.GL_LEQUAL); - matrices.pop(); } /** |