1 Commits

Author SHA1 Message Date
b4eb3884a5 Add initial Quilt submodule config
- Added missing `gradle.properties` for the `:quilt` module
- Added `include("quilt")` to `settings.gradle`

Not sure what this setup really does beyond setting Loom's platform to Quilt.
This doesn't currently build — possibly due to:
A) Missing support, or
B) Me doing something wrong.

This branch might be dead, but at least this stuff is tracked now.

Best regards,
my future self (if I ever come back to this)
2025-05-18 16:33:34 +02:00
9 changed files with 300 additions and 299 deletions

View File

@@ -27,7 +27,7 @@ assignees: zaze06
**Config** **Config**
*If needed* *If needed*
*Use [GitHub Gist](gist.gihub.com) to upload your speedometer config, located in `<minecraft>/config/speedometer/config.json`* *Use [GitHub Gist](gist.gihub.com) to upload your speedometer config, located in *
**Logs** **Logs**
*If needed(Most of the times)* *If needed(Most of the times)*

View File

@@ -4,7 +4,7 @@
"description": "A different speedometer", "description": "A different speedometer",
"supported_formats": { "supported_formats": {
"min_inclusive": 34, "min_inclusive": 34,
"max_inclusive": 80 "max_inclusive": 57
} }
} }
} }

View File

