Added ability to change width and height for the visual image

Change indentation to 2 spaces instead of 4
Added ImageHandler.java for basic Image related things
Added 2 new speedometer images for scaling purposes
Updated to version 3
Gave gradle more ram
Added the new translatable texts to en_us.json
This commit is contained in:
2023-07-11 15:17:48 +02:00
parent 64a35df67d
commit dc757d8fa1
13 changed files with 719 additions and 601 deletions

View File

@@ -11,7 +11,7 @@ import static me.zacharias.speedometer.Speedometer.MOD_ID;
public class Config { public class Config {
private static JSONObject Config; private static JSONObject Config;
public static final int configVersion = 2; public static final float configVersion = 2.1f;
public static void initialize(){ public static void initialize(){
if(Config != null) throw new RuntimeException("Already Initialized"); if(Config != null) throw new RuntimeException("Already Initialized");
@@ -36,12 +36,12 @@ public class Config {
} }
Config = new JSONObject(builder.toString()); Config = new JSONObject(builder.toString());
if(Config.has("version")){ if(Config.has("version")){
if(Config.getInt("version")!=configVersion){ if(Config.getFloat("version")!=configVersion){
if(Config.getInt("version") > configVersion){ if(Config.getFloat("version") > configVersion){
defualt(); defualt();
save(); save();
}else if(Config.getInt("version") < configVersion){ }else if(Config.getFloat("version") < configVersion){
Config = new JSONObject(); Config = new JSONObject();
defualt(); defualt();
@@ -77,10 +77,10 @@ public class Config {
Config.put("visualSpeedometer", false); Config.put("visualSpeedometer", false);
} }
if(!Config.has("xPositionVisual")) { if(!Config.has("xPositionVisual")) {
Config.put("xPositionVisual", "W-23"); Config.put("xPositionVisual", "W-3");
} }
if(!Config.has("yPositionVisual")) { if(!Config.has("yPositionVisual")) {
Config.put("yPositionVisual", "H-23"); Config.put("yPositionVisual", "H-3");
} }
if(!Config.has("xPositionText")) { if(!Config.has("xPositionText")) {
Config.put("xPositionText", "W-70"); Config.put("xPositionText", "W-70");
@@ -93,6 +93,10 @@ public class Config {
Config.put("debug", false); Config.put("debug", false);
} }
if(!Config.has("imagSize")) {
Config.put("imageSize", 19);
}
if(!Config.has("version")) { if(!Config.has("version")) {
Config.put("version", configVersion); Config.put("version", configVersion);
} }
@@ -194,6 +198,14 @@ public class Config {
} }
} }
public static int getImageSize(){
if(Config.has("imageSize")){
return Config.getInt("imageSize");
}else {
return 19;
}
}
public static void setColor(Color color){ public static void setColor(Color color){
Config.put("color", new JSONObject() Config.put("color", new JSONObject()
.put("r", color.getRed()) .put("r", color.getRed())
@@ -233,4 +245,8 @@ public class Config {
public static void setDebug(boolean debug){ public static void setDebug(boolean debug){
Config.put("debug", debug); Config.put("debug", debug);
} }
public static void setImageSize(int imageSize){
Config.put("imageSize", imageSize);
}
} }

View File

@@ -0,0 +1,14 @@
package me.zacharias.speedometer;
import java.awt.*;
import java.awt.image.BufferedImage;
public class ImageHandler {
public static BufferedImage scale(BufferedImage img, int width, int height) {
Image img1 = img.getScaledInstance(width,height, Image.SCALE_DEFAULT);
BufferedImage out = new BufferedImage(width, height,BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = out.createGraphics();
g2d.drawImage(img1,0,0,null);
return out;
}
}

View File

@@ -0,0 +1,60 @@
package me.zacharias.speedometer;
import net.minecraft.network.chat.Component;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Objects;
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)
;
private final Component name;
private final BufferedImage image;
private final int size;
MeterImages(Component name, Loader icon, int size) {
this.name = name;
this.image = icon.load();
this.size = size;
}
public BufferedImage getImage() {
return image;
}
public int getSize() {
return size;
}
public Component getName() {
return name;
}
private interface Loader{
BufferedImage load();
}
}

View File

@@ -80,12 +80,16 @@ public class Speedometer
ClientGuiEvent.RENDER_HUD.register(Speedometer::render); ClientGuiEvent.RENDER_HUD.register(Speedometer::render);
try { try {
img = ImageIO.read(Objects.requireNonNull(Speedometer.class.getResourceAsStream("/assets/speedometer/meter/meter.png"))); img = ImageIO.read(Objects.requireNonNull(Speedometer.class.getResourceAsStream("/assets/speedometer/meter/meter-19.png")));
}catch (NullPointerException | IOException e){ }catch (NullPointerException | IOException e){
LOGGER.warn("Can't load speedometer icon. speedometer visual display is disabled"); LOGGER.warn("Can't load speedometer icon. speedometer visual display is disabled");
speedometerVisualDisplayFailed = true; speedometerVisualDisplayFailed = true;
} }
if(img == null){
speedometerVisualDisplayFailed = true;
}
LOGGER.info("Finished loading speedometer"); LOGGER.info("Finished loading speedometer");
} }
@@ -151,20 +155,31 @@ public class Speedometer
//double v = speedTypeSpeed / speedType.gatMaxVisual(); //double v = speedTypeSpeed / speedType.gatMaxVisual();
int x3 = (int) Math.round(7*Math.cos(Math.toRadians(i+90)))+(img.getWidth()/2); MeterImages meterImage = null;
int y3 = (int) Math.round(7*Math.sin(Math.toRadians(i+90)))+(img.getWidth()/2); int minDiff = 10000;
BufferedImage img = new BufferedImage(Speedometer.img.getWidth(), Speedometer.img.getHeight(), Speedometer.img.getType()); for(MeterImages meterImage1 : MeterImages.values()){
int diff = Math.abs(meterImage1.getSize()-Config.getImageSize());
if(minDiff > diff && meterImage1.getImage() != null){
minDiff = diff;
meterImage = meterImage1;
}
}
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);
BufferedImage img = ImageHandler.scale(Speedometer.img, Config.getImageSize(), Config.getImageSize());
Graphics2D g2d = img.createGraphics(); Graphics2D g2d = img.createGraphics();
for(int x1 = 0; x1 < img.getWidth(); x1++) {
for (int y1 = 0; y1 < img.getHeight(); y1++) {
g2d.setColor(new Color(Speedometer.img.getRGB(x1,y1)));
g2d.fillRect(x1,y1,1,1);
}
}
g2d.setColor(new Color(138, 0, 0)); g2d.setColor(new Color(138, 0, 0));
g2d.setStroke(new BasicStroke(2));
g2d.drawLine(x3,y3,img.getWidth()/2,img.getHeight()/2); g2d.drawLine(x3,y3,img.getWidth()/2,img.getHeight()/2);
int xPos = getPos(graphics, Config.getXPositionVisual(), 0, false, img.getWidth()); int xPos = getPos(graphics, Config.getXPositionVisual(), 0, false, img.getWidth());
@@ -172,8 +187,8 @@ public class Speedometer
for(int x1 = 0; x1 < img.getWidth(); x1++){ for(int x1 = 0; x1 < img.getWidth(); x1++){
for(int y1 = 0; y1 < img.getHeight(); y1++){ for(int y1 = 0; y1 < img.getHeight(); y1++){
int x2 = x1 + xPos; int x2 = x1 + xPos - img.getWidth();
int y2 = y1 + yPos; int y2 = y1 + yPos - img.getHeight();
int rgb = img.getRGB(x1, y1); int rgb = img.getRGB(x1, y1);
@@ -189,7 +204,7 @@ public class Speedometer
Minecraft.getInstance().font, Minecraft.getInstance().font,
string, string,
xPos-Minecraft.getInstance().font.width(string), xPos-Minecraft.getInstance().font.width(string),
yPos+6, (int)(yPos-4.5-(Config.getImageSize()/2)),
new Color(138, 0, 0).getRGB() new Color(138, 0, 0).getRGB()
); );
} }
@@ -462,6 +477,14 @@ public class Speedometer
.build() .build()
); );
// Size of visual image
category.addEntry(entryBuilder.startIntField(Component.translatable("speedometer.config.imageWidth"), Config.getImageSize())
.setSaveConsumer(Config::setImageSize)
.setTooltip(Component.translatable("speedometer.config.tooltip.imageWidth"))
.build()
);
builder.setSavingRunnable(me.zacharias.speedometer.Config::save); builder.setSavingRunnable(me.zacharias.speedometer.Config::save);
return builder; return builder;

View File

@@ -10,6 +10,7 @@
"speedometer.config.xPosition.text": "X Position for Text Meter", "speedometer.config.xPosition.text": "X Position for Text Meter",
"speedometer.config.yPosition.text": "Y Position for Text Meter", "speedometer.config.yPosition.text": "Y Position for Text Meter",
"speedometer.config.debug": "Debug", "speedometer.config.debug": "Debug",
"speedometer.config.imageWidth": "Image Width",
"speedometer.key.configKey": "Config Key", "speedometer.key.configKey": "Config Key",
"speedometer.key.debugKey": "Debug Key", "speedometer.key.debugKey": "Debug Key",
@@ -22,6 +23,9 @@
"speedometer.speed.knot": "Knot", "speedometer.speed.knot": "Knot",
"speedometer.speed.error": "Unknown Speed Type", "speedometer.speed.error": "Unknown Speed Type",
"speedometer.meter.large": "Large",
"speedometer.meter.small": "Small",
"speedometer.visualSpeedometer.true": "Visual", "speedometer.visualSpeedometer.true": "Visual",
"speedometer.visualSpeedometer.false": "Text", "speedometer.visualSpeedometer.false": "Text",
@@ -41,5 +45,7 @@
"speedometer.config.tooltip.debug": "Debug Information", "speedometer.config.tooltip.debug": "Debug Information",
"speedometer.config.tooltip.imageWidth": "Image width",
"speedometer.invalid": "Invalid String" "speedometer.invalid": "Invalid String"
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 316 B

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -17,8 +17,7 @@ public class Config implements ModMenuApi {
public ConfigScreenFactory<?> getModConfigScreenFactory() { public ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> { return parent -> {
ConfigBuilder builder = Speedometer.getConfig(parent); ConfigBuilder builder = Speedometer.getConfig(parent);
return builder.build(); return builder.build();
}; };
} }
} }

View File

@@ -1,9 +1,9 @@
org.gradle.jvmargs=-Xmx1G org.gradle.jvmargs=-Xmx8G
minecraft_version=1.20.1 minecraft_version=1.20.1
archives_base_name=speedometer archives_base_name=speedometer
mod_version=2.0 mod_version=3.0
maven_group=me.zacharias maven_group=me.zacharias
architectury_version=9.0.8 architectury_version=9.0.8