diff --git a/common/src/main/java/me/zacharias/speedometer/Client.java b/common/src/main/java/me/zacharias/speedometer/Client.java index 45f1c73..7a6d413 100644 --- a/common/src/main/java/me/zacharias/speedometer/Client.java +++ b/common/src/main/java/me/zacharias/speedometer/Client.java @@ -40,6 +40,13 @@ public class Client { "speedometer.key.category" ); + public static final KeyMapping SPEED_KEY = new KeyMapping( + "speedometer.key.speedKey", + InputConstants.Type.KEYSYM, + InputConstants.KEY_UP, + "speedometer.key.category" + ); + private static final ArrayList speeds = new ArrayList<>(); private static boolean speedometerVisualDisplayFailed = false; public static BufferedImage img = null; @@ -62,19 +69,22 @@ public class Client { } }); + //KeyMappingRegistry.register(SPEED_KEY); + ClientTickEvent.CLIENT_POST.register(minecraft -> { + if(SPEED_KEY.consumeClick()){ + if(minecraft.player != null) { + minecraft.player.addDeltaMovement(new Vec3(1, 0, 0)); + } + } + }); + Config.initialize(); Config.save(); ClientGuiEvent.RENDER_HUD.register(Client::render); - try { - img = ImageIO.read(Objects.requireNonNull(Speedometer.class.getResourceAsStream("/assets/speedometer/meter/meter-19.png"))); - }catch (NullPointerException | IOException e){ - LOGGER.warn("Can't load speedometer icon. speedometer visual display is disabled"); - speedometerVisualDisplayFailed = true; - } - - if(img == null){ + LOGGER.info("Loading speedometer "); + if(!MeterImages.LARGE.initiate()){ speedometerVisualDisplayFailed = true; } @@ -143,26 +153,22 @@ public class Client { //double v = speedTypeSpeed / speedType.gatMaxVisual(); - MeterImages meterImage = null; - int minDiff = 10000; + img = ImageHandler.clone(MeterImages.LARGE.getImage()); - for(MeterImages meterImage1 : MeterImages.values()){ - int diff = Math.abs(meterImage1.getSize()-Config.getImageSize()); - if(minDiff > diff && meterImage1.getImage() != null){ - minDiff = diff; - meterImage = meterImage1; - } - } + Graphics2D g2d = img.createGraphics(); - img = meterImage.getImage(); - - int radius = Config.getImageSize()/2-4; - - int x3 = (int) Math.round(radius*Math.cos(Math.toRadians(i+90)))+(Config.getImageSize()/2); - int y3 = (int) Math.round(radius*Math.sin(Math.toRadians(i+90)))+(Config.getImageSize()/2); + g2d.setColor(new Color(138, 0, 0)); + g2d.setFont(new Font(g2d.getFont().getName(), Font.PLAIN, 15)); + g2d.drawString(SpeedTypes.getName(speedType).getString(), img.getWidth()/2-27,img.getHeight()/2+25); BufferedImage img = ImageHandler.scale(Client.img, Config.getImageSize(), Config.getImageSize()); - Graphics2D g2d = img.createGraphics(); + + int radius = img.getWidth()/2-4; + + int x3 = (int) Math.round(radius*Math.cos(Math.toRadians(i+90)))+(img.getWidth()/2); + int y3 = (int) Math.round(radius*Math.sin(Math.toRadians(i+90)))+(img.getHeight()/2); + + g2d = img.createGraphics(); g2d.setColor(new Color(138, 0, 0)); @@ -170,8 +176,8 @@ public class Client { g2d.drawLine(x3,y3,img.getWidth()/2,img.getHeight()/2); - int xPos = getPos(graphics, Config.getXPosition(), 0, false); - int yPos = getPos(graphics, Config.getYPosition(), 1, true); + int xPos = getPos(graphics, Config.getXPosition(), 0); + int yPos = getPos(graphics, Config.getYPosition(), 1); for(int x1 = 0; x1 < img.getWidth(); x1++){ for(int y1 = 0; y1 < img.getHeight(); y1++){ @@ -207,8 +213,8 @@ public class Client { graphics.drawString( Minecraft.getInstance().font, speedString, - getPos(graphics, Config.getXPosition(), 0, false) - width, - getPos(graphics, Config.getYPosition(), 1, true) - lineHeight, + getPos(graphics, Config.getXPosition(), 0) - width, + getPos(graphics, Config.getYPosition(), 1) - lineHeight, Config.getColor().getColor() ); } @@ -231,7 +237,8 @@ public class Client { "Velocity total average: " + speed + "\n" + "Velocity total in " + speedType.name() + ": " + speedTypeSpeed + "\n" + "Percentage point of visual speedometer: " + v + "\n" + - "Degree end point: " + (i+45); + "Degree end point: " + (i+45) +"\n" + + (Config.getVisualSpeedometer()?"Visual Size: ":"Textual display") + Config.getImageSize(); Color color = new Color(255, 255, 255); @@ -253,9 +260,7 @@ public class Client { ); } - static boolean flag = true; - - private static int getPos(GuiGraphics event, String input, int type, boolean changeFlag) { + private static int getPos(GuiGraphics event, String input, int type) { ArrayList passerPose = new ArrayList<>(); final char[] s = input.toCharArray(); try{ @@ -274,7 +279,7 @@ public class Client { passerPose.add("/"); }else if(s[i] == '/'){ passerPose.add("/"); - }else if(testIfInt(s[i])){ + }else if(Character.isDigit(s[i])){ try{ Integer.parseInt(passerPose.get(i-1)); passerPose.add(i-1,passerPose.get(i-1)+s[i]); @@ -290,7 +295,7 @@ public class Client { defaultValues(event, type, passerPose); } - + // int xPos; try{ @@ -320,11 +325,12 @@ public class Client { xPos /= Integer.parseInt(s2); } } - if((Platform.isDevelopmentEnvironment() || Config.isDebug()) && flag) { + if((Config.isDebug()) && Config.getCounter() < 2) { LOGGER.info("Selected speed type: "+SpeedTypes.getName(Config.getSpeedType()).getString()+"\n"+ Arrays.toString(passerPose.toArray())+"\n\n"+ - xPos); - flag = !changeFlag; + xPos+"\n\n"+ + (type==0?Config.getXPosition():Config.getYPosition())); + Config.addCounter(); } return xPos; } @@ -333,19 +339,11 @@ public class Client { if(type == 0){ passerPose.add(String.valueOf(event.guiWidth())); passerPose.add("-"); - passerPose.add("70"); + passerPose.add("3"); }else if(type == 1){ passerPose.add(String.valueOf(event.guiHeight())); passerPose.add("-"); - passerPose.add("15"); + passerPose.add("3"); } } - - private static boolean testIfInt(char c) { - int i = Integer.parseInt(Character.toString(c)); - return (i == 0 || i == 1 || i == 2 || - i == 3 || i == 4 || i == 5 || - i == 6 || i == 7 || i == 8 || - i == 9); - } } diff --git a/common/src/main/java/me/zacharias/speedometer/Config.java b/common/src/main/java/me/zacharias/speedometer/Config.java index cb06806..fd925a1 100644 --- a/common/src/main/java/me/zacharias/speedometer/Config.java +++ b/common/src/main/java/me/zacharias/speedometer/Config.java @@ -12,6 +12,7 @@ import static me.zacharias.speedometer.Speedometer.MOD_ID; public class Config { private static JSONObject Config; public static final float configVersion = 3f; + private static int counter = 0; public static void initialize(){ if(Config != null) throw new RuntimeException("Already Initialized"); @@ -128,6 +129,7 @@ public class Config { }catch (Exception e){ throw new RuntimeException(e); } + counter=0; } public static SpeedTypes getSpeedType(){ @@ -175,6 +177,13 @@ public class Config { } } + public static int getCounter(){ + return counter; + } + public static void addCounter(){ + counter++; + } + /*public static String getXPositionVisual(){ if(Config.has("xPositionVisual")) { return Config.getString("xPositionVisual"); @@ -210,7 +219,7 @@ public class Config { if(Config.has("yPosition")) { return Config.getString("yPosition"); }else{ - return "H-15"; + return "H-3"; } } @@ -218,7 +227,7 @@ public class Config { if(Config.has("xPosition")) { return Config.getString("xPosition"); }else{ - return "W-70"; + return "W-3"; } } diff --git a/common/src/main/java/me/zacharias/speedometer/ImageHandler.java b/common/src/main/java/me/zacharias/speedometer/ImageHandler.java index 55e731c..9158389 100644 --- a/common/src/main/java/me/zacharias/speedometer/ImageHandler.java +++ b/common/src/main/java/me/zacharias/speedometer/ImageHandler.java @@ -11,4 +11,16 @@ public class ImageHandler { g2d.drawImage(img1,0,0,null); return out; } + + public static BufferedImage clone(BufferedImage image) { + BufferedImage out = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB); + Graphics2D g2d = out.createGraphics(); + for(int x = 0; x < image.getWidth(); x++){ + for(int y = 0; y < image.getWidth(); y++){ + g2d.setColor(new Color(image.getRGB(x,y))); + g2d.fillRect(x,y,1,1); + } + } + return out; + } } \ No newline at end of file diff --git a/common/src/main/java/me/zacharias/speedometer/MeterImages.java b/common/src/main/java/me/zacharias/speedometer/MeterImages.java index ab70340..521e8d1 100644 --- a/common/src/main/java/me/zacharias/speedometer/MeterImages.java +++ b/common/src/main/java/me/zacharias/speedometer/MeterImages.java @@ -4,44 +4,49 @@ import net.minecraft.network.chat.Component; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; +import java.io.IOException; import java.util.Objects; +import static me.zacharias.speedometer.Speedometer.LOGGER; + public enum MeterImages { - LARGE(Component.translatable("speedometer.meter.large"), () -> { - try { - return ImageIO.read(Objects.requireNonNull(Speedometer.class.getResourceAsStream("/assets/speedometer/meter/meter-115.png"))); - } catch (Exception e) { - return null; - } - }, 115), - SMALL(Component.translatable("speedometer.meter.small"), () -> { - try { - return ImageIO.read(Objects.requireNonNull(Speedometer.class.getResourceAsStream("/assets/speedometer/meter/meter-19.png"))); - } catch (Exception e) { - return null; - } - }, 19), - MEDIUM(Component.translatable("speedometer.meter.small"), () -> { - try { - return ImageIO.read(Objects.requireNonNull(Speedometer.class.getResourceAsStream("/assets/speedometer/meter/meter-67.png"))); - } catch (Exception e) { - return null; - } - }, 67) + LARGE(Component.translatable("speedometer.meter.large"), "/assets/speedometer/meter/meter-115.png", 115), + SMALL(Component.translatable("speedometer.meter.small"), "/assets/speedometer/meter/meter-19.png", 19), + MEDIUM(Component.translatable("speedometer.meter.small"), "/assets/speedometer/meter/meter-67.png", 67) ; private final Component name; - private final BufferedImage image; + private final String meterIcon; + private BufferedImage image; private final int size; - MeterImages(Component name, Loader icon, int size) { + MeterImages(Component name, String meterIcon, int size) { this.name = name; - this.image = icon.load(); this.size = size; + this.meterIcon = meterIcon; + } + + public boolean initiate(){ + if(image != null){ + LOGGER.warn("Already loaded \""+meterIcon+"\""); + } + try{ + LOGGER.info("Loading speedometer \""+meterIcon+"\""); + image = ImageIO.read(Objects.requireNonNull(Speedometer.class.getResourceAsStream(meterIcon))); + LOGGER.info("Loaded speedometer \""+meterIcon+"\""); + return true; + } catch (IOException e) { + image = new BufferedImage(0,0, BufferedImage.TYPE_INT_ARGB); + LOGGER.warn("Failed to load speedometer \""+meterIcon+"\""); + return false; + } } public BufferedImage getImage() { + if(image == null){ + LOGGER.warn("\""+meterIcon+"\" has not ben loaded yet!"); + } return image; } @@ -52,8 +57,4 @@ public enum MeterImages { public Component getName() { return name; } - - private interface Loader{ - BufferedImage load(); - } } diff --git a/gradle.properties b/gradle.properties index 28e4ff2..757fdaa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx8G minecraft_version=1.20.1 archives_base_name=speedometer -mod_version=4 +mod_version=5-alpha maven_group=me.zacharias architectury_version=9.1.10