@@ -6,7 +6,6 @@ import dev.architectury.event.events.client.ClientTickEvent;
import dev.architectury.platform.Platform; import dev.architectury.platform.Platform;
import dev.architectury.registry.client.keymappings.KeyMappingRegistry; import dev.architectury.registry.client.keymappings.KeyMappingRegistry;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.CrashReport;
import net.minecraft.client.DeltaTracker; import net.minecraft.client.DeltaTracker;
import net.minecraft.client.KeyMapping; import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@@ -24,312 +23,317 @@ import java.util.*;
import static me.zacharias.speedometer.Speedometer.*; import static me.zacharias.speedometer.Speedometer.*;
public class Client { public class Client {
public static final KeyMapping CONFIG_KEY = new KeyMapping( public static final KeyMapping CONFIG_KEY = new KeyMapping(
"speedometer.key.configKey", "speedometer.key.configKey",
InputConstants.Type.KEYSYM, InputConstants.Type.KEYSYM,
InputConstants.KEY_O, InputConstants.KEY_O,
"speedometer.key.category" "speedometer.key.category"
); );
public static final KeyMapping DEBUG_KEY = new KeyMapping( public static final KeyMapping DEBUG_KEY = new KeyMapping(
"speedometer.key.debugKey", "speedometer.key.debugKey",
InputConstants.Type.KEYSYM, InputConstants.Type.KEYSYM,
InputConstants.KEY_F6, InputConstants.KEY_F6,
"speedometer.key.category" "speedometer.key.category"
); );
private static final ArrayList<Double> speeds = new ArrayList<>(); private static final ArrayList<Double> speeds = new ArrayList<>();
public static void init(){ public static void init(){
final boolean isClothLoaded = Platform.isModLoaded("cloth_config") || Platform.isModLoaded("cloth-config"); final boolean isClothLoaded = Platform.isModLoaded("cloth_config") || Platform.isModLoaded("cloth-config");
if(isClothLoaded) {
Platform.getMod(MOD_ID).registerConfigurationScreen(parent -> ConfigMenu.getConfig(parent).build());
}
else
{
LOGGER.warn("Missing Cloth Config API, In game config menu will not be available");
}
KeyMappingRegistry.register(CONFIG_KEY);
ClientTickEvent.CLIENT_POST.register(minecraft -> {
if(CONFIG_KEY.consumeClick()){
if(isClothLoaded) { if(isClothLoaded) {
Platform.getMod(MOD_ID).registerConfigurationScreen(parent -> ConfigMenu.getConfig(parent).build()); Minecraft.getInstance().setScreen(ConfigMenu.getConfig(Minecraft.getInstance().screen).build());
}
else if(Minecraft.getInstance().player != null)
{
Minecraft.getInstance().player.displayClientMessage(
Component
.translatable("speedometer.error.missing_cloth")
.withColor(new Color(190, 0, 0).getRGB())
.append(Component
.translatable("speedometer.error.missing_cloth.open_config")
.withStyle(ChatFormatting.UNDERLINE)
.withStyle((style) -> style.withClickEvent(new ClickEvent.OpenFile(Config.getConfigPath())))
), false);
LOGGER.warn(Component.translatable("speedometer.error.missing_cloth").getString());
} }
else else
{ {
LOGGER.warn("Missing Cloth Config API, In game config menu will not be available"); LOGGER.warn(Component.translatable("speedometer.error.missing_cloth").getString());
} }
}
});
KeyMappingRegistry.register(CONFIG_KEY); KeyMappingRegistry.register(DEBUG_KEY);
ClientTickEvent.CLIENT_POST.register(minecraft -> { ClientTickEvent.CLIENT_POST.register(minecraft -> {
if(CONFIG_KEY.consumeClick()){ if(DEBUG_KEY.consumeClick()){
if(isClothLoaded) { Config.setDebug(!Config.isDebug());
Minecraft.getInstance().setScreen(ConfigMenu.getConfig(Minecraft.getInstance().screen).build()); }
} });
else if(Minecraft.getInstance().player != null)
{
Minecraft.getInstance().player.displayClientMessage(
Component
.translatable("speedometer.error.missing_cloth")
.withColor(new Color(190, 0, 0).getRGB())
.append(Component
.translatable("speedometer.error.missing_cloth.open_config")
.withStyle(ChatFormatting.UNDERLINE)
.withStyle((style) -> style.withClickEvent(new ClickEvent.OpenFile(Config.getConfigPath())))
), false);
LOGGER.warn(Component.translatable("speedometer.error.missing_cloth").getString());
}
else
{
LOGGER.warn(Component.translatable("speedometer.error.missing_cloth").getString());
}
}
});
KeyMappingRegistry.register(DEBUG_KEY); Config.initialize();
ClientTickEvent.CLIENT_POST.register(minecraft -> { Config.save();
if(DEBUG_KEY.consumeClick()){
Config.setDebug(!Config.isDebug());
}
});
Config.initialize(); ClientGuiEvent.RENDER_HUD.register(Client::render);
Config.save();
ClientGuiEvent.RENDER_HUD.register(Client::render); LOGGER.info("Finished loading speedometer");
}
LOGGER.info("Finished loading speedometer"); private static void render(GuiGraphics graphics, DeltaTracker deltaTracker) {
if(Minecraft.getInstance().player == null) return;
if(Minecraft.getInstance().options.hideGui) return;
Entity entity = Minecraft.getInstance().player.getRootVehicle();
Vec3 vec = new Vec3(
entity.getX() - entity.xOld,
entity.getY() - entity.yOld,
entity.getZ() - entity.zOld
);
double yOffset = 0D;
double xOffset = 0D;
double zOffset = 0D;
double vOffset = 0D;
double speed = (Math.sqrt(Math.pow(vec.x + xOffset, 2) + Math.pow(vec.y + yOffset, 2) + Math.pow(vec.z + zOffset, 2)) * 20)+vOffset;
double lSpeed = speed;
if (speeds.size() >= 30) {
speeds.removeFirst();
}
speeds.add(speed);
speed = 0;
for (Double aDouble : speeds) {
speed += aDouble;
}
speed = speed / speeds.size();
double speedTypeSpeed;
SpeedTypes speedType = Config.getSpeedType();
if (speedType == SpeedTypes.KNOT || (entity instanceof Boat && Config.getUseKnot())) {
speedTypeSpeed = speed * 1.94384449;
}else if (speedType == SpeedTypes.KMPH) {
speedTypeSpeed = speed * 3.6;
} else if (speedType == SpeedTypes.MPH) {
speedTypeSpeed = speed * 2.23693629;
}else {
speedTypeSpeed = speed;
} }
private static void render(GuiGraphics graphics, DeltaTracker deltaTracker) { String format = String.format("%.2f", speedTypeSpeed);
if(Minecraft.getInstance().player == null) return;
if(Minecraft.getInstance().options.hideGui) return;
Entity entity = Minecraft.getInstance().player.getRootVehicle();
Vec3 vec = new Vec3( String speedString = format + " " + SpeedTypes.getName(speedType).getString();
entity.getX() - entity.xOld,
entity.getY() - entity.yOld,
entity.getZ() - entity.zOld
);
double yOffset = 0D; int width = switch ((Config.getVisualSpeedometer() && !Config.isDisableVisualSpeedometer()) ? 1 : 0){
double xOffset = 0D; case 1 -> Config.getImageSize();
double zOffset = 0D; case 0 -> Minecraft.getInstance().font.width(speedString);
double vOffset = 0D; default -> 0;
};
double speed = (Math.sqrt(Math.pow(vec.x + xOffset, 2) + Math.pow(vec.y + yOffset, 2) + Math.pow(vec.z + zOffset, 2)) * 20)+vOffset; int yPos = getPosImp(graphics, width, Config.getYPosition(), false);
double lSpeed = speed; int xPos = getPosImp(graphics, width, Config.getXPosition(), true);
if (speeds.size() >= 30) { int lineHeight = Minecraft.getInstance().font.lineHeight;
speeds.removeFirst();
if(Config.getVisualSpeedometer() && !Config.isDisableVisualSpeedometer()){
//double v = speedTypeSpeed / speedType.gatMaxVisual();
BufferedImage img = ImageHandler.scale(ICON.getSpeedometerIcon(speedTypeSpeed), Config.getImageSize(), Config.getImageSize());
for(int x1 = 0; x1 < img.getWidth(); x1++){
for(int y1 = 0; y1 < img.getHeight(); y1++){
int x2 = x1 + xPos - img.getWidth();
int y2 = y1 + yPos - img.getHeight();
int rgb = img.getRGB(x1, y1);
if(new Color(rgb).equals(Color.black)) continue;
graphics.fill(x2, y2, x2+1, y2+1, rgb);
} }
speeds.add(speed); }
speed = 0;
for (Double aDouble : speeds) {
speed += aDouble;
}
speed = speed / speeds.size();
double speedTypeSpeed; }else {
// i -> x
SpeedTypes speedType = Config.getSpeedType(); // j -> y
if (speedType == SpeedTypes.KNOT || (entity instanceof Boat && Config.getUseKnot())) { // k -> color RGB int
speedTypeSpeed = speed * 1.94384449; graphics.drawString(
}else if (speedType == SpeedTypes.KMPH) { Minecraft.getInstance().font,
speedTypeSpeed = speed * 3.6; speedString,
} else if (speedType == SpeedTypes.MPH) { xPos - width,
speedTypeSpeed = speed * 2.23693629; yPos - lineHeight,
}else { Config.getColor().getRGB()
speedTypeSpeed = speed; );
}
String format = String.format("%.2f", speedTypeSpeed);
String speedString = format + " " + SpeedTypes.getName(speedType).getString();
int width = switch ((Config.getVisualSpeedometer() && !Config.isDisableVisualSpeedometer()) ? 1 : 0){
case 1 -> Config.getImageSize();
case 0 -> Minecraft.getInstance().font.width(speedString);
default -> 0;
};
int yPos = getPosImp(graphics, width, Config.getYPosition(), false);
int xPos = getPosImp(graphics, width, Config.getXPosition(), true);
int lineHeight = Minecraft.getInstance().font.lineHeight;
if(Config.getVisualSpeedometer() && !Config.isDisableVisualSpeedometer()){
//double v = speedTypeSpeed / speedType.gatMaxVisual();
BufferedImage img = ImageHandler.scale(ICON.getSpeedometerIcon(speedTypeSpeed), Config.getImageSize(), Config.getImageSize());
for(int x1 = 0; x1 < img.getWidth(); x1++){
for(int y1 = 0; y1 < img.getHeight(); y1++){
int x2 = x1 + xPos - img.getWidth();
int y2 = y1 + yPos - img.getHeight();
int rgb = img.getRGB(x1, y1);
if(new Color(rgb).equals(Color.black)) continue;
graphics.fill(x2, y2, x2+1, y2+1, rgb);
}
}
}else {
// i -> x
// j -> y
// k -> color RGB int
graphics.drawString(
Minecraft.getInstance().font,
speedString,
xPos - width,
yPos - lineHeight,
Config.getColor().getRGB()
);
}
if(Config.isDebug()){
String debugData = "Speedometer: "+VERSION+"\n"+
"Velocity raw:" + "\n" +
" X: " + vec.x + "\n" +
" Y: " + vec.y + "\n" +
" Z: " + vec.z + "\n" +
"Offsets:" + "\n" +
" X: " + xOffset + "\n" +
" Y: " + yOffset + "\n" +
" Z: " + zOffset + "\n" +
" Total: " + vOffset + "\n" +
"Velocity modified:" + "\n" +
" X: " + (vec.x + xOffset) + "\n" +
" Y: " + (vec.y + yOffset) + "\n" +
" Z: " + (vec.z + zOffset) + "\n" +
" Total: " + lSpeed + "\n" +
"Velocity total average: " + speed + "\n" +
"Velocity total in " + speedType.name() + ": " + speedTypeSpeed + "\n" +
"Endpoint position: (" + Debugger.x + ", " + Debugger.y + ")\n" +
"Percentage point of visual speedometer: " + Debugger.angle + "\n" +
(Config.getVisualSpeedometer()?"Visual Size: "+Config.getImageSize():"Textual display");
Color color = new Color(255, 255, 255);
int y = 0;
for(String s : debugData.split("\n")){
drawString(graphics,0, y, s, color.getRGB());
y+=Minecraft.getInstance().font.lineHeight+1;
}
}
} }
private static void drawString(GuiGraphics graphics, int x, int y, String text, int colorRGB){ if(Config.isDebug()){
graphics.drawString( String debugData = "Velocity raw:" + "\n" +
Minecraft.getInstance().font, " X: " + vec.x + "\n" +
text, " Y: " + vec.y + "\n" +
x, " Z: " + vec.z + "\n" +
y, "Offsets:" + "\n" +
colorRGB " X: " + xOffset + "\n" +
); " Y: " + yOffset + "\n" +
" Z: " + zOffset + "\n" +
" Total: " + vOffset + "\n" +
"Velocity modified:" + "\n" +
" X: " + (vec.x + xOffset) + "\n" +
" Y: " + (vec.y + yOffset) + "\n" +
" Z: " + (vec.z + zOffset) + "\n" +
" Total: " + lSpeed + "\n" +
"Velocity total average: " + speed + "\n" +
"Velocity total in " + speedType.name() + ": " + speedTypeSpeed + "\n" +
"Endpoint position: (" + Debugger.x + ", " + Debugger.y + ")\n" +
"Percentage point of visual speedometer: " + Debugger.angle + "\n" +
(Config.getVisualSpeedometer()?"Visual Size: "+Config.getImageSize():"Textual display");
Color color = new Color(255, 255, 255);
int y = 0;
for(String s : debugData.split("\n")){
drawString(graphics,0, y, s, color.getRGB());
y+=Minecraft.getInstance().font.lineHeight+1;
}
}
}
private static void drawString(GuiGraphics graphics, int x, int y, String text, int colorRGB){
graphics.drawString(
Minecraft.getInstance().font,
text,
x,
y,
colorRGB
);
}
private static int getPosImp(GuiGraphics event, int width, String input, boolean isXPosition){
input = input.trim();
input = input
.replaceAll("(W+)|(H+)", String.valueOf(isXPosition?event.guiWidth():event.guiHeight()))
.replaceAll("(w+)|(h+)", String.valueOf(isXPosition?event.guiWidth()/2:event.guiHeight()/2))
.replaceAll("(S+)|(s+)", String.valueOf(width));
if((Config.isDebug()) && Config.getCounter() < 2) {
//String speedDisplayType = SpeedTypes.getName(Config.getSpeedType()).getString();
//String splitRawSpeedPosition = Arrays.toString(passerPose.toArray());
//String rawSpeedPosition = isXPosition ? Config.getXPosition() : Config.getYPosition();
LOGGER.info("Selected speed type(DEBUG): {}\n{}\n\n\n", isXPosition, input);
Config.addCounter();
}
return getPos(event, width, input, isXPosition);
}
private static int getPos(GuiGraphics event, int width, String input, boolean isXPosition) {
ArrayList<String> passerPose = new ArrayList<>();
final char[] s = input.toCharArray();
try{
for(int i = 0; i <s.length; i++){
char c = s[i];
if(c == 'W' || c == 'H'){
if(isXPosition) passerPose.add(String.valueOf(event.guiWidth()));
else passerPose.add(String.valueOf(event.guiHeight()));
}
else if(c == 'h' || c == 'w'){
if(isXPosition) passerPose.add(String.valueOf(event.guiWidth() / 2));
else passerPose.add(String.valueOf(event.guiHeight() / 2));
}
else if(c == 'S' || c == 's'){
passerPose.add(String.valueOf(width));
}
else if(c == '+' ||
c == '-' ||
c == '*' ||
c == '/'){
passerPose.add(Character.toString(c));
}
else if(Character.isDigit(c)){
int lastIndex = i - 1;
if(lastIndex > 0 && passerPose.get(lastIndex).matches("^[0-9]+$")) {
passerPose.add(passerPose.removeLast() + c);
}
else
{
passerPose.add(Character.toString(c));
}
}
else{
throw new Exception();
}
}
}catch (Exception e){
passerPose.clear();
defaultValues(event, isXPosition, passerPose);
} }
private static int getPosImp(GuiGraphics event, int width, String input, boolean isXPosition){ //
input = input.trim();
input = input int position;
.replaceAll("(W+)|(H+)", String.valueOf(isXPosition?event.guiWidth():event.guiHeight())) try{
.replaceAll("(w+)|(h+)", String.valueOf(isXPosition?event.guiWidth()/2:event.guiHeight()/2)) position = Integer.parseInt(passerPose.getFirst());
.replaceAll("(S+)|(s+)", String.valueOf(width)); }catch (NumberFormatException e){
if((Config.isDebug()) && Config.getCounter() < 2) { passerPose.clear();
//String speedDisplayType = SpeedTypes.getName(Config.getSpeedType()).getString(); defaultValues(event, isXPosition, passerPose);
//String splitRawSpeedPosition = Arrays.toString(passerPose.toArray()); position = Integer.parseInt(passerPose.getFirst());
//String rawSpeedPosition = isXPosition ? Config.getXPosition() : Config.getYPosition();
LOGGER.info("Selected speed type(DEBUG): {}\n{}\n\n\n", isXPosition, input);
Config.addCounter();
}
return getPos(event, width, input, isXPosition);
} }
private static int getPos(GuiGraphics event, int width, String input, boolean isXPosition) { for(int i = 1; i < passerPose.size(); i++){
ArrayList<String> tokens = new ArrayList<>(); boolean first = false;
final char[] s = input.toCharArray(); String s1 = passerPose.get(i);
String s2 = "";
try{
s2 = passerPose.get(i+1);
}catch (Exception e){
first = true;
}
try{ if(Objects.equals(s1, "+") && !first){
for(int i = 0; i <s.length; i++){ position += Integer.parseInt(s2);
char c = s[i]; }else if(Objects.equals(s1, "-") && !first){
if(c == '+' || position -= Integer.parseInt(s2);
c == '-' || }else if(Objects.equals(s1, "*") && !first){
c == '*' || position *= Integer.parseInt(s2);
c == '/'){ }else if(Objects.equals(s1, "/") && !first){
tokens.add(Character.toString(c)); position /= Integer.parseInt(s2);
} }
else if(Character.isDigit(c)){
int lastIndex = i - 1;
if(lastIndex >= 0 && tokens.get(lastIndex).matches("^[0-9]+$")) {
tokens.set(tokens.size() - 1, tokens.get(tokens.size() - 1) + c);
}
else
{
tokens.add(Character.toString(c));
}
}
else{
throw new IllegalArgumentException("Invalid character in input string: " + c);
}
}
}catch (Exception e){
tokens.clear();
defaultValues(event, isXPosition, tokens);
}
int position;
try{
position = Integer.parseInt(tokens.getFirst());
}catch (NumberFormatException e){
tokens.clear();
defaultValues(event, isXPosition, tokens);
position = Integer.parseInt(tokens.getFirst());
}
for(int i = 1; i < tokens.size(); i+=2){
String operator = tokens.get(i);
if(i + 1 >= tokens.size()) {
LOGGER.error("Invalid expression: missing operand after operator '{}'", operator);
break;
}
String operand = tokens.get(i + 1);
int value;
try {
value = Integer.parseInt(operand);
}
catch (NumberFormatException e) {
LOGGER.error("Invalid operand: '{}'. Using default value. REPORT THIS! https://github.com/zaze06/Speedometer/issues/new/choose", operand);
Minecraft.getInstance().emergencySaveAndCrash(new CrashReport("Invalid operand in speedometer position calculation. REPORT THIS! https://github.com/zaze06/Speedometer/issues/new/choose", e));
return -1;
}
switch (operator) {
case "+" -> position += value;
case "-" -> position -= value;
case "*" -> position *= value;
case "/" -> position /= value;
}
}
if (Config.isDebug() && Config.getCounter() < 2) {
LOGGER.info("Selected speed type: {}\n{}\n\n{}\n\n{}",
SpeedTypes.getName(Config.getSpeedType()).getString(),
Arrays.toString(tokens.toArray()),
position,
isXPosition ? Config.getXPosition() : Config.getYPosition());
Config.addCounter();
}
return position;
} }
if((Config.isDebug()) && Config.getCounter() < 2) {
private static void defaultValues(GuiGraphics event, boolean isXPosition, ArrayList<String> passerPose) { String speedDisplayType = SpeedTypes.getName(Config.getSpeedType()).getString();
if(isXPosition) String splitRawSpeedPosition = Arrays.toString(passerPose.toArray());
{ String rawSpeedPosition = isXPosition ? Config.getXPosition() : Config.getYPosition();
passerPose.add(String.valueOf(event.guiWidth())); LOGGER.info("Selected speed type: {}\n{}\n\n{}\n\n{}", speedDisplayType, splitRawSpeedPosition, position, rawSpeedPosition);
passerPose.add("-"); Config.addCounter();
passerPose.add("3");
}
else
{
passerPose.add(String.valueOf(event.guiHeight()));
passerPose.add("-");
passerPose.add("3");
}
} }
return position;
}
private static void defaultValues(GuiGraphics event, boolean isXPosition, ArrayList<String> passerPose) {
if(isXPosition)
{
passerPose.add(String.valueOf(event.guiWidth()));
passerPose.add("-");
passerPose.add("3");
}
else
{
passerPose.add(String.valueOf(event.guiHeight()));
passerPose.add("-");
passerPose.add("3");
}
}
} }

