mirror of
https://github.com/JonasunderscoreJones/nicer-skies.git
synced 2025-10-23 11:49:17 +02:00
change: big refactor for new name and organisation
This commit is contained in:
parent
2ec1c5f329
commit
707e0279a1
14 changed files with 49 additions and 151 deletions
|
@ -1,97 +0,0 @@
|
||||||
//package codes.ztereohype.example;
|
|
||||||
//
|
|
||||||
//import codes.ztereohype.example.sky.Star;
|
|
||||||
//import com.mojang.blaze3d.vertex.*;
|
|
||||||
//import net.minecraft.util.RandomSource;
|
|
||||||
//import net.minecraft.world.level.levelgen.synth.ImprovedNoise;
|
|
||||||
//import org.openjdk.jmh.annotations.*;
|
|
||||||
//
|
|
||||||
//import java.util.ArrayList;
|
|
||||||
//import java.util.concurrent.TimeUnit;
|
|
||||||
//
|
|
||||||
//@State(Scope.Benchmark)
|
|
||||||
//public class StarUpdateBenchmark {,
|
|
||||||
// public ArrayList<Star> starList = new ArrayList<>();
|
|
||||||
// public BufferBuilder starBufferBuilder = Tesselator.getInstance().getBuilder();
|
|
||||||
//
|
|
||||||
// @Setup(Level.Trial)
|
|
||||||
// public void setUp() {
|
|
||||||
// starBufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
|
|
||||||
// RandomSource randomSource = RandomSource.create(123L);
|
|
||||||
// ImprovedNoise noise = new ImprovedNoise(randomSource);
|
|
||||||
// starList.clear();
|
|
||||||
//
|
|
||||||
// for (int i = 0; i < 1700; ++i) {
|
|
||||||
// // -1..1
|
|
||||||
// float randX = randomSource.nextFloat() * 2.0F - 1.0F;
|
|
||||||
// float randY = randomSource.nextFloat() * 2.0F - 1.0F;
|
|
||||||
// float randZ = randomSource.nextFloat() * 2.0F - 1.0F;
|
|
||||||
//
|
|
||||||
// float twinkleSpeed = 0.03f + randomSource.nextFloat() * 0.04f;
|
|
||||||
//
|
|
||||||
// double[] starDerivatives = new double[] {0,0,0};
|
|
||||||
// float starValue = (float) noise.noiseWithDerivative(randX*3, randY*3, randZ*3, starDerivatives) * 0.5f + 0.5f;
|
|
||||||
//
|
|
||||||
// float maxDerivative = (float) Math.max(Math.abs(starDerivatives[0]), Math.max(Math.abs(starDerivatives[1]), Math.abs(starDerivatives[2]))); //kinda normal distr around 1?
|
|
||||||
// float temperature = maxDerivative * 8000;
|
|
||||||
//
|
|
||||||
// // 0.15..0.25 ???
|
|
||||||
// float starRadius = 0.15F + randomSource.nextFloat() * 0.15F;
|
|
||||||
// starRadius *= starValue;
|
|
||||||
//
|
|
||||||
// float squaredDistance = randX * randX + randY * randY + randZ * randZ;
|
|
||||||
//
|
|
||||||
// if (squaredDistance < 1.0 && squaredDistance > 0.01 && starRadius > 0.13) {
|
|
||||||
// starList.add(new Star(randX, randY, randZ, starRadius, temperature, twinkleSpeed));
|
|
||||||
// } else --i;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Warmup(iterations = 1)
|
|
||||||
// @Measurement(iterations = 15, time = 2000, timeUnit = TimeUnit.MILLISECONDS)
|
|
||||||
// @OutputTimeUnit(TimeUnit.MILLISECONDS)
|
|
||||||
// @Benchmark
|
|
||||||
// public void updateStars1() {
|
|
||||||
// starBufferBuilder.clear();
|
|
||||||
// for (Star star : starList) {
|
|
||||||
// star.tick(134);
|
|
||||||
// star.setVertices(starBufferBuilder);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Warmup(iterations = 1)
|
|
||||||
// @Measurement(iterations = 15, time = 2000, timeUnit = TimeUnit.MILLISECONDS)
|
|
||||||
// @OutputTimeUnit(TimeUnit.MILLISECONDS)
|
|
||||||
// @Benchmark
|
|
||||||
// public void updateStars2() {
|
|
||||||
// starBufferBuilder.clear();
|
|
||||||
// starList.stream().parallel().forEach(star -> star.tick(134));
|
|
||||||
// for (Star star : starList) {
|
|
||||||
// star.setVertices(starBufferBuilder);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Warmup(iterations = 1)
|
|
||||||
// @Measurement(iterations = 15, time = 2000, timeUnit = TimeUnit.MILLISECONDS)
|
|
||||||
// @OutputTimeUnit(TimeUnit.MILLISECONDS)
|
|
||||||
// @Benchmark
|
|
||||||
// public void updateStars3() {
|
|
||||||
// starBufferBuilder.clear();
|
|
||||||
// for (Star star : starList) {
|
|
||||||
// star.tick(134);
|
|
||||||
//// star.setVerticesTwo(starBufferBuilder);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Warmup(iterations = 1)
|
|
||||||
// @Measurement(iterations = 15, time = 2000, timeUnit = TimeUnit.MILLISECONDS)
|
|
||||||
// @OutputTimeUnit(TimeUnit.MILLISECONDS)
|
|
||||||
// @Benchmark
|
|
||||||
// public void updateStars4() {
|
|
||||||
// starBufferBuilder.clear();
|
|
||||||
// starList.stream().parallel().forEach(star -> star.tick(134));
|
|
||||||
// for (Star star : starList) {
|
|
||||||
//// star.setVerticesTwo(starBufferBuilder);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
|
@ -3,7 +3,7 @@ package codes.ztereohype.example;
|
||||||
import codes.ztereohype.example.sky.SkyManager;
|
import codes.ztereohype.example.sky.SkyManager;
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
|
|
||||||
public class ExampleMod implements ModInitializer {
|
public class NicerSkies implements ModInitializer {
|
||||||
public static boolean toggle = true;
|
public static boolean toggle = true;
|
||||||
public static SkyManager skyManager = new SkyManager();
|
public static SkyManager skyManager = new SkyManager();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package codes.ztereohype.example;
|
package codes.ztereohype.example.core;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
|
@ -1,6 +1,6 @@
|
||||||
package codes.ztereohype.example.mixin;
|
package codes.ztereohype.example.mixin;
|
||||||
|
|
||||||
import codes.ztereohype.example.ExampleMod;
|
import codes.ztereohype.example.NicerSkies;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.BufferBuilder;
|
import com.mojang.blaze3d.vertex.BufferBuilder;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
@ -29,16 +29,16 @@ public abstract class MixinStarRendering {
|
||||||
|
|
||||||
@Inject(at = @At("HEAD"), method = "createStars", cancellable = true)
|
@Inject(at = @At("HEAD"), method = "createStars", cancellable = true)
|
||||||
private void generateStars(CallbackInfo ci) {
|
private void generateStars(CallbackInfo ci) {
|
||||||
ExampleMod.skyManager.generateSky(321L);
|
NicerSkies.skyManager.generateSky(321L);
|
||||||
starBuffer = new VertexBuffer();
|
starBuffer = new VertexBuffer();
|
||||||
ExampleMod.skyManager.tick(ticks, starBuffer);
|
NicerSkies.skyManager.tick(ticks, starBuffer);
|
||||||
ci.cancel();
|
ci.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(at = @At("HEAD"), method = "tick")
|
@Inject(at = @At("HEAD"), method = "tick")
|
||||||
private void tickStars(CallbackInfo ci) {
|
private void tickStars(CallbackInfo ci) {
|
||||||
if (this.level.getStarBrightness(0) < 0.0F) return;
|
if (this.level.getStarBrightness(0) < 0.0F) return;
|
||||||
ExampleMod.skyManager.tick(ticks, starBuffer);
|
NicerSkies.skyManager.tick(ticks, starBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ModifyArg(
|
@ModifyArg(
|
||||||
|
@ -58,6 +58,6 @@ public abstract class MixinStarRendering {
|
||||||
private void drawSkybox(PoseStack poseStack, Matrix4f projectionMatrix, float partialTick, Camera camera, boolean bl, Runnable skyFogSetup, CallbackInfo ci, FogType fogType, Vec3 vec3, float f, float g, float h, BufferBuilder bufferBuilder, ShaderInstance shaderInstance, float[] fs, float i, Matrix4f matrix4f2, float k, int r, int s, int m, float t, float o, float p, float q) {
|
private void drawSkybox(PoseStack poseStack, Matrix4f projectionMatrix, float partialTick, Camera camera, boolean bl, Runnable skyFogSetup, CallbackInfo ci, FogType fogType, Vec3 vec3, float f, float g, float h, BufferBuilder bufferBuilder, ShaderInstance shaderInstance, float[] fs, float i, Matrix4f matrix4f2, float k, int r, int s, int m, float t, float o, float p, float q) {
|
||||||
// todo: the star brightness limits skybox's + skyboxes render during rain which is off.
|
// todo: the star brightness limits skybox's + skyboxes render during rain which is off.
|
||||||
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, level.getStarBrightness(0));
|
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, level.getStarBrightness(0));
|
||||||
ExampleMod.skyManager.getSkybox().render(poseStack, projectionMatrix);
|
NicerSkies.skyManager.getSkybox().render(poseStack, projectionMatrix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package codes.ztereohype.example.mixin.debug;
|
package codes.ztereohype.example.mixin.debug;
|
||||||
|
|
||||||
import codes.ztereohype.example.ExampleMod;
|
import codes.ztereohype.example.NicerSkies;
|
||||||
import net.minecraft.client.KeyboardHandler;
|
import net.minecraft.client.KeyboardHandler;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
@ -13,8 +13,8 @@ public class MixinKeyboardHandler {
|
||||||
private void printKey(long windowPointer, int key, int scanCode, int action, int modifiers, CallbackInfo ci) {
|
private void printKey(long windowPointer, int key, int scanCode, int action, int modifiers, CallbackInfo ci) {
|
||||||
// \ key, keydown action
|
// \ key, keydown action
|
||||||
if (key == 92 && action == 1) {
|
if (key == 92 && action == 1) {
|
||||||
ExampleMod.skyManager.generateSky(321L);
|
NicerSkies.skyManager.generateSky(321L);
|
||||||
ExampleMod.toggle = !ExampleMod.toggle;
|
NicerSkies.toggle = !NicerSkies.toggle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
package codes.ztereohype.example.sky;
|
package codes.ztereohype.example.sky;
|
||||||
|
|
||||||
import codes.ztereohype.example.Gradient;
|
import codes.ztereohype.example.core.Gradient;
|
||||||
import codes.ztereohype.example.sky.nebula.NebulaSkyboxPainter;
|
import codes.ztereohype.example.sky.nebula.NebulaSkyboxPainter;
|
||||||
import codes.ztereohype.example.sky.nebula.Skybox;
|
import codes.ztereohype.example.sky.nebula.Skybox;
|
||||||
import codes.ztereohype.example.sky.nebula.StarSkyboxPainter;
|
|
||||||
import codes.ztereohype.example.sky.star.Starbox;
|
import codes.ztereohype.example.sky.star.Starbox;
|
||||||
import com.mojang.blaze3d.vertex.VertexBuffer;
|
import com.mojang.blaze3d.vertex.VertexBuffer;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package codes.ztereohype.example.sky.nebula;
|
package codes.ztereohype.example.sky.nebula;
|
||||||
|
|
||||||
import codes.ztereohype.example.Gradient;
|
import codes.ztereohype.example.core.Gradient;
|
||||||
import net.minecraft.util.FastColor;
|
import net.minecraft.util.FastColor;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.level.levelgen.synth.PerlinNoise;
|
import net.minecraft.world.level.levelgen.synth.PerlinNoise;
|
||||||
|
|
|
@ -106,22 +106,22 @@ public class Skybox {
|
||||||
skyboxBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
|
skyboxBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
|
||||||
|
|
||||||
// +z face
|
// +z face
|
||||||
skyboxBuilder.vertex(-100F, -100F, 100F).uv(0.25f, 0.25f).endVertex();
|
skyboxBuilder.vertex(-80F, -80F, 80F).uv(0.25f, 0.25f).endVertex();
|
||||||
skyboxBuilder.vertex(-100F, 100F, 100F).uv(0.25f, 0.5f).endVertex();
|
skyboxBuilder.vertex(-80F, 80F, 80F).uv(0.25f, 0.5f).endVertex();
|
||||||
skyboxBuilder.vertex(100F, 100F, 100F).uv(0.5f, 0.5f).endVertex();
|
skyboxBuilder.vertex(80F, 80F, 80F).uv(0.5f, 0.5f).endVertex();
|
||||||
skyboxBuilder.vertex(100F, -100F, 100F).uv(0.5f, 0.25f).endVertex();
|
skyboxBuilder.vertex(80F, -80F, 80F).uv(0.5f, 0.25f).endVertex();
|
||||||
|
|
||||||
// -z face
|
// -z face
|
||||||
skyboxBuilder.vertex(-100F, -100F, -100F).uv(0.75f, 0.25f).endVertex();
|
skyboxBuilder.vertex(-80F, -80F, -80F).uv(0.75f, 0.25f).endVertex();
|
||||||
skyboxBuilder.vertex(100F, -100F, -100F).uv(1f, 0.25f).endVertex();
|
skyboxBuilder.vertex(80F, -80F, -80F).uv(1f, 0.25f).endVertex();
|
||||||
skyboxBuilder.vertex(100F, 100F, -100F).uv(1f, 0.5f).endVertex();
|
skyboxBuilder.vertex(80F, 80F, -80F).uv(1f, 0.5f).endVertex();
|
||||||
skyboxBuilder.vertex(-100F, 100F, -100F).uv(0.75f, 0.5f).endVertex();
|
skyboxBuilder.vertex(-80F, 80F, -80F).uv(0.75f, 0.5f).endVertex();
|
||||||
|
|
||||||
// bottom face
|
// bottom face
|
||||||
skyboxBuilder.vertex(-100F, -100F, -100F).uv(0.5f, 0.5f).endVertex();
|
skyboxBuilder.vertex(-80F, -80F, -80F).uv(0.5f, 0.5f).endVertex();
|
||||||
skyboxBuilder.vertex(-100F, -100F, 100F).uv(0.5f, 0.75f).endVertex();
|
skyboxBuilder.vertex(-80F, -80F, 80F).uv(0.5f, 0.75f).endVertex();
|
||||||
skyboxBuilder.vertex(100F, -100F, 100F).uv(0.75f, 0.75f).endVertex();
|
skyboxBuilder.vertex(80F, -80F, 80F).uv(0.75f, 0.75f).endVertex();
|
||||||
skyboxBuilder.vertex(100F, -100F, -100F).uv(0.75f, 0.5f).endVertex();
|
skyboxBuilder.vertex(80F, -80F, -80F).uv(0.75f, 0.5f).endVertex();
|
||||||
|
|
||||||
// skyboxBuilder.vertex(-1F, -1F, -1F).uv(0f, 0f).endVertex();
|
// skyboxBuilder.vertex(-1F, -1F, -1F).uv(0f, 0f).endVertex();
|
||||||
// skyboxBuilder.vertex(-1F, -1F, 1F).uv(0f, 1f).endVertex();
|
// skyboxBuilder.vertex(-1F, -1F, 1F).uv(0f, 1f).endVertex();
|
||||||
|
@ -129,22 +129,22 @@ public class Skybox {
|
||||||
// skyboxBuilder.vertex(1F, -1F, -1F).uv(1f, 0f).endVertex();
|
// skyboxBuilder.vertex(1F, -1F, -1F).uv(1f, 0f).endVertex();
|
||||||
|
|
||||||
// top face
|
// top face
|
||||||
skyboxBuilder.vertex(-100F, 100F, -100F).uv(0.5f, 0f).endVertex();
|
skyboxBuilder.vertex(-80F, 80F, -80F).uv(0.5f, 0f).endVertex();
|
||||||
skyboxBuilder.vertex(100F, 100F, -100F).uv(0.75f, 0f).endVertex();
|
skyboxBuilder.vertex(80F, 80F, -80F).uv(0.75f, 0f).endVertex();
|
||||||
skyboxBuilder.vertex(100F, 100F, 100F).uv(0.75f, 0.25f).endVertex();
|
skyboxBuilder.vertex(80F, 80F, 80F).uv(0.75f, 0.25f).endVertex();
|
||||||
skyboxBuilder.vertex(-100F, 100F, 100F).uv(0.5f, 0.25f).endVertex();
|
skyboxBuilder.vertex(-80F, 80F, 80F).uv(0.5f, 0.25f).endVertex();
|
||||||
|
|
||||||
// +x face
|
// +x face
|
||||||
skyboxBuilder.vertex(100F, -100F, -100F).uv(0.5f, 0.25f).endVertex();
|
skyboxBuilder.vertex(80F, -80F, -80F).uv(0.5f, 0.25f).endVertex();
|
||||||
skyboxBuilder.vertex(100F, -100F, 100F).uv(0.75f, 0.25f).endVertex();
|
skyboxBuilder.vertex(80F, -80F, 80F).uv(0.75f, 0.25f).endVertex();
|
||||||
skyboxBuilder.vertex(100F, 100F, 100F).uv(0.75f, 0.5f).endVertex();
|
skyboxBuilder.vertex(80F, 80F, 80F).uv(0.75f, 0.5f).endVertex();
|
||||||
skyboxBuilder.vertex(100F, 100F, -100F).uv(0.5f, 0.5f).endVertex();
|
skyboxBuilder.vertex(80F, 80F, -80F).uv(0.5f, 0.5f).endVertex();
|
||||||
|
|
||||||
// -x face
|
// -x face
|
||||||
skyboxBuilder.vertex(-100F, -100F, -100F).uv(0f, 0.25f).endVertex();
|
skyboxBuilder.vertex(-80F, -80F, -80F).uv(0f, 0.25f).endVertex();
|
||||||
skyboxBuilder.vertex(-100F, 100F, -100F).uv(0f, 0.5f).endVertex();
|
skyboxBuilder.vertex(-80F, 80F, -80F).uv(0f, 0.5f).endVertex();
|
||||||
skyboxBuilder.vertex(-100F, 100F, 100F).uv(0.25f, 0.5f).endVertex();
|
skyboxBuilder.vertex(-80F, 80F, 80F).uv(0.25f, 0.5f).endVertex();
|
||||||
skyboxBuilder.vertex(-100F, -100F, 100F).uv(0.25f, 0.25f).endVertex();
|
skyboxBuilder.vertex(-80F, -80F, 80F).uv(0.25f, 0.25f).endVertex();
|
||||||
|
|
||||||
skyboxBuffer.bind();
|
skyboxBuffer.bind();
|
||||||
skyboxBuffer.upload(skyboxBuilder.end());
|
skyboxBuffer.upload(skyboxBuilder.end());
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package codes.ztereohype.example.sky.nebula;
|
package codes.ztereohype.example.sky.nebula;
|
||||||
|
|
||||||
import codes.ztereohype.example.Gradient;
|
import codes.ztereohype.example.core.Gradient;
|
||||||
import net.minecraft.util.FastColor;
|
import net.minecraft.util.FastColor;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.level.levelgen.synth.PerlinNoise;
|
import net.minecraft.world.level.levelgen.synth.PerlinNoise;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package codes.ztereohype.example.sky.star;
|
package codes.ztereohype.example.sky.star;
|
||||||
|
|
||||||
import codes.ztereohype.example.Gradient;
|
import codes.ztereohype.example.core.Gradient;
|
||||||
import com.mojang.blaze3d.vertex.*;
|
import com.mojang.blaze3d.vertex.*;
|
||||||
import net.minecraft.util.RandomSource;
|
import net.minecraft.util.RandomSource;
|
||||||
import net.minecraft.world.level.levelgen.synth.ImprovedNoise;
|
import net.minecraft.world.level.levelgen.synth.ImprovedNoise;
|
||||||
|
|
Before Width: | Height: | Size: 453 B After Width: | Height: | Size: 453 B |
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB |
|
@ -1,33 +1,29 @@
|
||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"id": "modid",
|
"id": "nicer-skies",
|
||||||
"version": "${version}",
|
"version": "0.1.0",
|
||||||
"name": "Example Mod",
|
"name": "Nicer Skies",
|
||||||
"description": "This is an example description! Tell everyone what your mod is about!",
|
"description": "This is a mod that improves the minecraft skies a little whilst keeping the behaviours vanilla and compatible.",
|
||||||
"authors": [
|
"authors": [
|
||||||
"Me!"
|
"ZtereoHYPE"
|
||||||
],
|
],
|
||||||
"contact": {
|
"contact": {
|
||||||
"homepage": "https://fabricmc.net/",
|
"sources": "https://github.com/ZtereoHYPE/nicer-skies"
|
||||||
"sources": "https://github.com/FabricMC/fabric-example-mod"
|
|
||||||
},
|
},
|
||||||
"license": "CC0-1.0",
|
"license": "LGPLv3",
|
||||||
"icon": "assets/modid/icon.png",
|
"icon": "assets/nicer_skies/icon.png",
|
||||||
"environment": "*",
|
"environment": "client",
|
||||||
"entrypoints": {
|
"entrypoints": {
|
||||||
"main": [
|
"main": [
|
||||||
"codes.ztereohype.example.ExampleMod"
|
"codes.ztereohype.example.NicerSkies"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"modid.mixins.json"
|
"nicer_skies.mixins.json"
|
||||||
],
|
],
|
||||||
"depends": {
|
"depends": {
|
||||||
"fabricloader": ">=0.14.6",
|
"fabricloader": ">=0.14.6",
|
||||||
"minecraft": "~1.19",
|
"minecraft": "~1.19",
|
||||||
"java": ">=17"
|
"java": ">=17"
|
||||||
},
|
|
||||||
"suggests": {
|
|
||||||
"another-mod": "*"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue