diff --git a/build.gradle b/build.gradle index 1648038..415a185 100644 --- a/build.gradle +++ b/build.gradle @@ -1,95 +1,71 @@ plugins { - id 'fabric-loom' version '1.5-SNAPSHOT' - id 'maven-publish' + id 'dev.architectury.loom' version '1.6-SNAPSHOT' + id 'maven-publish' } -sourceCompatibility = JavaVersion.VERSION_17 -targetCompatibility = JavaVersion.VERSION_17 - -archivesBaseName = project.archives_base_name -version = project.mod_version group = project.maven_group +version = project.mod_version + +base { + archivesName = project.archives_name +} + +loom { + forge { + mixinConfig 'cavedust.mixins.json' + } +} repositories { - maven { - name = "Modrinth" - url = "https://api.modrinth.com/maven" - content { - includeGroup "maven.modrinth" - } - } - maven { - url = "https://maven.terraformersmc.com" - } - maven { - name = 'minelp' - url = 'https://repo.minelittlepony-mod.com/maven/snapshot' - } - maven { - name = 'minelp-release' - url = 'https://repo.minelittlepony-mod.com/maven/release' - } - // Add repositories to retrieve artifacts from in here. - // You should only use this when depending on other mods because - // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. - // See https://docs.gradle.org/current/userguide/declaring_repositories.html - // for more information about repositories. + // Add repositories to retrieve artifacts from in here. + // You should only use this when depending on other mods because + // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. + // See https://docs.gradle.org/current/userguide/declaring_repositories.html + // for more information about repositories. } dependencies { - // To change the versions see the gradle.properties file - minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - - // Fabric API. This is technically optional, but you probably want it anyway. - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}" - modApi "com.minelittlepony:kirin:${project.kirin_version}" - include "com.minelittlepony:kirin:${project.kirin_version}" - - modCompileOnly("com.terraformersmc:modmenu:${project.modmenu_version}") + minecraft "net.minecraft:minecraft:$project.minecraft_version" + mappings "net.fabricmc:yarn:$project.yarn_mappings:v2" + forge "net.minecraftforge:forge:$project.forge_version" + modApi "dev.architectury:architectury-forge:${rootProject.architectury_version}" } processResources { - inputs.property "version", project.version + inputs.property 'version', project.version - filesMatching("fabric.mod.json") { - expand "version": project.version - } -} - -tasks.withType(JavaCompile).configureEach { - // Minecraft 1.18 (1.18-pre2) upwards uses Java 17. - it.options.release = 17 + filesMatching('META-INF/mods.toml') { + expand version: project.version + } } java { - // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task - // if it is present. - // If you remove this line, sources will not be generated. - withSourcesJar() + // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task + // if it is present. + // If you remove this line, sources will not be generated. + withSourcesJar() + + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } -jar { - from("LICENSE") { - rename { "${it}_${project.archivesBaseName}"} - } +tasks.withType(JavaCompile).configureEach { + it.options.release = 17 } -// configure the maven publication +// Configure Maven publishing. publishing { - publications { - mavenJava(MavenPublication) { - from components.java - } - } + publications { + mavenJava(MavenPublication) { + from components.java + } + } - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - // Notice: This block does NOT have the same function as the block in the top level. - // The repositories here will be used for publishing your artifact, not for - // retrieving dependencies. - } + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + // Notice: This block does NOT have the same function as the block in the top level. + // The repositories here will be used for publishing your artifact, not for + // retrieving dependencies. + } } diff --git a/gradle.properties b/gradle.properties index 15333b2..d50fc38 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,19 +1,16 @@ -# Done to increase the memory available to gradle. +# Done to increase the memory available to Gradle. org.gradle.jvmargs=-Xmx1G +loom.platform = forge -# Fabric Properties - # check these on https://fabricmc.net/develop - minecraft_version=1.20.4 - yarn_mappings=1.20.4+build.3 - loader_version=0.15.5 +# Mod properties +mod_version = 3.0.0 +maven_group = net.lizistired +archives_name = cavedust -# Mod Properties - mod_version=1.4.1 - maven_group=com.lizistired - archives_base_name=cave_dust +# Minecraft properties +minecraft_version = 1.20.4 +yarn_mappings = 1.20.4+build.1 # Dependencies - fabric_version=0.94.0+1.20.4 - clothconfig_version=13.0.121 - modmenu_version=9.0.0 - kirin_version=1.17.0+1.20.4 +forge_version = 1.20.4-49.0.50 +architectury_version=11.1.17 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index c1962a7..d64cd49 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3499ded..b82aa23 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index aeb74cb..1aa94a4 100755 --- a/gradlew +++ b/gradlew @@ -83,7 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -130,10 +131,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -141,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -149,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -198,11 +202,11 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/settings.gradle b/settings.gradle index b02216b..924293f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,10 +1,10 @@ pluginManagement { repositories { - maven { - name = 'Fabric' - url = 'https://maven.fabricmc.net/' - } - mavenCentral() + maven { url "https://maven.fabricmc.net/" } + maven { url "https://maven.architectury.dev/" } + maven { url "https://files.minecraftforge.net/maven/" } gradlePluginPortal() } } + +rootProject.name = 'cavedust' diff --git a/src/main/java/net/lizistired/cavedust/ButtonWidgetMine.java b/src/main/java/net/lizistired/cavedust/ButtonWidgetMine.java new file mode 100644 index 0000000..4a095b7 --- /dev/null +++ b/src/main/java/net/lizistired/cavedust/ButtonWidgetMine.java @@ -0,0 +1,10 @@ +package net.lizistired.cavedust; + +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.text.Text; + +public class ButtonWidgetMine extends ButtonWidget { + protected ButtonWidgetMine(int x, int y, int width, int height, Text message, PressAction onPress, NarrationSupplier narrationSupplier) { + super(x, y, width, height, message, onPress, narrationSupplier); + } +} diff --git a/src/main/java/net/lizistired/cavedust/CaveDust.java b/src/main/java/net/lizistired/cavedust/CaveDust.java index 83435d9..d1fd91e 100644 --- a/src/main/java/net/lizistired/cavedust/CaveDust.java +++ b/src/main/java/net/lizistired/cavedust/CaveDust.java @@ -1,96 +1,102 @@ package net.lizistired.cavedust; //minecraft imports -import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; +import dev.architectury.event.events.client.ClientTickEvent; +import net.lizistired.cavedust.utils.ParticleRegistry; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.particle.Particle; +import net.minecraft.particle.DefaultParticleType; +import net.minecraft.particle.ParticleType; +import net.minecraft.particle.ParticleTypes; import net.minecraft.registry.Registries; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; //other imports -import com.minelittlepony.common.util.GamePaths; -import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.minecraftforge.client.ConfigScreenHandler; +import net.minecraftforge.client.event.RegisterParticleProvidersEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.fml.loading.FMLPaths; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; //java imports import java.nio.file.Path; //static imports +import static net.lizistired.cavedust.CaveDust.MOD_ID; import static net.lizistired.cavedust.utils.MathHelper.*; import static net.lizistired.cavedust.utils.MathHelper.generateRandomDouble; +import static net.lizistired.cavedust.utils.ParticleRegistry.CAVE_DUST; import static net.lizistired.cavedust.utils.ParticleSpawnUtil.shouldParticlesSpawn; -import static net.lizistired.cavedust.utils.KeybindingHelper.*; - -public class CaveDust implements ClientModInitializer { +@Mod(MOD_ID) +public class CaveDust { //logger + public static final String MOD_ID = "cavedust"; public static final Logger LOGGER = LoggerFactory.getLogger("cavedust"); //make class static - private static CaveDust instance; - public static CaveDust getInstance() { - return instance; - } - public CaveDust() { - instance = this; - } //config assignment - private static net.lizistired.cavedust.CaveDustConfig config; - public net.lizistired.cavedust.CaveDustConfig getConfig() { - return config; - } - public static int WHITE_ASH_ID = Registries.PARTICLE_TYPE.getRawId(CaveDustServer.CAVE_DUST); + public static int PARTICLE_AMOUNT = 0; + public static int WHITE_ASH_ID; + public CaveDust() { + IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus(); - @Override - public void onInitializeClient() { - //config path and loading - Path CaveDustFolder = GamePaths.getConfigDirectory().resolve("cavedust"); - config = new CaveDustConfig(CaveDustFolder.getParent().resolve("cavedust.json"), this); - config.load(); - registerKeyBindings(); - ParticleFactoryRegistry.getInstance().register(CaveDustServer.CAVE_DUST, CaveDustParticleFactory.Factory::new); + ParticleRegistry.register(eventBus); + eventBus.addListener(this::clientSetup); + + ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ConfigForge.SPEC, "cavedust.toml"); + ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> new ConfigScreenHandler.ConfigScreenFactory((mc, screen) -> new CaveDustConfigScreen(Text.of("Cave Dust Config"), screen))); //register end client tick to create cave dust function, using end client tick for async - ClientTickEvents.END_CLIENT_TICK.register(this::createCaveDust); + + + System.out.println(FMLPaths.CONFIGDIR.get().toAbsolutePath().normalize().toString()); + ClientTickEvent.CLIENT_POST.register(CaveDust::createCaveDust); + + MinecraftForge.EVENT_BUS.register(this); } - private void createCaveDust(MinecraftClient client) { - if (keyBinding1.wasPressed()){ - getConfig().toggleCaveDust(); - LOGGER.info("Toggled dust"); - client.player.sendMessage(Text.translatable("debug.cavedust.toggle." + config.getCaveDustEnabled()), false); - } - if (keyBinding2.wasPressed()){ - getConfig().load(); - LOGGER.info("Reloaded config"); - client.player.sendMessage(Text.translatable("debug.cavedust.reload"), false); - } + private void clientSetup(final FMLClientSetupEvent event) { + WHITE_ASH_ID = Registries.PARTICLE_TYPE.getRawId(CAVE_DUST.get()); + } + + private static void createCaveDust(MinecraftClient client) { //ensure world is not null if (client.world == null) return; World world = client.world; //LOGGER.info(String.valueOf(((ClientWorldAccessor) client.world.getLevelProperties()).getFlatWorld())); // ) - double probabilityNormalized = normalize(config.getLowerLimit(), config.getUpperLimit(), client.player.getBlockY()); - PARTICLE_AMOUNT = (int) (probabilityNormalized * config.getParticleMultiplier() * config.getParticleMultiplierMultiplier()); + double probabilityNormalized = normalize(ConfigForge.LOWER_LIMIT.get(), ConfigForge.UPPER_LIMIT.get(), client.player.getBlockY()); + PARTICLE_AMOUNT = (int) (probabilityNormalized * ConfigForge.PARTICLE_MULTIPLIER.get() * ConfigForge.PARTICLE_MULTIPLIER_MULTIPLIER.get()); for (int i = 0; i < PARTICLE_AMOUNT; i++) { try { - int x = (int) (client.player.getPos().getX() + (int) generateRandomDouble(config.getDimensionWidth() *-1, config.getDimensionWidth())); - int y = (int) (client.player.getEyePos().getY() + (int) generateRandomDouble(config.getDimensionHeight() *-1, config.getDimensionHeight())); - int z = (int) (client.player.getPos().getZ() + (int) generateRandomDouble(config.getDimensionWidth() *-1, config.getDimensionWidth())); + int x = (int) (client.player.getPos().getX() + (int) generateRandomDouble(ConfigForge.DIMENSION_WIDTH.get() *-1, ConfigForge.DIMENSION_WIDTH.get())); + int y = (int) (client.player.getEyePos().getY() + (int) generateRandomDouble(ConfigForge.DIMENSION_HEIGHT.get() *-1, ConfigForge.DIMENSION_HEIGHT.get())); + int z = (int) (client.player.getPos().getZ() + (int) generateRandomDouble(ConfigForge.DIMENSION_WIDTH.get() *-1, ConfigForge.DIMENSION_WIDTH.get())); double miniX = (x + Math.random()); double miniY = (y + Math.random()); double miniZ = (z + Math.random()); BlockPos particlePos = new BlockPos(x, y, z); - if (shouldParticlesSpawn(client, config, particlePos)) { + if (shouldParticlesSpawn(client, particlePos)) { if (client.world.getBlockState(particlePos).isAir()) { - world.addParticle(config.getParticle(), miniX, miniY, miniZ, config.getVelocityRandomnessRandom() * 0.01, config.getVelocityRandomnessRandom() * 0.01, config.getVelocityRandomnessRandom() * 0.01); + world.addParticle(CaveDustConfigScreen.getParticle(), miniX, miniY, miniZ, 0, 0, 0); } } } diff --git a/src/main/java/net/lizistired/cavedust/CaveDustConfigScreen.java b/src/main/java/net/lizistired/cavedust/CaveDustConfigScreen.java new file mode 100644 index 0000000..396a101 --- /dev/null +++ b/src/main/java/net/lizistired/cavedust/CaveDustConfigScreen.java @@ -0,0 +1,235 @@ +package net.lizistired.cavedust; + +import com.google.common.collect.Lists; +import net.lizistired.cavedust.utils.ParticleRegistry; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.Element; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.particle.ParticleEffect; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.registry.Registries; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.minecraftforge.fml.IExtensionPoint; + +import java.util.List; +import java.util.function.Supplier; + +public class CaveDustConfigScreen extends Screen implements IExtensionPoint { + private final Screen previous; + private final List buttons = Lists.newArrayList(); + + private static final Text EXAMPLE_BUTTON = Text.translatable("menu.cavedust.examplebutton"); + + private final int imagewidth, imageheight; + private int leftpos, toppos; + + private Element optionsArray[] = new Element[9]; + public static final Identifier OPTIONS_BACKGROUND_TEXTURE = new Identifier("textures/gui/demo_background.png"); + + + + private int buttonWidth; + + + + + protected CaveDustConfigScreen(Text title, Screen previous) { + super(Text.translatable("menu.cavedust.title")); + this.imagewidth = 176; + this.imageheight = 166; + this.previous = previous; + } + @Override + public final void init(){ + super.init(); + this.leftpos = width / 2 - 100; + this.toppos = height / 4 + 14; + var mouseX = 0; + var mouseY = 0; + + addDrawableChild( + ButtonWidget.builder( + Text.translatable("menu.cavedust.global." + ConfigForge.CAVE_DUST_ENABLED.get()), + btn -> { + ConfigForge.CAVE_DUST_ENABLED.set(!ConfigForge.CAVE_DUST_ENABLED.get()); + btn.setMessage(Text.translatable("menu.cavedust.global." + ConfigForge.CAVE_DUST_ENABLED.get())); + } + ).dimensions(leftpos, toppos += -60, 200, 20).build() + ); + addDrawableChild( + ButtonWidget.builder( + Text.translatable("menu.cavedust.superflatstatus." + ConfigForge.SUPERFLAT_STATUS.get()), + btn -> { + ConfigForge.SUPERFLAT_STATUS.set(!ConfigForge.SUPERFLAT_STATUS.get()); + btn.setMessage(Text.translatable("menu.cavedust.superflatstatus." + ConfigForge.SUPERFLAT_STATUS.get())); + } + ).dimensions(leftpos, toppos += 24, 200, 20).build() + ); + optionsArray[0] = addDrawableChild( + new ForgeSliderButMine( + leftpos, + toppos += 24, + 200, + 20, + Text.translatable("menu.cavedust.particlemultiplier"), + Text.of(""), + 1, + 100, + ConfigForge.PARTICLE_MULTIPLIER.get(), + 1, + 0, + true, + ConfigForge.PARTICLE_MULTIPLIER + ) + ); + optionsArray[1] = addDrawableChild( + new ForgeSliderButMine( + leftpos, + toppos += 24, + 200, + 20, + Text.translatable("menu.cavedust.particlemultipliermultiplier"), + Text.of(""), + 1, + 100, + ConfigForge.PARTICLE_MULTIPLIER_MULTIPLIER.get(), + 1, + 0, + true, + ConfigForge.PARTICLE_MULTIPLIER_MULTIPLIER + ) + ); + addDrawableChild( + ButtonWidget.builder( + Text.translatable("menu.cavedust.particle").append(Text.literal(getNameOfParticle())), + btn -> { + if (ConfigForge.PARTICLE_ID.get() == Registries.PARTICLE_TYPE.size() - 1) { + ConfigForge.PARTICLE_ID.set(1); + btn.setMessage(Text.translatable("menu.cavedust.particle").append(Text.literal(getNameOfParticle()))); + } else { + ConfigForge.PARTICLE_ID.set(ConfigForge.PARTICLE_ID.get() + 1); + btn.setMessage(Text.translatable("menu.cavedust.particle").append(Text.literal(getNameOfParticle()))); + } + } + ).dimensions(leftpos, toppos += 24, 200, 20).build() + ); + optionsArray[2] = addDrawableChild( + new ForgeSliderButMine( + leftpos, + toppos += 24, + 200, + 20, + Text.translatable("menu.cavedust.height"), + Text.of(""), + 1, + 50, + ConfigForge.DIMENSION_HEIGHT.get(), + 1, + 0, + true, + ConfigForge.DIMENSION_HEIGHT + ) + ); + optionsArray[3] = addDrawableChild( + new ForgeSliderButMine( + leftpos, + toppos += 24, + 200, + 20, + Text.translatable("menu.cavedust.width"), + Text.of(""), + 1, + 50, + ConfigForge.DIMENSION_WIDTH.get(), + 1, + 0, + true, + ConfigForge.DIMENSION_WIDTH + ) + ); + addDrawableChild( + ButtonWidget.builder( + Text.translatable("menu.cavedust.reset"), + btn -> resetSettings() + ).dimensions(leftpos, toppos += 120, 200, 20).build() + ); + addDrawableChild( + ButtonWidget.builder( + Text.translatable("menu.cavedust.apply"), + btn -> { + applyValue(optionsArray); + } + ).dimensions(leftpos, toppos += 24, 200, 20).build() + ); + addDrawableChild( + ButtonWidget.builder( + Text.translatable("gui.done"), + btn -> { + client.setScreen(this.previous); + applyValue(optionsArray); + } + ).dimensions(leftpos, toppos += 24, 200, 20).build() + ); + } + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + this.renderBackground(context, mouseX, mouseY, delta); + context.drawCenteredTextWithShadow(this.textRenderer, this.title, this.width / 2, 20, 16777215); + super.render(context, mouseX, mouseY, delta); + } + + //@Override + //public void renderBackgroundTexture(DrawContext context){ + // context.setShaderColor(0.25F, 0.25F, 0.25F, 1.0F); + // context.drawTexture(OPTIONS_BACKGROUND_TEXTURE, 0, 0, 0, 0.0F, 0.0F, this.width, this.height, 32, 32); + // context.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + //} + + private String getNameOfParticle(){ + return Registries.PARTICLE_TYPE.getEntry(ConfigForge.PARTICLE_ID.get()).get().getKey().get().getValue().toString(); + } + + public static ParticleEffect getParticle(){ + try { + return (ParticleEffect) Registries.PARTICLE_TYPE.get(new Identifier(Registries.PARTICLE_TYPE.getEntry(ConfigForge.PARTICLE_ID.get()).get().getKey().get().getValue().toString().toLowerCase())); + } catch (ClassCastException e) { + MinecraftClient.getInstance().player.sendMessage(Text.literal("Issue loading particle, defaulting to white ash particle!"), false); + return ParticleTypes.WHITE_ASH; + } + } + + private void applyValue(Element[] optionsArray) { + for (Element element : optionsArray) { + if (element instanceof ForgeSliderButMine) { + ((ForgeSliderButMine) element).doTheThing(); + } + } + } + + private void resetSettings() { + ConfigForge.CAVE_DUST_ENABLED.set(ConfigForge.CAVE_DUST_ENABLED.getDefault()); + ConfigForge.SUPERFLAT_STATUS.set(ConfigForge.SUPERFLAT_STATUS.getDefault()); + ConfigForge.UPPER_LIMIT.set(ConfigForge.UPPER_LIMIT.getDefault()); + ConfigForge.LOWER_LIMIT.set(ConfigForge.LOWER_LIMIT.getDefault()); + ConfigForge.PARTICLE_MULTIPLIER.set(ConfigForge.PARTICLE_MULTIPLIER.getDefault()); + ConfigForge.PARTICLE_MULTIPLIER_MULTIPLIER.set(ConfigForge.PARTICLE_MULTIPLIER_MULTIPLIER.getDefault()); + ConfigForge.DIMENSION_WIDTH.set(ConfigForge.DIMENSION_WIDTH.getDefault()); + ConfigForge.DIMENSION_HEIGHT.set(ConfigForge.DIMENSION_HEIGHT.getDefault()); + ConfigForge.PARTICLE_ID.set(Registries.PARTICLE_TYPE.getRawId(ParticleRegistry.CAVE_DUST.get())); + this.client.setScreen(this.previous); + } + + @Override + public void close() { + this.client.setScreen(this.previous); + } + + private ButtonWidget createButton(Text message, Supplier screenSupplier) { + return ButtonWidget.builder(message, (button) -> { + this.client.setScreen((Screen)screenSupplier.get()); + }).build(); + } +} diff --git a/src/main/java/net/lizistired/cavedust/CaveDustModMenuFactory.java b/src/main/java/net/lizistired/cavedust/CaveDustModMenuFactory.java deleted file mode 100644 index 333c6f0..0000000 --- a/src/main/java/net/lizistired/cavedust/CaveDustModMenuFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -package net.lizistired.cavedust; - -import com.terraformersmc.modmenu.api.ConfigScreenFactory; -import com.terraformersmc.modmenu.api.ModMenuApi; - -public class CaveDustModMenuFactory implements ModMenuApi { - @Override - public ConfigScreenFactory getModConfigScreenFactory() { - return ModMenuConfigScreen::new; - } -} diff --git a/src/main/java/net/lizistired/cavedust/CaveDustParticleFactory.java b/src/main/java/net/lizistired/cavedust/CaveDustParticleFactory.java index abd5442..4ddd1af 100644 --- a/src/main/java/net/lizistired/cavedust/CaveDustParticleFactory.java +++ b/src/main/java/net/lizistired/cavedust/CaveDustParticleFactory.java @@ -1,16 +1,16 @@ package net.lizistired.cavedust; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; import net.minecraft.client.particle.*; import net.minecraft.client.world.ClientWorld; import net.minecraft.particle.DefaultParticleType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; public class CaveDustParticleFactory extends SpriteBillboardParticle { - private final SpriteProvider spriteProvider; - CaveDustParticleFactory(ClientWorld clientWorld, double x, double y, double z, double velocityX, double velocityY, double velocityZ, SpriteProvider spriteProvider) { + public static SpriteProvider spriteProvider; + public CaveDustParticleFactory(ClientWorld clientWorld, double x, double y, double z, double velocityX, double velocityY, double velocityZ, SpriteProvider spriteProvider) { super(clientWorld, x, y, z); - this.spriteProvider = spriteProvider; //Sets the sprite provider from above to the sprite provider in the constructor method + CaveDustParticleFactory.spriteProvider = spriteProvider; //Sets the sprite provider from above to the sprite provider in the constructor method this.maxAge = 200; //20 ticks = 1 second this.scale = 0.1f; this.velocityX = velocityX; //The velX from the constructor parameters @@ -38,7 +38,7 @@ public class CaveDustParticleFactory extends SpriteBillboardParticle { return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; } - @Environment(EnvType.CLIENT) + @OnlyIn(Dist.CLIENT) public static class Factory implements ParticleFactory { private final SpriteProvider spriteProvider; diff --git a/src/main/java/net/lizistired/cavedust/CaveDustServer.java b/src/main/java/net/lizistired/cavedust/CaveDustServer.java deleted file mode 100644 index 49cf0bd..0000000 --- a/src/main/java/net/lizistired/cavedust/CaveDustServer.java +++ /dev/null @@ -1,19 +0,0 @@ -package net.lizistired.cavedust; - -import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes; -import net.minecraft.particle.DefaultParticleType; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; - -public class CaveDustServer implements ModInitializer { - public static final DefaultParticleType CAVE_DUST = FabricParticleTypes.simple(); - /** - * Runs the mod initializer. - */ - @Override - public void onInitialize() { - Registry.register(Registries.PARTICLE_TYPE, new Identifier("cavedust", "cave_dust"), CAVE_DUST); - } -} diff --git a/src/main/java/net/lizistired/cavedust/ConfigForge.java b/src/main/java/net/lizistired/cavedust/ConfigForge.java new file mode 100644 index 0000000..4a1bc73 --- /dev/null +++ b/src/main/java/net/lizistired/cavedust/ConfigForge.java @@ -0,0 +1,76 @@ +package net.lizistired.cavedust; + +import net.minecraft.registry.Registries; +import net.minecraft.text.Text; +import net.minecraftforge.common.ForgeConfigSpec; + +import static net.lizistired.cavedust.CaveDust.WHITE_ASH_ID; + +public class ConfigForge { + public static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder(); + public static ForgeConfigSpec SPEC; + + public static final ForgeConfigSpec.ConfigValue DIMENSION_WIDTH; + public static final ForgeConfigSpec.ConfigValue DIMENSION_HEIGHT; + + public static final ForgeConfigSpec.BooleanValue CAVE_DUST_ENABLED; + public static final ForgeConfigSpec.BooleanValue SEA_LEVEL_CHECK; + public static final ForgeConfigSpec.BooleanValue SUPERFLAT_STATUS; + + public static final ForgeConfigSpec.ConfigValue UPPER_LIMIT; + public static final ForgeConfigSpec.ConfigValue LOWER_LIMIT; + public static final ForgeConfigSpec.ConfigValue PARTICLE_MULTIPLIER; + public static final ForgeConfigSpec.ConfigValue PARTICLE_MULTIPLIER_MULTIPLIER; + public static final ForgeConfigSpec.ConfigValue PARTICLE_ID; + + //public static final ForgeConfigSpec.ConfigValue VELOCITY_RANDOMNESS; + //public static final ForgeConfigSpec.ConfigValue VELOCITY_RANDOMNESS_RANDOMNESS; + + static { + BUILDER.push("Config for Cave Dust"); + + //private int dimensionX = 5; + DIMENSION_WIDTH = BUILDER.comment(String.valueOf(Text.translatable("menu.cavedust.X.tooltip"))) + .defineInRange("dimensionX", 5, 1, 50); + DIMENSION_HEIGHT = BUILDER.comment(String.valueOf(Text.translatable("menu.cavedust.Y.tooltip"))) + .defineInRange("dimensionX", 5, 1, 50); + CAVE_DUST_ENABLED = BUILDER.comment(String.valueOf(Text.translatable("menu.cavedust.enabled.tooltip"))) + .define("caveDustEnabled", true); + + SEA_LEVEL_CHECK = BUILDER.comment(String.valueOf(Text.translatable("menu.cavedust.sealevelcheck.tooltip"))) + .define("seaLevelCheck", true); + + SUPERFLAT_STATUS = BUILDER.comment(String.valueOf(Text.translatable("menu.cavedust.superflatstatus.tooltip"))) + .define("superFlatStatus", false); + + UPPER_LIMIT = BUILDER.comment(String.valueOf(Text.translatable("menu.cavedust.upperlimit.tooltip"))) + .defineInRange("upperLimit", 64, 0, 255); + + LOWER_LIMIT = BUILDER.comment(String.valueOf(Text.translatable("menu.cavedust.lowerlimit.tooltip"))) + .defineInRange("lowerLimit", -64, -255, 0); + + + PARTICLE_MULTIPLIER = BUILDER.comment(String.valueOf(Text.translatable("menu.cavedust.particlemultiplier.tooltip"))) + .defineInRange("particleMultiplier", 1, 1, 100); + + PARTICLE_MULTIPLIER_MULTIPLIER = BUILDER.comment(String.valueOf(Text.translatable("menu.cavedust.particlemultiplier.tooltip"))) + .defineInRange("particleMultiplierMultiplier", 10, 1, 100); + + PARTICLE_ID = BUILDER.comment(String.valueOf(Text.translatable("menu.cavedust.particle.tooltip"))) + .defineInRange("particleID", WHITE_ASH_ID, 0, Registries.PARTICLE_TYPE.size()); + + //VELOCITY_RANDOMNESS = BUILDER.comment(String.valueOf(Text.translatable("menu.cavedust.velocityrandomness.tooltip"))) + // .defineInRange("velocityRandomness", 1, 0, 10); +// + //VELOCITY_RANDOMNESS_RANDOMNESS = BUILDER.comment(String.valueOf(Text.translatable("menu.cavedust.velocityrandomness.tooltip"))) + // .defineInRange("velocityRandomness", generateRandomDouble(-VELOCITY_RANDOMNESS.get(), VELOCITY_RANDOMNESS.get()), 0.0d, 10.0d); + + + + + + BUILDER.pop(); + SPEC = BUILDER.build(); + } + +} diff --git a/src/main/java/net/lizistired/cavedust/ForgeSliderButMine.java b/src/main/java/net/lizistired/cavedust/ForgeSliderButMine.java new file mode 100644 index 0000000..bfced16 --- /dev/null +++ b/src/main/java/net/lizistired/cavedust/ForgeSliderButMine.java @@ -0,0 +1,49 @@ +package net.lizistired.cavedust; + +import net.minecraft.text.Text; +import net.minecraftforge.client.gui.widget.ForgeSlider; +import net.minecraftforge.common.ForgeConfigSpec; + +public class ForgeSliderButMine extends ForgeSlider { + long startTime = System.currentTimeMillis(); + private int timer = 0; + final ForgeConfigSpec.ConfigValue configOption; + + /** + * @param x x position of upper left corner + * @param y y position of upper left corner + * @param width Width of the widget + * @param height Height of the widget + * @param prefix {@link Text} displayed before the value string + * @param suffix {@link Text} displayed after the value string + * @param minValue Minimum (left) value of slider + * @param maxValue Maximum (right) value of slider + * @param currentValue Starting value when widget is first displayed + * @param stepSize Size of step used. Precision will automatically be calculated based on this value if this value is not 0. + * @param precision Only used when {@code stepSize} is 0. Limited to a maximum of 4 (inclusive). + * @param drawString Should text be displayed on the widget + * @param configOption + */ + public ForgeSliderButMine(int x, int y, int width, int height, Text prefix, Text suffix, double minValue, double maxValue, double currentValue, double stepSize, int precision, boolean drawString, ForgeConfigSpec.ConfigValue configOption) { + super(x, y, width, height, prefix, suffix, minValue, maxValue, currentValue, stepSize, precision, drawString); + this.configOption = configOption; + } + + @Override + protected void updateMessage() { + setMessage(Text.literal(prefix.getString() + getValueString())); + } + @Override + public void applyValue(){ + + } + + /** + * @deprecated bad code ignore this + */ + @Deprecated + public void doTheThing(){ + configOption.set((int) getValue()); + } + +} diff --git a/src/main/java/net/lizistired/cavedust/ModMenuConfigScreen.java b/src/main/java/net/lizistired/cavedust/ModMenuConfigScreen.java deleted file mode 100644 index 516d047..0000000 --- a/src/main/java/net/lizistired/cavedust/ModMenuConfigScreen.java +++ /dev/null @@ -1,119 +0,0 @@ -package net.lizistired.cavedust; - -import com.minelittlepony.common.client.gui.GameGui; -import com.minelittlepony.common.client.gui.element.*; -import net.lizistired.cavedust.utils.TranslatableTextHelper; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.registry.Registries; -import net.minecraft.text.Text; -import org.jetbrains.annotations.Nullable; - -import java.util.NoSuchElementException; - -public class ModMenuConfigScreen extends GameGui { - public ModMenuConfigScreen(@Nullable Screen parent) { - super(Text.translatable("menu.cavedust.title"), parent); - } - - @Override - public void init() { - int left = width / 2 - 100; - int row = height / 4 + 14; - - CaveDustConfig config = CaveDust.getInstance().getConfig(); - TranslatableTextHelper transText = new TranslatableTextHelper();; - config.load(); - - addButton(new Label(width / 2, 30)).setCentered().getStyle() - .setText(getTitle()); - - addButton(new Button(left += -110, row += -60).onClick(sender -> { - sender.getStyle().setText("menu.cavedust.global." + config.toggleCaveDust()).setTooltip(Text.translatable("menu.cavedust.global.tooltip." + config.getCaveDustEnabled())); - })).getStyle() - .setText("menu.cavedust.global." + config.getCaveDustEnabled()) - .setTooltip(Text.translatable("menu.cavedust.global.tooltip." + config.getCaveDustEnabled())); - - /*addButton(new Button(left, row += 24).onClick(sender -> { - sender.getStyle().setText("menu.cavedust.enhanceddetection." + config.setEnhancedDetection()).setTooltip(Text.translatable("menu.cavedust.enhanceddetection.tooltip")); - })).getStyle() - .setText("menu.cavedust.enhanceddetection." + config.getEnhancedDetection()) - .setTooltip(Text.translatable("menu.cavedust.enhanceddetection.tooltip"));*/ - - addButton(new Button(left, row += 24).onClick(sender -> { - sender.getStyle().setText("menu.cavedust.superflatstatus." + config.setSuperFlatStatus()).setTooltip(Text.translatable("menu.cavedust.superflatstatus.tooltip")); - })).getStyle() - .setText("menu.cavedust.superflatstatus." + config.getSuperFlatStatus()) - .setTooltip(Text.translatable("menu.cavedust.superflatstatus.tooltip")); - - - - /*addButton(new Slider(left, row += 48, -64, 319, config.getUpperLimit())) - .onChange(config::setUpperLimit) - .setTextFormat(transText::formatUpperLimit) - .getStyle().setTooltip(Text.translatable("menu.cavedust.upperlimit.tooltip")); - - addButton(new Slider(left, row += 24, -64, 319, config.getLowerLimit())) - .onChange(config::setLowerLimit) - .setTextFormat(transText::formatLowerLimit) - .getStyle().setTooltip(Text.translatable("menu.cavedust.lowerlimit.tooltip"));*/ - - addButton(new Slider(left, row += 24, 1, 100, config.getParticleMultiplier())) - .onChange(config::setParticleMultiplier) - .setTextFormat(transText::formatParticleMultiplier) - .getStyle().setTooltip(Text.translatable("menu.cavedust.particlemultiplier.tooltip")); - - addButton(new Slider(left, row += 24, 1, 100, config.getParticleMultiplierMultiplier())) - .onChange(config::setParticleMultiplierMultiplier) - .setTextFormat(transText::formatParticleMultiplierMultiplier) - .getStyle().setTooltip(Text.translatable("menu.cavedust.particlemultipliermultiplier.tooltip")); - addButton(new Button(left, row += 24).onClick(sender ->{ - config.iterateParticle(); - sender.getStyle().setText("Particle: " + (getNameOfParticle())); - })).getStyle().setText("Particle: " + (getNameOfParticle())) - .setTooltip(Text.translatable("menu.cavedust.particle.tooltip")); - - addButton(new Slider(left += 220, row -= 96, 1, 50, config.getDimensionWidth())) - .onChange(config::setDimensionWidth) - .setTextFormat(transText::formatMaxWidth) - .getStyle().setTooltip(Text.translatable("menu.cavedust.width.tooltip")); - - addButton(new Slider(left, row += 24, 1, 50, config.getDimensionHeight())) - .onChange(config::setDimensionHeight) - .setTextFormat(transText::formatMaxHeight) - .getStyle().setTooltip(Text.translatable("menu.cavedust.height.tooltip")); - - addButton(new Slider(left, row += 24, 0, 10, config.getVelocityRandomness())) - .onChange(config::setVelocityRandomness) - .setTextFormat(transText::formatVelocityRandomness) - .getStyle().setTooltip(Text.translatable("menu.cavedust.velocityrandomness.tooltip")); - - - addButton(new Button(left -= 110, row += 120).onClick(sender -> { - config.resetConfig(); - finish(); - client.setScreen(new ModMenuConfigScreen(parent)); - })).getStyle().setText(Text.translatable("menu.cavedust.reset")).setTooltip(Text.translatable("menu.cavedust.reset.tooltip")); - - addButton(new Button(left, row += 24) - .onClick(sender -> finish())).getStyle() - .setText("gui.done"); - - } - - - @Override - public void render(DrawContext context, int mouseX, int mouseY, float partialTicks) { - renderBackground(context, mouseX, mouseY, partialTicks); - super.render(context, mouseX, mouseY, partialTicks); - } - private String getNameOfParticle(){ - CaveDustConfig config = CaveDust.getInstance().getConfig(); - config.load(); - try { - return Registries.PARTICLE_TYPE.getEntry(config.getParticleID()).get().getKey().get().getValue().toString(); - } catch (NoSuchElementException e){ - return "null"; - } - } -} diff --git a/src/main/java/net/lizistired/cavedust/utils/KeybindingHelper.java b/src/main/java/net/lizistired/cavedust/utils/KeybindingHelper.java deleted file mode 100644 index 254f3ce..0000000 --- a/src/main/java/net/lizistired/cavedust/utils/KeybindingHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.lizistired.cavedust.utils; - -import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; -import net.minecraft.client.option.KeyBinding; -import net.minecraft.client.util.InputUtil; -import org.lwjgl.glfw.GLFW; - -public class KeybindingHelper { - - public static KeyBinding keyBinding1; - public static KeyBinding keyBinding2; - - - public static void registerKeyBindings(){ - keyBinding1 = KeyBindingHelper.registerKeyBinding(new KeyBinding( - "key.cavedust.toggle", - InputUtil.Type.KEYSYM,// The translation key of the keybinding's name // The type of the keybinding, KEYSYM for keyboard, MOUSE for mouse. - GLFW.GLFW_KEY_KP_ADD, // The keycode of the key - "category.cavedust.spook" // The translation key of the keybinding's category. - )); - keyBinding2 = KeyBindingHelper.registerKeyBinding(new KeyBinding( - "key.cavedust.reload", // The translation key of the keybinding's name - InputUtil.Type.KEYSYM, // The type of the keybinding, KEYSYM for keyboard, MOUSE for mouse. - GLFW.GLFW_KEY_KP_ENTER, // The keycode of the key - "category.cavedust.spook" // The translation key of the keybinding's category. - )); - } -} diff --git a/src/main/java/net/lizistired/cavedust/utils/ParticleRegistry.java b/src/main/java/net/lizistired/cavedust/utils/ParticleRegistry.java new file mode 100644 index 0000000..3b54283 --- /dev/null +++ b/src/main/java/net/lizistired/cavedust/utils/ParticleRegistry.java @@ -0,0 +1,22 @@ +package net.lizistired.cavedust.utils; + +import net.minecraft.particle.DefaultParticleType; +import net.minecraft.particle.ParticleType; +import net.minecraft.particle.ParticleTypes; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +import static net.lizistired.cavedust.CaveDust.MOD_ID; +import static net.minecraftforge.registries.ForgeRegistries.Keys.PARTICLE_TYPES; + +public class ParticleRegistry { + private final static DeferredRegister> PARTICLES = DeferredRegister.create(ForgeRegistries.PARTICLE_TYPES, MOD_ID); + public final static RegistryObject CAVE_DUST = PARTICLES.register("cave_dust", () -> new DefaultParticleType(false)); + + public static void register(IEventBus eventBus) { + PARTICLES.register(eventBus); + } +} diff --git a/src/main/java/net/lizistired/cavedust/utils/ParticleSpawnUtil.java b/src/main/java/net/lizistired/cavedust/utils/ParticleSpawnUtil.java index fcd19c4..f262fa0 100644 --- a/src/main/java/net/lizistired/cavedust/utils/ParticleSpawnUtil.java +++ b/src/main/java/net/lizistired/cavedust/utils/ParticleSpawnUtil.java @@ -1,6 +1,7 @@ package net.lizistired.cavedust.utils; import net.lizistired.cavedust.CaveDustConfig; +import net.lizistired.cavedust.ConfigForge; import net.lizistired.cavedust.mixin.ClientWorldAccessor; import net.minecraft.client.MinecraftClient; import net.minecraft.util.math.BlockPos; @@ -14,56 +15,16 @@ public class ParticleSpawnUtil { private static float timer; public static boolean shouldParticlesSpawn; - - /** - * Returns true if particles should spawn. - * @param client MinecraftClient - * @param config CaveDustConfig - * @return boolean - */ - public static boolean shouldParticlesSpawn(MinecraftClient client, CaveDustConfig config) { - - //checks if the config is enabled, if the game isn't paused, if the world is valid, if the particle is valid and if the player isn't in a lush caves biome - if (!config.getCaveDustEnabled() - || client.isPaused() - || client.world == null - || !client.world.getDimension().bedWorks() - || Objects.requireNonNull(client.player).isSubmergedInWater() - || client.world.getBiome(Objects.requireNonNull(client.player.getBlockPos())).matchesKey(LUSH_CAVES)) - { - timer = 0; - shouldParticlesSpawn = false; - return false; - } - - World world = client.world; - int seaLevel = world.getSeaLevel(); - - if (!client.player.clientWorld.isSkyVisible(client.player.getBlockPos())) { - if (client.player.getBlockPos().getY() + 2 < seaLevel){ - timer = timer + 1; - if (timer > 10){ - timer = 10; - shouldParticlesSpawn = true; - return true; - } - } - } - shouldParticlesSpawn = false; - return false; - } - /** * Returns true if particles should spawn (uses particle position instead of player). * @param client MinecraftClient - * @param config CaveDustConfig * @param pos BlockPos * @return boolean */ - public static boolean shouldParticlesSpawn(MinecraftClient client, CaveDustConfig config, BlockPos pos) { + public static boolean shouldParticlesSpawn(MinecraftClient client, BlockPos pos) { //checks if the config is enabled, if the game isn't paused, if the world is valid, if the particle is valid and if the player isn't in a lush caves biome - if (!config.getCaveDustEnabled() + if (!ConfigForge.CAVE_DUST_ENABLED.get() || client.isPaused() || client.world == null || !client.world.getDimension().bedWorks() @@ -76,7 +37,7 @@ public class ParticleSpawnUtil { shouldParticlesSpawn = false; return false; } - if(!config.getSuperFlatStatus()) { + if(!ConfigForge.SUPERFLAT_STATUS.get()) { if (((ClientWorldAccessor) client.world.getLevelProperties()).getFlatWorld()) { return false; } diff --git a/src/main/java/net/lizistired/cavedust/utils/TranslatableTextHelper.java b/src/main/java/net/lizistired/cavedust/utils/TranslatableTextHelper.java deleted file mode 100644 index 9d24951..0000000 --- a/src/main/java/net/lizistired/cavedust/utils/TranslatableTextHelper.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.lizistired.cavedust.utils; - -import com.minelittlepony.common.client.gui.element.AbstractSlider; -import net.minecraft.text.Text; - -import javax.swing.*; - -public class TranslatableTextHelper { - public Text formatMaxWidth(AbstractSlider slider) { - return Text.translatable("menu.cavedust.width", (int)Math.floor(slider.getValue())); - } - public Text formatMaxHeight(AbstractSlider slider) { - return Text.translatable("menu.cavedust.height", (int)Math.floor(slider.getValue())); - } - public Text formatUpperLimit(AbstractSlider slider) { - return Text.translatable("menu.cavedust.upperlimit", (int)Math.floor(slider.getValue())); - } - public Text formatLowerLimit(AbstractSlider slider) { - return Text.translatable("menu.cavedust.lowerlimit", (int)Math.floor(slider.getValue())); - } - public Text formatParticleMultiplier(AbstractSlider slider) { - return Text.translatable("menu.cavedust.particlemultiplier", (int)Math.floor(slider.getValue())); - } - - public Text formatParticleMultiplierMultiplier(AbstractSlider slider) { - return Text.translatable("menu.cavedust.particlemultipliermultiplier", (int)Math.floor(slider.getValue())); - } - public Text formatVelocityRandomness(AbstractSlider slider) { - return Text.translatable("menu.cavedust.velocityrandomness", (int) Math.floor(slider.getValue())); - } -} diff --git a/src/main/java/net/lizistired/cavedust/utils/event/EventBusEvents.java b/src/main/java/net/lizistired/cavedust/utils/event/EventBusEvents.java new file mode 100644 index 0000000..3618a96 --- /dev/null +++ b/src/main/java/net/lizistired/cavedust/utils/event/EventBusEvents.java @@ -0,0 +1,18 @@ +package net.lizistired.cavedust.utils.event; + +import net.lizistired.cavedust.CaveDust; +import net.lizistired.cavedust.CaveDustParticleFactory; +import net.lizistired.cavedust.utils.ParticleRegistry; +import net.minecraft.client.MinecraftClient; +import net.minecraftforge.client.event.RegisterParticleProvidersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.registries.RegisterEvent; + +@Mod.EventBusSubscriber(modid = "cavedust", bus = Mod.EventBusSubscriber.Bus.MOD) +public class EventBusEvents { + @SubscribeEvent + public static void registerParticleTypes(final RegisterParticleProvidersEvent event) { + MinecraftClient.getInstance().particleManager.registerFactory(ParticleRegistry.CAVE_DUST.get(), CaveDustParticleFactory.Factory::new); + } +} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..1e7b499 --- /dev/null +++ b/src/main/resources/META-INF/mods.toml @@ -0,0 +1,35 @@ +modLoader = "javafml" +loaderVersion = "[49,)" +#issueTrackerURL = "" +license = "Mozilla Public License Version 2.0" + +[[mods]] +modId = "cavedust" +version = "${version}" +displayName = "Cave Dust" +authors = "LizCannotEven" +description = ''' +This mod adds cave dust to caves! +''' +#logoFile = "" + +[[dependencies.cavedust]] +modId = "forge" +mandatory = true +versionRange = "[49,)" +ordering = "NONE" +side = "BOTH" + +[[dependencies.cavedust]] +modId = "minecraft" +mandatory = true +versionRange = "[1.20.4,)" +ordering = "NONE" +side = "BOTH" + +[[dependencies.cavedust]] +modId = "architectury" +mandatory = true +versionRange = "[11,)" +ordering = "NONE" +side = "BOTH" diff --git a/src/main/resources/assets/cavedust/lang/en_us.json b/src/main/resources/assets/cavedust/lang/en_us.json index 5bb13ce..1f4e1bf 100644 --- a/src/main/resources/assets/cavedust/lang/en_us.json +++ b/src/main/resources/assets/cavedust/lang/en_us.json @@ -4,21 +4,21 @@ "menu.cavedust.global.true": "Cave Dust: Enabled", "menu.cavedust.global.tooltip.false": "Enable cave dust particles?", "menu.cavedust.global.tooltip.true": "Disable cave dust particles?", - "menu.cavedust.width": "Width bounds: %s", - "menu.cavedust.height": "Height bounds: %s", + "menu.cavedust.width": "Width bounds: ", + "menu.cavedust.height": "Height bounds: ", "menu.cavedust.width.tooltip": "Maximum width to spawn particle.", "menu.cavedust.height.tooltip": "Maximum height to spawn particle.", - "menu.cavedust.upperlimit": "Upper limit height: %s", - "menu.cavedust.lowerlimit": "Lower limit height: %s", + "menu.cavedust.upperlimit": "Upper limit height: ", + "menu.cavedust.lowerlimit": "Lower limit height: ", "menu.cavedust.upperlimit.tooltip": "The height where particles will fade out and stop spawning (uses player y).", "menu.cavedust.lowerlimit.tooltip": "The height where particles spawn the most (uses player y).", "menu.cavedust.reset": "Reset settings", "menu.cavedust.reset.tooltip": "Are you sure you want to reset all settings?", - "menu.cavedust.particlemultiplier": "Particle amount: %s", + "menu.cavedust.particlemultiplier": "Particle amount: ", "menu.cavedust.particlemultiplier.tooltip": "Amount of particles to spawn at any given depth.", - "menu.cavedust.particlemultipliermultiplier": "Particle multiplier: %s", + "menu.cavedust.particlemultipliermultiplier": "Particle multiplier: ", "menu.cavedust.particlemultipliermultiplier.tooltip": "Multiplies particle amount.", - "menu.cavedust.velocityrandomness": "Velocity randomness: %s", + "menu.cavedust.velocityrandomness": "Velocity randomness: ", "menu.cavedust.velocityrandomness.tooltip": "The randomness of the velocity of the particles.", "menu.cavedust.enhanceddetection.true": "Enhanced detection: Enabled", "menu.cavedust.enhanceddetection.false": "Enhanced detection: Disabled", @@ -28,6 +28,7 @@ "menu.cavedust.superflatstatus.tooltip": "Should particles spawn on superflat worlds?", "menu.cavedust.particle": "Particle: ", "menu.cavedust.particle.tooltip": "Particle to spawn. Click to cycle.", + "menu.cavedust.apply": "Apply", "key.cavedust.reload": "Reload Config", "key.cavedust.toggle": "Toggle Particles", diff --git a/src/main/resources/dust.mixins.json b/src/main/resources/cavedust.mixins.json similarity index 100% rename from src/main/resources/dust.mixins.json rename to src/main/resources/cavedust.mixins.json diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json deleted file mode 100644 index 361379f..0000000 --- a/src/main/resources/fabric.mod.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "schemaVersion": 1, - "id": "cavedust", - "version": "${version}", - "name": "Cave Dust", - "description": "Makes dust underground that scales with depth!", - "authors": [ - "LizIsTired" - ], - "contact": { - "issues": "https://github.com/LizIsTired/dust/issues", - "sources": "https://github.com/LizIsTired/dust" - }, - "license": "MPL-2.0", - "icon": "assets/cavedust/icon.png", - "environment": "*", - "entrypoints": { - "client": [ - "net.lizistired.cavedust.CaveDust" - ], - "main": [ - "net.lizistired.cavedust.CaveDustServer"], - "modmenu": [ - "net.lizistired.cavedust.CaveDustModMenuFactory" - ] - }, - "mixins": [ - "dust.mixins.json" - ], - "depends": { - "fabricloader": ">=0.14.5", - "fabric": "*", - "minecraft": "1.20.4", - "java": ">=17" - }, - "suggests": { - "modmenu": ">=3.0.1" - }, - "custom": { - "modmenu": { - "links": { - "modmenu.discord": "https://discord.gg/4m6kQSX6bx" - } - } - } -} diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..bad9b12 --- /dev/null +++ b/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Cave Dust", + "pack_format": 22 + } +}