Skip to content

Commit

Permalink
Make explosion spawn radius configurable separately
Browse files Browse the repository at this point in the history
  • Loading branch information
Gaming32 committed Nov 26, 2022
1 parent ddd9adf commit 32cc180
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 6 deletions.
11 changes: 6 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@ version = project.mod_version
group = project.maven_group

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.
maven {
name = "Quilt Maven"
url = "https://maven.quiltmc.org/repository/release"
}
}

dependencies {
Expand All @@ -22,6 +21,8 @@ dependencies {

// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"

implementation "org.quiltmc:quilt-json5:1.0.2"
}

processResources {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package io.github.modrinthsmp.modrinthsmp;

import org.quiltmc.json5.JsonReader;
import org.quiltmc.json5.JsonWriter;

import java.io.IOException;

public final class ModrinthServerConfig {
private int explosionSpawnRadius = 512;

public int getExplosionSpawnRadius() {
return explosionSpawnRadius;
}

public void writeConfig(JsonWriter writer) throws IOException {
writer.beginObject(); {
writer.comment("Spawn radius to disable explosions within. Same value as server.properties");
writer.name("explosionSpawnRadius").value(explosionSpawnRadius);
} writer.endObject();
}

public void readConfig(JsonReader reader) throws IOException {
reader.beginObject();
while (reader.hasNext()) {
final String key;
//noinspection SwitchStatementWithTooFewBranches
switch (key = reader.nextName()) {
case "explosionSpawnRadius" -> explosionSpawnRadius = reader.nextInt();
default -> ModrinthSmp.LOGGER.warn("Unknown config key: {}", key);
}
}
reader.endObject();
}
}
37 changes: 37 additions & 0 deletions src/main/java/io/github/modrinthsmp/modrinthsmp/ModrinthSmp.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,46 @@
package io.github.modrinthsmp.modrinthsmp;

import com.mojang.logging.LogUtils;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.loader.api.FabricLoader;
import org.quiltmc.json5.JsonReader;
import org.quiltmc.json5.JsonWriter;
import org.slf4j.Logger;

import java.io.IOException;
import java.nio.file.Path;

public class ModrinthSmp implements ModInitializer {
public static final Logger LOGGER = LogUtils.getLogger();
private static final ModrinthServerConfig CONFIG = new ModrinthServerConfig();

@Override
public void onInitialize() {
readConfig();
}

public static void readConfig() {
try (final JsonReader reader = JsonReader.json5(getConfigPath())) {
CONFIG.readConfig(reader);
} catch (IOException e) {
LOGGER.error("Failed to load config", e);
}
writeConfig();
}

public static void writeConfig() {
try (final JsonWriter writer = JsonWriter.json5(getConfigPath())) {
CONFIG.writeConfig(writer);
} catch (IOException e) {
LOGGER.error("Failed to save config", e);
}
}

public static Path getConfigPath() {
return FabricLoader.getInstance().getConfigDir().resolve("modrinth-smp.json5");
}

public static ModrinthServerConfig getConfig() {
return CONFIG;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.github.modrinthsmp.modrinthsmp.mixin;

import io.github.modrinthsmp.modrinthsmp.ModrinthSmp;
import net.minecraft.entity.Entity;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.server.world.ServerWorld;
Expand Down Expand Up @@ -54,6 +55,6 @@ private boolean spawnProtected() {
final double distanceX = Math.abs(msu$msw$explosionX - spawnPos.getX());
final double distanceZ = Math.abs(msu$msw$explosionZ - spawnPos.getZ());
final double distance = Math.max(distanceX, distanceZ);
return distance <= ((ServerWorld)(Object)this).getServer().getSpawnProtectionRadius();
return distance <= ModrinthSmp.getConfig().getExplosionSpawnRadius();
}
}

0 comments on commit 32cc180

Please sign in to comment.