# 1.17.X-1.18.X(Fabric)
Issue #5 wanted to add support for 1.17 Made the mod work for 1.17.1-1.18.2 for Fabric, and 1.17.1 for Forge Lot of changes due to API differences have resulted in changes to nearly all files and a comprehensive list would just list everything, so if you're interested you can look through things This version is a backport of 6.2.4/6.2.3 to Minecraft 1.17 this includes - Resourcepack - Color - Location - And more
This commit is contained in:
@@ -1,20 +1,21 @@
|
||||
package me.zacharias.speedometer;
|
||||
|
||||
import com.mojang.blaze3d.platform.InputConstants;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import dev.architectury.event.events.client.ClientGuiEvent;
|
||||
import dev.architectury.event.events.client.ClientTickEvent;
|
||||
import dev.architectury.platform.Platform;
|
||||
import dev.architectury.registry.client.keymappings.KeyMappingRegistry;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.client.DeltaTracker;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.network.chat.ClickEvent;
|
||||
import net.minecraft.network.chat.TextColor;
|
||||
import net.minecraft.network.chat.TranslatableComponent;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.vehicle.Boat;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
@@ -40,8 +41,8 @@ public class Client {
|
||||
|
||||
|
||||
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") || Platform.isModLoaded("cloth-config2");
|
||||
|
||||
if(isClothLoaded) {
|
||||
Platform.getMod(MOD_ID).registerConfigurationScreen(parent -> ConfigMenu.getConfig(parent).build());
|
||||
@@ -59,20 +60,21 @@ public class Client {
|
||||
}
|
||||
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());
|
||||
Minecraft.getInstance().player.displayClientMessage(
|
||||
new TranslatableComponent("speedometer.error.missing_cloth")
|
||||
.withStyle(style -> style.withColor(ChatFormatting.RED))
|
||||
.append(
|
||||
new TranslatableComponent("speedometer.error.missing_cloth.open_config")
|
||||
.withStyle(style -> style
|
||||
.withColor(ChatFormatting.DARK_RED)
|
||||
.withUnderlined(true)
|
||||
.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_FILE, Config.getConfigPath()))))
|
||||
, false);
|
||||
LOGGER.warn(new TranslatableComponent("speedometer.error.missing_cloth").getString());
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warn(Component.translatable("speedometer.error.missing_cloth").getString());
|
||||
LOGGER.warn(new TranslatableComponent("speedometer.error.missing_cloth").getString());
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -92,7 +94,7 @@ public class Client {
|
||||
LOGGER.info("Finished loading speedometer");
|
||||
}
|
||||
|
||||
private static void render(GuiGraphics graphics, DeltaTracker deltaTracker) {
|
||||
private static void render(PoseStack poseStack, float delta) {
|
||||
if(Minecraft.getInstance().player == null) return;
|
||||
if(Minecraft.getInstance().options.hideGui) return;
|
||||
Entity entity = Minecraft.getInstance().player.getRootVehicle();
|
||||
@@ -112,7 +114,7 @@ public class Client {
|
||||
double lSpeed = speed;
|
||||
|
||||
if (speeds.size() >= 30) {
|
||||
speeds.removeFirst();
|
||||
speeds.remove(0);
|
||||
}
|
||||
speeds.add(speed);
|
||||
speed = 0;
|
||||
@@ -144,8 +146,8 @@ public class Client {
|
||||
default -> 0;
|
||||
};
|
||||
|
||||
int yPos = getPosImp(graphics, width, Config.getYPosition(), false);
|
||||
int xPos = getPosImp(graphics, width, Config.getXPosition(), true);
|
||||
int yPos = getPosImp(poseStack, width, Config.getYPosition(), false);
|
||||
int xPos = getPosImp(poseStack, width, Config.getXPosition(), true);
|
||||
|
||||
int lineHeight = Minecraft.getInstance().font.lineHeight;
|
||||
|
||||
@@ -163,8 +165,8 @@ public class Client {
|
||||
int rgb = img.getRGB(x1, y1);
|
||||
|
||||
if(new Color(rgb).equals(Color.black)) continue;
|
||||
|
||||
graphics.fill(x2, y2, x2+1, y2+1, rgb);
|
||||
|
||||
Gui.fill(poseStack, x2, y2, x2+1, y2+1, rgb);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,13 +174,13 @@ public class Client {
|
||||
// i -> x
|
||||
// j -> y
|
||||
// k -> color RGB int
|
||||
graphics.drawString(
|
||||
Minecraft.getInstance().font,
|
||||
speedString,
|
||||
xPos - width,
|
||||
yPos - lineHeight,
|
||||
Config.getColor().getRGB()
|
||||
);
|
||||
drawString(
|
||||
poseStack,
|
||||
xPos - width,
|
||||
yPos - lineHeight,
|
||||
speedString,
|
||||
Config.getColor().getRGB()
|
||||
);
|
||||
}
|
||||
|
||||
if(Config.isDebug()){
|
||||
@@ -200,20 +202,24 @@ public class Client {
|
||||
"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");
|
||||
(Config.getVisualSpeedometer()?"Visual Size: "+Config.getImageSize():"Textual display") + "\n" +
|
||||
"Pos: ("+xPos+", "+yPos+") \n" +
|
||||
"Width: "+Minecraft.getInstance().getWindow().getGuiScaledWidth() + "\n" +
|
||||
"Height: "+Minecraft.getInstance().getWindow().getGuiScaledHeight();
|
||||
|
||||
Color color = new Color(255, 255, 255);
|
||||
|
||||
int y = 0;
|
||||
for(String s : debugData.split("\n")){
|
||||
drawString(graphics,0, y, s, color.getRGB());
|
||||
drawString(poseStack,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(
|
||||
private static void drawString(PoseStack poseStack, int x, int y, String text, int colorRGB){
|
||||
Gui.drawString(
|
||||
poseStack,
|
||||
Minecraft.getInstance().font,
|
||||
text,
|
||||
x,
|
||||
@@ -222,11 +228,14 @@ public class Client {
|
||||
);
|
||||
}
|
||||
|
||||
private static int getPosImp(GuiGraphics event, int width, String input, boolean isXPosition){
|
||||
private static int getPosImp(PoseStack poseStack, int width, String input, boolean isXPosition){
|
||||
int width1 = Minecraft.getInstance().getWindow().getGuiScaledWidth();
|
||||
int height1 = Minecraft.getInstance().getWindow().getGuiScaledHeight();
|
||||
|
||||
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("(W+)|(H+)", String.valueOf(isXPosition? width1 : height1))
|
||||
.replaceAll("(w+)|(h+)", String.valueOf(isXPosition? width1/2 : height1/2))
|
||||
.replaceAll("(S+)|(s+)", String.valueOf(width));
|
||||
if((Config.isDebug()) && Config.getCounter() < 2) {
|
||||
//String speedDisplayType = SpeedTypes.getName(Config.getSpeedType()).getString();
|
||||
@@ -235,10 +244,14 @@ public class Client {
|
||||
LOGGER.info("Selected speed type(DEBUG): {}\n{}\n\n\n", isXPosition, input);
|
||||
Config.addCounter();
|
||||
}
|
||||
return getPos(event, width, input, isXPosition);
|
||||
return getPos(poseStack, width, input, isXPosition);
|
||||
}
|
||||
|
||||
private static int getPos(GuiGraphics event, int width, String input, boolean isXPosition) {
|
||||
private static int getPos(PoseStack event, int width, String input, boolean isXPosition) {
|
||||
|
||||
int width1 = Minecraft.getInstance().getWindow().getGuiScaledWidth();
|
||||
int height1 = Minecraft.getInstance().getWindow().getGuiScaledHeight();
|
||||
|
||||
ArrayList<String> passerPose = new ArrayList<>();
|
||||
final char[] s = input.toCharArray();
|
||||
|
||||
@@ -246,12 +259,12 @@ public class Client {
|
||||
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()));
|
||||
if(isXPosition) passerPose.add(String.valueOf(width1));
|
||||
else passerPose.add(String.valueOf(height1));
|
||||
}
|
||||
else if(c == 'h' || c == 'w'){
|
||||
if(isXPosition) passerPose.add(String.valueOf(event.guiWidth() / 2));
|
||||
else passerPose.add(String.valueOf(event.guiHeight() / 2));
|
||||
if(isXPosition) passerPose.add(String.valueOf(width1 / 2));
|
||||
else passerPose.add(String.valueOf(height1 / 2));
|
||||
}
|
||||
else if(c == 'S' || c == 's'){
|
||||
passerPose.add(String.valueOf(width));
|
||||
@@ -264,8 +277,8 @@ public class Client {
|
||||
}
|
||||
else if(Character.isDigit(c)){
|
||||
int lastIndex = i - 1;
|
||||
if(lastIndex > 0 && passerPose.get(lastIndex).matches("^[0-9]+$")) {
|
||||
passerPose.add(passerPose.removeLast() + c);
|
||||
if(lastIndex >= 0 && passerPose.get(passerPose.size()-1).matches("^[0-9]+$")) {
|
||||
passerPose.add(passerPose.remove(passerPose.size()-1) + c);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -285,11 +298,11 @@ public class Client {
|
||||
|
||||
int position;
|
||||
try{
|
||||
position = Integer.parseInt(passerPose.getFirst());
|
||||
position = Integer.parseInt(passerPose.get(0));
|
||||
}catch (NumberFormatException e){
|
||||
passerPose.clear();
|
||||
defaultValues(event, isXPosition, passerPose);
|
||||
position = Integer.parseInt(passerPose.getFirst());
|
||||
position = Integer.parseInt(passerPose.get(0));
|
||||
}
|
||||
|
||||
for(int i = 1; i < passerPose.size(); i++){
|
||||
@@ -322,16 +335,16 @@ public class Client {
|
||||
return position;
|
||||
}
|
||||
|
||||
private static void defaultValues(GuiGraphics event, boolean isXPosition, ArrayList<String> passerPose) {
|
||||
private static void defaultValues(PoseStack event, boolean isXPosition, ArrayList<String> passerPose) {
|
||||
if(isXPosition)
|
||||
{
|
||||
passerPose.add(String.valueOf(event.guiWidth()));
|
||||
passerPose.add(String.valueOf(Minecraft.getInstance().getWindow().getGuiScaledWidth()));
|
||||
passerPose.add("-");
|
||||
passerPose.add("3");
|
||||
}
|
||||
else
|
||||
{
|
||||
passerPose.add(String.valueOf(event.guiHeight()));
|
||||
passerPose.add(String.valueOf(Minecraft.getInstance().getWindow().getGuiScaledHeight()));
|
||||
passerPose.add("-");
|
||||
passerPose.add("3");
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package me.zacharias.speedometer;
|
||||
|
||||
import me.shedaniel.clothconfig2.api.*;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.TranslatableComponent;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -10,33 +10,34 @@ public class ConfigMenu {
|
||||
public static ConfigBuilder getConfig(Screen parent) {
|
||||
ConfigBuilder builder = ConfigBuilder.create()
|
||||
.setParentScreen(parent)
|
||||
.setTitle(Component.translatable("speedometer.config.name"));
|
||||
.setTitle(new TranslatableComponent("speedometer.config.name"));
|
||||
|
||||
ConfigCategory category = builder.getOrCreateCategory(Component.translatable("speedometer.config.category.name"));
|
||||
ConfigCategory category = builder.getOrCreateCategory(new TranslatableComponent("speedometer.config.category.name"));
|
||||
|
||||
ConfigEntryBuilder entryBuilder = builder.entryBuilder();
|
||||
|
||||
category.addEntry(entryBuilder.startEnumSelector(Component.translatable("speedometer.config.speed"), SpeedTypes.class, me.zacharias.speedometer.Config.getSpeedType())
|
||||
category.addEntry(entryBuilder.startEnumSelector(new TranslatableComponent("speedometer.config.speed"), SpeedTypes.class, me.zacharias.speedometer.Config.getSpeedType())
|
||||
.setEnumNameProvider(SpeedTypes::getName)
|
||||
.setSaveConsumer(me.zacharias.speedometer.Config::setSpeedType)
|
||||
//.setDefaultValue(SpeedTypes.BlockPS)
|
||||
.build()
|
||||
);
|
||||
|
||||
category.addEntry(entryBuilder.startColorField(Component.translatable("speedometer.config.color"), me.zacharias.speedometer.Config.getColorRGB())
|
||||
category.addEntry(entryBuilder.startColorField(new TranslatableComponent("speedometer.config.color"), me.zacharias.speedometer.Config.getColorRGB())
|
||||
.setSaveConsumer2(color -> Config.setColor(color.getRed(), color.getGreen(), color.getBlue()))
|
||||
.build()
|
||||
);
|
||||
|
||||
category.addEntry(entryBuilder.startBooleanToggle(Component.translatable("speedometer.config.knot"), me.zacharias.speedometer.Config.getUseKnot())
|
||||
category.addEntry(entryBuilder.startBooleanToggle(new TranslatableComponent("speedometer.config.knot"), me.zacharias.speedometer.Config.getUseKnot())
|
||||
.setSaveConsumer(me.zacharias.speedometer.Config::setUseKnot)
|
||||
.setYesNoTextSupplier(useKnot -> Component.translatable("speedometer.useKnot."+useKnot))
|
||||
.setYesNoTextSupplier(useKnot -> new TranslatableComponent("speedometer.useKnot."+useKnot))
|
||||
.build()
|
||||
);
|
||||
|
||||
category.addEntry(entryBuilder.startBooleanToggle(Component.translatable("speedometer.config.visualSpeedometer"), me.zacharias.speedometer.Config.getVisualSpeedometer())
|
||||
category.addEntry(entryBuilder.startBooleanToggle(new TranslatableComponent("speedometer.config.visualSpeedometer"), me.zacharias.speedometer.Config.getVisualSpeedometer())
|
||||
.setSaveConsumer(me.zacharias.speedometer.Config::setVisualSpeedometer)
|
||||
.setYesNoTextSupplier((visualSpeedometer -> Component.translatable("speedometer.visualSpeedometer."+visualSpeedometer)))
|
||||
.setRequirement(Requirement.isFalse(Config::isDisableVisualSpeedometer))
|
||||
.setYesNoTextSupplier((visualSpeedometer -> new TranslatableComponent("speedometer.visualSpeedometer."+visualSpeedometer)))
|
||||
//.setRequirement(Requirement.isFalse(Config::isDisableVisualSpeedometer))
|
||||
.build()
|
||||
);
|
||||
|
||||
@@ -45,50 +46,50 @@ public class ConfigMenu {
|
||||
String xRegex = "W*w*S*s*\\+*-*\\**/*[0-9]*";
|
||||
String yRegex = "H*h*S*s*\\+*-*\\**/*[0-9]*";
|
||||
|
||||
category.addEntry(entryBuilder.startStringDropdownMenu(Component.translatable("speedometer.config.xPosition"), Config.getXPosition())
|
||||
category.addEntry(entryBuilder.startStringDropdownMenu(new TranslatableComponent("speedometer.config.xPosition"), Config.getXPosition())
|
||||
.setSaveConsumer(Config::setXPosition)
|
||||
.setErrorSupplier(xPosition -> {
|
||||
if(xPosition.matches(xRegex)){
|
||||
return Optional.empty();
|
||||
}else{
|
||||
return Optional.of(Component.translatable("speedometer.invalid"));
|
||||
return Optional.of(new TranslatableComponent("speedometer.invalid"));
|
||||
}
|
||||
})
|
||||
.setTooltip(
|
||||
Component.translatable("speedometer.config.tooltip.xPosition.line1"),
|
||||
Component.translatable("speedometer.config.tooltip.xPosition.line2"),
|
||||
Component.translatable("speedometer.config.tooltip.xPosition.line3")
|
||||
new TranslatableComponent("speedometer.config.tooltip.xPosition.line1"),
|
||||
new TranslatableComponent("speedometer.config.tooltip.xPosition.line2"),
|
||||
new TranslatableComponent("speedometer.config.tooltip.xPosition.line3")
|
||||
)
|
||||
.build()
|
||||
);
|
||||
|
||||
|
||||
category.addEntry(entryBuilder.startStringDropdownMenu(Component.translatable("speedometer.config.yPosition"), Config.getYPosition())
|
||||
category.addEntry(entryBuilder.startStringDropdownMenu(new TranslatableComponent("speedometer.config.yPosition"), Config.getYPosition())
|
||||
.setSaveConsumer(Config::setYPosition)
|
||||
.setErrorSupplier(yPosition -> {
|
||||
if(yPosition.matches(yRegex)){
|
||||
return Optional.empty();
|
||||
}else{
|
||||
return Optional.of(Component.translatable("speedometer.invalid"));
|
||||
return Optional.of(new TranslatableComponent("speedometer.invalid"));
|
||||
}
|
||||
})
|
||||
.setTooltip(
|
||||
Component.translatable("speedometer.config.tooltip.yPosition.line1"),
|
||||
Component.translatable("speedometer.config.tooltip.yPosition.line2"),
|
||||
Component.translatable("speedometer.config.tooltip.yPosition.line3")
|
||||
new TranslatableComponent("speedometer.config.tooltip.yPosition.line1"),
|
||||
new TranslatableComponent("speedometer.config.tooltip.yPosition.line2"),
|
||||
new TranslatableComponent("speedometer.config.tooltip.yPosition.line3")
|
||||
)
|
||||
.build()
|
||||
);
|
||||
|
||||
// Size of visual image
|
||||
|
||||
category.addEntry(entryBuilder.startIntField(Component.translatable("speedometer.config.imageSize"), Config.getImageSize())
|
||||
category.addEntry(entryBuilder.startIntField(new TranslatableComponent("speedometer.config.imageSize"), Config.getImageSize())
|
||||
.setSaveConsumer(Config::setImageSize)
|
||||
.setTooltip(Component.translatable("speedometer.config.tooltip.imageSize"))
|
||||
.setTooltip(new TranslatableComponent("speedometer.config.tooltip.imageSize"))
|
||||
.setErrorSupplier(size -> {
|
||||
if(size > 300 || size < 10)
|
||||
{
|
||||
return Optional.of(Component.translatable("speedometer.config.error.size_outofbounds"));
|
||||
return Optional.of(new TranslatableComponent("speedometer.config.error.size_outofbounds"));
|
||||
}
|
||||
else {
|
||||
return Optional.empty();
|
||||
@@ -99,26 +100,26 @@ public class ConfigMenu {
|
||||
|
||||
// Show visual speed type
|
||||
|
||||
category.addEntry(entryBuilder.startBooleanToggle(Component.translatable("speedometer.config.showSpeedType"), Config.getShowSpeedType())
|
||||
category.addEntry(entryBuilder.startBooleanToggle(new TranslatableComponent("speedometer.config.showSpeedType"), Config.getShowSpeedType())
|
||||
.setSaveConsumer(Config::setShowSpeedType)
|
||||
.setYesNoTextSupplier(showSpeedType -> Component.translatable("speedometer."+(showSpeedType?"show":"hide")))
|
||||
.setTooltip(Component.translatable("speedometer.config.tooltip.showSpeedType.line1"))
|
||||
.setYesNoTextSupplier(showSpeedType -> new TranslatableComponent("speedometer."+(showSpeedType?"show":"hide")))
|
||||
.setTooltip(new TranslatableComponent("speedometer.config.tooltip.showSpeedType.line1"))
|
||||
.build()
|
||||
);
|
||||
|
||||
category.addEntry(entryBuilder.startBooleanToggle(Component.translatable("speedometer.config.override_color"), Config.isOverrideColor())
|
||||
category.addEntry(entryBuilder.startBooleanToggle(new TranslatableComponent("speedometer.config.override_color"), Config.isOverrideColor())
|
||||
.setSaveConsumer(Config::setOverrideColor)
|
||||
.setTooltip(
|
||||
Component.translatable("speedometer.config.tooltip.override_color.line1"),
|
||||
Component.translatable("speedometer.config.tooltip.override_color.line2")
|
||||
new TranslatableComponent("speedometer.config.tooltip.override_color.line1"),
|
||||
new TranslatableComponent("speedometer.config.tooltip.override_color.line2")
|
||||
)
|
||||
.build()
|
||||
);
|
||||
|
||||
category.addEntry(entryBuilder.startBooleanToggle(Component.translatable("speedometer.config.debug"),Config.isDebug())
|
||||
category.addEntry(entryBuilder.startBooleanToggle(new TranslatableComponent("speedometer.config.debug"),Config.isDebug())
|
||||
.setSaveConsumer(Config::setDebug)
|
||||
.setYesNoTextSupplier(isDebug -> Component.translatable("speedometer.debug."+isDebug))
|
||||
.setTooltip(Component.translatable("speedometer.config.tooltip.debug"))
|
||||
.setYesNoTextSupplier(isDebug -> new TranslatableComponent("speedometer.debug."+isDebug))
|
||||
.setTooltip(new TranslatableComponent("speedometer.config.tooltip.debug"))
|
||||
.build()
|
||||
);
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package me.zacharias.speedometer;
|
||||
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.TranslatableComponent;
|
||||
|
||||
public enum SpeedTypes {
|
||||
MPH,
|
||||
@@ -11,7 +12,7 @@ public enum SpeedTypes {
|
||||
|
||||
public static Component getName(Enum anEnum) {
|
||||
if(anEnum instanceof SpeedTypes speedType) {
|
||||
return Component.translatable("speedometer.speed." + switch (speedType) {
|
||||
return new TranslatableComponent("speedometer.speed." + switch (speedType) {
|
||||
case MPH -> "mph";
|
||||
case MPS -> "mps";
|
||||
case KMPH -> "kmph";
|
||||
@@ -19,7 +20,7 @@ public enum SpeedTypes {
|
||||
case KNOT -> "knot";
|
||||
});
|
||||
}else {
|
||||
return Component.translatable("speedometer.speed.error");
|
||||
return new TranslatableComponent("speedometer.speed.error");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,8 @@ import org.json.JSONObject;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -51,10 +53,9 @@ public class Speedometer
|
||||
Client.init();
|
||||
}
|
||||
|
||||
public static void loadSpeedometers(ResourceManager resourceManager)
|
||||
{
|
||||
public static void loadSpeedometers(ResourceManager resourceManager) throws IOException {
|
||||
//List< Resource > resource = Minecraft.getInstance().getResourceManager().getResourceStack(ResourceLocation.fromNamespaceAndPath(MOD_ID, "models/speedometer.json"));
|
||||
Optional< Resource > resource = resourceManager.getResource(ResourceLocation.fromNamespaceAndPath(MOD_ID, "models/speedometer.json"));
|
||||
Optional<Resource> resource = Optional.of(resourceManager.getResource(new ResourceLocation(MOD_ID, "models/speedometer.json")));
|
||||
|
||||
if(resource.isEmpty())
|
||||
{
|
||||
@@ -63,7 +64,7 @@ public class Speedometer
|
||||
return;
|
||||
}
|
||||
|
||||
try(BufferedReader stream = resource.get().openAsReader()) {
|
||||
try(BufferedReader stream = new BufferedReader(new InputStreamReader(resource.get().getInputStream()))/*.openAsReader()*/) {
|
||||
String tmp;
|
||||
StringBuilder builder = new StringBuilder();
|
||||
while ((tmp = stream.readLine()) != null) {
|
||||
@@ -72,7 +73,7 @@ public class Speedometer
|
||||
JSONObject data = new JSONObject(builder.toString());
|
||||
if(Config.isDebug())
|
||||
{
|
||||
LOGGER.info("Loaded speedometer from {}, with speedometer name: {}", resource.get().source().packId(), data.get("name"));
|
||||
LOGGER.info("Loaded speedometer from {}, with speedometer name: {}", resource.get().getSourceName(), data.get("name"));
|
||||
}
|
||||
ICON = new SpeedometerIcon(data, resourceManager);
|
||||
}
|
||||
@@ -82,7 +83,7 @@ public class Speedometer
|
||||
return;
|
||||
}
|
||||
|
||||
LOGGER.info("Successfully loaded speedometer config from {}", resource.get().source().packId());
|
||||
LOGGER.info("Successfully loaded speedometer config from {}", resource.get().getSourceName());
|
||||
}
|
||||
|
||||
public static String formatMillisToDHMS(long millis) {
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package me.zacharias.speedometer;
|
||||
|
||||
import com.mojang.brigadier.StringReader;
|
||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
//import org.joml.Vector2i;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.packs.resources.Resource;
|
||||
import net.minecraft.server.packs.resources.ResourceManager;
|
||||
import org.joml.Vector2i;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
@@ -25,8 +27,7 @@ public class SpeedometerIcon {
|
||||
private boolean overflow;
|
||||
private boolean g = false;
|
||||
|
||||
public SpeedometerIcon(JSONObject config, ResourceManager resourceManager) throws MissingPropertyException, IOException, JSONException
|
||||
{
|
||||
public SpeedometerIcon(JSONObject config, ResourceManager resourceManager) throws MissingPropertyException, IOException, JSONException, CommandSyntaxException {
|
||||
if(!config.has("background")) throw new MissingPropertyException("background");
|
||||
|
||||
String background = config.getString("background");
|
||||
@@ -40,10 +41,10 @@ public class SpeedometerIcon {
|
||||
background = "textures/"+background;
|
||||
}
|
||||
|
||||
Optional<Resource> speedometerIcon = resourceManager.getResource(ResourceLocation.read(background).getOrThrow(s -> new MissingPropertyException("background")));
|
||||
Optional<Resource> speedometerIcon = Optional.of(resourceManager.getResource(ResourceLocation.read(new StringReader(background))));//.getOrThrow(s -> new MissingPropertyException("background")));
|
||||
if(speedometerIcon.isEmpty()) throw new MissingPropertyException("background");
|
||||
|
||||
InputStream stream = speedometerIcon.get().open();
|
||||
InputStream stream = speedometerIcon.get().getInputStream();
|
||||
this.speedometerIcon = ImageIO.read(stream);
|
||||
stream.close();
|
||||
|
||||
@@ -83,8 +84,7 @@ class Pointer
|
||||
private int length;
|
||||
private boolean g = false;
|
||||
|
||||
public Pointer(JSONObject pointer, ResourceManager resourceManager, Vector2i size) throws MissingPropertyException, IOException, JSONException
|
||||
{
|
||||
public Pointer(JSONObject pointer, ResourceManager resourceManager, Vector2i size) throws MissingPropertyException, IOException, JSONException, CommandSyntaxException {
|
||||
if(!pointer.has("start")) throw new MissingPropertyException("pointer/start");
|
||||
if(pointer.get("start") instanceof JSONObject jsonObject)
|
||||
{
|
||||
@@ -122,10 +122,10 @@ class Pointer
|
||||
imageResourceLocation = "textures/"+imageResourceLocation;
|
||||
}
|
||||
|
||||
Optional<Resource> image = resourceManager.getResource(ResourceLocation.read(imageResourceLocation).getOrThrow(s -> new MissingPropertyException("pointer/image")));
|
||||
Optional<Resource> image = Optional.of(resourceManager.getResource(ResourceLocation.read(new StringReader(imageResourceLocation))));//.getOrThrow(s -> new MissingPropertyException("pointer/image")));
|
||||
if(image.isEmpty()) throw new MissingPropertyException("pointer/image");
|
||||
|
||||
InputStream stream = image.get().open();
|
||||
InputStream stream = image.get().getInputStream();//.open();
|
||||
this.image = ImageHandler.scale(ImageIO.read(stream), size.x, size.y);
|
||||
stream.close();
|
||||
}
|
||||
|
||||
17
common/src/main/java/me/zacharias/speedometer/Vector2i.java
Normal file
17
common/src/main/java/me/zacharias/speedometer/Vector2i.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package me.zacharias.speedometer;
|
||||
|
||||
public class Vector2i {
|
||||
int x, y;
|
||||
public Vector2i(int x, int y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public int getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public int getY() {
|
||||
return y;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user