diff --git a/build.gradle b/build.gradle index 02c0bd1..ee1ee0e 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ apply plugin: 'maven-publish' apply plugin: 'org.spongepowered.mixin' group 'fr.atesab.xray' -version '2.3.1' +version '2.3.2' archivesBaseName = 'XrayMod' @@ -30,7 +30,7 @@ minecraft { mappings channel: 'official', version: '1.20' // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. - // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') + accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Default run configurations. // These can be tweaked, removed, or duplicated as needed. @@ -61,9 +61,26 @@ mixin { config 'atianxray.mixins.json' } +repositories { + // Put repositories for dependencies here + // ForgeGradle automatically adds the Forge maven and Maven Central for you + maven { + url "https://cursemaven.com" + content { + includeGroup "curse.maven" + } + } + + // If you have mod jar dependencies in ./libs, you can declare them as a repository like so: + // flatDir { + // dir 'libs' + // } +} + dependencies { minecraft 'net.minecraftforge:forge:1.20-46.0.13' annotationProcessor 'org.spongepowered:mixin:0.8.4:processor' + compileOnly fg.deobf("curse.maven:rubidium-574856:4952685") } // Example for how to get properties into the manifest for reading by the runtime.. diff --git a/src/main/java/fr/atesab/xray/XrayMain.java b/src/main/java/fr/atesab/xray/XrayMain.java index 75d482f..ad65b00 100644 --- a/src/main/java/fr/atesab/xray/XrayMain.java +++ b/src/main/java/fr/atesab/xray/XrayMain.java @@ -9,24 +9,6 @@ import java.util.stream.Collector; import java.util.stream.Collectors; -import com.mojang.blaze3d.platform.InputConstants; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.*; - -import net.minecraft.client.OptionInstance; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkStatus; -import net.minecraftforge.client.ConfigScreenHandler; -import net.minecraftforge.client.event.*; -import net.minecraftforge.eventbus.api.IEventBus; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.joml.Vector3f; @@ -34,6 +16,14 @@ import org.lwjgl.opengl.GL11; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import com.mojang.blaze3d.platform.InputConstants; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.VertexFormat; + import fr.atesab.xray.color.ColorSupplier; import fr.atesab.xray.color.IColorObject; import fr.atesab.xray.color.TextHudBuffer; @@ -51,23 +41,39 @@ import net.minecraft.client.Camera; import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; +import net.minecraft.client.OptionInstance; import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.resources.language.I18n; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import net.minecraftforge.client.ConfigScreenHandler; +import net.minecraftforge.client.event.InputEvent; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.client.event.RenderGuiOverlayEvent; +import net.minecraftforge.client.event.RenderLevelStageEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.TickEvent.Phase; +import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.common.Mod; @@ -97,7 +103,9 @@ public class XrayMain { private int internalFullbrightState = 0; - private KeyMapping configKey, fullbrightKey, locationEnableKey; + private boolean blueBlueSkyEnable = false; + + private KeyMapping configKey, fullbrightKey, locationEnableKey, blueBlueSkyKey; private XrayConfig config; @@ -194,7 +202,10 @@ public OptionInstance getGammaBypass() { return gammaBypass; } - + public boolean isBlueBlueSkyEnable() { + return blueBlueSkyEnable; + } + private static void log(String message) { log.info("[{}] {}", log.getName(), message); } @@ -303,6 +314,9 @@ public void onKeyEvent(InputEvent.Key ev) { if (configKey.consumeClick()) { client.setScreen(new XrayMenu(null)); } + if (blueBlueSkyKey.consumeClick()) { + blueBlueSkyEnable = !blueBlueSkyEnable; + } } @SubscribeEvent @@ -336,6 +350,13 @@ public void onHudRender(RenderGuiOverlayEvent ev) { .withStyle(s -> s.withColor(fullbrightMode.getColor())) ); } + if (blueBlueSkyEnable) { + //敢えて同色 + buffer.append( + Component.literal("[" + I18n.get("x13.mod.blueBlueSky") + "] ") + .withStyle(s -> s.withColor(fullbrightMode.getColor())) + ); + } } if (config.getLocationConfig().isEnabled()) { @@ -454,7 +475,8 @@ public void onRenderWorld(RenderLevelStageEvent ev) { blockPos.getX() + 1, blockPos.getY() + 1, blockPos.getZ() + 1 ); - LevelRenderer.renderLineBox(stack, buffer, aabb, r, g, b, a); + RenderUtils.renderLineBoxVanillaStyle(stack, buffer, aabb, r, g, b, a); + //LevelRenderer.renderLineBox(stack, buffer, aabb, r, g, b, a); if (esp.hasTracer()) { Vec3 center = aabb.getCenter(); @@ -500,7 +522,8 @@ public void onRenderWorld(RenderLevelStageEvent ev) { AABB aabb = type.getAABB(x, y, z); - LevelRenderer.renderLineBox(stack, buffer, aabb, r, g, b, a); + RenderUtils.renderLineBoxVanillaStyle(stack, buffer, aabb, r, g, b, a); + //LevelRenderer.renderLineBox(stack, buffer, aabb, r, g, b, a); if (esp.hasTracer()) { Vec3 center = aabb.getCenter(); @@ -533,10 +556,12 @@ private void registerKeyBinding(final RegisterKeyMappingsEvent ev) { fullbrightKey = new KeyMapping("x13.mod.fullbright", GLFW.GLFW_KEY_H, "key.categories.xray"); configKey = new KeyMapping("x13.mod.config", GLFW.GLFW_KEY_N, "key.categories.xray"); locationEnableKey = new KeyMapping("x13.mod.locationEnable", GLFW.GLFW_KEY_J, "key.categories.xray"); + blueBlueSkyKey = new KeyMapping("x13.mod.blueBlueSky", GLFW.GLFW_KEY_UNKNOWN, "key.categories.xray"); ev.register(fullbrightKey); ev.register(configKey); ev.register(locationEnableKey); + ev.register(blueBlueSkyKey); } private void setup(final FMLCommonSetupEvent event) { diff --git a/src/main/java/fr/atesab/xray/config/LocationFormatTool.java b/src/main/java/fr/atesab/xray/config/LocationFormatTool.java index d057852..0e0bec9 100644 --- a/src/main/java/fr/atesab/xray/config/LocationFormatTool.java +++ b/src/main/java/fr/atesab/xray/config/LocationFormatTool.java @@ -23,10 +23,11 @@ import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.resources.language.I18n; -import net.minecraft.core.Registry; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.Style; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.ItemLike; @@ -52,6 +53,8 @@ public class LocationFormatTool implements EnumElement { public static long currentHours; public static long currentMinutes; public static long currentSeconds; + public static int currentNutrition; + public static float currentSaturation; public static final ToolFunction EMPTY_FUNCTION = (mc, player, world) -> ""; public static final LocationFormatTool PLAYER_LOCATION_X = register("x13.mod.location.opt.x", Items.BOOK, "x", @@ -61,11 +64,15 @@ public class LocationFormatTool implements EnumElement { public static final LocationFormatTool PLAYER_LOCATION_Z = register("x13.mod.location.opt.z", Items.BOOK, "z", (mc, player, world) -> XrayMain.significantNumbers(player.position().z)); public static final LocationFormatTool PLAYER_LOCATION_FLOOR_X = register("x13.mod.location.opt.fx", Items.BOOK, "fx", - (mc, player, world) -> String.valueOf((int) player.position().x)); + (mc, player, world) -> String.valueOf(Mth.floor(player.position().x))); public static final LocationFormatTool PLAYER_LOCATION_FLOOR_Y = register("x13.mod.location.opt.fy", Items.BOOK, "fy", - (mc, player, world) -> String.valueOf((int) player.position().y)); + (mc, player, world) -> String.valueOf(Mth.floor(player.position().y))); public static final LocationFormatTool PLAYER_LOCATION_FLOOR_Z = register("x13.mod.location.opt.fz", Items.BOOK, "fz", - (mc, player, world) -> String.valueOf((int) player.position().z)); + (mc, player, world) -> String.valueOf(Mth.floor(player.position().z))); + public static final LocationFormatTool PLAYER_HORIZONTAL_DEGREE = register("x13.mod.location.opt.horizontalDegree", Items.RECOVERY_COMPASS, "Hdegree", + (mc, player, world) -> String.valueOf(Math.floorMod((int) player.getYRot() + 180, 360))); + public static final LocationFormatTool PLAYER_VERTICAL_DEGREE = register("x13.mod.location.opt.verticalDegree", Items.RECOVERY_COMPASS, "Vdegree", + (mc, player, world) -> String.valueOf((int) (-player.getXRot()))); public static final LocationFormatTool PLAYER_NAME = register("x13.mod.location.opt.name", Items.NAME_TAG, "name", (mc, player, world) -> player.getGameProfile().getName()); public static final LocationFormatTool FPS = register("x13.mod.location.opt.fps", Items.ITEM_FRAME, "fps", (mc, player, world) -> ""+mc.getFps()); public static final LocationFormatTool FPS_DEBUG = register("x13.mod.location.opt.fps.debug", Items.ITEM_FRAME, "dfps", (mc, player, world) -> mc.fpsString); @@ -84,10 +91,17 @@ public class LocationFormatTool implements EnumElement { public static final LocationFormatTool LOOKING_BLOCK_LIGHT = register("x13.mod.location.opt.lookingBlockLight", Items.REDSTONE_TORCH, "lookinglight", (mc, player, world) -> String.valueOf(world.getBrightness(LightLayer.BLOCK, LocationUtils.getLookingFaceBlockPos(mc, player)))); public static final LocationFormatTool LOOKINGBLOCK = register("x13.mod.location.opt.lookingBlock", Items.DIAMOND_ORE, "lookingblock", - (mc, player, world) -> ForgeRegistries.BLOCKS.getKey(world.getBlockState(LocationUtils.getLookingBlockPos(mc)).getBlock()).getPath()); + (mc, player, world) -> LocationUtils.getBlockName(world, LocationUtils.getLookingBlockPos(mc))); public static final LocationFormatTool LOOKINGBLOCK_TRANSLATE = register("x13.mod.location.opt.lookingTranslate", Items.DIAMOND_ORE, "lookingtranslate", - (mc, player, world) -> I18n.get(world.getBlockState(LocationUtils.getLookingBlockPos(mc)) - .getBlock().getDescriptionId())); + (mc, player, world) -> LocationUtils.getTranslatedBlockName(world, LocationUtils.getLookingBlockPos(mc))); + public static final LocationFormatTool LOOKINGBLOCK_REQUESTEDTOOL = register("x13.mod.location.opt.lookingRequestedTool", Items.DIAMOND_PICKAXE, "lookingreqtool", + (mc, player, world) -> LocationUtils.getCorrectToolText(world.getBlockState(LocationUtils.getLookingBlockPos(mc)))); + public static final LocationFormatTool LOOKINGBLOCK_DESTROYPROGRESS = register("x13.mod.location.opt.lookingDestoryProgress", Items.DIAMOND_PICKAXE, "lookingdestroyprog", + (mc, player, world) -> String.valueOf((int)(mc.gameMode.destroyProgress * 100)) + "%"); + public static final LocationFormatTool LOOKINGBLOCK_CROPGROWLEVEL = register("x13.mod.location.opt.lookingGrowthLevel", Items.WHEAT_SEEDS, "lookinggrowthlevel", + (mc, player, world) -> LocationUtils.getCropBlockGrowthlevelText(world, LocationUtils.getLookingBlockPos(mc), false)); + public static final LocationFormatTool LOOKINGBLOCK_CROPMAXLEVEL = register("x13.mod.location.opt.lookingMaxLevel", Items.WHEAT, "lookingmaxlevel", + (mc, player, world) -> LocationUtils.getCropBlockGrowthlevelText(world, LocationUtils.getLookingBlockPos(mc), true)); public static final LocationFormatTool FACING = register("x13.mod.location.opt.facing", Items.COMPASS, "face", (mc, player, world) -> player.getDirection().getName()); public static final LocationFormatTool DAYS_COUNT = register("x13.mod.location.opt.daysCount", Items.CLOCK, "d", @@ -102,9 +116,75 @@ public class LocationFormatTool implements EnumElement { (mc, player, world) -> LocationUtils.getTwoDigitNumberFormat().format(currentMinutes)); public static final LocationFormatTool TIME_SECONDS_PADDING = register("x13.mod.location.opt.secondsPadding", Items.CLOCK, "ss", (mc, player, world) -> LocationUtils.getTwoDigitNumberFormat().format(currentSeconds)); + public static final LocationFormatTool WEATHER = register("x13.mod.location.opt.weather", Items.CLOCK, "weather", + (mc, player, world) -> LocationUtils.getWeatherText(world)); public static final LocationFormatTool IS_SLIME = register("x13.mod.location.opt.isSlime", Items.SLIME_BALL, "slime", (mc, player, world) -> String.valueOf(LocationUtils.isSlimeChunk(mc, player.chunkPosition()))); - public static final LocationFormatTool NEW_LINE = register("x13.mod.location.opt.lineFeed",Items.WRITABLE_BOOK, "lf", + public static final LocationFormatTool NUTRITION = register("x13.mod.location.opt.nutrition", Items.BEEF, "nutrition", + (mc, player, world) -> String.valueOf(currentNutrition)); + public static final LocationFormatTool SATURATION = register("x13.mod.location.opt.saturation", Items.COOKED_BEEF, "saturation", + (mc, player, world) -> String.format("%.1f",currentSaturation)); + public static final LocationFormatTool MAINHAND_NAME = register("x13.mod.location.opt.mainhandName", Items.DIAMOND_SWORD, "mainhandName", + (mc, player, world) -> ForgeRegistries.ITEMS.getKey(player.getMainHandItem().getItem()).getPath()); + public static final LocationFormatTool MAINHAND_NAME_TRANSLATE = register("x13.mod.location.opt.mainhandTranslate", Items.DIAMOND_SWORD, "mainhandTranslate", + (mc, player, world) -> I18n.get(player.getMainHandItem().getDescriptionId()).toString()); + public static final LocationFormatTool MAINHAND_NAME_DISPLAYNAME = register("x13.mod.location.opt.mainhandDispName", Items.DIAMOND_SWORD, "mainhandDispName", + (mc, player, world) -> player.getMainHandItem().getHoverName().getString()); + public static final LocationFormatTool MAINHAND_DURABILITY = register("x13.mod.location.opt.mainhandDurability", Items.DIAMOND_SWORD, "mainhandDurability", + (mc, player, world) -> LocationUtils.getDurabilityOrFoodData(player.getMainHandItem())); + public static final LocationFormatTool MAINHAND_MAXDURABILITY = register("x13.mod.location.opt.mainhandMaxDurability", Items.DIAMOND_SWORD, "mainhandMaxDurability", + (mc, player, world) -> LocationUtils.getMaxDurabilityOrAfterFoodData(player.getMainHandItem(),currentNutrition,currentSaturation)); + public static final LocationFormatTool OFFHAND_NAME = register("x13.mod.location.opt.offhandName", Items.SHIELD, "offhandName", + (mc, player, world) -> ForgeRegistries.ITEMS.getKey(player.getOffhandItem().getItem()).getPath()); + public static final LocationFormatTool OFFHAND_NAME_TRANSLATE = register("x13.mod.location.opt.offhandTranslate", Items.SHIELD, "offhandTranslate", + (mc, player, world) -> I18n.get(player.getOffhandItem().getDescriptionId()).toString()); + public static final LocationFormatTool OFFHAND_NAME_DISPLAYNAME = register("x13.mod.location.opt.offhandDispName", Items.SHIELD, "offhandDispName", + (mc, player, world) -> player.getOffhandItem().getHoverName().getString()); + public static final LocationFormatTool OFFHAND_DURABILITY = register("x13.mod.location.opt.offhandDurability", Items.SHIELD, "offhandDurability", + (mc, player, world) -> LocationUtils.getDurabilityOrFoodData(player.getOffhandItem())); + public static final LocationFormatTool OFFHAND_MAXDURABILITY = register("x13.mod.location.opt.mainhandMaxDurability", Items.SHIELD, "offhandMaxDurability", + (mc, player, world) -> LocationUtils.getMaxDurabilityOrAfterFoodData(player.getOffhandItem(),currentNutrition,currentSaturation)); + public static final LocationFormatTool HELMET_NAME = register("x13.mod.location.opt.helmetName", Items.DIAMOND_HELMET, "helmetName", + (mc, player, world) -> ForgeRegistries.ITEMS.getKey(player.getItemBySlot(EquipmentSlot.HEAD).getItem()).getPath()); + public static final LocationFormatTool HELMET_NAME_TRANSLATE = register("x13.mod.location.opt.helmetTranslate", Items.DIAMOND_HELMET, "helmetTranslate", + (mc, player, world) -> I18n.get(player.getItemBySlot(EquipmentSlot.HEAD).getDescriptionId()).toString()); + public static final LocationFormatTool HELMET_NAME_DISPLAYNAME = register("x13.mod.location.opt.helmetDispName", Items.DIAMOND_HELMET, "helmetDispName", + (mc, player, world) -> player.getItemBySlot(EquipmentSlot.HEAD).getHoverName().getString()); + public static final LocationFormatTool HELMET_DURABILITY = register("x13.mod.location.opt.helmetDurability", Items.DIAMOND_HELMET, "helmetDurability", + (mc, player, world) -> String.valueOf(LocationUtils.getRemainDurability(player.getItemBySlot(EquipmentSlot.HEAD)))); + public static final LocationFormatTool HELMET_MAXDURABILITY = register("x13.mod.location.opt.helmetMaxDurability", Items.DIAMOND_HELMET, "helmetMaxDurability", + (mc, player, world) -> String.valueOf(player.getItemBySlot(EquipmentSlot.HEAD).getMaxDamage())); + public static final LocationFormatTool CHESTPLATE_NAME = register("x13.mod.location.opt.chestplateName", Items.DIAMOND_CHESTPLATE, "chestplateName", + (mc, player, world) -> ForgeRegistries.ITEMS.getKey(player.getItemBySlot(EquipmentSlot.CHEST).getItem()).getPath()); + public static final LocationFormatTool CHESTPLATE_NAME_TRANSLATE = register("x13.mod.location.opt.chestplateTranslate", Items.DIAMOND_CHESTPLATE, "chestplateTranslate", + (mc, player, world) -> I18n.get(player.getItemBySlot(EquipmentSlot.CHEST).getDescriptionId()).toString()); + public static final LocationFormatTool CHESTPLATE_NAME_DISPLAYNAME = register("x13.mod.location.opt.chestplateDispName", Items.DIAMOND_CHESTPLATE, "chestplateDispName", + (mc, player, world) -> player.getItemBySlot(EquipmentSlot.CHEST).getHoverName().getString()); + public static final LocationFormatTool CHESTPLATE_DURABILITY = register("x13.mod.location.opt.chestplateDurability", Items.DIAMOND_CHESTPLATE, "chestplateDurability", + (mc, player, world) -> String.valueOf(LocationUtils.getRemainDurability(player.getItemBySlot(EquipmentSlot.CHEST)))); + public static final LocationFormatTool CHESTPLATE_MAXDURABILITY = register("x13.mod.location.opt.chestplateMaxDurability", Items.DIAMOND_CHESTPLATE, "chestplateMaxDurability", + (mc, player, world) -> String.valueOf(player.getItemBySlot(EquipmentSlot.CHEST).getMaxDamage())); + public static final LocationFormatTool LEGGINGS_NAME = register("x13.mod.location.opt.leggingsName", Items.DIAMOND_LEGGINGS, "leggingsName", + (mc, player, world) -> ForgeRegistries.ITEMS.getKey(player.getItemBySlot(EquipmentSlot.LEGS).getItem()).getPath()); + public static final LocationFormatTool LEGGINGS_NAME_TRANSLATE = register("x13.mod.location.opt.leggingsTranslate", Items.DIAMOND_LEGGINGS, "leggingsTranslate", + (mc, player, world) -> I18n.get(player.getItemBySlot(EquipmentSlot.LEGS).getDescriptionId()).toString()); + public static final LocationFormatTool LEGGINGS_NAME_DISPLAYNAME = register("x13.mod.location.opt.leggingsDispName", Items.DIAMOND_LEGGINGS, "leggingsDispName", + (mc, player, world) -> player.getItemBySlot(EquipmentSlot.LEGS).getHoverName().getString()); + public static final LocationFormatTool LEGGINGS_DURABILITY = register("x13.mod.location.opt.leggingsDurability", Items.DIAMOND_LEGGINGS, "leggingsDurability", + (mc, player, world) -> String.valueOf(LocationUtils.getRemainDurability(player.getItemBySlot(EquipmentSlot.LEGS)))); + public static final LocationFormatTool LEGGINGS_MAXDURABILITY = register("x13.mod.location.opt.leggingsMaxDurability", Items.DIAMOND_LEGGINGS, "leggingsMaxDurability", + (mc, player, world) -> String.valueOf(player.getItemBySlot(EquipmentSlot.LEGS).getMaxDamage())); + public static final LocationFormatTool BOOTS_NAME = register("x13.mod.location.opt.bootsName", Items.DIAMOND_BOOTS, "bootsName", + (mc, player, world) -> ForgeRegistries.ITEMS.getKey(player.getItemBySlot(EquipmentSlot.FEET).getItem()).getPath()); + public static final LocationFormatTool BOOTS_NAME_TRANSLATE = register("x13.mod.location.opt.bootsTranslate", Items.DIAMOND_BOOTS, "bootsTranslate", + (mc, player, world) -> I18n.get(player.getItemBySlot(EquipmentSlot.FEET).getDescriptionId()).toString()); + public static final LocationFormatTool BOOTS_NAME_DISPLAYNAME = register("x13.mod.location.opt.bootsDispName", Items.DIAMOND_BOOTS, "bootsDispName", + (mc, player, world) -> player.getItemBySlot(EquipmentSlot.FEET).getHoverName().getString()); + public static final LocationFormatTool BOOTS_DURABILITY = register("x13.mod.location.opt.bootsDurability", Items.DIAMOND_BOOTS, "bootsDurability", + (mc, player, world) -> String.valueOf(LocationUtils.getRemainDurability(player.getItemBySlot(EquipmentSlot.FEET)))); + public static final LocationFormatTool BOOTS_MAXDURABILITY = register("x13.mod.location.opt.bootsMaxDurability", Items.DIAMOND_BOOTS, "bootsMaxDurability", + (mc, player, world) -> String.valueOf(player.getItemBySlot(EquipmentSlot.FEET).getMaxDamage())); + public static final LocationFormatTool NEW_LINE = register("x13.mod.location.opt.lineFeed",Items.WRITABLE_BOOK, "lf", (mc, player, world) -> "\n"); public static final LocationFormatTool ALL = register("debug",Items.WRITABLE_BOOK, "debug", (mc, player, world) -> "DEBUG\n" + TOOLS.entrySet().stream() @@ -393,6 +473,8 @@ public ListToolFunction() { public String apply(Minecraft client, LocalPlayer player, ClientLevel world) { StringBuilder bld = new StringBuilder(); updateTimeField(client, player, world); + updateFoodDataField(client, player, world); + updateHandDataField(client, player, world); for (ToolFunction func : functions) { bld.append(func.apply(client, player, world)); @@ -430,4 +512,13 @@ private static void updateTimeField(Minecraft client, LocalPlayer player, Client long fixedSeconds = Math.floorMod(fixedMinutes * 60, 1000); currentSeconds = Math.floorDiv(fixedSeconds * 60, 1000); } + + private static void updateFoodDataField(Minecraft client, LocalPlayer player, ClientLevel world) { + currentNutrition = player.getFoodData().getFoodLevel(); + currentSaturation = player.getFoodData().getSaturationLevel(); + } + + private static void updateHandDataField(Minecraft client, LocalPlayer player, ClientLevel world) { + + } } diff --git a/src/main/java/fr/atesab/xray/mixins/MixinBlock_rubidium.java b/src/main/java/fr/atesab/xray/mixins/MixinBlock_rubidium.java new file mode 100644 index 0000000..ffa8aa9 --- /dev/null +++ b/src/main/java/fr/atesab/xray/mixins/MixinBlock_rubidium.java @@ -0,0 +1,31 @@ +package fr.atesab.xray.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import fr.atesab.xray.XrayMain; +import me.jellysquid.mods.sodium.client.render.chunk.compile.pipeline.BlockOcclusionCache; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.VoxelShape; + +@Mixin(value = BlockOcclusionCache.class) +public class MixinBlock_rubidium { + @Inject(at = @At("RETURN"), method = "shouldDrawSide(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/Direction;)Z",cancellable = true,remap=false) + public void shouldDrawSideMixin(BlockState selfState, BlockGetter view, BlockPos pos, Direction facing, CallbackInfoReturnable ci) { + XrayMain.getMod().shouldSideBeRendered(selfState, view, pos, facing, ci); + } + + @Redirect(at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/compile/pipeline/BlockOcclusionCache;calculate(Lnet/minecraft/world/phys/shapes/VoxelShape;Lnet/minecraft/world/phys/shapes/VoxelShape;)Z"), method = "shouldDrawSide(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/Direction;)Z",remap=false) + private boolean ignoreCache(BlockOcclusionCache cache, VoxelShape selfShape, VoxelShape adjShape) { + return true; + } + + private MixinBlock_rubidium() { + } +} diff --git a/src/main/java/fr/atesab/xray/mixins/MixinClientLevel.java b/src/main/java/fr/atesab/xray/mixins/MixinClientLevel.java new file mode 100644 index 0000000..39cb814 --- /dev/null +++ b/src/main/java/fr/atesab/xray/mixins/MixinClientLevel.java @@ -0,0 +1,23 @@ +package fr.atesab.xray.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import fr.atesab.xray.XrayMain; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.phys.Vec3; + +@Mixin(value = ClientLevel.class) +public class MixinClientLevel { + @Inject(method = "getSkyColor(Lnet/minecraft/world/phys/Vec3;F)Lnet/minecraft/world/phys/Vec3;", at = @At("HEAD"), cancellable = true) + public void getSkyColorMixin(Vec3 pPos, float pPartialTick, CallbackInfoReturnable info) { + if (XrayMain.getMod().isBlueBlueSkyEnable()) { + info.setReturnValue(new Vec3(((double)121 / 255), ((double)167 / 255), (double)1)); + } + } + + private MixinClientLevel() { + } +} diff --git a/src/main/java/fr/atesab/xray/screen/BlockSelector.java b/src/main/java/fr/atesab/xray/screen/BlockSelector.java index a09f8fb..b89c579 100644 --- a/src/main/java/fr/atesab/xray/screen/BlockSelector.java +++ b/src/main/java/fr/atesab/xray/screen/BlockSelector.java @@ -3,15 +3,12 @@ import java.util.ArrayList; import java.util.List; -import com.mojang.blaze3d.vertex.PoseStack; - import fr.atesab.xray.utils.GuiUtils; import fr.atesab.xray.widget.XrayButton; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.resources.language.I18n; -import net.minecraft.core.Registry; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; @@ -116,7 +113,7 @@ public void updateSearch() { visible.clear(); blocks.stream().filter(block -> I18n.get(block.getDescriptionId()).toLowerCase().contains(query)) .forEach(visible::add); - page = Math.min(visible.size(), page); + page = Math.min(visible.size() / elementByPage, page); updateArrows(); } diff --git a/src/main/java/fr/atesab/xray/screen/XrayBlockMenu.java b/src/main/java/fr/atesab/xray/screen/XrayBlockMenu.java index 6d89923..a42e644 100644 --- a/src/main/java/fr/atesab/xray/screen/XrayBlockMenu.java +++ b/src/main/java/fr/atesab/xray/screen/XrayBlockMenu.java @@ -1,5 +1,9 @@ package fr.atesab.xray.screen; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import fr.atesab.xray.config.BlockConfig; import fr.atesab.xray.utils.GuiUtils; import fr.atesab.xray.widget.XrayButton; @@ -12,10 +16,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - public class XrayBlockMenu extends XrayScreen { private static final Component ADD = Component.literal("+").withStyle(ChatFormatting.GREEN); private static final Component REPLACE = Component.translatable("x13.mod.menu.replace") @@ -130,7 +130,7 @@ public void updateSearch() { visible.clear(); config.stream().filter(block -> I18n.get(block.getDescriptionId()).toLowerCase().contains(query)) .forEach(visible::add); - page = Math.min(visible.size(), page); + page = Math.min(visible.size() / elementByPage, page); updateArrows(); } diff --git a/src/main/java/fr/atesab/xray/screen/XrayEntityMenu.java b/src/main/java/fr/atesab/xray/screen/XrayEntityMenu.java index 854843b..47e0391 100644 --- a/src/main/java/fr/atesab/xray/screen/XrayEntityMenu.java +++ b/src/main/java/fr/atesab/xray/screen/XrayEntityMenu.java @@ -4,7 +4,6 @@ import java.util.List; import java.util.Objects; -import com.mojang.blaze3d.vertex.PoseStack; import fr.atesab.xray.color.BlockEntityTypeIcon; import fr.atesab.xray.color.EntityTypeIcon; import fr.atesab.xray.color.EnumElement; @@ -54,7 +53,9 @@ static String computeText(EntityType type, BlockEntityType blockType) { if (id == null) { return blockType.getClass().getCanonicalName(); } - return id.toLanguageKey(); + //vanilla's bug? + //return id.toLanguageKey(); + return "block." + id.getNamespace() + "." + id.getPath(); } } } @@ -174,7 +175,7 @@ public void updateSearch() { visible.clear(); config.stream().filter(block -> I18n.get(block.text()).toLowerCase().contains(query)) .forEach(visible::add); - page = Math.min(visible.size(), page); + page = Math.min(visible.size() / elementByPage, page); updateArrows(); } diff --git a/src/main/java/fr/atesab/xray/screen/XrayLocationConfig.java b/src/main/java/fr/atesab/xray/screen/XrayLocationConfig.java index 220c73d..d1402c1 100644 --- a/src/main/java/fr/atesab/xray/screen/XrayLocationConfig.java +++ b/src/main/java/fr/atesab/xray/screen/XrayLocationConfig.java @@ -41,7 +41,7 @@ protected void init() { })); format = new EditBox(font, width / 2 - 98, height / 2 + 2, 196, 16, Component.literal("")); - format.setMaxLength(256); + format.setMaxLength(1024); format.setValue(mod.getConfig().getLocationConfig().getFormat()); format.setResponder(mod.getConfig().getLocationConfig()::setFormat); format.setFocused(true); diff --git a/src/main/java/fr/atesab/xray/utils/LocationUtils.java b/src/main/java/fr/atesab/xray/utils/LocationUtils.java index 6ed88d5..62aa372 100644 --- a/src/main/java/fr/atesab/xray/utils/LocationUtils.java +++ b/src/main/java/fr/atesab/xray/utils/LocationUtils.java @@ -1,17 +1,33 @@ package fr.atesab.xray.utils; +import java.text.DecimalFormat; +import java.text.NumberFormat; + import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.resources.language.I18n; import net.minecraft.client.server.IntegratedServer; import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.BeehiveBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.CropBlock; +import net.minecraft.world.level.block.NetherWartBlock; +import net.minecraft.world.level.block.RedStoneWireBlock; +import net.minecraft.world.level.block.SnifferEggBlock; +import net.minecraft.world.level.block.TurtleEggBlock; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; - -import java.text.DecimalFormat; -import java.text.NumberFormat; +import net.minecraftforge.registries.ForgeRegistries; public class LocationUtils { @@ -46,6 +62,10 @@ public static BlockPos getLookingFaceBlockPos(Minecraft mc, LocalPlayer player) } } + public static float getBlockDestroyProgress(Player player,ClientLevel level,BlockPos blockpos) { + return level.getBlockState(blockpos).getDestroyProgress(player, level, blockpos); + } + public static NumberFormat getTwoDigitNumberFormat() { return localTwoDigitNfFormat.get(); } @@ -58,4 +78,114 @@ public static String isSlimeChunk(Minecraft mc, ChunkPos chunk) { return String.valueOf(WorldgenRandom.seedSlimeChunk(chunk.x, chunk.z, server.getWorldData().worldGenOptions().seed(), 987234911L).nextInt(10) == 0); } + + public static String getDurabilityOrFoodData(ItemStack item) { + if (item.isDamageableItem()) { + return String.valueOf(getRemainDurability(item)); + } else if (item.isEdible()) { + return String.valueOf(item.getFoodProperties(null).getNutrition()) + "(" + String.format("%.1f",getAddSaturation(item)) + ")"; + } else { + return "-"; + } + } + + public static String getMaxDurabilityOrAfterFoodData(ItemStack item,int currentNutrition, float currentSaturation) { + if (item.isDamageableItem()) { + return String.valueOf(item.getMaxDamage()); + } else if (item.isEdible()) { + int afterNutrition = Math.min(currentNutrition + item.getFoodProperties(null).getNutrition(), 20); + float afterSaturation = Math.min(currentSaturation + getAddSaturation(item), 20); + return String.valueOf(afterNutrition) + "(" + String.format("%.1f",afterSaturation) + ")"; + } else { + return "-"; + } + } + + public static int getRemainDurability(ItemStack item) { + return item.getMaxDamage() - item.getDamageValue(); + } + + public static float getAddSaturation(ItemStack item) { + return item.getFoodProperties(null).getNutrition() * item.getFoodProperties(null).getSaturationModifier() * 2.0F; + } + + public static String getCorrectToolText(BlockState blockstate) { + TagKey tier = filterBlockTag(blockstate, BlockTags.NEEDS_DIAMOND_TOOL, BlockTags.NEEDS_IRON_TOOL, BlockTags.NEEDS_STONE_TOOL); + TagKey tool = filterBlockTag(blockstate, BlockTags.MINEABLE_WITH_PICKAXE, BlockTags.MINEABLE_WITH_AXE, BlockTags.MINEABLE_WITH_SHOVEL, BlockTags.MINEABLE_WITH_HOE, BlockTags.SWORD_EFFICIENT); + StringBuilder optionValue = new StringBuilder(); + optionValue.append(Component.translatable("x13.mod.location.opt.block.requiredTool",Component.translatable("x13.mod.location.opt.block.requiredTool." + convertNameFromBlockTagKey(tool)).getString()).getString()); + if (tier != null) { + optionValue.append(Component.translatable("x13.mod.location.opt.block.requiredTier",Component.translatable("x13.mod.location.opt.block.requiredTier." + convertNameFromBlockTagKey(tier)).getString()).getString()); + } + return optionValue.toString(); + } + + @SafeVarargs + public static TagKey filterBlockTag(BlockState blockstate, TagKey... keys) { + for (int i = 0;i < keys.length;i++ ) { + if (blockstate.is(keys[i])) + return keys[i]; + } + return null; + } + + public static String convertNameFromBlockTagKey(TagKey key) { + if (key == null) { return null; } else + if (key.equals(BlockTags.NEEDS_DIAMOND_TOOL)) { return "diamond"; } else + if (key.equals(BlockTags.NEEDS_IRON_TOOL)) { return "iron"; } else + if (key.equals(BlockTags.NEEDS_STONE_TOOL)) { return "stone"; } else + if (key.equals(BlockTags.MINEABLE_WITH_PICKAXE)) { return "pickaxe"; } else + if (key.equals(BlockTags.MINEABLE_WITH_AXE)) { return "axe"; } else + if (key.equals(BlockTags.MINEABLE_WITH_SHOVEL)) { return "shovel"; } else + if (key.equals(BlockTags.MINEABLE_WITH_HOE)) { return "hoe"; } else + if (key.equals(BlockTags.SWORD_EFFICIENT)) { return "sword"; } else { + return null; + } + } + + public static String getBlockName(ClientLevel world, BlockPos blockpos) { + BlockState blockstate = world.getBlockState(blockpos); + Block block = blockstate.getBlock(); + //if (block instance of ) { + //} else { + return ForgeRegistries.BLOCKS.getKey(block).getPath(); + } + + public static String getTranslatedBlockName(ClientLevel world, BlockPos blockpos) { + BlockState blockstate = world.getBlockState(blockpos); + Block block = blockstate.getBlock(); + //if (block instance of ) { + //} else { + return I18n.get(block.getDescriptionId()); + } + + public static String getCropBlockGrowthlevelText(ClientLevel world, BlockPos blockpos, boolean isMaxValueRequest) { + BlockState blockstate = world.getBlockState(blockpos); + Block block = blockstate.getBlock(); + if (block instanceof CropBlock) { + return String.valueOf(!isMaxValueRequest ? ((CropBlock)block).getAge(blockstate) : CropBlock.MAX_AGE); + } else if (block instanceof NetherWartBlock) { + return String.valueOf(!isMaxValueRequest ? blockstate.getValue(NetherWartBlock.AGE).intValue() : NetherWartBlock.MAX_AGE); + } else if (block instanceof RedStoneWireBlock) { + return String.valueOf(!isMaxValueRequest ? blockstate.getValue(RedStoneWireBlock.POWER).intValue() : 15); + } else if (block instanceof TurtleEggBlock) { + return String.valueOf(!isMaxValueRequest ? blockstate.getValue(TurtleEggBlock.HATCH).intValue() : TurtleEggBlock.MAX_HATCH_LEVEL); + } else if (block instanceof SnifferEggBlock) { + return String.valueOf(!isMaxValueRequest ? blockstate.getValue(SnifferEggBlock.HATCH).intValue() : SnifferEggBlock.MAX_HATCH_LEVEL); + } else if (block instanceof BeehiveBlock) { + return String.valueOf(!isMaxValueRequest ? blockstate.getValue(BeehiveBlock.HONEY_LEVEL).intValue() : BeehiveBlock.MAX_HONEY_LEVELS); + } + return "-"; + } + + public static String getWeatherText(ClientLevel world) { + if (!world.isRaining()) { + return Component.translatable("x13.mod.location.opt.weather.fine").getString(); + } else if (!world.isThundering()) { + return Component.translatable("x13.mod.location.opt.weather.rain").getString(); + } else { + return Component.translatable("x13.mod.location.opt.weather.thunder").getString(); + } + } + } diff --git a/src/main/java/fr/atesab/xray/utils/RenderUtils.java b/src/main/java/fr/atesab/xray/utils/RenderUtils.java index d16e077..6c082eb 100644 --- a/src/main/java/fr/atesab/xray/utils/RenderUtils.java +++ b/src/main/java/fr/atesab/xray/utils/RenderUtils.java @@ -1,11 +1,13 @@ package fr.atesab.xray.utils; +import org.joml.Matrix3f; +import org.joml.Matrix4f; + import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import org.joml.Matrix3f; -import org.joml.Matrix4f; public class RenderUtils { @@ -28,6 +30,50 @@ public static void renderSingleLine(PoseStack stack, VertexConsumer buffer, floa .normal(matrix3f, normalX, normalY, normalZ).endVertex(); } + // copied vanilla code for Sodium/Rubidium compatibility, because they overwrite and broke this vanilla code. + public static void renderLineBoxVanillaStyle(PoseStack p_109647_, VertexConsumer p_109648_, AABB p_109649_, float p_109650_, float p_109651_, float p_109652_, float p_109653_) { + renderLineBoxVanillaStyle(p_109647_, p_109648_, p_109649_.minX, p_109649_.minY, p_109649_.minZ, p_109649_.maxX, p_109649_.maxY, p_109649_.maxZ, p_109650_, p_109651_, p_109652_, p_109653_, p_109650_, p_109651_, p_109652_); + } + + public static void renderLineBoxVanillaStyle(PoseStack p_109609_, VertexConsumer p_109610_, double p_109611_, double p_109612_, double p_109613_, double p_109614_, double p_109615_, double p_109616_, float p_109617_, float p_109618_, float p_109619_, float p_109620_) { + renderLineBoxVanillaStyle(p_109609_, p_109610_, p_109611_, p_109612_, p_109613_, p_109614_, p_109615_, p_109616_, p_109617_, p_109618_, p_109619_, p_109620_, p_109617_, p_109618_, p_109619_); + } + + public static void renderLineBoxVanillaStyle(PoseStack p_109622_, VertexConsumer p_109623_, double p_109624_, double p_109625_, double p_109626_, double p_109627_, double p_109628_, double p_109629_, float p_109630_, float p_109631_, float p_109632_, float p_109633_, float p_109634_, float p_109635_, float p_109636_) { + Matrix4f matrix4f = p_109622_.last().pose(); + Matrix3f matrix3f = p_109622_.last().normal(); + float f = (float)p_109624_; + float f1 = (float)p_109625_; + float f2 = (float)p_109626_; + float f3 = (float)p_109627_; + float f4 = (float)p_109628_; + float f5 = (float)p_109629_; + p_109623_.vertex(matrix4f, f, f1, f2).color(p_109630_, p_109635_, p_109636_, p_109633_).normal(matrix3f, 1.0F, 0.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f3, f1, f2).color(p_109630_, p_109635_, p_109636_, p_109633_).normal(matrix3f, 1.0F, 0.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f, f1, f2).color(p_109634_, p_109631_, p_109636_, p_109633_).normal(matrix3f, 0.0F, 1.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f, f4, f2).color(p_109634_, p_109631_, p_109636_, p_109633_).normal(matrix3f, 0.0F, 1.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f, f1, f2).color(p_109634_, p_109635_, p_109632_, p_109633_).normal(matrix3f, 0.0F, 0.0F, 1.0F).endVertex(); + p_109623_.vertex(matrix4f, f, f1, f5).color(p_109634_, p_109635_, p_109632_, p_109633_).normal(matrix3f, 0.0F, 0.0F, 1.0F).endVertex(); + p_109623_.vertex(matrix4f, f3, f1, f2).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 0.0F, 1.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f3, f4, f2).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 0.0F, 1.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f3, f4, f2).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, -1.0F, 0.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f, f4, f2).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, -1.0F, 0.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f, f4, f2).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 0.0F, 0.0F, 1.0F).endVertex(); + p_109623_.vertex(matrix4f, f, f4, f5).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 0.0F, 0.0F, 1.0F).endVertex(); + p_109623_.vertex(matrix4f, f, f4, f5).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f, f1, f5).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f, f1, f5).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 1.0F, 0.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f3, f1, f5).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 1.0F, 0.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f3, f1, f5).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 0.0F, 0.0F, -1.0F).endVertex(); + p_109623_.vertex(matrix4f, f3, f1, f2).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 0.0F, 0.0F, -1.0F).endVertex(); + p_109623_.vertex(matrix4f, f, f4, f5).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 1.0F, 0.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f3, f4, f5).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 1.0F, 0.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f3, f1, f5).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 0.0F, 1.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f3, f4, f5).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 0.0F, 1.0F, 0.0F).endVertex(); + p_109623_.vertex(matrix4f, f3, f4, f2).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 0.0F, 0.0F, 1.0F).endVertex(); + p_109623_.vertex(matrix4f, f3, f4, f5).color(p_109630_, p_109631_, p_109632_, p_109633_).normal(matrix3f, 0.0F, 0.0F, 1.0F).endVertex(); + } + private RenderUtils() { } } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg new file mode 100644 index 0000000..991b41a --- /dev/null +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -0,0 +1 @@ +public net.minecraft.client.multiplayer.MultiPlayerGameMode f_105193_ \ No newline at end of file diff --git a/src/main/resources/assets/atianxray/lang/en_us.json b/src/main/resources/assets/atianxray/lang/en_us.json index a706909..f01c70c 100644 --- a/src/main/resources/assets/atianxray/lang/en_us.json +++ b/src/main/resources/assets/atianxray/lang/en_us.json @@ -61,6 +61,8 @@ "x13.mod.location.opt.fx": "Floor Location x", "x13.mod.location.opt.fy": "Floor Location y", "x13.mod.location.opt.fz": "Floor Location z", + "x13.mod.location.opt.horizontalDegree": "Horizontal Degree", + "x13.mod.location.opt.verticalDegree": "Vertical Degree", "x13.mod.location.opt.name": "Player name", "x13.mod.location.opt.fps": "FPS", "x13.mod.location.opt.fps.debug": "FPS debug", @@ -74,6 +76,23 @@ "x13.mod.location.opt.lookingBlockLight": "Looking Position Brightness", "x13.mod.location.opt.lookingBlock": "Looking Block Name", "x13.mod.location.opt.lookingTranslate": "Looking Block Name (Translated)", + "x13.mod.location.opt.lookingRequestedTool": "Looking Block Requested Tool", + "x13.mod.location.opt.lookingDestoryProgress": "Looking Block Destory Progress", + "x13.mod.location.opt.lookingGrowthLevel": "Looking Block Growth Level", + "x13.mod.location.opt.lookingMaxLevel": "Looking Block Max Growth Level", + "x13.mod.location.opt.block.requiredTool": "%s", + "x13.mod.location.opt.block.requiredTool.pickaxe": "Pickaxe", + "x13.mod.location.opt.block.requiredTool.axe": "Axe", + "x13.mod.location.opt.block.requiredTool.shovel": "Shovel", + "x13.mod.location.opt.block.requiredTool.hoe": "Hoe", + "x13.mod.location.opt.block.requiredTool.sword": "Sword", + "x13.mod.location.opt.block.requiredTool.null": "None", + "x13.mod.location.opt.block.requiredTier": "(over %s)", + "x13.mod.location.opt.block.requiredTier.netherite": "Netherite", + "x13.mod.location.opt.block.requiredTier.diamond": "diamond", + "x13.mod.location.opt.block.requiredTier.iron": "iron", + "x13.mod.location.opt.block.requiredTier.stone": "stone", + "x13.mod.location.opt.block.requiredTier.wood": "wood", "x13.mod.location.opt.facing": "Direction", "x13.mod.location.opt.daysCount": "Count of Days", "x13.mod.location.opt.timeOfDay": "Time in a Day", @@ -81,7 +100,43 @@ "x13.mod.location.opt.hours": "Hours(with no Padding)", "x13.mod.location.opt.minutesPadding": "Minutes(with 0 Padding)", "x13.mod.location.opt.secondsPadding": "Seconds(with 0 Padding)", + "x13.mod.location.opt.weather": "Weather", + "x13.mod.location.opt.weather.fine": "Fine", + "x13.mod.location.opt.weather.rain": "Rainy", + "x13.mod.location.opt.weather.thunder": "Thunder", "x13.mod.location.opt.isSlime": "Is Slime Chunk", + "x13.mod.location.opt.nutrition": "Nutrition", + "x13.mod.location.opt.saturation": "Saturation", + "x13.mod.location.opt.mainhandName": "Mainhand Item Name", + "x13.mod.location.opt.mainhandTranslate": "Mainhand Item Name (Translated)", + "x13.mod.location.opt.mainhandDispName": "Mainhand Item Display Name", + "x13.mod.location.opt.mainhandDurability": "Mainhand Item Durability/Heal Nutrition", + "x13.mod.location.opt.mainhandMaxDurability": "Mainhand Item Max Durability/After Eating Nutrition", + "x13.mod.location.opt.offhandName": "Offhand Item Name", + "x13.mod.location.opt.offhandTranslate": "Offhand Item Name (Translated)", + "x13.mod.location.opt.offhandDispName": "Offhand Item Display Name", + "x13.mod.location.opt.offhandDurability": "Offhand Item Durability/Heal Nutrition", + "x13.mod.location.opt.offhandMaxDurability": "Offhand Item Max Durability/After Eating Nutrition", + "x13.mod.location.opt.helmetName": "Helmet Item Name", + "x13.mod.location.opt.helmetTranslate": "Helmet Item Name (Translated)", + "x13.mod.location.opt.helmetDispName": "Helmet Item Display Name", + "x13.mod.location.opt.helmetDurability": "Helmet Durability", + "x13.mod.location.opt.helmetMaxDurability": "Helmet Max Durability", + "x13.mod.location.opt.chestplateName": "Chestplate Item Name", + "x13.mod.location.opt.chestplateTranslate": "Chestplate Item Name (Translated)", + "x13.mod.location.opt.chestplateDispName": "Chestplate Item Display Name", + "x13.mod.location.opt.chestplateDurability": "Chestplate Durability", + "x13.mod.location.opt.chestplateMaxDurability": "Chestplate Max Durability", + "x13.mod.location.opt.leggingsName": "leggings Item Name", + "x13.mod.location.opt.leggingsTranslate": "leggings Item Name (Translated)", + "x13.mod.location.opt.leggingsDispName": "leggings Item Display Name", + "x13.mod.location.opt.leggingsDurability": "leggings Durability", + "x13.mod.location.opt.leggingsMaxDurability": "leggings Max Durability", + "x13.mod.location.opt.bootsName": "boots Item Name", + "x13.mod.location.opt.bootsTranslate": "boots Item Name (Translated)", + "x13.mod.location.opt.bootsDispName": "boots Item Display Name", + "x13.mod.location.opt.bootsDurability": "boots Durability", + "x13.mod.location.opt.bootsMaxDurability": "boots Durability", "x13.mod.location.opt.lineFeed": "Start New Line", "x13.mod.location.opt.valueSeparate": "Separate Value", @@ -90,6 +145,7 @@ "x13.mod.redstone": "Redstone Mode", "x13.mod.fullbright": "Fullbright", "x13.mod.locationEnable": "Location Data On/Off", + "x13.mod.blueBlueSky": "Always Blue Sky", "x13.mod.config": "Config", "x13.mod.modes": "Modes", "x13.mod.selector.key.title": "Key selection", diff --git a/src/main/resources/assets/atianxray/lang/fr_ca.json b/src/main/resources/assets/atianxray/lang/fr_ca.json index dfc455c..9db7e12 100644 --- a/src/main/resources/assets/atianxray/lang/fr_ca.json +++ b/src/main/resources/assets/atianxray/lang/fr_ca.json @@ -61,6 +61,8 @@ "x13.mod.location.opt.fx": "Position arrondie x", "x13.mod.location.opt.fy": "Position arrondie y", "x13.mod.location.opt.fz": "Position arrondie z", + "x13.mod.location.opt.horizontalDegree": "Horizontal Degree", + "x13.mod.location.opt.verticalDegree": "Vertical Degree", "x13.mod.location.opt.name": "Nom du joueur", "x13.mod.location.opt.fps": "IPS", "x13.mod.location.opt.fps.debug": "IPS debug", @@ -74,6 +76,23 @@ "x13.mod.location.opt.lookingBlockLight": "Luminosité bloc regardé", "x13.mod.location.opt.lookingBlock": "Nom du bloc regardé", "x13.mod.location.opt.lookingTranslate": "Nom du bloc regardé (Traduit)", + "x13.mod.location.opt.lookingRequestedTool": "Looking Block Requested Tool", + "x13.mod.location.opt.lookingDestoryProgress": "Looking Block Destory Progress", + "x13.mod.location.opt.lookingGrowthLevel": "Looking Block Growth Level", + "x13.mod.location.opt.lookingMaxLevel": "Looking Block Max Growth Level", + "x13.mod.location.opt.block.requiredTool": "%s", + "x13.mod.location.opt.block.requiredTool.pickaxe": "Pickaxe", + "x13.mod.location.opt.block.requiredTool.axe": "Axe", + "x13.mod.location.opt.block.requiredTool.shovel": "Shovel", + "x13.mod.location.opt.block.requiredTool.hoe": "Hoe", + "x13.mod.location.opt.block.requiredTool.sword": "Sword", + "x13.mod.location.opt.block.requiredTool.null": "None", + "x13.mod.location.opt.block.requiredTier": "(over %s)", + "x13.mod.location.opt.block.requiredTier.netherite": "Netherite", + "x13.mod.location.opt.block.requiredTier.diamond": "diamond", + "x13.mod.location.opt.block.requiredTier.iron": "iron", + "x13.mod.location.opt.block.requiredTier.stone": "stone", + "x13.mod.location.opt.block.requiredTier.wood": "wood", "x13.mod.location.opt.facing": "Direction", "x13.mod.location.opt.daysCount": "Nombre de jour", "x13.mod.location.opt.timeOfDay": "Temps dans un jour", @@ -81,7 +100,43 @@ "x13.mod.location.opt.hours": "Heurs(sans remplissage)", "x13.mod.location.opt.minutesPadding": "Minutes(avec remplissage de 0)", "x13.mod.location.opt.secondsPadding": "Seconds(avec remplissage de 0)", + "x13.mod.location.opt.weather": "Weather", + "x13.mod.location.opt.weather.fine": "Fine", + "x13.mod.location.opt.weather.rain": "Rainy", + "x13.mod.location.opt.weather.thunder": "Thunder", "x13.mod.location.opt.isSlime": "Tronçon à Slime", + "x13.mod.location.opt.nutrition": "Nutrition", + "x13.mod.location.opt.saturation": "Saturation", + "x13.mod.location.opt.mainhandName": "Mainhand Item Name", + "x13.mod.location.opt.mainhandTranslate": "Mainhand Item Name (Translated)", + "x13.mod.location.opt.mainhandDispName": "Mainhand Item Display Name", + "x13.mod.location.opt.mainhandDurability": "Mainhand Item Durability/Heal Nutrition", + "x13.mod.location.opt.mainhandMaxDurability": "Mainhand Item Max Durability/After Eating Nutrition", + "x13.mod.location.opt.offhandName": "Offhand Item Name", + "x13.mod.location.opt.offhandTranslate": "Offhand Item Name (Translated)", + "x13.mod.location.opt.offhandDispName": "Offhand Item Display Name", + "x13.mod.location.opt.offhandDurability": "Offhand Item Durability/Heal Nutrition", + "x13.mod.location.opt.offhandMaxDurability": "Offhand Item Max Durability/After Eating Nutrition", + "x13.mod.location.opt.helmetName": "Helmet Item Name", + "x13.mod.location.opt.helmetTranslate": "Helmet Item Name (Translated)", + "x13.mod.location.opt.helmetDispName": "Helmet Item Display Name", + "x13.mod.location.opt.helmetDurability": "Helmet Durability", + "x13.mod.location.opt.helmetMaxDurability": "Helmet Max Durability", + "x13.mod.location.opt.chestplateName": "Chestplate Item Name", + "x13.mod.location.opt.chestplateTranslate": "Chestplate Item Name (Translated)", + "x13.mod.location.opt.chestplateDispName": "Chestplate Item Display Name", + "x13.mod.location.opt.chestplateDurability": "Chestplate Durability", + "x13.mod.location.opt.chestplateMaxDurability": "Chestplate Max Durability", + "x13.mod.location.opt.leggingsName": "leggings Item Name", + "x13.mod.location.opt.leggingsTranslate": "leggings Item Name (Translated)", + "x13.mod.location.opt.leggingsDispName": "leggings Item Display Name", + "x13.mod.location.opt.leggingsDurability": "leggings Durability", + "x13.mod.location.opt.leggingsMaxDurability": "leggings Max Durability", + "x13.mod.location.opt.bootsName": "boots Item Name", + "x13.mod.location.opt.bootsTranslate": "boots Item Name (Translated)", + "x13.mod.location.opt.bootsDispName": "boots Item Display Name", + "x13.mod.location.opt.bootsDurability": "boots Durability", + "x13.mod.location.opt.bootsMaxDurability": "boots Durability", "x13.mod.location.opt.lineFeed": "Demarrer nouvelle ligne", "x13.mod.location.opt.valueSeparate": "Separé valeurs", @@ -90,6 +145,7 @@ "x13.mod.redstone": "Mode Redstone", "x13.mod.fullbright": "Fullbright", "x13.mod.locationEnable": "Location Data On/Off", + "x13.mod.blueBlueSky": "Always Blue Sky", "x13.mod.config": "Config", "x13.mod.modes": "Modes", "x13.mod.selector.key.title": "Selection de touche", diff --git a/src/main/resources/assets/atianxray/lang/fr_fr.json b/src/main/resources/assets/atianxray/lang/fr_fr.json index dfc455c..9db7e12 100644 --- a/src/main/resources/assets/atianxray/lang/fr_fr.json +++ b/src/main/resources/assets/atianxray/lang/fr_fr.json @@ -61,6 +61,8 @@ "x13.mod.location.opt.fx": "Position arrondie x", "x13.mod.location.opt.fy": "Position arrondie y", "x13.mod.location.opt.fz": "Position arrondie z", + "x13.mod.location.opt.horizontalDegree": "Horizontal Degree", + "x13.mod.location.opt.verticalDegree": "Vertical Degree", "x13.mod.location.opt.name": "Nom du joueur", "x13.mod.location.opt.fps": "IPS", "x13.mod.location.opt.fps.debug": "IPS debug", @@ -74,6 +76,23 @@ "x13.mod.location.opt.lookingBlockLight": "Luminosité bloc regardé", "x13.mod.location.opt.lookingBlock": "Nom du bloc regardé", "x13.mod.location.opt.lookingTranslate": "Nom du bloc regardé (Traduit)", + "x13.mod.location.opt.lookingRequestedTool": "Looking Block Requested Tool", + "x13.mod.location.opt.lookingDestoryProgress": "Looking Block Destory Progress", + "x13.mod.location.opt.lookingGrowthLevel": "Looking Block Growth Level", + "x13.mod.location.opt.lookingMaxLevel": "Looking Block Max Growth Level", + "x13.mod.location.opt.block.requiredTool": "%s", + "x13.mod.location.opt.block.requiredTool.pickaxe": "Pickaxe", + "x13.mod.location.opt.block.requiredTool.axe": "Axe", + "x13.mod.location.opt.block.requiredTool.shovel": "Shovel", + "x13.mod.location.opt.block.requiredTool.hoe": "Hoe", + "x13.mod.location.opt.block.requiredTool.sword": "Sword", + "x13.mod.location.opt.block.requiredTool.null": "None", + "x13.mod.location.opt.block.requiredTier": "(over %s)", + "x13.mod.location.opt.block.requiredTier.netherite": "Netherite", + "x13.mod.location.opt.block.requiredTier.diamond": "diamond", + "x13.mod.location.opt.block.requiredTier.iron": "iron", + "x13.mod.location.opt.block.requiredTier.stone": "stone", + "x13.mod.location.opt.block.requiredTier.wood": "wood", "x13.mod.location.opt.facing": "Direction", "x13.mod.location.opt.daysCount": "Nombre de jour", "x13.mod.location.opt.timeOfDay": "Temps dans un jour", @@ -81,7 +100,43 @@ "x13.mod.location.opt.hours": "Heurs(sans remplissage)", "x13.mod.location.opt.minutesPadding": "Minutes(avec remplissage de 0)", "x13.mod.location.opt.secondsPadding": "Seconds(avec remplissage de 0)", + "x13.mod.location.opt.weather": "Weather", + "x13.mod.location.opt.weather.fine": "Fine", + "x13.mod.location.opt.weather.rain": "Rainy", + "x13.mod.location.opt.weather.thunder": "Thunder", "x13.mod.location.opt.isSlime": "Tronçon à Slime", + "x13.mod.location.opt.nutrition": "Nutrition", + "x13.mod.location.opt.saturation": "Saturation", + "x13.mod.location.opt.mainhandName": "Mainhand Item Name", + "x13.mod.location.opt.mainhandTranslate": "Mainhand Item Name (Translated)", + "x13.mod.location.opt.mainhandDispName": "Mainhand Item Display Name", + "x13.mod.location.opt.mainhandDurability": "Mainhand Item Durability/Heal Nutrition", + "x13.mod.location.opt.mainhandMaxDurability": "Mainhand Item Max Durability/After Eating Nutrition", + "x13.mod.location.opt.offhandName": "Offhand Item Name", + "x13.mod.location.opt.offhandTranslate": "Offhand Item Name (Translated)", + "x13.mod.location.opt.offhandDispName": "Offhand Item Display Name", + "x13.mod.location.opt.offhandDurability": "Offhand Item Durability/Heal Nutrition", + "x13.mod.location.opt.offhandMaxDurability": "Offhand Item Max Durability/After Eating Nutrition", + "x13.mod.location.opt.helmetName": "Helmet Item Name", + "x13.mod.location.opt.helmetTranslate": "Helmet Item Name (Translated)", + "x13.mod.location.opt.helmetDispName": "Helmet Item Display Name", + "x13.mod.location.opt.helmetDurability": "Helmet Durability", + "x13.mod.location.opt.helmetMaxDurability": "Helmet Max Durability", + "x13.mod.location.opt.chestplateName": "Chestplate Item Name", + "x13.mod.location.opt.chestplateTranslate": "Chestplate Item Name (Translated)", + "x13.mod.location.opt.chestplateDispName": "Chestplate Item Display Name", + "x13.mod.location.opt.chestplateDurability": "Chestplate Durability", + "x13.mod.location.opt.chestplateMaxDurability": "Chestplate Max Durability", + "x13.mod.location.opt.leggingsName": "leggings Item Name", + "x13.mod.location.opt.leggingsTranslate": "leggings Item Name (Translated)", + "x13.mod.location.opt.leggingsDispName": "leggings Item Display Name", + "x13.mod.location.opt.leggingsDurability": "leggings Durability", + "x13.mod.location.opt.leggingsMaxDurability": "leggings Max Durability", + "x13.mod.location.opt.bootsName": "boots Item Name", + "x13.mod.location.opt.bootsTranslate": "boots Item Name (Translated)", + "x13.mod.location.opt.bootsDispName": "boots Item Display Name", + "x13.mod.location.opt.bootsDurability": "boots Durability", + "x13.mod.location.opt.bootsMaxDurability": "boots Durability", "x13.mod.location.opt.lineFeed": "Demarrer nouvelle ligne", "x13.mod.location.opt.valueSeparate": "Separé valeurs", @@ -90,6 +145,7 @@ "x13.mod.redstone": "Mode Redstone", "x13.mod.fullbright": "Fullbright", "x13.mod.locationEnable": "Location Data On/Off", + "x13.mod.blueBlueSky": "Always Blue Sky", "x13.mod.config": "Config", "x13.mod.modes": "Modes", "x13.mod.selector.key.title": "Selection de touche", diff --git a/src/main/resources/assets/atianxray/lang/ja_jp.json b/src/main/resources/assets/atianxray/lang/ja_jp.json index 8a2306d..abddddf 100644 --- a/src/main/resources/assets/atianxray/lang/ja_jp.json +++ b/src/main/resources/assets/atianxray/lang/ja_jp.json @@ -32,6 +32,7 @@ "x13.mod.esp.template.wither": "ウィザー", "x13.mod.esp.template.aggresive": "敵対Mob", "x13.mod.esp.template.passive": "友好Mob", + "x13.mod.esp.template.chest": "チェスト", "x13.mod.esp.tracer": "ガイド線", "x13.mod.esp.selector": "エンティティを選択", @@ -40,14 +41,31 @@ "x13.mod.location.option": "オプション", "x13.mod.location.showmodes": "モードを表示", "x13.mod.location.format": "フォーマット", + "x13.mod.location.hud": "HUD表示位置", + "x13.mod.location.hud.shift.x": "X軸間隔", + "x13.mod.location.hud.shift.y": "Y軸間隔", + "x13.mod.location.hud.fontSize": "フォントサイズ", + "x13.mod.location.hud.corner": "HUD表示基準位置", + "x13.mod.location.hud.corner.top.left": "左上", + "x13.mod.location.hud.corner.top.center": "中央上", + "x13.mod.location.hud.corner.top.right": "右上", + "x13.mod.location.hud.corner.middle.left": "左中央", + "x13.mod.location.hud.corner.middle.center": "画面中央", + "x13.mod.location.hud.corner.middle.right": "右中央", + "x13.mod.location.hud.corner.bottom.left": "左下", + "x13.mod.location.hud.corner.bottom.center": "中央下", + "x13.mod.location.hud.corner.bottom.right": "右下", "x13.mod.location.opt.x": "X座標", "x13.mod.location.opt.y": "Y座標", "x13.mod.location.opt.z": "Z座標", "x13.mod.location.opt.fx": "X座標(整数表現)", "x13.mod.location.opt.fy": "Y座標(整数表現)", "x13.mod.location.opt.fz": "Z座標(整数表現)", + "x13.mod.location.opt.horizontalDegree": "方位角", + "x13.mod.location.opt.verticalDegree": "仰角", "x13.mod.location.opt.name": "プレイヤー名", "x13.mod.location.opt.fps": "FPS", + "x13.mod.location.opt.fps.debug": "FPS(デバッグ)", "x13.mod.location.opt.biome": "バイオーム", "x13.mod.location.opt.biomeCategory": "バイオーム分類", "x13.mod.location.opt.biomeTranslate": "バイオーム(日本語)", @@ -58,6 +76,23 @@ "x13.mod.location.opt.lookingBlockLight": "見ているブロックの明るさ", "x13.mod.location.opt.lookingBlock": "見ているブロックの名前", "x13.mod.location.opt.lookingTranslate": "見ているブロックの名前(日本語)", + "x13.mod.location.opt.lookingRequestedTool": "見ているブロックの適正ツール", + "x13.mod.location.opt.lookingDestoryProgress": "見ているブロックの破壊進行率", + "x13.mod.location.opt.lookingGrowthLevel": "見ているブロックの成長レベル", + "x13.mod.location.opt.lookingMaxLevel": "見ているブロックの最大成長レベル", + "x13.mod.location.opt.block.requiredTool": "%s", + "x13.mod.location.opt.block.requiredTool.pickaxe": "ツルハシ", + "x13.mod.location.opt.block.requiredTool.axe": "斧", + "x13.mod.location.opt.block.requiredTool.shovel": "シャベル", + "x13.mod.location.opt.block.requiredTool.hoe": "クワ", + "x13.mod.location.opt.block.requiredTool.sword": "剣", + "x13.mod.location.opt.block.requiredTool.null": "なし", + "x13.mod.location.opt.block.requiredTier": "(%s以上)", + "x13.mod.location.opt.block.requiredTier.netherite": "ネザライト", + "x13.mod.location.opt.block.requiredTier.diamond": "ダイヤモンド", + "x13.mod.location.opt.block.requiredTier.iron": "鉄", + "x13.mod.location.opt.block.requiredTier.stone": "石", + "x13.mod.location.opt.block.requiredTier.wood": "木", "x13.mod.location.opt.facing": "方角", "x13.mod.location.opt.daysCount": "経過日数", "x13.mod.location.opt.timeOfDay": "時刻(割合)", @@ -65,7 +100,43 @@ "x13.mod.location.opt.hours": "時(0埋めなし)", "x13.mod.location.opt.minutesPadding": "分(0埋めあり)", "x13.mod.location.opt.secondsPadding": "秒(0埋めあり)", + "x13.mod.location.opt.weather": "天候", + "x13.mod.location.opt.weather.fine": "晴れ", + "x13.mod.location.opt.weather.rain": "雨天", + "x13.mod.location.opt.weather.thunder": "雷雨", "x13.mod.location.opt.isSlime": "スライムチャンク", + "x13.mod.location.opt.nutrition": "満腹度", + "x13.mod.location.opt.saturation": "隠し満腹度", + "x13.mod.location.opt.mainhandName": "メインハンドアイテム名", + "x13.mod.location.opt.mainhandTranslate": "メインハンドアイテム名(日本語)", + "x13.mod.location.opt.mainhandDispName": "メインハンドアイテム表示名", + "x13.mod.location.opt.mainhandDurability": "メインハンドアイテム耐久力/満腹度回復量", + "x13.mod.location.opt.mainhandMaxDurability": "メインハンドアイテム最大耐久力/使用後満腹度", + "x13.mod.location.opt.offhandName": "オフハンドアイテム名", + "x13.mod.location.opt.offhandTranslate": "オフハンドアイテム名(日本語)", + "x13.mod.location.opt.offhandDispName": "オフハンドアイテム表示名", + "x13.mod.location.opt.offhandDurability": "オフハンドアイテム耐久力/満腹度回復量", + "x13.mod.location.opt.offhandMaxDurability": "オフハンドアイテム最大耐久力/使用後満腹度", + "x13.mod.location.opt.helmetName": "ヘルメット名", + "x13.mod.location.opt.helmetTranslate": "ヘルメット名(日本語)", + "x13.mod.location.opt.helmetDispName": "ヘルメット表示名", + "x13.mod.location.opt.helmetDurability": "ヘルメット耐久力", + "x13.mod.location.opt.helmetMaxDurability": "ヘルメット最大耐久力", + "x13.mod.location.opt.chestplateName": "チェストプレート名", + "x13.mod.location.opt.chestplateTranslate": "チェストプレート(日本語)", + "x13.mod.location.opt.chestplateDispName": "チェストプレート表示名", + "x13.mod.location.opt.chestplateDurability": "チェストプレート耐久力", + "x13.mod.location.opt.chestplateMaxDurability": "チェストプレート最大耐久力", + "x13.mod.location.opt.leggingsName": "レギンス名", + "x13.mod.location.opt.leggingsTranslate": "レギンス(日本語)", + "x13.mod.location.opt.leggingsDispName": "レギンス表示名", + "x13.mod.location.opt.leggingsDurability": "レギンス耐久力", + "x13.mod.location.opt.leggingsMaxDurability": "レギンス最大耐久力", + "x13.mod.location.opt.bootsName": "ブーツ名", + "x13.mod.location.opt.bootsTranslate": "ブーツ(日本語)", + "x13.mod.location.opt.bootsDispName": "ブーツ表示名", + "x13.mod.location.opt.bootsDurability": "ブーツ耐久力", + "x13.mod.location.opt.bootsMaxDurability": "ブーツ最大耐久力", "x13.mod.location.opt.lineFeed": "改行", "x13.mod.location.opt.valueSeparate": "変数名の分割", @@ -74,6 +145,7 @@ "x13.mod.redstone": "レッドストーンモード", "x13.mod.fullbright": "最大光量", "x13.mod.locationEnable": "座標情報On/Off", + "x13.mod.blueBlueSky": "常に青空で描画", "x13.mod.config": "設定", "x13.mod.modes": "モード", "x13.mod.selector.key.title": "ショートカットキー設定", @@ -91,6 +163,16 @@ "x13.mod.link.issue": "バグトラッカ", "x13.mod.by": "By %s", + "x13.mod.config.search": "探知", + "x13.mod.config.espDamage": "ダメージ表示", + "x13.mod.config.blockEsp": "ブロック探知", + "x13.mod.config.border": "探知範囲", + "x13.mod.config.override": "上書き設定", + "x13.mod.config.fly": "飛行モード", + "x13.mod.config.zoom": "拡大", + "x13.mod.config.espline": "ガイド線幅", + "x13.mod.config.skin": "スキン", + "x13.mod.on": "On", "x13.mod.off": "Off", "key.categories.xray": "透視" diff --git a/src/main/resources/assets/atianxray/lang/zh_cn.json b/src/main/resources/assets/atianxray/lang/zh_cn.json index 43518d8..53fbba8 100644 --- a/src/main/resources/assets/atianxray/lang/zh_cn.json +++ b/src/main/resources/assets/atianxray/lang/zh_cn.json @@ -41,14 +41,31 @@ "x13.mod.location.option": "选项", "x13.mod.location.showmodes": "显示使用的模式", "x13.mod.location.format": "格式", + "x13.mod.location.hud": "HUD location", + "x13.mod.location.hud.shift.x": "Shift X", + "x13.mod.location.hud.shift.y": "Shift Y", + "x13.mod.location.hud.fontSize": "Font size", + "x13.mod.location.hud.corner": "HUD corner", + "x13.mod.location.hud.corner.top.left": "Top left", + "x13.mod.location.hud.corner.top.center": "Top center", + "x13.mod.location.hud.corner.top.right": "Top right", + "x13.mod.location.hud.corner.middle.left": "Middle left", + "x13.mod.location.hud.corner.middle.center": "Middle center", + "x13.mod.location.hud.corner.middle.right": "Middle right", + "x13.mod.location.hud.corner.bottom.left": "Bottom left", + "x13.mod.location.hud.corner.bottom.center": "Bottom center", + "x13.mod.location.hud.corner.bottom.right": "Bottom right", "x13.mod.location.opt.x": "位置 x", "x13.mod.location.opt.y": "位置 y", "x13.mod.location.opt.z": "位置 z", "x13.mod.location.opt.fx": "地面位置 x", "x13.mod.location.opt.fy": "地面位置 y", "x13.mod.location.opt.fz": "地面位置 z", + "x13.mod.location.opt.horizontalDegree": "Horizontal Degree", + "x13.mod.location.opt.verticalDegree": "Vertical Degree", "x13.mod.location.opt.name": "玩家名字", "x13.mod.location.opt.fps": "FPS", + "x13.mod.location.opt.fps.debug": "FPS debug", "x13.mod.location.opt.biome": "生物群系", "x13.mod.location.opt.biomeCategory": "生物群系类型", "x13.mod.location.opt.biomeTranslate": "生物群系(已翻译)", @@ -59,6 +76,23 @@ "x13.mod.location.opt.lookingBlockLight": "目视位置亮度", "x13.mod.location.opt.lookingBlock": "目视方块名称", "x13.mod.location.opt.lookingTranslate": "目视方块名称(已翻译)", + "x13.mod.location.opt.lookingRequestedTool": "Looking Block Requested Tool", + "x13.mod.location.opt.lookingDestoryProgress": "Looking Block Destory Progress", + "x13.mod.location.opt.lookingGrowthLevel": "Looking Block Growth Level", + "x13.mod.location.opt.lookingMaxLevel": "Looking Block Max Growth Level", + "x13.mod.location.opt.block.requiredTool": "%s", + "x13.mod.location.opt.block.requiredTool.pickaxe": "Pickaxe", + "x13.mod.location.opt.block.requiredTool.axe": "Axe", + "x13.mod.location.opt.block.requiredTool.shovel": "Shovel", + "x13.mod.location.opt.block.requiredTool.hoe": "Hoe", + "x13.mod.location.opt.block.requiredTool.sword": "Sword", + "x13.mod.location.opt.block.requiredTool.null": "None", + "x13.mod.location.opt.block.requiredTier": "(over %s)", + "x13.mod.location.opt.block.requiredTier.netherite": "Netherite", + "x13.mod.location.opt.block.requiredTier.diamond": "diamond", + "x13.mod.location.opt.block.requiredTier.iron": "iron", + "x13.mod.location.opt.block.requiredTier.stone": "stone", + "x13.mod.location.opt.block.requiredTier.wood": "wood", "x13.mod.location.opt.facing": "方向", "x13.mod.location.opt.daysCount": "天数", "x13.mod.location.opt.timeOfDay": "一天中的时间", @@ -66,7 +100,43 @@ "x13.mod.location.opt.hours": "小时(无填充)", "x13.mod.location.opt.minutesPadding": "分钟(填充0)", "x13.mod.location.opt.secondsPadding": "秒(填充0)", + "x13.mod.location.opt.weather": "Weather", + "x13.mod.location.opt.weather.fine": "Fine", + "x13.mod.location.opt.weather.rain": "Rainy", + "x13.mod.location.opt.weather.thunder": "Thunder", "x13.mod.location.opt.isSlime": "是史莱姆区块", + "x13.mod.location.opt.nutrition": "Nutrition", + "x13.mod.location.opt.saturation": "Saturation", + "x13.mod.location.opt.mainhandName": "Mainhand Item Name", + "x13.mod.location.opt.mainhandTranslate": "Mainhand Item Name (Translated)", + "x13.mod.location.opt.mainhandDispName": "Mainhand Item Display Name", + "x13.mod.location.opt.mainhandDurability": "Mainhand Item Durability/Heal Nutrition", + "x13.mod.location.opt.mainhandMaxDurability": "Mainhand Item Max Durability/After Eating Nutrition", + "x13.mod.location.opt.offhandName": "Offhand Item Name", + "x13.mod.location.opt.offhandTranslate": "Offhand Item Name (Translated)", + "x13.mod.location.opt.offhandDispName": "Offhand Item Display Name", + "x13.mod.location.opt.offhandDurability": "Offhand Item Durability/Heal Nutrition", + "x13.mod.location.opt.offhandMaxDurability": "Offhand Item Max Durability/After Eating Nutrition", + "x13.mod.location.opt.helmetName": "Helmet Item Name", + "x13.mod.location.opt.helmetTranslate": "Helmet Item Name (Translated)", + "x13.mod.location.opt.helmetDispName": "Helmet Item Display Name", + "x13.mod.location.opt.helmetDurability": "Helmet Durability", + "x13.mod.location.opt.helmetMaxDurability": "Helmet Max Durability", + "x13.mod.location.opt.chestplateName": "Chestplate Item Name", + "x13.mod.location.opt.chestplateTranslate": "Chestplate Item Name (Translated)", + "x13.mod.location.opt.chestplateDispName": "Chestplate Item Display Name", + "x13.mod.location.opt.chestplateDurability": "Chestplate Durability", + "x13.mod.location.opt.chestplateMaxDurability": "Chestplate Max Durability", + "x13.mod.location.opt.leggingsName": "leggings Item Name", + "x13.mod.location.opt.leggingsTranslate": "leggings Item Name (Translated)", + "x13.mod.location.opt.leggingsDispName": "leggings Item Display Name", + "x13.mod.location.opt.leggingsDurability": "leggings Durability", + "x13.mod.location.opt.leggingsMaxDurability": "leggings Max Durability", + "x13.mod.location.opt.bootsName": "boots Item Name", + "x13.mod.location.opt.bootsTranslate": "boots Item Name (Translated)", + "x13.mod.location.opt.bootsDispName": "boots Item Display Name", + "x13.mod.location.opt.bootsDurability": "boots Durability", + "x13.mod.location.opt.bootsMaxDurability": "boots Durability", "x13.mod.location.opt.lineFeed": "开始新行", "x13.mod.location.opt.valueSeparate": "单独值", @@ -75,6 +145,7 @@ "x13.mod.redstone": "红石模式", "x13.mod.fullbright": "高亮", "x13.mod.locationEnable": "位置信息开/关", + "x13.mod.blueBlueSky": "Always Blue Sky", "x13.mod.config": "配置", "x13.mod.modes": "模式", "x13.mod.selector.key.title": "热键选择", @@ -92,6 +163,16 @@ "x13.mod.link.issue": "问题", "x13.mod.by": "作者: %s", + "x13.mod.config.search": "Search", + "x13.mod.config.espDamage": "ESP damage indicator", + "x13.mod.config.blockEsp": "Block ESP", + "x13.mod.config.border": "ESP border", + "x13.mod.config.override": "Override config", + "x13.mod.config.fly": "Fly mode", + "x13.mod.config.zoom": "Zoom", + "x13.mod.config.espline": "ESP lines width", + "x13.mod.config.skin": "Skin", + "x13.mod.on": "启用", "x13.mod.off": "关闭", "key.categories.xray": "Xray" diff --git a/src/main/resources/atianxray.mixins.json b/src/main/resources/atianxray.mixins.json index 103af91..79fd832 100644 --- a/src/main/resources/atianxray.mixins.json +++ b/src/main/resources/atianxray.mixins.json @@ -6,7 +6,9 @@ "mixins": [], "refmap": "mixins.atianxray.refmap.json", "client": [ + "MixinBlock_rubidium", "MixinBlock", + "MixinClientLevel", "MixinLightmapTextureManager", "MixinMinecraftClient" ],