View File

@@ -1,29 +1,29 @@
org.gradle.jvmargs=-Xmx8G org.gradle.jvmargs=-Xmx8G
minecraft_version=1.21.6 minecraft_version=1.21.5
archives_base_name=speedometer archives_base_name=speedometer
mod_version=6.3.0 mod_version=6.2.4
maven_group=me.zacharias maven_group=me.zacharias
# https://modrinth.com/mod/architectury-api/versions # https://modrinth.com/mod/architectury-api/versions
architectury_version=17.0.6 architectury_version=16.0.3
# https://modrinth.com/mod/cloth-config/versions # https://modrinth.com/mod/cloth-config/versions
cloth_config_version = 19.0.147 cloth_config_version = 18.0.145
# NeoForged Only # NeoForged Only
# https://neoforged.net/ # https://neoforged.net/
neoforge_version = 21.6.12-beta neoforge_version = 21.5.14-beta
# Fabric Only # Fabric Only
# https://fabricmc.net/develop/ # https://fabricmc.net/develop/
fabric_loader_version=0.16.14 fabric_loader_version=0.16.10
fabric_api_version=0.127.1 fabric_api_version=0.119.6
# Fabric Only # Fabric Only
# https://modrinth.com/mod/modmenu/versions # https://modrinth.com/mod/modmenu/versions
modmenu_version = 15.0.0-beta.3 modmenu_version = 14.0.0-rc.2
# Version of the org.json json library # Version of the org.json json library
json_version = 20240303 json_version = 20240303

View File

@@ -27,7 +27,7 @@ public class SpeedometerNeoForge {
} }
} }
@EventBusSubscriber(modid = MOD_ID,/* bus = EventBusSubscriber.Bus.MOD, */value = Dist.CLIENT) @EventBusSubscriber(modid = MOD_ID, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
class EventHandler class EventHandler
{ {
/** /**

View File

@@ -8,8 +8,7 @@
"6.2.1": "Fixed issue #3", "6.2.1": "Fixed issue #3",
"6.2.2": "Fixed issue with multi digit position in the parser", "6.2.2": "Fixed issue with multi digit position in the parser",
"6.2.3": "Fixed crash issue from 6.2.2 when playing in 1.21.4", "6.2.3": "Fixed crash issue from 6.2.2 when playing in 1.21.4",
"6.2.4": "updated to 1.21.5", "6.2.4": "updated to 1.21.5"
"6.3.0": "updated to 1.21.6, Fixed bug in tokenizer"
}, },
"promos": { "promos": {
"1.21-latest": "6.2.2", "1.21-latest": "6.2.2",
@@ -19,9 +18,6 @@
"1.21.4-recommended": "6.2.3", "1.21.4-recommended": "6.2.3",
"1.21.5-latest": "6.2.4", "1.21.5-latest": "6.2.4",
"1.21.5-recommended": "6.2.4", "1.21.5-recommended": "6.2.4"
"1.21.6-latest": "6.3.0",
"1.21.6-recommended": "6.3.0"
} }
} }

1
quilt/gradle.properties Normal file
View File

@@ -0,0 +1 @@
loom.platform=quilt

View File

@@ -13,8 +13,7 @@ This is a simple mod for Forge, Fabric, and NeoForged that displays your current
3. Run `gradlew build`(Windows cmd) or `./gradlew build`(Linux, MacOS, Windows powershell) 3. Run `gradlew build`(Windows cmd) or `./gradlew build`(Linux, MacOS, Windows powershell)
4. the compiled version will be in 4. the compiled version will be in
* Fabic: `fabric/build/libs` * Fabic: `fabric/build/libs`
* NeoForge: `neoforged/build/libs` * Forge: `neoforged/build/libs`
* Forge: `forge/build/libs`
## Forge Support Transition ## Forge Support Transition
As of version 1.21 I chose to no longer support Forge in fevour of NeoForged As of version 1.21 I chose to no longer support Forge in fevour of NeoForged

View File

@@ -10,3 +10,4 @@ pluginManagement {
include("common") include("common")
include("fabric") include("fabric")
include("neoforge") include("neoforge")
include("quilt")